davical-1.1.1/0000755000000000000000000000000011776303362010013 5ustar davical-1.1.1/dba/0000755000000000000000000000000011776303357010545 5ustar davical-1.1.1/dba/update-davical-database0000755000000000000000000003410411651212132015100 0ustar #!/usr/bin/env perl # # Update the DAViCal database by repeatedly applying patches to it # in the correct order. # use warnings; use strict; use DBI; use POSIX qw(floor); use Getopt::Long qw(:config permute); # allow mixed args. # Options variables my $debug = 0; my $dbname = "davical"; my $dbport = 5432; my $dbuser = "davical_dba"; my $dbpass = ""; my $dbhost = ""; my $appuser = "davical_app"; my $helpmeplease = 0; my $apply_patches = 1; my $revoke_list = ""; my $force_owner = ""; my $config_file = "config/administration.yml"; my $dbadir = $0; $dbadir =~ s#/[^/]*$##; my $patchdir = $dbadir . "/patches"; # # We look in a few places for the config file. First relative to # where we are, then relative to the code we are running, then we # start to look in absolute locations. Then we give up :-) if ( ! -f $config_file ) { $config_file = $0; $config_file =~ s{[^/]+/update-[a-z]+-database}{config/administration.yml}; } if ( ! -f $config_file ) { $config_file = "/etc/davical/administration.yml"; } if ( -f $config_file ) { use YAML qw( LoadFile ); my ($ycfg) = LoadFile($config_file); $dbuser = $ycfg->{'admin_db_user'} if ( defined($ycfg->{'admin_db_user'})); $dbpass = $ycfg->{'admin_db_pass'} if ( defined($ycfg->{'admin_db_pass'})); $dbhost = $ycfg->{'admin_db_host'} if ( defined($ycfg->{'admin_db_host'})); $dbname = $ycfg->{'admin_db_name'} if ( defined($ycfg->{'admin_db_name'})); $dbport = $ycfg->{'admin_db_port'} if ( defined($ycfg->{'admin_db_port'})); $appuser = $ycfg->{'app_db_user'} if ( defined($ycfg->{'app_db_user'})); } GetOptions ('debug!' => \$debug, 'dbname=s' => \$dbname, 'dbuser=s' => \$dbuser, 'dbpass=s' => \$dbpass, 'dbport=s' => \$dbport, 'dbhost=s' => \$dbhost, 'appuser=s' => \$appuser, 'patch!' => \$apply_patches, 'owner=s' => \$force_owner, 'revoke=s' => \$revoke_list, 'help' => \$helpmeplease ); show_usage() if ( $helpmeplease ); $revoke_list = ", ". $revoke_list if ( $revoke_list ne "" ); ############################################################ # Open database connection. Note that the standard PostgreSQL # environment variables will also work with DBD::Pg. ############################################################ my $dsn = "dbi:Pg:dbname=$dbname"; $dsn .= ";host=$dbhost" if ( "$dbhost" ne "" ); $dsn .= ";port=$dbport" if ( $dbport != 5432 ); print "Using database: $dbuser".'%'.$dbpass.'@'.$dsn."\n" if ( $debug ); my $pg_version = get_postgresql_version(); my $current_revision; my $last_results = ''; # Will hold the last SQL result from applying a patch if ( $apply_patches ) { $current_revision = get_current_revision(); printf( "The database is version %.1lf currently at revision %d.%d.%d.\n", $pg_version, $current_revision->{'schema_major'}, $current_revision->{'schema_minor'}, $current_revision->{'schema_patch'} ); opendir( PATCHDIR, $patchdir ) or die "Can't open patch directory $patchdir"; my @patches = grep { /^([0-9]+)\.([0-9]+)\.([0-9]+)([a-z]?)\.sql$/ } readdir(PATCHDIR); closedir(PATCHDIR); @patches = sort { compare_revisions(revision_hash($a),revision_hash($b), 1); } @patches; my $applied = 0; for ( my $i=0; $i <= $#patches; $i++ ) { printf( "Looking at patches[%d] (%s)\n", $i, $patches[$i]) if ( $debug ); if ( compare_revisions(revision_hash($patches[$i]),$current_revision) > 0 ) { print "Applying patch $patches[$i] ... "; if ( !apply_patch( $patches[$i] ) ) { # Skip to the end unless the next patch is an alternate for the same version. if ( defined($patches[$i+1]) && compare_revisions(revision_hash($patches[$i]),revision_hash($patches[$i+1])) == 0 ) { print "failed. Attempting next alternative.\n"; $applied--; } else { print "failed!\n$last_results ==> No further patches will be attempted!\n"; last; } } else { print "succeeded.\n"; } $applied++; } else { print "Patch $patches[$i] has already been applied.\n" if ( $debug ); } } if ( $applied ) { print "Successfully applied $applied patches.\n"; } else { print "No patches were applied.\n"; } } # Ensure the locales data is up to date apply_sql_file( $dbadir, "supported_locales.sql" ); print "Supported locales updated.\n"; # update any views apply_sql_folder( $dbadir, 'views', "Updated view: " ); # Ensure the functions are up to date apply_sql_file( $dbadir, "caldav_functions.sql" ); print "CalDAV functions updated.\n"; if ( $pg_version >= 8.3 ) { apply_sql_file( $dbadir, "rrule_functions.sql" ); } else { apply_sql_file( $dbadir, "rrule_functions-8.1.sql", ); } print "RRULE functions updated.\n"; # Ensure the permissions are up to date apply_permissions( $dbadir, "appuser_permissions.txt" ); print "Database permissions updated.\n"; # The End! exit 0; ############################################################ # Revision Hash - we either have a single parameter, # which is of the form "1.2.3" or we have three parameters. ############################################################ sub revision_hash { my $rev = +{ 'schema_major', => 0, 'schema_minor' => 0, 'schema_patch' => 0, 'alternative' => '0' }; my $first = shift; return $rev unless ( defined($first) ); if ( $first =~ /^([0-9]+)\.([0-9]+)\.([0-9]+)([a-z]?)([^0-9]|$)/ ) { $rev->{'schema_major'} = $1; $rev->{'schema_minor'} = $2; $rev->{'schema_patch'} = $3; $rev->{'alternative'} = $4; } else { $rev->{'schema_major'} = $first; $rev->{'schema_minor'} = shift; $rev->{'schema_patch'} = shift; $rev->{'alternative'} = '0'; } return $rev; } ############################################################ # Compare revisions ############################################################ sub compare_revisions { my $a = shift; my $b = shift; my $test_alt = shift; return -1 if ( $a->{'schema_major'} < $b->{'schema_major'} ); return 1 if ( $a->{'schema_major'} > $b->{'schema_major'} ); return -1 if ( $a->{'schema_minor'} < $b->{'schema_minor'} ); return 1 if ( $a->{'schema_minor'} > $b->{'schema_minor'} ); return -1 if ( $a->{'schema_patch'} < $b->{'schema_patch'} ); return 1 if ( $a->{'schema_patch'} > $b->{'schema_patch'} ); if ( defined($test_alt) ) { return -1 if ( $a->{'alternative'} lt $b->{'alternative'} ); return 1 if ( $a->{'alternative'} gt $b->{'alternative'} ); } return 0; } ############################################################ =item folder_ordering() Function to allow us to sort folders which may have a number prefix. =cut ############################################################ sub folder_ordering { my $a = shift; my $b = shift; my $numeric_a = 999999; my $numeric_b = 999999; if ( $a =~ m{^(\d+)-} ) { $numeric_a = $1; } if ( $b =~ m{^(\d+)-} ) { $numeric_b = $1; } return -1 if ( $numeric_a < $numeric_b ); return 1 if ( $numeric_a > $numeric_b ); # Fall back on alphanumeric comparison return -1 if ( $a lt $b ); return 1 if ( $a lt $b ); return 0; } ############################################################ # Get the current version of PostgreSQL ############################################################ sub get_postgresql_version { my $dbh = DBI->connect($dsn, $dbuser, $dbpass, { AutoCommit => 0 } ) or die "Can't connect to database $dbname"; my $current_version = $dbh->prepare( <errstr; SELECT regexp_replace( split_part( version(), ' ', 2), E'\.[0-9]\$', '') EOQ if ( $current_version->execute() ) { my $version = $current_version->fetchrow_arrayref(); undef $current_version; $dbh->disconnect; $version->[0] =~ s/\D+$//; # It seems the regex in SQL is broken in 8.1, at least on CentOS 5.3 return $version->[0]; } else { die "ERROR: Cannot read current revision from database."; } } ############################################################ # Get the current revision ############################################################ sub get_current_revision { my $dbh = DBI->connect($dsn, $dbuser, $dbpass, { AutoCommit => 0 } ) or die "Can't connect to database $dbname"; my $current_revision = $dbh->prepare( <errstr; SELECT schema_major, schema_minor, schema_patch FROM awl_db_revision ORDER BY schema_id DESC LIMIT 1 EOQ if ( $current_revision->execute() ) { my $revision = $current_revision->fetchrow_hashref(); undef $current_revision; $dbh->disconnect; return $revision; } else { die "ERROR: Cannot read current revision from database."; } } ############################################################ # Apply a DB Patch File ############################################################ sub apply_patch { my $patch = shift; apply_sql_file( $patchdir, $patch ); $current_revision = get_current_revision(); if ( compare_revisions($current_revision,revision_hash($patch)) != 0 ) { printf( "Failed to apply revision %s to the database!\n", $patch ) if ( $debug ); return 0; } return 1; # Success } ############################################################ # Apply SQL File # Note that this stuffs the password into an environment # variable, which isn't ideal. If you use a .pgpass you # can bypass that issue, but you still need it on the command # line for this program until I get a patch from someone. ############################################################ sub apply_sql_file { my $sqldir = shift; my $sqlfile = shift; my @psql_opts = ( "psql", "-q", "-f", $sqldir."/".$sqlfile ); push @psql_opts, "-h", $dbhost if ( $dbhost ne "" ); push @psql_opts, "-p", "$dbport" if ( $dbport != 5432 ); push @psql_opts, "-U", $dbuser if ( $dbuser ne "" ); push @psql_opts, $dbname; # It seems that FreeBSD has a poorer argument parsing library so non-option arguments must be last $ENV{'PGPASSWORD'} = $dbpass if ( $dbpass ne "" ); my $command = join ' ', @psql_opts; $last_results = `$command 2>&1 1>/dev/null`; $last_results =~ s/^.*WARNING: there is no transaction in progress\s$//m; $last_results =~ s/^.*NOTICE: //m; } ############################################################ =item apply_sql_folder Applies the SQL files in a folder in order, with some magic to apply specifically versioned ones by preference. =cut sub apply_sql_folder { my $dbadir = shift; my $folder_name = shift; my $announce_prefix = shift; my $folder = $dbadir . '/' . $folder_name; opendir( FOLDER, $folder ) or die "Can't open SQL directory $folder"; my @sql_files = grep { /^[^.].*\.sql$/ } readdir(FOLDER); closedir(FOLDER); @sql_files = grep( !/-\d+.\d+\.sql$/, @sql_files); @sql_files = sort { folder_ordering($a,$b); } @sql_files; for ( my $i=0; $i <= $#sql_files; $i++ ) { my $apply_file = $sql_files[$i]; my $testfile = $folder . '/' . $apply_file; $testfile =~ s{\.sql$}{-$pg_version.sql}; $apply_file = $testfile if ( -f $testfile ); apply_sql_file( $folder, $apply_file ); print $announce_prefix, $apply_file, " applied.\n"; } } ############################################################ # Apply database permissions from file ############################################################ sub apply_permissions { my $sqldir = shift; my $permsfile = shift; open PERMS, '<', $sqldir."/".$permsfile; my $dbh = DBI->connect($dsn, $dbuser, $dbpass, { AutoCommit => 1 } ) or die "Can't connect to database $dbname"; my $sql; my $current_grant; while( ) { next if ( /^\s*(#|--)/ ); /^\s*GRANT\s+(\S.*)\s*$/i && do { $current_grant = $1; }; /^\s*ON\s+(\S.*)\s*$/i && do { defined($current_grant) or die "No GRANT before ON in $permsfile\n"; my $doohickey = $1; if ( $revoke_list ne "" ) { # TODO: we should really loop through the revoke_list so that a single non-existent # user doesn't cause this whole statement to fail. $sql = sprintf( "REVOKE ALL ON %s FROM %s %s", $doohickey, $appuser, $revoke_list ); print $sql, "\n" if ( $debug ); $dbh->do($sql); } $sql = sprintf( "GRANT %s on %s to %s", $current_grant, $doohickey, $appuser ); print $sql, "\n" if ( $debug ); $dbh->do($sql); if ( $force_owner ne "" ) { if ( $doohickey =~ /_seq$/ ) { $sql = sprintf( "GRANT ALL on %s to %s", $doohickey, $force_owner ); } else { $sql = sprintf( "ALTER TABLE %s OWNER to %s", $doohickey, $force_owner ); } print $sql, "\n" if ( $debug ); $dbh->do($sql); } }; } close(PERMS); $dbh->disconnect; } ############################################################ # Tell the nice user how we do things. Short and sweet. ############################################################ sub show_usage { print < patch) OR (schema_major = major AND schema_minor > minor) OR (schema_major > major) ; IF matching >= 1 THEN RAISE EXCEPTION ''Database revisions after %.%.% have already been applied.'', major, minor, patch; RETURN FALSE; END IF; SELECT COUNT(*) INTO matching FROM awl_db_revision WHERE schema_major = major AND schema_minor = minor AND schema_patch = patch; IF matching >= 1 THEN RETURN TRUE; END IF; RAISE EXCEPTION ''Database has not been upgraded to %.%.%'', major, minor, patch; RETURN FALSE; END; ' LANGUAGE 'plpgsql'; -- Just in case these constraints got added manually, so we won't fail -- if there is an existing one. ALTER TABLE principal DROP CONSTRAINT unique_user CASCADE; ALTER TABLE collection DROP CONSTRAINT unique_path CASCADE; CREATE or REPLACE FUNCTION real_path_exists( TEXT ) RETURNS BOOLEAN AS $$ DECLARE in_path ALIAS FOR $1; tmp BOOLEAN; BEGIN IF in_path = '/' THEN RETURN TRUE; END IF; IF in_path ~ '^/[^/]+/$' THEN SELECT TRUE INTO tmp FROM usr WHERE username = substring( in_path from 2 for length(in_path) - 2); IF FOUND THEN RETURN TRUE; END IF; ELSE IF in_path ~ '^/.*/$' THEN SELECT TRUE INTO tmp FROM collection WHERE dav_name = in_path; IF FOUND THEN RETURN TRUE; END IF; END IF; END IF; RETURN FALSE; END; $$ LANGUAGE plpgsql ; BEGIN; SELECT check_db_revision(1,2,9); ALTER TABLE dav_binding ADD UNIQUE( dav_name ); -- New fields for Rob Ostensen's remote binding setup ALTER TABLE dav_binding ADD COLUMN external_url TEXT; ALTER TABLE dav_binding ADD COLUMN type TEXT; ALTER TABLE principal ADD CONSTRAINT unique_user UNIQUE (user_no); -- Ensure we don't refer to any newer, duplicated collections UPDATE caldav_data SET collection_id = (SELECT min(c2.collection_id) FROM collection c1, collection c2 WHERE c1.dav_name = c2.dav_name AND c1.collection_id = caldav_data.collection_id) WHERE collection_id > (SELECT min(c2.collection_id) FROM collection c1, collection c2 WHERE c1.dav_name = c2.dav_name AND c1.collection_id = caldav_data.collection_id); -- Ensure the newer duplicated collections don't exist any longer DELETE FROM collection WHERE collection_id > (SELECT min(collection_id) FROM collection c2 WHERE c2.dav_name = collection.dav_name); -- Ensure we can't add more duplicates in the future ALTER TABLE collection ADD CONSTRAINT unique_path UNIQUE (dav_name); ALTER TABLE dav_binding ADD CONSTRAINT "dav_name_does_not_exist" CHECK (NOT real_path_exists(dav_name)); -- We will use these to improve our selection criteria in future, but for now we will leave them null ALTER TABLE calendar_item ADD COLUMN first_instance_start TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL; ALTER TABLE calendar_item ADD COLUMN last_instance_end TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL; SELECT new_db_revision(1,2,10, 'Octobre' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.1a.sql0000644000000000000000000000752111215137004013500 0ustar -- This database update provides new tables for the Principal, for -- a consistent dav_resource which a principal, collection or calendar_item -- all inherit from. BEGIN; SELECT check_db_revision(1,1,12); -- Rename the caldav_data_dav_id_seq to dav_id_seq because we will use it -- for more tables than just caldav_data CREATE SEQUENCE dav_id_seq; SELECT setval('dav_id_seq', nextval('caldav_data_dav_id_seq')); ALTER TABLE caldav_data ALTER COLUMN dav_id SET DEFAULT nextval('dav_id_seq'); ALTER TABLE calendar_item ALTER COLUMN dav_id SET DEFAULT nextval('dav_id_seq'); CREATE or REPLACE FUNCTION sync_dav_id ( ) RETURNS TRIGGER AS ' DECLARE BEGIN IF TG_OP = ''DELETE'' THEN -- Just let the ON DELETE CASCADE handle this case RETURN OLD; END IF; IF NEW.dav_id IS NULL THEN NEW.dav_id = nextval(''dav_id_seq''); END IF; IF TG_OP = ''UPDATE'' THEN IF OLD.dav_id = NEW.dav_id THEN -- Nothing to do RETURN NEW; END IF; END IF; IF TG_RELNAME = ''caldav_data'' THEN UPDATE calendar_item SET dav_id = NEW.dav_id WHERE user_no = NEW.user_no AND dav_name = NEW.dav_name; ELSE UPDATE caldav_data SET dav_id = NEW.dav_id WHERE user_no = NEW.user_no AND dav_name = NEW.dav_name; END IF; RETURN NEW; END ' LANGUAGE 'plpgsql'; -- CREATE TRIGGER caldav_data_sync_dav_id AFTER INSERT OR UPDATE ON caldav_data -- FOR EACH ROW EXECUTE PROCEDURE sync_dav_id(); -- CREATE TRIGGER calendar_item_sync_dav_id AFTER INSERT OR UPDATE ON calendar_item -- FOR EACH ROW EXECUTE PROCEDURE sync_dav_id(); -- Add a numeric collection_id to collection ALTER TABLE collection ADD COLUMN collection_id INT8; UPDATE collection SET collection_id = nextval('dav_id_seq'); ALTER TABLE collection ALTER COLUMN collection_id SET DEFAULT nextval('dav_id_seq'); ALTER TABLE collection DROP CONSTRAINT collection_pkey CASCADE; ALTER TABLE collection ADD UNIQUE (user_no,dav_name); ALTER TABLE collection ADD CONSTRAINT collection_pkey PRIMARY KEY (collection_id); ALTER TABLE calendar_item ADD COLUMN collection_id INT8; INSERT INTO collection ( user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, created, modified) SELECT user_no, '/'||username||'/', '/'||username||'/home/', md5(user_no::text||'/'||username||'/home/'), fullname, TRUE, current_timestamp, current_timestamp FROM usr WHERE NOT EXISTS (SELECT 1 FROM collection WHERE dav_name ~ ('^/'||username||'/')); UPDATE caldav_data SET dav_name = (select collection.dav_name FROM collection WHERE collection.user_no = caldav_data.user_no limit 1) || regexp_replace( caldav_data.dav_name, '^.*/([^/]+)$', 'ex-\\1') WHERE dav_name ~ '^/[^/]+/[^/]+$'; UPDATE calendar_item SET collection_id = collection.collection_id FROM collection WHERE collection.dav_name = regexp_replace( calendar_item.dav_name, '/[^/]+$', '/'); ALTER TABLE calendar_item ALTER COLUMN collection_id SET NOT NULL; ALTER TABLE calendar_item ADD CONSTRAINT calendar_item_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; CREATE INDEX calendar_item_collection_id_fkey ON calendar_item(collection_id); ALTER TABLE caldav_data ADD COLUMN collection_id INT8; UPDATE caldav_data SET collection_id = collection.collection_id FROM collection WHERE collection.dav_name = regexp_replace( caldav_data.dav_name, '/[^/]+$', '/'); ALTER TABLE caldav_data ALTER COLUMN collection_id SET NOT NULL; ALTER TABLE caldav_data ADD CONSTRAINT caldav_data_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; CREATE INDEX caldav_data_collection_id_fkey ON caldav_data(collection_id); SELECT new_db_revision(1,2,1, 'Janvier' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.11.sql0000644000000000000000000000311011651212132013406 0ustar -- Minor enhancement: Add columns to time_zone table to support timezone protocol changes. BEGIN; SELECT check_db_revision(1,2,10); CREATE TABLE timezones ( our_tzno SERIAL PRIMARY KEY, tzid TEXT UNIQUE NOT NULL, olson_name TEXT, active BOOLEAN, last_modified TIMESTAMP DEFAULT current_timestamp, etag TEXT, vtimezone TEXT ); CREATE TABLE tz_aliases ( our_tzno INT8 REFERENCES timezones(our_tzno), tzalias TEXT NOT NULL ); CREATE TABLE tz_localnames ( our_tzno INT8 REFERENCES timezones(our_tzno), locale TEXT NOT NULL, localised_name TEXT NOT NULL, preferred BOOLEAN DEFAULT TRUE ); -- Let's assume that all timezone definitions currently present are old, and -- we can find newer ones. We don't really want the service feeding them out -- so we'll mark them inactive as well. INSERT INTO timezones (tzid, olson_name, active, last_modified, vtimezone, etag ) SELECT tz_id, tz_locn, false, '1970-01-01T00:00:00Z', tz_spec, 'import' FROM time_zone; INSERT INTO tz_aliases (our_tzno, tzalias) SELECT timezones.our_tzno, tz_locn FROM time_zone LEFT JOIN timezones ON (tz_id = tzid) WHERE tz_locn IS NOT NULL AND tz_locn != ''; DROP TABLE time_zone CASCADE; ALTER TABLE calendar_item ADD CONSTRAINT "calendar_item_tz_id_fkey" FOREIGN KEY (tz_id) REFERENCES timezones(tzid) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE collection ADD CONSTRAINT "collection_timezone_fkey" FOREIGN KEY (timezone) REFERENCES timezones(tzid) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; SELECT new_db_revision(1,2,11, 'Novembre' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.1.7.sql0000644000000000000000000000374210705234304013351 0ustar -- Adding lock support BEGIN; SELECT check_db_revision(1,1,6); ALTER TABLE relationship_type DROP COLUMN rt_inverse; ALTER TABLE relationship_type DROP COLUMN prefix_match; ALTER TABLE relationship_type DROP COLUMN rt_isgroup; UPDATE relationship_type SET rt_name ='Administers', confers = 'A' WHERE rt_id = 1; UPDATE relationship_type SET rt_name ='is Assistant to', confers = 'RW' WHERE rt_id = 2; UPDATE relationship_type SET rt_name ='Can read from', confers = 'R' WHERE rt_id = 3; UPDATE relationship_type SET rt_name ='Can see free/busy time of', confers = 'F' WHERE rt_id = 4; UPDATE relationship SET rt_id=1 WHERE rt_id=4; UPDATE relationship SET rt_id=4 WHERE rt_id=5; DELETE FROM relationship_type WHERE rt_id = 5; -- Add a 'status' column to calendar_item which will contain the parsed value of the STATUS property ALTER TABLE calendar_item ADD COLUMN status TEXT; UPDATE calendar_item SET status = 'CONFIRMED'; UPDATE calendar_item SET status = 'CANCELLED' WHERE calendar_item.dav_name IN (SELECT dav_name FROM caldav_data WHERE caldav_data.caldav_data ~ 'STATUS.*:.*CANCELLED'); UPDATE calendar_item SET status = 'TENTATIVE' WHERE calendar_item.dav_name IN (SELECT dav_name FROM caldav_data WHERE caldav_data.caldav_data ~ 'STATUS.*:.*TENTATIVE'); UPDATE calendar_item SET status = 'NEEDS-ACTION' WHERE calendar_item.dav_name IN (SELECT dav_name FROM caldav_data WHERE caldav_data.caldav_data ~ 'STATUS.*:.*NEEDS-ACTION'); UPDATE calendar_item SET status = 'IN-PROCESS' WHERE calendar_item.dav_name IN (SELECT dav_name FROM caldav_data WHERE caldav_data.caldav_data ~ 'STATUS.*:.*IN-PROCESS'); UPDATE calendar_item SET status = 'DRAFT' WHERE calendar_item.dav_name IN (SELECT dav_name FROM caldav_data WHERE caldav_data.caldav_data ~ 'STATUS.*:.*DRAFT'); UPDATE calendar_item SET status = 'FINAL' WHERE calendar_item.dav_name IN (SELECT dav_name FROM caldav_data WHERE caldav_data.caldav_data ~ 'STATUS.*:.*FINAL'); SELECT new_db_revision(1,1,7, 'July' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.6.sql0000644000000000000000000005065511633117640013362 0ustar -- This database update converts the permissions into a bitmap stored -- as an integer to make calculation of merged permissions simpler -- through simple binary 'AND' CREATE or REPLACE FUNCTION legacy_privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ DECLARE in_priv ALIAS FOR $1; out_bits BIT(24); BEGIN out_bits := 0::BIT(24); IF in_priv ~* 'A' THEN out_bits = ~ out_bits; RETURN out_bits; END IF; -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- 1 DAV:read -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'R' THEN out_bits := out_bits | 4609::BIT(24); END IF; -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- 2 DAV:write-properties -- 4 DAV:write-content -- 64 DAV:bind -- 128 DAV:unbind IF in_priv ~* 'W' THEN out_bits := out_bits | 198::BIT(24); END IF; -- 64 DAV:bind IF in_priv ~* 'B' THEN out_bits := out_bits | 64::BIT(24); END IF; -- 128 DAV:unbind IF in_priv ~* 'U' THEN out_bits := out_bits | 128::BIT(24); END IF; -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'F' THEN out_bits := out_bits | 4608::BIT(24); END IF; RETURN out_bits; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- This legacy conversion function will eventually be removed, once all logic -- has been converted to use bitmaps, or to use the bits_to_priv() output. -- -- NOTE: Round-trip through this and then back through legacy_privilege_to_bits -- function is lossy! Through legacy_privilege_to_bits() and back through -- this one is not. -- CREATE or REPLACE FUNCTION bits_to_legacy_privilege( BIT(24) ) RETURNS TEXT AS $$ DECLARE in_bits ALIAS FOR $1; out_priv TEXT; BEGIN out_priv := ''; IF in_bits = (~ 0::BIT(24)) THEN out_priv = 'A'; RETURN out_priv; END IF; -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- 1 DAV:read -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF (in_bits & 4609::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN out_priv := 'R'; ELSE out_priv := 'F'; END IF; END IF; -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- 2 DAV:write-properties -- 4 DAV:write-content -- 64 DAV:bind -- 128 DAV:unbind IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 6::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'W'; ELSE IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'B'; END IF; IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'U'; END IF; END IF; END IF; RETURN out_priv; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION get_permissions( INT, INT ) RETURNS TEXT AS $$ DECLARE in_from ALIAS FOR $1; in_to ALIAS FOR $2; out_confers TEXT; bit_confers BIT(24); group_role_no INT; tmp_txt TEXT; dbg TEXT DEFAULT ''; r RECORD; counter INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN 'A'; END IF; -- dbg := 'S-'; SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 WHERE r1.from_user = in_from AND r1.to_user = in_to AND NOT usr_is_role(r1.to_user,'Group'); IF FOUND THEN RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No simple relationships between % and %', in_from, in_to; SELECT bit_or(r1.confers & r2.confers) INTO bit_confers FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user WHERE r1.from_user=in_from AND r2.to_user=in_to AND r2.from_user IN (SELECT user_no FROM roles LEFT JOIN role_member USING(role_no) WHERE role_name='Group'); IF bit_confers != 0::BIT(24) THEN RETURN dbg || bits_to_legacy_privilege(bit_confers); END IF; RETURN ''; -- RAISE NOTICE 'No complex relationships between % and %', in_from, in_to; SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 LEFT OUTER JOIN relationship r2 ON(r1.to_user = r2.to_user) WHERE r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) ; IF FOUND THEN -- dbg := 'H-'; -- RAISE NOTICE 'Permissions to shared group % ', out_confers; RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN ''; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION get_group_role_no() RETURNS INT AS $$ SELECT role_no FROM roles WHERE role_name = 'Group' $$ LANGUAGE 'SQL' IMMUTABLE; CREATE or REPLACE FUNCTION has_legacy_privilege( INT, TEXT, INT ) RETURNS BOOLEAN AS $$ DECLARE in_from ALIAS FOR $1; in_legacy_privilege ALIAS FOR $2; in_to ALIAS FOR $3; in_confers BIT(24); group_role_no INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN TRUE; END IF; SELECT get_group_role_no() INTO group_role_no; SELECT legacy_privilege_to_bits(in_legacy_privilege) INTO in_confers; IF EXISTS(SELECT 1 FROM relationship WHERE from_user = in_from AND to_user = in_to AND (in_confers & confers) = in_confers AND NOT EXISTS(SELECT 1 FROM role_member WHERE to_user = user_no AND role_no = group_role_no) ) THEN -- A direct relationship from A to B that grants sufficient -- RAISE NOTICE 'Permissions directly granted'; RETURN TRUE; END IF; IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user WHERE (in_confers & r1.confers & r2.confers) = in_confers AND r1.from_user=in_from AND r2.to_user=in_to AND r2.from_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) ) THEN -- An indirect relationship from A to B via group G that grants sufficient -- RAISE NOTICE 'Permissions mediated via group'; RETURN TRUE; END IF; IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.to_user WHERE (in_confers & r1.confers & r2.confers) = in_confers AND r1.from_user=in_from AND r2.from_user=in_to AND r2.to_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) AND NOT EXISTS(SELECT 1 FROM relationship WHERE from_user=r2.to_user) ) THEN -- An indirect reflexive relationship from both A & B to group G which grants sufficient -- RAISE NOTICE 'Permissions to shared group'; RETURN TRUE; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN FALSE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Given a verbose DAV: or CalDAV: privilege name return the bitmask CREATE or REPLACE FUNCTION privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ DECLARE raw_priv ALIAS FOR $1; in_priv TEXT; BEGIN in_priv := trim(lower(regexp_replace(raw_priv, '^.*:', ''))); IF in_priv = 'all' THEN RETURN ~ 0::BIT(24); END IF; RETURN (CASE WHEN in_priv = 'read' THEN 1 WHEN in_priv = 'write' THEN 198 -- 2 + 4 + 64 + 128 WHEN in_priv = 'write-properties' THEN 2 WHEN in_priv = 'write-content' THEN 4 WHEN in_priv = 'unlock' THEN 8 WHEN in_priv = 'read-acl' THEN 16 WHEN in_priv = 'read-current-user-privilege-set' THEN 32 WHEN in_priv = 'bind' THEN 64 WHEN in_priv = 'unbind' THEN 128 WHEN in_priv = 'write-acl' THEN 256 WHEN in_priv = 'read-free-busy' THEN 512 WHEN in_priv = 'schedule-deliver' THEN 7168 -- 1024 + 2048 + 4096 WHEN in_priv = 'schedule-deliver-invite' THEN 1024 WHEN in_priv = 'schedule-deliver-reply' THEN 2048 WHEN in_priv = 'schedule-query-freebusy' THEN 4096 WHEN in_priv = 'schedule-send' THEN 57344 -- 8192 + 16384 + 32768 WHEN in_priv = 'schedule-send-invite' THEN 8192 WHEN in_priv = 'schedule-send-reply' THEN 16384 WHEN in_priv = 'schedule-send-freebusy' THEN 32768 ELSE 0 END)::BIT(24); END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- Given an array of verbose DAV: or CalDAV: privilege names return the bitmask CREATE or REPLACE FUNCTION privilege_to_bits( TEXT[] ) RETURNS BIT(24) AS $$ DECLARE raw_privs ALIAS FOR $1; in_priv TEXT; out_bits BIT(24); i INT; all_privs BIT(24); start INT; finish INT; BEGIN out_bits := 0::BIT(24); all_privs := ~ out_bits; SELECT array_lower(raw_privs,1) INTO start; SELECT array_upper(raw_privs,1) INTO finish; FOR i IN start .. finish LOOP SELECT out_bits | privilege_to_bits(raw_privs[i]) INTO out_bits; IF out_bits = 65535::BIT(24) THEN RETURN all_privs; END IF; END LOOP; RETURN out_bits; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- This legacy conversion function will eventually be removed, once all logic -- has been converted to use bitmaps, or to use the bits_to_priv() output. -- -- NOTE: Round-trip through this and then back through privilege_to_bits -- function is lossy! Through privilege_to_bits() and back through -- this one is not. -- CREATE or REPLACE FUNCTION bits_to_privilege( BIT(24) ) RETURNS TEXT[] AS $$ DECLARE in_bits ALIAS FOR $1; out_priv TEXT[]; BEGIN IF in_bits = (~ 0::BIT(24)) THEN out_priv := out_priv || ARRAY['DAV:all']; END IF; IF (in_bits & 513::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read']; END IF; IF (in_bits & 512::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:read-free-busy']; END IF; END IF; IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 198::BIT(24)) = 198::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write']; ELSE IF (in_bits & 2::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-properties']; END IF; IF (in_bits & 4::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-content']; END IF; IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:bind']; END IF; IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:unbind']; END IF; END IF; END IF; IF (in_bits & 8::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:unlock']; END IF; IF (in_bits & 16::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read-acl']; END IF; IF (in_bits & 32::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read-current-user-privilege-set']; END IF; IF (in_bits & 256::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-acl']; END IF; IF (in_bits & 7168::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 7168::BIT(24)) = 7168::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver']; ELSE IF (in_bits & 1024::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver-invite']; END IF; IF (in_bits & 2048::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver-reply']; END IF; IF (in_bits & 4096::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-query-freebusy']; END IF; END IF; END IF; IF (in_bits & 57344::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 57344::BIT(24)) = 57344::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send']; ELSE IF (in_bits & 8192::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-invite']; END IF; IF (in_bits & 16384::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-reply']; END IF; IF (in_bits & 32768::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-freebusy']; END IF; END IF; END IF; RETURN out_priv; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; BEGIN; SELECT check_db_revision(1,2,5); -- DAV Privileges implementation -- -- RFC 3744 - DAV ACLs -- 1 DAV:read -- DAV:write (aggregate = 198 = write-properties & write-content & bind & unbind) -- 2 DAV:write-properties -- 4 DAV:write-content -- 8 DAV:unlock -- 16 DAV:read-acl -- 32 DAV:read-current-user-privilege-set -- 64 DAV:bind -- 128 DAV:unbind -- 256 DAV:write-acl -- RFC 4791 - CalDAV -- 512 CalDAV:read-free-busy -- RFC ???? - Scheduling Extensions for CalDAV -- CALDAV:schedule-deliver (aggregate) => 7168 -- 1024 CALDAV:schedule-deliver-invite -- 2048 CALDAV:schedule-deliver-reply -- 4096 CALDAV:schedule-query-freebusy -- CALDAV:schedule-send (aggregate) => 57344 -- 8192 CALDAV:schedule-send-invite -- 16384 CALDAV:schedule-send-reply -- 32768 CALDAV:schedule-send-freebusy -- RFC 3744 - DAV ACLs -- DAV:all => all of the above and any new ones someone might invent! -- DAV:read-acl MUST NOT contain DAV:read, DAV:write, DAV:write-acl, DAV:write-properties, DAV:write-content, or DAV:read-current-user-privilege-set. -- DAV:write-acl MUST NOT contain DAV:write, DAV:read, DAV:read-acl, DAV:read-current-user-privilege-set. -- DAV:read-current-user-privilege-set MUST NOT contain DAV:write, DAV:read, DAV:read-acl, or DAV:write-acl. -- DAV:write MUST NOT contain DAV:read, DAV:read-acl, or DAV:read-current-user-privilege-set. -- DAV:read MUST NOT contain DAV:write, DAV:write-acl, DAV:write-properties, or DAV:write-content. -- DAV:write-acl COULD contain DAV:write-properties DAV:write-content DAV:unlock DAV:bind DAV:unbind BUT why would it? -- DAV:write => DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- RFC 4791 - CalDAV -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- RFC ???? - Scheduling Extensions for CalDAV -- DAV:all MUST contain CALDAV:schedule-send and CALDAV:schedule-deliver -- CALDAV:schedule-send MUST contain CALDAV:schedule-send-invite, CALDAV:schedule-send-reply, and CALDAV:schedule-send-freebusy; -- CALDAV:schedule-deliver MUST contain CALDAV:schedule-deliver-invite, CALDAV:schedule-deliver-reply, and CALDAV:schedule-query-freebusy. -- Me!!! -- CalDAV:read-free-busy privilege SHOULD contain CALDAV:schedule-query-freebusy -- => DAV:read privilege SHOULD contain CALDAV:schedule-query-freebusy -- We do this outside of these privileges though. -- This legacy conversion function will eventually be removed, once all logic -- has been converted to use bitmaps, or to use the bits_to_priv() output. CREATE or REPLACE FUNCTION legacy_privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ DECLARE in_priv ALIAS FOR $1; out_bits BIT(24); BEGIN out_bits := 0::BIT(24); IF in_priv ~* 'A' THEN out_bits = ~ out_bits; RETURN out_bits; END IF; -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- 1 DAV:read -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'R' THEN out_bits := out_bits | 4609::BIT(24); END IF; -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- 2 DAV:write-properties -- 4 DAV:write-content -- 64 DAV:bind -- 128 DAV:unbind IF in_priv ~* 'W' THEN out_bits := out_bits | 198::BIT(24); END IF; -- 64 DAV:bind IF in_priv ~* 'B' THEN out_bits := out_bits | 64::BIT(24); END IF; -- 128 DAV:unbind IF in_priv ~* 'U' THEN out_bits := out_bits | 128::BIT(24); END IF; -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'F' THEN out_bits := out_bits | 4608::BIT(24); END IF; RETURN out_bits; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; ALTER TABLE relationship_type ADD COLUMN bit_confers BIT(24) DEFAULT privilege_to_bits(ARRAY['DAV::read','DAV::write']); UPDATE relationship_type SET bit_confers = legacy_privilege_to_bits(confers); ALTER TABLE relationship ADD COLUMN confers BIT(24) DEFAULT privilege_to_bits('caldav:read-free-busy'); UPDATE relationship SET confers = (SELECT bit_confers FROM relationship_type AS rt WHERE rt.rt_id=relationship.rt_id); ALTER TABLE collection ADD COLUMN default_privileges BIT(24); INSERT INTO principal_type (principal_type_id, principal_type_desc) VALUES( 1, 'Person' ); INSERT INTO principal_type (principal_type_id, principal_type_desc) VALUES( 2, 'Resource' ); INSERT INTO principal_type (principal_type_id, principal_type_desc) VALUES( 3, 'Group' ); -- web needs SELECT,INSERT,UPDATE,DELETE DROP TABLE principal CASCADE; CREATE TABLE principal ( principal_id INT8 DEFAULT nextval('dav_id_seq') PRIMARY KEY, type_id INT8 NOT NULL REFERENCES principal_type(principal_type_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE, user_no INT8 NULL REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, displayname TEXT, default_privileges BIT(24) ); INSERT INTO principal (type_id, user_no, displayname, default_privileges) SELECT 1, user_no, fullname, privilege_to_bits(ARRAY['read-free-busy','schedule-send','schedule-deliver']) FROM usr WHERE NOT EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Group' AND role_member.user_no = usr.user_no) AND NOT EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Resource' AND role_member.user_no = usr.user_no) ; INSERT INTO principal (type_id, user_no, displayname, default_privileges) SELECT 2, user_no, fullname, privilege_to_bits(ARRAY['read','schedule-send','schedule-deliver']) FROM usr WHERE EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Resource' AND role_member.user_no = usr.user_no); INSERT INTO principal (type_id, user_no, displayname, default_privileges) SELECT 3, user_no, fullname, privilege_to_bits(ARRAY['read-free-busy','schedule-send','schedule-deliver']) FROM usr WHERE EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Group' AND role_member.user_no = usr.user_no); UPDATE collection SET default_privileges = CASE WHEN publicly_readable THEN privilege_to_bits(ARRAY['read']) ELSE NULL END; INSERT INTO group_member ( group_id, member_id) SELECT g.principal_id, m.principal_id FROM relationship JOIN principal g ON(to_user=g.user_no AND g.type_id = 3) -- Group JOIN principal m ON(from_user=m.user_no AND m.type_id IN (1, 2) ); -- Person or Resource DROP TABLE dav_resource_type CASCADE; DROP TABLE dav_resource CASCADE; DROP TABLE privilege CASCADE; CREATE TABLE grants ( by_principal INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, by_collection INT8 REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, to_principal INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, privileges BIT(24), is_group BOOLEAN ) WITHOUT OIDS; CREATE UNIQUE INDEX grants_pk1 ON grants(by_principal,to_principal); CREATE UNIQUE INDEX grants_pk2 ON grants(by_collection,to_principal); INSERT INTO grants ( by_principal, to_principal, privileges, is_group ) SELECT pby.principal_id AS by_principal, pto.principal_id AS to_principal, confers AS privileges, pto.type_id > 2 AS is_group FROM relationship r JOIN usr f ON(f.user_no=r.from_user) JOIN usr t ON(t.user_no=r.to_user) JOIN principal pby ON(t.user_no=pby.user_no) JOIN principal pto ON(pto.user_no=f.user_no) WHERE rt_id < 4 AND pby.type_id < 3; -- It's always safe to kill these collections, so they will be recreated with the correct resourcetype DELETE FROM collection WHERE dav_name ~ E'/\.(in|out)/$'; SELECT new_db_revision(1,2,6, 'Juin' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.7.sql0000644000000000000000000000551611314625510013353 0ustar -- This database update adds support for the draft webdav-sync specification -- as well as some initial support for addressbook collections which will -- be needed to support carddav. BEGIN; SELECT check_db_revision(1,2,6); CREATE TABLE sync_tokens ( sync_token SERIAL PRIMARY KEY, collection_id INT8 REFERENCES collection(collection_id) ON DELETE CASCADE ON UPDATE CASCADE, modification_time TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp ); CREATE TABLE sync_changes ( sync_time TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp, collection_id INT8 REFERENCES collection(collection_id) ON DELETE CASCADE ON UPDATE CASCADE, sync_status INT, dav_id INT8, -- can't REFERENCES calendar_item(dav_id) ON DELETE SET NULL ON UPDATE RESTRICT dav_name TEXT ); CREATE INDEX sync_processing_index ON sync_changes( collection_id, dav_id, sync_time ); ALTER TABLE collection ADD COLUMN is_addressbook BOOLEAN DEFAULT FALSE; ALTER TABLE collection ADD COLUMN resourcetypes TEXT DEFAULT ''; ALTER TABLE collection ADD COLUMN in_freebusy_set BOOLEAN DEFAULT TRUE; ALTER TABLE collection ADD COLUMN schedule_transp TEXT DEFAULT 'opaque'; ALTER TABLE collection ADD COLUMN timezone TEXT REFERENCES time_zone(tz_id) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE collection ADD COLUMN description TEXT DEFAULT ''; UPDATE collection SET resourcetypes = '' WHERE is_calendar; SELECT new_db_revision(1,2,7, 'Juillet' ); COMMIT; ROLLBACK; CREATE or REPLACE FUNCTION write_sync_change( INT8, INT, TEXT ) RETURNS BOOLEAN AS $$ DECLARE in_collection_id ALIAS FOR $1; in_status ALIAS FOR $2; in_dav_name ALIAS FOR $3; tmp_int INT8; BEGIN SELECT 1 INTO tmp_int FROM sync_tokens WHERE collection_id = in_collection_id LIMIT 1; IF NOT FOUND THEN RETURN FALSE; END IF; SELECT dav_id INTO tmp_int FROM calendar_item WHERE dav_name = in_dav_name; INSERT INTO sync_changes ( collection_id, sync_status, dav_id, dav_name) VALUES( in_collection_id, in_status, tmp_int, in_dav_name); RETURN TRUE; END $$ LANGUAGE 'PlPgSQL' VOLATILE STRICT; CREATE or REPLACE FUNCTION new_sync_token( INT8, INT8 ) RETURNS INT8 AS $$ DECLARE in_old_sync_token ALIAS FOR $1; in_collection_id ALIAS FOR $2; tmp_int INT8; BEGIN IF in_old_sync_token > 0 THEN SELECT 1 INTO tmp_int FROM sync_changes WHERE collection_id = in_collection_id AND sync_time > (SELECT modification_time FROM sync_tokens WHERE sync_token = in_old_sync_token) LIMIT 1; IF NOT FOUND THEN RETURN in_old_sync_token; END IF; END IF; SELECT nextval('sync_tokens_sync_token_seq') INTO tmp_int; INSERT INTO sync_tokens(collection_id, sync_token) VALUES( in_collection_id, tmp_int ); RETURN tmp_int; END $$ LANGUAGE 'PlPgSQL' STRICT; davical-1.1.1/dba/patches/1.1.8.sql0000644000000000000000000000066310705234304013351 0ustar -- Adding freebusy tickets BEGIN; SELECT check_db_revision(1,1,7); CREATE TABLE freebusy_ticket ( ticket_id TEXT NOT NULL PRIMARY KEY, user_no integer NOT NULL REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE, created timestamp with time zone DEFAULT current_timestamp NOT NULL ); GRANT INSERT,SELECT,UPDATE,DELETE ON TABLE freebusy_ticket TO general; SELECT new_db_revision(1,1,8, 'August' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.3.sql0000644000000000000000000001000511215140072013327 0ustar -- Add some more cascading updates and deletes. -- For databases created before PostgreSQL 8.0. -- I screwed up with version 0.9.6.1 and 0.9.6.2 in that the davical.sql -- file specified them as version 1.2.2 when in reality they were version -- 1.2.4 so we are going to clean that up here... CREATE TEMP TABLE db_version_check AS SELECT * FROM awl_db_revision; DELETE FROM db_version_check WHERE ((schema_major * 1000000) + (schema_minor * 1000) + schema_patch) < 1002002; INSERT INTO db_version_check (schema_id, schema_major, schema_minor, schema_patch, schema_name, applied_on ) SELECT (SELECT max(schema_id) + 1 FROM awl_db_revision WHERE ((schema_major * 1000000) + (schema_minor * 1000) + schema_patch) <= 1002002), 1, 2, 4, 'Avril', current_timestamp FROM pg_class JOIN pg_attribute ON (pg_class.oid = pg_attribute.attrelid) WHERE pg_class.relname = 'calendar_item' AND attname = 'completed'; DELETE FROM db_version_check WHERE EXISTS( SELECT 1 FROM db_version_check WHERE schema_major < db_version_check.schema_major OR (schema_major = db_version_check.schema_major AND schema_minor < db_version_check.schema_minor ) OR (schema_major = db_version_check.schema_major AND schema_minor = db_version_check.schema_minor AND schema_patch < db_version_check.schema_patch) ); INSERT INTO awl_db_revision SELECT * FROM db_version_check WHERE schema_major=1 AND schema_minor=2 AND schema_patch=4; BEGIN; SELECT check_db_revision(1,2,2); ALTER TABLE role_member DROP CONSTRAINT "$1"; ALTER TABLE role_member ADD CONSTRAINT "role_member_role_no_fkey" FOREIGN KEY (role_no) REFERENCES roles(role_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE role_member DROP CONSTRAINT "$2"; ALTER TABLE role_member ADD CONSTRAINT "role_member_user_no_fkey" FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE session DROP CONSTRAINT "$1"; ALTER TABLE session ADD CONSTRAINT "session_user_no_fkey" FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE relationship DROP CONSTRAINT "$1"; ALTER TABLE relationship ADD CONSTRAINT "relationship_from_user_fkey" FOREIGN KEY (from_user) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE relationship DROP CONSTRAINT "$2"; ALTER TABLE relationship ADD CONSTRAINT "relationship_to_user_fkey" FOREIGN KEY (to_user) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE usr_setting DROP CONSTRAINT "$1"; ALTER TABLE usr_setting ADD CONSTRAINT "usr_setting_user_no_fkey" FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE tmp_password DROP CONSTRAINT "$1"; ALTER TABLE tmp_password ADD CONSTRAINT "tmp_password_user_no_fkey" FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE caldav_data DROP CONSTRAINT "$1"; ALTER TABLE caldav_data ADD CONSTRAINT "caldav_data_user_no_fkey" FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE caldav_data DROP CONSTRAINT "$2"; ALTER TABLE caldav_data ADD CONSTRAINT "caldav_data_logged_user_fkey" FOREIGN KEY (logged_user) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE property DROP CONSTRAINT "$1"; ALTER TABLE property ADD CONSTRAINT "property_changed_by_fkey" FOREIGN KEY (changed_by) REFERENCES usr(user_no) ON UPDATE CASCADE; ALTER TABLE calendar_item DROP CONSTRAINT "$1"; ALTER TABLE calendar_item ADD CONSTRAINT "calendar_item_user_no_fkey" FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE calendar_item DROP CONSTRAINT "$2"; ALTER TABLE calendar_item ADD CONSTRAINT "calendar_item_tz_id_fkey" FOREIGN KEY (tz_id) REFERENCES time_zone(tz_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; SELECT new_db_revision(1,2,3, 'Mars' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.1.10.sql0000644000000000000000000000113511167760073013427 0ustar -- Sort out accessing calendar entries. BEGIN; SELECT check_db_revision(1,1,9); -- Make sure that class is set to something, by default PUBLIC. -- According to RFC2445, 4.8.1.3. UPDATE calendar_item SET class = 'PUBLIC' WHERE class IS NULL; -- Allow forcing all events in a calendar to be public ALTER TABLE collection ADD COLUMN public_events_only BOOLEAN; UPDATE collection SET public_events_only = FALSE; ALTER TABLE collection ALTER public_events_only SET NOT NULL; ALTER TABLE collection ALTER public_events_only SET DEFAULT FALSE; SELECT new_db_revision(1,1,10, 'October' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.1.9.sql0000644000000000000000000000036310705234304013347 0ustar -- Adding a primary key to the calendar_item table BEGIN; SELECT check_db_revision(1,1,8); ALTER TABLE calendar_item ADD PRIMARY KEY (user_no, dav_name ); SELECT new_db_revision(1,1,9, 'September' ); COMMIT; ROLLBACK; VACUUM FULL ANALYZE;davical-1.1.1/dba/patches/1.2.9.sql0000644000000000000000000000221211633117640013347 0ustar -- This database update adds some extra columns / tables for tracking -- alarms, attendee states and addressbook address field expansion. BEGIN; SELECT check_db_revision(1,2,8); -- Kind of important to have these as first-class citizens ALTER TABLE addressbook_resource ADD COLUMN fburl TEXT DEFAULT NULL; ALTER TABLE addressbook_resource ADD COLUMN caluri TEXT DEFAULT NULL; ALTER TABLE addressbook_resource ADD COLUMN caladruri TEXT DEFAULT NULL; DROP TABLE addressbook_address_adr CASCADE; CREATE TABLE addressbook_address_adr ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, box_no TEXT, unit_no TEXT, street_address TEXT, locality TEXT, region TEXT, postcode TEXT, country TEXT, property TEXT -- The full text of the property ); -- 'N' => 'New/Needs setting', 'A' = 'Active', 'O' = 'Old' ALTER TABLE calendar_alarm ADD COLUMN trigger_state CHAR DEFAULT 'N'; -- Internal DAViCal calendar state ALTER TABLE calendar_attendee ADD COLUMN attendee_state TEXT; ALTER TABLE calendar_attendee ADD COLUMN weak_etag TEXT; SELECT new_db_revision(1,2,9, 'Septembre' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.1.4.sql0000644000000000000000000000161710705234304013345 0ustar -- Starting to add internationalisation support BEGIN; SELECT check_db_revision(1,1,3); CREATE TABLE supported_locales ( locale TEXT PRIMARY KEY, locale_name_en TEXT, locale_name_locale TEXT ); GRANT SELECT ON supported_locales TO general; ALTER TABLE usr ADD COLUMN locale TEXT; -- I should be able to find people to translate into these base locales INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'en', 'English', 'English' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'de', 'German', 'Deutsch' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'es', 'Spanish', 'Español' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'fr', 'French', 'Français' ); SELECT new_db_revision(1,1,4, 'April' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.1.3.sql0000644000000000000000000000034210705234304013336 0ustar -- Bleah. Missed another permission. BEGIN; SELECT check_db_revision(1,1,2); UPDATE relationship_type SET rt_isgroup = TRUE WHERE rt_id = 3 AND NOT rt_isgroup; SELECT new_db_revision(1,1,3, 'March' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.4.sql0000644000000000000000000000063411215140072013337 0ustar -- This database update provides new tables for the Principal, for -- a consistent dav_resource which a principal, collection or calendar_item -- all inherit from. BEGIN; SELECT check_db_revision(1,2,3); -- Add a column to hold the 'COMPLETED' property from the caldav_data ALTER TABLE calendar_item ADD COLUMN completed TIMESTAMP WITH TIME ZONE; SELECT new_db_revision(1,2,4, 'Avril' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.1.6.sql0000644000000000000000000000222010705234304013336 0ustar -- Adding lock support BEGIN; SELECT check_db_revision(1,1,5); CREATE TABLE locks ( dav_name TEXT, opaquelocktoken TEXT UNIQUE NOT NULL, type TEXT, scope TEXT, depth INT, owner TEXT, timeout INTERVAL, start TIMESTAMP DEFAULT current_timestamp ); CREATE INDEX locks_dav_name_idx ON locks(dav_name); GRANT SELECT,INSERT,UPDATE,DELETE ON locks TO general; CREATE TABLE property ( dav_name TEXT, property_name TEXT, property_value TEXT, changed_on TIMESTAMP DEFAULT current_timestamp, changed_by INT REFERENCES usr ( user_no ), PRIMARY KEY ( dav_name, property_name ) ); CREATE INDEX properties_dav_name_idx ON property(dav_name); GRANT SELECT,INSERT,UPDATE,DELETE ON property TO general; UPDATE relationship_type SET confers = 'A' WHERE rt_id = 1; UPDATE relationship_type SET confers = 'RW' WHERE rt_id = 2; UPDATE relationship_type SET confers = 'R' WHERE rt_id = 3; UPDATE relationship_type SET confers = 'A' WHERE rt_id = 4; INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match ) VALUES( 5, 'Can see free/busy time of', FALSE, 'F', '' ); SELECT new_db_revision(1,1,6, 'June' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.1.5.sql0000644000000000000000000000040010705234304013333 0ustar -- Starting to add internationalisation support BEGIN; SELECT check_db_revision(1,1,4); UPDATE relationship_type SET rt_name = 'is Assistant to' WHERE rt_id = 2 AND rt_name = 'Is Assisted by'; SELECT new_db_revision(1,1,5, 'May' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.1.11a.sql0000644000000000000000000000130711167760073013572 0ustar -- Sort out accessing calendar entries. -- This alternative patch file is the same in/out revision as 1.1.11 but it works with newer databases (8.x) BEGIN; SELECT check_db_revision(1,1,10); ALTER TABLE caldav_data DROP CONSTRAINT "caldav_data_user_no_fkey"; ALTER TABLE caldav_data ADD CONSTRAINT "caldav_data_user_no_fkey" FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE collection DROP CONSTRAINT "collection_user_no_fkey"; ALTER TABLE collection ADD CONSTRAINT "collection_user_no_fkey" FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; SELECT new_db_revision(1,1,11, 'November' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.5.sql0000644000000000000000000000326311215140072013341 0ustar -- This database update refines the constraint on usr in order to try and be -- able to actually DELETE FROM usr WHERE user_no = x; and have the database -- do the right thing... BEGIN; SELECT check_db_revision(1,2,4); ALTER TABLE calendar_item DROP CONSTRAINT "calendar_item_user_no_fkey"; ALTER TABLE calendar_item ADD CONSTRAINT "calendar_item_user_no_fkey" FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE caldav_data DROP CONSTRAINT "caldav_data_logged_user_fkey"; ALTER TABLE caldav_data ADD CONSTRAINT "caldav_data_logged_user_fkey" FOREIGN KEY (logged_user) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE SET DEFAULT DEFERRABLE; ALTER TABLE relationship DROP CONSTRAINT "relationship_from_user_fkey"; ALTER TABLE relationship ADD CONSTRAINT "relationship_from_user_fkey" FOREIGN KEY (from_user) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE relationship DROP CONSTRAINT "relationship_to_user_fkey"; ALTER TABLE relationship ADD CONSTRAINT "relationship_to_user_fkey" FOREIGN KEY (to_user) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE relationship DROP CONSTRAINT "relationship_rt_id_fkey"; ALTER TABLE relationship ADD CONSTRAINT "relationship_rt_id_fkey" FOREIGN KEY (rt_id) REFERENCES relationship_type(rt_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; ALTER TABLE property DROP CONSTRAINT "property_changed_by_fkey"; ALTER TABLE property ADD CONSTRAINT "property_changed_by_fkey" FOREIGN KEY (changed_by) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE SET DEFAULT DEFERRABLE; SELECT new_db_revision(1,2,5, 'Mai' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.1.12.sql0000644000000000000000000000423111167760073013431 0ustar -- Add a numeric foreign key link between caldav_data and calendar_item to -- provide more efficient linking when the db has been initialised with a -- non POSIX collation. BEGIN; SELECT check_db_revision(1,1,11); -- Add a column to the collection table to allow us to mark collections -- as publicly readable ALTER TABLE collection ADD COLUMN publicly_readable BOOLEAN DEFAULT FALSE; -- Add a numeric dav_id to link the caldav_data and calendar_item tables ALTER TABLE caldav_data ADD COLUMN dav_id INT8; ALTER TABLE calendar_item ADD COLUMN dav_id INT8; CREATE SEQUENCE caldav_data_dav_id_seq; GRANT SELECT,UPDATE ON caldav_data_dav_id_seq TO general; CREATE or REPLACE FUNCTION sync_dav_id ( ) RETURNS TRIGGER AS ' DECLARE BEGIN IF TG_OP = ''DELETE'' THEN -- Just let the ON DELETE CASCADE handle this case RETURN OLD; END IF; IF NEW.dav_id IS NULL THEN NEW.dav_id = nextval(''caldav_data_dav_id_seq''); END IF; IF TG_OP = ''UPDATE'' THEN IF OLD.dav_id = NEW.dav_id THEN -- Nothing to do RETURN NEW; END IF; END IF; IF TG_RELNAME = ''caldav_data'' THEN UPDATE calendar_item SET dav_id = NEW.dav_id WHERE user_no = NEW.user_no AND dav_name = NEW.dav_name; ELSE UPDATE caldav_data SET dav_id = NEW.dav_id WHERE user_no = NEW.user_no AND dav_name = NEW.dav_name; END IF; RETURN NEW; END ' LANGUAGE 'plpgsql'; CREATE TRIGGER caldav_data_sync_dav_id AFTER INSERT OR UPDATE ON caldav_data FOR EACH ROW EXECUTE PROCEDURE sync_dav_id(); CREATE TRIGGER calendar_item_sync_dav_id AFTER INSERT OR UPDATE ON calendar_item FOR EACH ROW EXECUTE PROCEDURE sync_dav_id(); -- Now, using the trigger, magically assign dav_id to all rows in caldav_data and calendar_item UPDATE caldav_data SET dav_id = dav_id; ALTER TABLE caldav_data ALTER COLUMN dav_id SET DEFAULT nextval('caldav_data_dav_id_seq'); ALTER TABLE caldav_data ALTER COLUMN dav_id SET NOT NULL; ALTER TABLE caldav_data ADD CONSTRAINT caldav_data_dav_id_key UNIQUE (dav_id); ALTER TABLE calendar_item ADD CONSTRAINT calendar_item_dav_id_key UNIQUE (dav_id); SELECT new_db_revision(1,1,12, 'December' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.10.sql0000644000000000000000000000512011633117640013420 0ustar -- Minor fix: Ensure the target of a binding is unique -- Minor enhancement: Add columns for earliest start / latest end for improved pre-selection -- Add columns to support remote binds -- Just in case these constraints got added manually, so we won't fail -- if there is an existing one. ALTER TABLE principal DROP CONSTRAINT unique_user CASCADE; ALTER TABLE collection DROP CONSTRAINT unique_path CASCADE; CREATE or REPLACE FUNCTION real_path_exists( TEXT ) RETURNS BOOLEAN AS $$ DECLARE in_path ALIAS FOR $1; tmp BOOLEAN; BEGIN IF in_path = '/' THEN RETURN TRUE; END IF; IF in_path ~ '^/[^/]+/$' THEN SELECT TRUE INTO tmp FROM usr WHERE username = substring( in_path from 2 for length(in_path) - 2); IF FOUND THEN RETURN TRUE; END IF; ELSE IF in_path ~ '^/.*/$' THEN SELECT TRUE INTO tmp FROM collection WHERE dav_name = in_path; IF FOUND THEN RETURN TRUE; END IF; END IF; END IF; RETURN FALSE; END; $$ LANGUAGE plpgsql ; BEGIN; SELECT check_db_revision(1,2,9); ALTER TABLE dav_binding ADD UNIQUE( dav_name ); -- New fields for Rob Ostensen's remote binding setup ALTER TABLE dav_binding ADD COLUMN external_url TEXT; ALTER TABLE dav_binding ADD COLUMN type TEXT; ALTER TABLE principal ADD CONSTRAINT unique_user UNIQUE (user_no); -- Ensure we don't refer to any newer, duplicated collections UPDATE caldav_data SET collection_id = (SELECT min(c2.collection_id) FROM collection c1, collection c2 WHERE c1.dav_name = c2.dav_name AND c1.collection_id = caldav_data.collection_id) WHERE collection_id > (SELECT min(c2.collection_id) FROM collection c1, collection c2 WHERE c1.dav_name = c2.dav_name AND c1.collection_id = caldav_data.collection_id); -- Ensure the newer duplicated collections don't exist any longer DELETE FROM collection WHERE collection_id > (SELECT min(collection_id) FROM collection c2 WHERE c2.dav_name = collection.dav_name); -- Ensure we can't add more duplicates in the future ALTER TABLE collection ADD CONSTRAINT unique_path UNIQUE (dav_name); ALTER TABLE dav_binding ADD CONSTRAINT "dav_name_does_not_exist" CHECK (NOT real_path_exists(dav_name)); -- We will use these to improve our selection criteria in future, but for now we will leave them null ALTER TABLE calendar_item ADD COLUMN first_instance_start TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL; ALTER TABLE calendar_item ADD COLUMN last_instance_end TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL; SELECT new_db_revision(1,2,10, 'Octobre' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.1.sql0000644000000000000000000000752211215137004013340 0ustar -- This database update provides new tables for the Principal, for -- a consistent dav_resource which a principal, collection or calendar_item -- all inherit from. BEGIN; SELECT check_db_revision(1,1,12); -- Rename the caldav_data_dav_id_seq to dav_id_seq because we will use it -- for more tables than just caldav_data CREATE SEQUENCE dav_id_seq; SELECT setval('dav_id_seq', nextval('caldav_data_dav_id_seq')); ALTER TABLE caldav_data ALTER COLUMN dav_id SET DEFAULT nextval('dav_id_seq'); ALTER TABLE calendar_item ALTER COLUMN dav_id SET DEFAULT nextval('dav_id_seq'); CREATE or REPLACE FUNCTION sync_dav_id ( ) RETURNS TRIGGER AS ' DECLARE BEGIN IF TG_OP = ''DELETE'' THEN -- Just let the ON DELETE CASCADE handle this case RETURN OLD; END IF; IF NEW.dav_id IS NULL THEN NEW.dav_id = nextval(''dav_id_seq''); END IF; IF TG_OP = ''UPDATE'' THEN IF OLD.dav_id = NEW.dav_id THEN -- Nothing to do RETURN NEW; END IF; END IF; IF TG_RELNAME = ''caldav_data'' THEN UPDATE calendar_item SET dav_id = NEW.dav_id WHERE user_no = NEW.user_no AND dav_name = NEW.dav_name; ELSE UPDATE caldav_data SET dav_id = NEW.dav_id WHERE user_no = NEW.user_no AND dav_name = NEW.dav_name; END IF; RETURN NEW; END ' LANGUAGE 'plpgsql'; -- CREATE TRIGGER caldav_data_sync_dav_id AFTER INSERT OR UPDATE ON caldav_data -- FOR EACH ROW EXECUTE PROCEDURE sync_dav_id(); -- CREATE TRIGGER calendar_item_sync_dav_id AFTER INSERT OR UPDATE ON calendar_item -- FOR EACH ROW EXECUTE PROCEDURE sync_dav_id(); -- Add a numeric collection_id to collection ALTER TABLE collection ADD COLUMN collection_id INT8; UPDATE collection SET collection_id = nextval('dav_id_seq'); ALTER TABLE collection ALTER COLUMN collection_id SET DEFAULT nextval('dav_id_seq'); ALTER TABLE collection DROP CONSTRAINT collection_pkey CASCADE; ALTER TABLE collection ADD UNIQUE (user_no,dav_name); ALTER TABLE collection ADD CONSTRAINT collection_pkey PRIMARY KEY (collection_id); ALTER TABLE calendar_item ADD COLUMN collection_id INT8; INSERT INTO collection ( user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, created, modified) SELECT user_no, '/'||username||'/', '/'||username||'/home/', md5(user_no::text||'/'||username||'/home/'), fullname, TRUE, current_timestamp, current_timestamp FROM usr WHERE NOT EXISTS (SELECT 1 FROM collection WHERE dav_name ~ ('^/'||username||'/')); UPDATE caldav_data SET dav_name = (select collection.dav_name FROM collection WHERE collection.user_no = caldav_data.user_no limit 1) || regexp_replace( caldav_data.dav_name, '^.*/([^/]+)$', E'ex-\\1') WHERE dav_name ~ '^/[^/]+/[^/]+$'; UPDATE calendar_item SET collection_id = collection.collection_id FROM collection WHERE collection.dav_name = regexp_replace( calendar_item.dav_name, '/[^/]+$', '/'); ALTER TABLE calendar_item ALTER COLUMN collection_id SET NOT NULL; ALTER TABLE calendar_item ADD CONSTRAINT calendar_item_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; CREATE INDEX calendar_item_collection_id_fkey ON calendar_item(collection_id); ALTER TABLE caldav_data ADD COLUMN collection_id INT8; UPDATE caldav_data SET collection_id = collection.collection_id FROM collection WHERE collection.dav_name = regexp_replace( caldav_data.dav_name, '/[^/]+$', '/'); ALTER TABLE caldav_data ALTER COLUMN collection_id SET NOT NULL; ALTER TABLE caldav_data ADD CONSTRAINT caldav_data_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; CREATE INDEX caldav_data_collection_id_fkey ON caldav_data(collection_id); SELECT new_db_revision(1,2,1, 'Janvier' ); COMMIT; ROLLBACK; davical-1.1.1/dba/patches/1.2.8.sql0000644000000000000000000000557711372476166013402 0ustar -- This database update adds support for tickets to be handed out to grant -- specific access to a collection or individual resource, as read-only or -- read-write. A table is also added to manage WebDAV binding, in line -- with http://tools.ietf.org/html/draft-ietf-webdav-bind. BEGIN; SELECT check_db_revision(1,2,7); ALTER TABLE caldav_data ADD COLUMN weak_etag TEXT DEFAULT NULL; ALTER TABLE collection DROP COLUMN in_freebusy_set; CREATE TABLE access_ticket ( ticket_id TEXT PRIMARY KEY, dav_owner_id INT8 NOT NULL REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE, privileges BIT(24), target_collection_id INT8 NOT NULL REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE, target_resource_id INT8 REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, expires TIMESTAMP ); -- At this point we only support binding collections CREATE TABLE dav_binding ( bind_id INT8 DEFAULT nextval('dav_id_seq') PRIMARY KEY, bound_source_id INT8 REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE, access_ticket_id TEXT REFERENCES access_ticket(ticket_id) ON UPDATE CASCADE ON DELETE SET NULL, dav_owner_id INT8 NOT NULL REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE, parent_container TEXT NOT NULL, dav_name TEXT UNIQUE NOT NULL, dav_displayname TEXT ); CREATE TABLE addressbook_resource ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE PRIMARY KEY, version TEXT, uid TEXT, nickname TEXT, fn TEXT, -- fullname n TEXT, -- Name Surname;First names note TEXT, org TEXT, url TEXT ); CREATE TABLE addressbook_address_adr ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, adr TEXT, property TEXT -- The full text of the property ); CREATE TABLE addressbook_address_tel ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, tel TEXT, property TEXT -- The full text of the property ); CREATE TABLE addressbook_address_email ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, email TEXT, property TEXT -- The full text of the property ); CREATE TABLE calendar_alarm ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, action TEXT, trigger TEXT, summary TEXT, description TEXT, next_trigger TIMESTAMP WITH TIME ZONE, component TEXT -- The full text of the component ); CREATE TABLE calendar_attendee ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, status TEXT, partstat TEXT, cn TEXT, attendee TEXT, role TEXT, rsvp BOOLEAN, property TEXT, -- The full text of the property PRIMARY KEY ( dav_id, attendee ) ); SELECT new_db_revision(1,2,8, 'Août' ); COMMIT; ROLLBACK; davical-1.1.1/dba/views/0000755000000000000000000000000011776303357011702 5ustar davical-1.1.1/dba/views/dav_principal.sql0000644000000000000000000000476211704423626015240 0ustar -- Define an updateable view for dav_principal which conbines the AWL usr -- record 1:1 with the principal table DROP VIEW dav_principal CASCADE; CREATE OR REPLACE VIEW dav_principal AS SELECT user_no, usr.active AS user_active, joined AS created, updated AS modified, username, password, fullname, email, email_ok, date_format_type, locale, principal_id, type_id, displayname, default_privileges, TRUE AS is_principal, FALSE AS is_calendar, principal_id AS collection_id, FALSE AS is_addressbook, '/' || username || '/' AS dav_name, ''::text AS resourcetypes FROM usr JOIN principal USING(user_no); CREATE or REPLACE RULE dav_principal_insert AS ON INSERT TO dav_principal DO INSTEAD ( INSERT INTO usr ( user_no, active, joined, updated, username, password, fullname, email, email_ok, date_format_type, locale ) VALUES( COALESCE( NEW.user_no, nextval('usr_user_no_seq')), COALESCE( NEW.user_active, TRUE), COALESCE( NEW.created, current_timestamp), COALESCE( NEW.modified, current_timestamp), NEW.username, NEW.password, COALESCE( NEW.fullname, NEW.displayname ), NEW.email, NEW.email_ok, COALESCE( NEW.date_format_type, 'E'), NEW.locale ); INSERT INTO principal ( user_no, principal_id, type_id, displayname, default_privileges ) VALUES( COALESCE( NEW.user_no, currval('usr_user_no_seq')), COALESCE( NEW.principal_id, nextval('dav_id_seq')), NEW.type_id, COALESCE( NEW.displayname, NEW.fullname ), COALESCE( NEW.default_privileges, 0::BIT(24)) ); ); CREATE or REPLACE RULE dav_principal_update AS ON UPDATE TO dav_principal DO INSTEAD ( UPDATE usr SET user_no=NEW.user_no, active=NEW.user_active, updated=current_timestamp, username=NEW.username, password=NEW.password, fullname=NEW.fullname, email=NEW.email, email_ok=NEW.email_ok, date_format_type=NEW.date_format_type, locale=NEW.locale WHERE user_no=OLD.user_no; UPDATE principal SET principal_id = NEW.principal_id, type_id = NEW.type_id, displayname = NEW.displayname, default_privileges = NEW.default_privileges WHERE principal_id=OLD.principal_id; ); CREATE or REPLACE RULE dav_principal_delete AS ON DELETE TO dav_principal DO INSTEAD ( DELETE FROM usr WHERE user_no=OLD.user_no; DELETE FROM principal WHERE principal_id=OLD.principal_id; ); davical-1.1.1/dba/supported_locales.sql0000644000000000000000000000443411760642111015005 0ustar TRUNCATE supported_locales; INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'en', 'English', 'English' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'de', 'German', 'Deutsch' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'es_AR', 'Spanish (Argentina)', 'Español (Argentina)' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'es_ES', 'Spanish (Spain)', 'Español (Espana)' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'es_MX', 'Spanish (Mexico)', 'Español (Mexico)' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'es_VE', 'Spanish (Venezuela)', 'Español (Venezuela)' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'et', 'Estonian', 'Eesti' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'fr', 'French', 'Français' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'hu', 'Hungarian', 'Magyar' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'it', 'Italian', 'Italiano' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'ja', 'Japanese', '日本語' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'nb', 'Norwegian', 'Bokmål' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'nl', 'Netherlands', 'Nederlands' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'pl', 'Polish', 'Polski' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'pt_BR', 'Brazilian Portuguese', 'Brazilian Portuguese' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'pt_PT', 'Portuguese', 'Portuguese' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'ru', 'Russian', 'Русский' ); INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale ) VALUES( 'sv', 'Swedish', 'Svenska' ); davical-1.1.1/dba/base-data.sql0000644000000000000000000000430311751101641013070 0ustar -- Some base data to prime the database... -- FIXME: Only insert the rows if they are not there already. INSERT INTO roles ( role_no, role_name ) VALUES( 1, 'Admin'); INSERT INTO roles ( role_no, role_name ) VALUES( 2, 'Group'); INSERT INTO roles ( role_no, role_name ) VALUES( 3, 'Public'); INSERT INTO roles ( role_no, role_name ) VALUES( 4, 'Resource'); -- Set the insert sequence to the next number, with a minimum of 10 SELECT setval('roles_role_no_seq', (SELECT 10 UNION SELECT role_no FROM roles ORDER BY 1 DESC LIMIT 1) ); INSERT INTO principal_type (principal_type_id, principal_type_desc) VALUES( 1, 'Person' ); INSERT INTO principal_type (principal_type_id, principal_type_desc) VALUES( 2, 'Resource' ); INSERT INTO principal_type (principal_type_id, principal_type_desc) VALUES( 3, 'Group' ); -- Create the administrator record. INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES ( 1, TRUE, current_date, current_date, 'admin', '**nimda', 'DAViCal Administrator', 'calendars@example.net' ); INSERT INTO principal ( principal_id, type_id, user_no, displayname, default_privileges ) VALUES ( 1, 1, 1, 'DAViCal Administrator', 0::BIT(24) ); INSERT INTO role_member (user_no, role_no) VALUES(1, 1); -- Set the usr & dav_id sequence to the next number, with a minimum of 1000 SELECT setval('usr_user_no_seq', 1000 ); SELECT setval('dav_id_seq', 1000 ); INSERT INTO relationship_type ( rt_id, rt_name, confers, bit_confers ) VALUES( 1, 'Administers', 'A', privilege_to_bits('DAV::all') ); INSERT INTO relationship_type ( rt_id, rt_name, confers, bit_confers ) VALUES( 2, 'Can read/write to', 'RW', privilege_to_bits( ARRAY['DAV::read','DAV::write']) ); INSERT INTO relationship_type ( rt_id, rt_name, confers, bit_confers ) VALUES( 3, 'Can read from', 'R', privilege_to_bits( 'DAV::read') ); INSERT INTO relationship_type ( rt_id, rt_name, confers, bit_confers ) VALUES( 4, 'Can see free/busy time of', 'F', privilege_to_bits( 'caldav:read-free-busy') ); -- Set the insert sequence to the next number, with a minimum of 1000 SELECT setval('relationship_type_rt_id_seq', (SELECT 10 UNION SELECT rt_id FROM relationship_type ORDER BY 1 DESC LIMIT 1) ); davical-1.1.1/dba/rrule_functions-8.1.sql0000644000000000000000000006263211732473145015017 0ustar /** * PostgreSQL Functions for RRULE handling * * @package rscds * @subpackage database * @author Andrew McMillan * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later * * Coverage of this function set * - COUNT & UNTIL are handled, generally * - DAILY frequency, including BYDAY, BYMONTH, BYMONTHDAY, BYWEEKNO, BYMONTHDAY * - WEEKLY frequency, including BYDAY, BYMONTH, BYMONTHDAY, BYWEEKNO, BYSETPOS * - MONTHLY frequency, including BYDAY, BYMONTH, BYSETPOS * - YEARLY frequency, including BYMONTH, BYMONTHDAY, BYSETPOS, BYDAY * * Not covered as yet * - DAILY: BYYEARDAY, BYSETPOS* * - WEEKLY: BYYEARDAY * - MONTHLY: BYYEARDAY, BYMONTHDAY, BYWEEKNO * - YEARLY: BYYEARDAY * - SECONDLY * - MINUTELY * - HOURLY * */ -- Create a composite type for the parts of the RRULE. DROP TYPE rrule_parts CASCADE; CREATE TYPE rrule_parts AS ( base TIMESTAMP WITH TIME ZONE, until TIMESTAMP WITH TIME ZONE, freq TEXT, count INT, interval INT, bysecond INT[], byminute INT[], byhour INT[], bymonthday INT[], byyearday INT[], byweekno INT[], byday TEXT[], bymonth INT[], bysetpos INT[], wkst TEXT ); -- Create a function to parse the RRULE into it's composite type CREATE or REPLACE FUNCTION parse_rrule_parts( TIMESTAMP WITH TIME ZONE, TEXT ) RETURNS rrule_parts AS $$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; result rrule_parts%ROWTYPE; tempstr TEXT; BEGIN result.base := basedate; result.until := substring(repeatrule from 'UNTIL=([0-9TZ]+)(;|$)'); result.freq := substring(repeatrule from 'FREQ=([A-Z]+)(;|$)'); result.count := substring(repeatrule from 'COUNT=([0-9]+)(;|$)'); result.interval := COALESCE(substring(repeatrule from 'INTERVAL=([0-9]+)(;|$)')::int, 1); result.wkst := substring(repeatrule from 'WKST=(MO|TU|WE|TH|FR|SA|SU)(;|$)'); result.byday := string_to_array( substring(repeatrule from 'BYDAY=(([+-]?[0-9]{0,2}(MO|TU|WE|TH|FR|SA|SU),?)+)(;|$)'), ','); result.byyearday := string_to_array(substring(repeatrule from 'BYYEARDAY=([0-9,+-]+)(;|$)'), ','); result.byweekno := string_to_array(substring(repeatrule from 'BYWEEKNO=([0-9,+-]+)(;|$)'), ','); result.bymonthday := string_to_array(substring(repeatrule from 'BYMONTHDAY=([0-9,+-]+)(;|$)'), ','); result.bymonth := string_to_array(substring(repeatrule from 'BYMONTH=(([+-]?[0-1]?[0-9],?)+)(;|$)'), ','); result.bysetpos := string_to_array(substring(repeatrule from 'BYSETPOS=(([+-]?[0-9]{1,3},?)+)(;|$)'), ','); result.bysecond := string_to_array(substring(repeatrule from 'BYSECOND=([0-9,]+)(;|$)'), ','); result.byminute := string_to_array(substring(repeatrule from 'BYMINUTE=([0-9,]+)(;|$)'), ','); result.byhour := string_to_array(substring(repeatrule from 'BYHOUR=([0-9,]+)(;|$)'), ','); RETURN result; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Return a SETOF dates within the month of a particular date which match a string of BYDAY rule specifications CREATE or REPLACE FUNCTION rrule_month_byday_set( TIMESTAMP WITH TIME ZONE, TEXT[] ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE in_time ALIAS FOR $1; byday ALIAS FOR $2; dayrule TEXT; i INT; dow INT; index INT; first_dow INT; each_day TIMESTAMP WITH TIME ZONE; this_month INT; results TIMESTAMP WITH TIME ZONE[]; BEGIN IF byday IS NULL THEN -- We still return the single date as a SET RETURN NEXT in_time; RETURN; END IF; -- It seems that the array needs to be initialised to non-null values in PostgreSQL 8.1 -- The date chosen is the earliest valid date in PostgreSQL 8.1, and nobody should be -- scheduling appointments for then! FOR i IN 1..31 LOOP results[i] := '4713-01-01 00:00:00 BC'::timestamp; END LOOP; i := 1; dayrule := byday[i]; WHILE dayrule IS NOT NULL LOOP dow := position(substring( dayrule from '..$') in 'SUMOTUWETHFRSA') / 2; each_day := date_trunc( 'month', in_time ) + (in_time::time)::interval; this_month := date_part( 'month', in_time ); first_dow := date_part( 'dow', each_day ); -- Coerce each_day to be the first 'dow' of the month each_day := each_day - ( first_dow::text || 'days')::interval + ( dow::text || 'days')::interval + CASE WHEN dow < first_dow THEN '1 week'::interval ELSE '0s'::interval END; -- RAISE NOTICE 'From "%", for % finding dates. dow=%, this_month=%, first_dow=%', each_day, dayrule, dow, this_month, first_dow; IF length(dayrule) > 2 THEN index := (substring(dayrule from '^[0-9-]+'))::int; IF index = 0 THEN RAISE NOTICE 'Ignored invalid BYDAY rule part "%".', bydayrule; ELSIF index > 0 THEN -- The simplest case, such as 2MO for the second monday each_day := each_day + ((index - 1)::text || ' weeks')::interval; ELSE each_day := each_day + '5 weeks'::interval; WHILE date_part('month', each_day) != this_month LOOP each_day := each_day - '1 week'::interval; END LOOP; -- Note that since index is negative, (-2 + 1) == -1, for example index := index + 1; IF index < 0 THEN each_day := each_day + (index::text || ' weeks')::interval ; END IF; END IF; -- Sometimes (e.g. 5TU or -5WE) there might be no such date in some months IF date_part('month', each_day) = this_month THEN results[date_part('day',each_day)] := each_day; -- RAISE NOTICE 'Added "%" to list for %', each_day, dayrule; END IF; ELSE -- Return all such days that are within the given month WHILE date_part('month', each_day) = this_month LOOP index := date_part('day',each_day); -- RAISE NOTICE 'Adding "%" to list[%] for %', each_day, index, dayrule; results[index] := each_day; -- RAISE NOTICE 'Added "%" to list for %', each_day, dayrule; each_day := each_day + '1 week'::interval; END LOOP; END IF; i := i + 1; dayrule := byday[i]; END LOOP; FOR i IN 1..31 LOOP IF results[i] > '4713-01-01 00:00:00 BC'::timestamp THEN RETURN NEXT results[i]; END IF; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Return a SETOF dates within the month of a particular date which match a string of BYDAY rule specifications CREATE or REPLACE FUNCTION rrule_month_bymonthday_set( TIMESTAMP WITH TIME ZONE, INT[] ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE in_time ALIAS FOR $1; bymonthday ALIAS FOR $2; month_start TIMESTAMP WITH TIME ZONE; daysinmonth INT; i INT; BEGIN month_start := date_trunc( 'month', in_time ) + (in_time::time)::interval; daysinmonth := date_part( 'days', (month_start + interval '1 month') - interval '1 day' ); FOR i IN 1..31 LOOP EXIT WHEN bymonthday[i] IS NULL; CONTINUE WHEN bymonthday[i] > daysinmonth; CONTINUE WHEN bymonthday[i] < (-1 * daysinmonth); IF bymonthday[i] > 0 THEN RETURN NEXT month_start + ((bymonthday[i] - 1)::text || 'days')::interval; ELSIF bymonthday[i] < 0 THEN RETURN NEXT month_start + ((daysinmonth + bymonthday[i])::text || 'days')::interval; ELSE RAISE NOTICE 'Ignored invalid BYMONTHDAY part "%".', bymonthday[i]; END IF; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Return a SETOF dates within the week of a particular date which match a single BYDAY rule specification CREATE or REPLACE FUNCTION rrule_week_byday_set( TIMESTAMP WITH TIME ZONE, TEXT[] ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE in_time ALIAS FOR $1; byday ALIAS FOR $2; dayrule TEXT; dow INT; our_day TIMESTAMP WITH TIME ZONE; i INT; BEGIN IF byday IS NULL THEN -- We still return the single date as a SET RETURN NEXT in_time; RETURN; END IF; our_day := date_trunc( 'week', in_time ) + (in_time::time)::interval; i := 1; dayrule := byday[i]; WHILE dayrule IS NOT NULL LOOP dow := position(dayrule in 'SUMOTUWETHFRSA') / 2; RETURN NEXT our_day + ((dow - 1)::text || 'days')::interval; i := i + 1; dayrule := byday[i]; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE or REPLACE FUNCTION event_has_exceptions( TEXT ) RETURNS BOOLEAN AS $$ SELECT $1 ~ E'\nRECURRENCE-ID(;TZID=[^:]+)?:[[:space:]]*[[:digit:]]{8}(T[[:digit:]]{6})?' $$ LANGUAGE 'sql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Test the weekday of this date against the array of weekdays from the BYDAY rule (FREQ=WEEKLY or less) ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION test_byday_rule( TIMESTAMP WITH TIME ZONE, TEXT[] ) RETURNS BOOLEAN AS $$ DECLARE testme ALIAS FOR $1; byday ALIAS FOR $2; BEGIN -- Note that this doesn't work for MONTHLY/YEARLY BYDAY clauses which might have numbers prepended -- so don't call it that way... IF byday IS NOT NULL THEN RETURN ( substring( to_char( testme, 'DY') for 2 from 1) = ANY (byday) ); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Test the month of this date against the array of months from the rule ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION test_bymonth_rule( TIMESTAMP WITH TIME ZONE, INT[] ) RETURNS BOOLEAN AS $$ DECLARE testme ALIAS FOR $1; bymonth ALIAS FOR $2; BEGIN IF bymonth IS NOT NULL THEN RETURN ( date_part( 'month', testme) = ANY (bymonth) ); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Test the day in month of this date against the array of monthdays from the rule ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION test_bymonthday_rule( TIMESTAMP WITH TIME ZONE, INT[] ) RETURNS BOOLEAN AS $$ DECLARE testme ALIAS FOR $1; bymonthday ALIAS FOR $2; BEGIN IF bymonthday IS NOT NULL THEN RETURN ( date_part( 'day', testme) = ANY (bymonthday) ); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Test the day in year of this date against the array of yeardays from the rule ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION test_byyearday_rule( TIMESTAMP WITH TIME ZONE, INT[] ) RETURNS BOOLEAN AS $$ DECLARE testme ALIAS FOR $1; byyearday ALIAS FOR $2; BEGIN IF byyearday IS NOT NULL THEN RETURN ( date_part( 'doy', testme) = ANY (byyearday) ); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Given a cursor into a set, process the set returning the subset matching the BYSETPOS ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION rrule_bysetpos_filter( REFCURSOR, INT[] ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE curse ALIAS FOR $1; bysetpos ALIAS FOR $2; valid_date TIMESTAMP WITH TIME ZONE; i INT; setsize INT; ourset TIMESTAMP WITH TIME ZONE[]; BEGIN IF bysetpos IS NULL THEN LOOP FETCH curse INTO valid_date; EXIT WHEN NOT FOUND; RETURN NEXT valid_date; END LOOP; ELSE setsize := 0; FOR i IN 1..366 LOOP FETCH curse INTO valid_date; EXIT WHEN NOT FOUND; ourset[i] := valid_date; setsize = setsize + 1; END LOOP; -- RAISE NOTICE 'We have % in our set.', setsize; FOR i IN 1..366 LOOP EXIT WHEN bysetpos[i] IS NULL; IF bysetpos[i] > 0 THEN valid_date := ourset[bysetpos[i]]; -- RAISE NOTICE 'Extracted % from position %.', valid_date, bysetpos[i]; ELSE valid_date := ourset[ setsize + bysetpos[i] + 1 ]; -- RAISE NOTICE 'Extracted % from position (% % + 1) = %.', valid_date, setsize, bysetpos[i], setsize + bysetpos[i] + 1; END IF; IF valid_date IS NOT NULL THEN RETURN NEXT valid_date; END IF; END LOOP; END IF; CLOSE curse; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Return another day's worth of events: i.e. one day that matches the criteria, since we don't -- currently implement sub-day scheduling. -- -- This is cheeky: The incrementing by a day is done outside the call, so we either return the -- empty set (if the input date fails our filters) or we return a set containing the input date. ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION daily_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; BEGIN IF rrule.bymonth IS NOT NULL AND NOT date_part('month',after) = ANY ( rrule.bymonth ) THEN RETURN; END IF; IF rrule.byweekno IS NOT NULL AND NOT date_part('week',after) = ANY ( rrule.byweekno ) THEN RETURN; END IF; IF rrule.byyearday IS NOT NULL AND NOT date_part('doy',after) = ANY ( rrule.byyearday ) THEN RETURN; END IF; IF rrule.bymonthday IS NOT NULL AND NOT date_part('day',after) = ANY ( rrule.bymonthday ) THEN RETURN; END IF; IF rrule.byday IS NOT NULL AND NOT substring( to_char( after, 'DY') for 2 from 1) = ANY ( rrule.byday ) THEN RETURN; END IF; -- Since we don't do BYHOUR, BYMINUTE or BYSECOND yet this becomes a trivial RETURN NEXT after; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Return another week's worth of events -- -- Doesn't handle truly obscure and unlikely stuff like BYWEEKNO=5;BYMONTH=1;BYDAY=WE,TH,FR;BYSETPOS=-2 -- Imagine that. ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION weekly_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; rowvar RECORD; curse REFCURSOR; weekno INT; i INT; BEGIN IF rrule.byweekno IS NOT NULL THEN weekno := date_part('week',after); IF NOT weekno = ANY ( rrule.byweekno ) THEN RETURN; END IF; END IF; OPEN curse FOR SELECT r FROM rrule_week_byday_set(after, rrule.byday ) r; FOR rowvar IN SELECT d FROM rrule_bysetpos_filter(curse,rrule.bysetpos) d LOOP RETURN NEXT rowvar.d; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Return another month's worth of events ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION monthly_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; rowvar RECORD; curse REFCURSOR; setpos INT; i INT; BEGIN /** * Need to investigate whether it is legal to set both of these, and whether * we are correct to UNION the results, or whether we should INTERSECT them. * So at this point, we refer to the specification, which grants us this * wonderfully enlightening vision: * * If multiple BYxxx rule parts are specified, then after evaluating the * specified FREQ and INTERVAL rule parts, the BYxxx rule parts are * applied to the current set of evaluated occurrences in the following * order: BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY, BYHOUR, * BYMINUTE, BYSECOND and BYSETPOS; then COUNT and UNTIL are evaluated. * * My guess is that this means 'INTERSECT' */ IF rrule.byday IS NOT NULL AND rrule.bymonthday IS NOT NULL THEN OPEN curse FOR SELECT r FROM rrule_month_byday_set(after, rrule.byday ) r INTERSECT SELECT r FROM rrule_month_bymonthday_set(after, rrule.bymonthday ) r ORDER BY 1; ELSIF rrule.bymonthday IS NOT NULL THEN OPEN curse FOR SELECT r FROM rrule_month_bymonthday_set(after, rrule.bymonthday ) r ORDER BY 1; ELSE OPEN curse FOR SELECT r FROM rrule_month_byday_set(after, rrule.byday ) r ORDER BY 1; END IF; FOR rowvar IN SELECT d FROM rrule_bysetpos_filter(curse,rrule.bysetpos) d LOOP RETURN NEXT rowvar.d; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- If this is YEARLY;BYMONTH, abuse MONTHLY;BYMONTH for everything except the BYSETPOS -- FIXME: it is wrong to abuse MONTHLY;BYMONTH in this way. We should write YEARLY;BYMONTH properly. ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION rrule_yearly_bymonth_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; current_base TIMESTAMP WITH TIME ZONE; rowvar RECORD; rr rrule_parts; i INT; BEGIN IF rrule.bymonth IS NOT NULL THEN -- Ensure we don't pass BYSETPOS down rr := rrule; rr.bysetpos := NULL; FOR i IN 1..12 LOOP EXIT WHEN rr.bymonth[i] IS NULL; current_base := date_trunc( 'year', after ) + ((rr.bymonth[i] - 1)::text || ' months')::interval + (after::time)::interval; FOR rowvar IN SELECT d FROM monthly_set(current_base,rr) d LOOP RETURN NEXT rowvar.d; END LOOP; END LOOP; ELSE -- We don't yet implement byweekno, byblah RETURN NEXT after; END IF; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Return another year's worth of events ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION yearly_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; current_base TIMESTAMP WITH TIME ZONE; rowvar RECORD; curse REFCURSOR; curser REFCURSOR; i INT; BEGIN IF rrule.bymonth IS NOT NULL THEN OPEN curse FOR SELECT r FROM rrule_yearly_bymonth_set(after, rrule ) r; FOR rowvar IN SELECT d FROM rrule_bysetpos_filter(curse,rrule.bysetpos) d LOOP current_base := date_trunc( 'day', rowvar.d ) + (after::time)::interval; RETURN NEXT current_base; END LOOP; ELSE -- We don't yet implement byweekno, byblah RETURN NEXT after; END IF; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Combine all of that into something which we can use to generate a series from an arbitrary DTSTART/RRULE ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION rrule_event_instances_range( TIMESTAMP WITH TIME ZONE, TEXT, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH TIME ZONE, INT ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; mindate ALIAS FOR $3; maxdate ALIAS FOR $4; max_count ALIAS FOR $5; loopmax INT; loopcount INT; base_day TIMESTAMP WITH TIME ZONE; current_base TIMESTAMP WITH TIME ZONE; current TIMESTAMP WITH TIME ZONE; rowvar RECORD; rrule rrule_parts%ROWTYPE; BEGIN loopcount := 0; SELECT * INTO rrule FROM parse_rrule_parts( basedate, repeatrule ); IF rrule.count IS NOT NULL THEN loopmax := rrule.count; ELSE loopmax := max_count; END IF; current_base := basedate; base_day := date_trunc('day',basedate); WHILE loopcount < loopmax AND current_base <= maxdate LOOP IF rrule.freq = 'DAILY' THEN FOR rowvar IN SELECT d FROM daily_set(current_base,rrule) d WHERE d >= base_day LOOP current := rowvar.d; -- IF test_byday_rule(current,rrule.byday) AND test_bymonthday_rule(current,rrule.bymonthday) AND test_bymonth_rule(current,rrule.bymonth) THEN EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; -- END IF; END LOOP; current_base := current_base + (rrule.interval::text || ' days')::interval; ELSIF rrule.freq = 'WEEKLY' THEN FOR rowvar IN SELECT d FROM weekly_set(current_base,rrule) d WHERE d >= base_day LOOP current := rowvar.d; IF test_byyearday_rule(current,rrule.byyearday) AND test_bymonthday_rule(current,rrule.bymonthday) AND test_bymonth_rule(current,rrule.bymonth) THEN EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; END IF; END LOOP; current_base := current_base + (rrule.interval::text || ' weeks')::interval; ELSIF rrule.freq = 'MONTHLY' THEN FOR rowvar IN SELECT d FROM monthly_set(current_base,rrule) d WHERE d >= base_day LOOP current := rowvar.d; -- IF /* test_byyearday_rule(current,rrule.byyearday) -- AND */ test_bymonth_rule(current,rrule.bymonth) -- THEN EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; -- END IF; END LOOP; current_base := current_base + (rrule.interval::text || ' months')::interval; ELSIF rrule.freq = 'YEARLY' THEN FOR rowvar IN SELECT d FROM yearly_set(current_base,rrule) d WHERE d >= base_day LOOP current := rowvar.d; EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; END LOOP; current_base := current_base + (rrule.interval::text || ' years')::interval; ELSE RAISE NOTICE 'A frequency of "%" is not handled', rrule.freq; RETURN; END IF; EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; END LOOP; -- RETURN QUERY; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- A simplified DTSTART/RRULE only interface which applies some performance assumptions ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION event_instances( TIMESTAMP WITH TIME ZONE, TEXT ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; maxdate TIMESTAMP WITH TIME ZONE; rowvar RECORD; BEGIN maxdate := current_date + '10 years'::interval; FOR rowvar IN SELECT d FROM rrule_event_instances_range( basedate, repeatrule, basedate, maxdate, 300 ) d LOOP RETURN NEXT rowvar.d; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- In most cases we just want to know if there *is* an event overlapping the range, so we have a -- specific function for that. Note that this is *not* strict, and can be called with NULLs. ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION rrule_event_overlaps( TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH TIME ZONE, TEXT, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH TIME ZONE ) RETURNS BOOLEAN AS $$ DECLARE dtstart ALIAS FOR $1; dtend ALIAS FOR $2; repeatrule ALIAS FOR $3; in_mindate ALIAS FOR $4; in_maxdate ALIAS FOR $5; base_date TIMESTAMP WITH TIME ZONE; mindate TIMESTAMP WITH TIME ZONE; maxdate TIMESTAMP WITH TIME ZONE; BEGIN IF dtstart IS NULL THEN RETURN NULL; END IF; IF dtend IS NULL THEN base_date := dtstart; ELSE base_date := dtend; END IF; IF in_mindate IS NULL THEN mindate := current_date - '10 years'::interval; ELSE mindate := in_mindate; END IF; IF in_maxdate IS NULL THEN maxdate := current_date + '10 years'::interval; ELSE -- If we add the duration onto the event, then an overlap occurs if dtend <= increased end of range. maxdate := in_maxdate + (base_date - dtstart); END IF; IF repeatrule IS NULL THEN RETURN (dtstart <= maxdate AND base_date >= mindate); END IF; SELECT d INTO mindate FROM rrule_event_instances_range( base_date, repeatrule, mindate, maxdate, 60 ) d LIMIT 1; RETURN FOUND; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE or REPLACE FUNCTION icalendar_interval_to_SQL( TEXT ) RETURNS interval AS $function$ SELECT CASE WHEN substring($1,1,1) = '-' THEN -1 ELSE 1 END * regexp_replace( regexp_replace($1, '[PT-]', '', 'g'), '([A-Z])', E'\\1 ', 'g')::interval; $function$ LANGUAGE 'SQL' IMMUTABLE STRICT; davical-1.1.1/dba/davical.sql0000644000000000000000000003505411651212132012656 0ustar -- DAViCal CalDAV Server - Database Schema -- -- Given a verbose DAV: or CalDAV: privilege name return the bitmask CREATE or REPLACE FUNCTION privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ DECLARE raw_priv ALIAS FOR $1; in_priv TEXT; BEGIN in_priv := trim(lower(regexp_replace(raw_priv, '^.*:', ''))); IF in_priv = 'all' THEN RETURN ~ 0::BIT(24); END IF; RETURN (CASE WHEN in_priv = 'read' THEN 4609 -- 1 + 512 + 4096 WHEN in_priv = 'write' THEN 198 -- 2 + 4 + 64 + 128 WHEN in_priv = 'write-properties' THEN 2 WHEN in_priv = 'write-content' THEN 4 WHEN in_priv = 'unlock' THEN 8 WHEN in_priv = 'read-acl' THEN 16 WHEN in_priv = 'read-current-user-privilege-set' THEN 32 WHEN in_priv = 'bind' THEN 64 WHEN in_priv = 'unbind' THEN 128 WHEN in_priv = 'write-acl' THEN 256 WHEN in_priv = 'read-free-busy' THEN 4608 -- 512 + 4096 WHEN in_priv = 'schedule-deliver' THEN 7168 -- 1024 + 2048 + 4096 WHEN in_priv = 'schedule-deliver-invite' THEN 1024 WHEN in_priv = 'schedule-deliver-reply' THEN 2048 WHEN in_priv = 'schedule-query-freebusy' THEN 4096 WHEN in_priv = 'schedule-send' THEN 57344 -- 8192 + 16384 + 32768 WHEN in_priv = 'schedule-send-invite' THEN 8192 WHEN in_priv = 'schedule-send-reply' THEN 16384 WHEN in_priv = 'schedule-send-freebusy' THEN 32768 ELSE 0 END)::BIT(24); END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- Given an array of verbose DAV: or CalDAV: privilege names return the bitmask CREATE or REPLACE FUNCTION privilege_to_bits( TEXT[] ) RETURNS BIT(24) AS $$ DECLARE raw_privs ALIAS FOR $1; in_priv TEXT; out_bits BIT(24); i INT; allprivs BIT(24); start INT; finish INT; BEGIN out_bits := 0::BIT(24); allprivs := ~ out_bits; SELECT array_lower(raw_privs,1) INTO start; SELECT array_upper(raw_privs,1) INTO finish; FOR i IN start .. finish LOOP SELECT out_bits | privilege_to_bits(raw_privs[i]) INTO out_bits; IF out_bits = allprivs THEN RETURN allprivs; END IF; END LOOP; RETURN out_bits; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- This sequence is used in a number of places so that any DAV resource will have a unique ID CREATE SEQUENCE dav_id_seq; -- Used by the timezone server, but we also load it with random timezones -- from events, if we don't already have those definitions. CREATE TABLE timezones ( our_tzno SERIAL PRIMARY KEY, tzid TEXT UNIQUE NOT NULL, olson_name TEXT, active BOOLEAN, last_modified TIMESTAMP DEFAULT current_timestamp, etag TEXT, vtimezone TEXT ); CREATE TABLE tz_aliases ( our_tzno INT8 REFERENCES timezones(our_tzno), tzalias TEXT NOT NULL ); CREATE TABLE tz_localnames ( our_tzno INT8 REFERENCES timezones(our_tzno), locale TEXT NOT NULL, localised_name TEXT NOT NULL, preferred BOOLEAN DEFAULT TRUE ); -- Something that can look like a filesystem hierarchy where we store stuff CREATE TABLE collection ( user_no INT references usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, parent_container TEXT, dav_name TEXT, dav_etag TEXT, dav_displayname TEXT, is_calendar BOOLEAN, created TIMESTAMP WITH TIME ZONE, modified TIMESTAMP WITH TIME ZONE, public_events_only BOOLEAN NOT NULL DEFAULT FALSE, publicly_readable BOOLEAN NOT NULL DEFAULT FALSE, collection_id INT8 PRIMARY KEY DEFAULT nextval('dav_id_seq'), default_privileges BIT(24), is_addressbook BOOLEAN DEFAULT FALSE, resourcetypes TEXT DEFAULT '', schedule_transp TEXT DEFAULT 'opaque', timezone TEXT REFERENCES timezones(tzid) ON DELETE SET NULL ON UPDATE CASCADE, description TEXT DEFAULT '', UNIQUE(user_no,dav_name) ); ALTER TABLE collection ADD CONSTRAINT unique_path UNIQUE (dav_name); -- The main event. Where we store the things the calendar throws at us. CREATE TABLE caldav_data ( user_no INT references usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, dav_name TEXT, dav_etag TEXT, created TIMESTAMP WITH TIME ZONE, modified TIMESTAMP WITH TIME ZONE, caldav_data TEXT, caldav_type TEXT, logged_user INT references usr(user_no) ON UPDATE CASCADE ON DELETE SET DEFAULT DEFERRABLE, dav_id INT8 UNIQUE DEFAULT nextval('dav_id_seq'), collection_id INT8 REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, weak_etag TEXT DEFAULT NULL, PRIMARY KEY ( user_no, dav_name ) ); CREATE INDEX caldav_data_collection_id_fkey ON caldav_data(collection_id); -- The parsed calendar item. Here we have pulled those events/todos/journals apart somewhat. CREATE TABLE calendar_item ( user_no INT references usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, dav_name TEXT, dav_etag TEXT, -- Extracted vEvent/vTodo data uid TEXT, created TIMESTAMP, last_modified TIMESTAMP, dtstamp TIMESTAMP, dtstart TIMESTAMP WITH TIME ZONE, dtend TIMESTAMP WITH TIME ZONE, due TIMESTAMP WITH TIME ZONE, summary TEXT, location TEXT, description TEXT, priority INT, class TEXT, transp TEXT, rrule TEXT, url TEXT, percent_complete NUMERIC(7,2), tz_id TEXT REFERENCES timezones( tzid ), status TEXT, completed TIMESTAMP WITH TIME ZONE, dav_id INT8 UNIQUE, collection_id INT8 REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, first_instance_start TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, last_instance_end TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, -- Cascade updates / deletes from the caldav_data table CONSTRAINT caldav_exists FOREIGN KEY ( user_no, dav_name ) REFERENCES caldav_data ( user_no, dav_name ) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE, PRIMARY KEY ( user_no, dav_name ) ); CREATE INDEX calendar_item_collection_id_fkey ON calendar_item(collection_id); -- Each user can be related to each other user. This mechanism can also -- be used to define groups of users, since some relationships are transitive. CREATE TABLE relationship_type ( rt_id SERIAL PRIMARY KEY, rt_name TEXT, rt_togroup BOOLEAN, confers TEXT DEFAULT 'RW', rt_fromgroup BOOLEAN, bit_confers BIT(24) DEFAULT privilege_to_bits(ARRAY['DAV::read','DAV::write']) ); CREATE TABLE relationship ( from_user INT REFERENCES usr (user_no) ON UPDATE CASCADE ON DELETE CASCADE, to_user INT REFERENCES usr (user_no) ON UPDATE CASCADE ON DELETE CASCADE, rt_id INT REFERENCES relationship_type (rt_id) ON UPDATE CASCADE ON DELETE CASCADE, confers BIT(24) DEFAULT privilege_to_bits(ARRAY['DAV::read','DAV::write']), PRIMARY KEY ( from_user, to_user, rt_id ) ); CREATE TABLE locks ( dav_name TEXT, opaquelocktoken TEXT UNIQUE NOT NULL, type TEXT, scope TEXT, depth INT, owner TEXT, timeout INTERVAL, start TIMESTAMP DEFAULT current_timestamp ); CREATE INDEX locks_dav_name_idx ON locks(dav_name); CREATE TABLE property ( dav_name TEXT, property_name TEXT, property_value TEXT, changed_on TIMESTAMP DEFAULT current_timestamp, changed_by INT REFERENCES usr ( user_no ) ON UPDATE CASCADE ON DELETE SET DEFAULT, PRIMARY KEY ( dav_name, property_name ) ); CREATE INDEX properties_dav_name_idx ON property(dav_name); CREATE TABLE freebusy_ticket ( ticket_id TEXT NOT NULL PRIMARY KEY, user_no integer NOT NULL REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE, created timestamp with time zone DEFAULT current_timestamp NOT NULL ); CREATE or REPLACE FUNCTION sync_dav_id ( ) RETURNS TRIGGER AS $$ DECLARE BEGIN IF TG_OP = 'DELETE' THEN -- Just let the ON DELETE CASCADE handle this case RETURN OLD; END IF; IF NEW.dav_id IS NULL THEN NEW.dav_id = nextval('dav_id_seq'); END IF; IF TG_OP = 'UPDATE' THEN IF OLD.dav_id != NEW.dav_id OR OLD.collection_id != NEW.collection_id OR OLD.user_no != NEW.user_no OR OLD.dav_name != NEW.dav_name THEN UPDATE calendar_item SET dav_id = NEW.dav_id, user_no = NEW.user_no, collection_id = NEW.collection_id, dav_name = NEW.dav_name WHERE dav_name = OLD.dav_name OR dav_id = OLD.dav_id; END IF; RETURN NEW; END IF; UPDATE calendar_item SET dav_id = NEW.dav_id, user_no = NEW.user_no, collection_id = NEW.collection_id, dav_name = NEW.dav_name WHERE dav_name = NEW.dav_name OR dav_id = NEW.dav_id; RETURN NEW; END $$ LANGUAGE 'plpgsql'; CREATE TRIGGER caldav_data_sync_dav_id AFTER INSERT OR UPDATE ON caldav_data FOR EACH ROW EXECUTE PROCEDURE sync_dav_id(); -- Only needs SELECT access by website. CREATE TABLE principal_type ( principal_type_id SERIAL PRIMARY KEY, principal_type_desc TEXT ); -- web needs SELECT,INSERT,UPDATE,DELETE CREATE TABLE principal ( principal_id INT8 DEFAULT nextval('dav_id_seq') PRIMARY KEY, type_id INT8 NOT NULL REFERENCES principal_type(principal_type_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE, user_no INT8 NULL REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, displayname TEXT, default_privileges BIT(24) ); ALTER TABLE principal ADD CONSTRAINT unique_user UNIQUE (user_no); -- Allowing identification of group members. CREATE TABLE group_member ( group_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, member_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE ); CREATE UNIQUE INDEX group_member_pk ON group_member(group_id,member_id); CREATE INDEX group_member_sk ON group_member(member_id); CREATE TABLE grants ( by_principal INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, by_collection INT8 REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, to_principal INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE, privileges BIT(24), is_group BOOLEAN ) WITHOUT OIDS; CREATE UNIQUE INDEX grants_pk1 ON grants(by_principal,to_principal); CREATE UNIQUE INDEX grants_pk2 ON grants(by_collection,to_principal); CREATE TABLE sync_tokens ( sync_token SERIAL PRIMARY KEY, collection_id INT8 REFERENCES collection(collection_id) ON DELETE CASCADE ON UPDATE CASCADE, modification_time TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp ); CREATE TABLE sync_changes ( sync_time TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp, collection_id INT8 REFERENCES collection(collection_id) ON DELETE CASCADE ON UPDATE CASCADE, sync_status INT, dav_id INT8, -- can't REFERENCES calendar_item(dav_id) ON DELETE SET NULL ON UPDATE RESTRICT dav_name TEXT ); CREATE INDEX sync_processing_index ON sync_changes( collection_id, dav_id, sync_time ); -- Revision 1.2.7 endeth here. CREATE TABLE access_ticket ( ticket_id TEXT PRIMARY KEY, dav_owner_id INT8 NOT NULL REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE, privileges BIT(24), target_collection_id INT8 NOT NULL REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE, target_resource_id INT8 REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, expires TIMESTAMP ); -- At this point we only support binding collections CREATE TABLE dav_binding ( bind_id INT8 DEFAULT nextval('dav_id_seq') PRIMARY KEY, bound_source_id INT8 REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE, access_ticket_id TEXT REFERENCES access_ticket(ticket_id) ON UPDATE CASCADE ON DELETE SET NULL, dav_owner_id INT8 NOT NULL REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE, parent_container TEXT NOT NULL, dav_name TEXT UNIQUE NOT NULL, dav_displayname TEXT, external_url TEXT, type TEXT ); CREATE TABLE addressbook_resource ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE PRIMARY KEY, version TEXT, uid TEXT, nickname TEXT, fn TEXT, -- fullname n TEXT, -- Name Surname;First names note TEXT, org TEXT, url TEXT, fburl TEXT, caladruri TEXT, caluri TEXT ); CREATE TABLE addressbook_address_adr ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, box_no TEXT, unit_no TEXT, street_address TEXT, locality TEXT, region TEXT, postcode TEXT, country TEXT, property TEXT -- The full text of the property ); CREATE TABLE addressbook_address_tel ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, tel TEXT, property TEXT -- The full text of the property ); CREATE TABLE addressbook_address_email ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, email TEXT, property TEXT -- The full text of the property ); CREATE TABLE calendar_alarm ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, action TEXT, trigger TEXT, summary TEXT, description TEXT, next_trigger TIMESTAMP WITH TIME ZONE, component TEXT, -- The full text of the component trigger_state CHAR DEFAULT 'N' -- 'N' => 'New/Needs setting', 'A' = 'Active', 'O' = 'Old' ); CREATE TABLE calendar_attendee ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, status TEXT, partstat TEXT, cn TEXT, attendee TEXT, role TEXT, rsvp BOOLEAN, property TEXT, -- The full text of the property attendee_state TEXT, -- Internal DAViCal processing state weak_etag TEXT, -- The week_etag applying for this attendee state PRIMARY KEY ( dav_id, attendee ) ); CREATE or REPLACE FUNCTION real_path_exists( TEXT ) RETURNS BOOLEAN AS $$ DECLARE in_path ALIAS FOR $1; tmp BOOLEAN; BEGIN IF in_path = '/' THEN RETURN TRUE; END IF; IF in_path ~ '^/[^/]+/$' THEN SELECT TRUE INTO tmp FROM usr WHERE username = substring( in_path from 2 for length(in_path) - 2); IF FOUND THEN RETURN TRUE; END IF; ELSE IF in_path ~ '^/.*/$' THEN SELECT TRUE INTO tmp FROM collection WHERE dav_name = in_path; IF FOUND THEN RETURN TRUE; END IF; END IF; END IF; RETURN FALSE; END; $$ LANGUAGE plpgsql ; ALTER TABLE dav_binding ADD CONSTRAINT "dav_name_does_not_exist" CHECK (NOT real_path_exists(dav_name)); SELECT new_db_revision(1,2,11, 'Novembre' ); davical-1.1.1/dba/create-database.sh0000755000000000000000000001225711662676573014127 0ustar #!/bin/sh # # Build the DAViCal database # DBNAME="${1:-davical}" ADMINPW="${2}" DBADIR="`dirname \"$0\"`" INSTALL_NOTE_FN="`mktemp -t tmp.XXXXXXXXXX`" testawldir() { [ -f "${1}/dba/awl-tables.sql" ] } # # Attempt to locate the AWL directory AWLDIR="${DBADIR}/../../awl" if ! testawldir "${AWLDIR}"; then AWLDIR="/usr/share/awl" if ! testawldir "${AWLDIR}"; then AWLDIR="/usr/local/share/awl" if ! testawldir "${AWLDIR}"; then echo "Unable to find AWL libraries" exit 1 fi fi fi export AWL_DBAUSER=davical_dba export AWL_APPUSER=davical_app # Get the major version for PostgreSQL export DBVERSION="`psql -qXAt -c "SELECT version();" template1 | cut -f2 -d' ' | cut -f1-2 -d'.'`" install_note() { cat >>"${INSTALL_NOTE_FN}" } db_users() { psql -qXAt -c "SELECT usename FROM pg_user;" template1 } create_db_user() { if ! db_users | grep "^${1}$" >/dev/null ; then psql -qXAt -c "CREATE USER ${1} NOCREATEDB NOCREATEROLE;" template1 cat </dev/null; then createlang plpgsql "${DBNAME}" fi } try_db_user() { [ "XtestX`psql -U "${1}" -qXAt -c \"SELECT usename FROM pg_user;\" \"${DBNAME}\" 2>/dev/null`" != "XtestX" ] } # Hide all the annoying NOTICE... messages export PGOPTIONS='--client-min-messages=warning' create_db_user "${AWL_DBAUSER}" create_db_user "${AWL_APPUSER}" # FIXME: Need to check that the database was actually created. if ! createdb --encoding UTF8 --template template0 --owner "${AWL_DBAUSER}" "${DBNAME}" ; then echo "Unable to create database" exit 1 fi # # Try a few alternatives for a database user or give up... if try_db_user "${AWL_DBAUSER}" ; then export DBA="-U ${AWL_DBAUSER}" else if try_db_user "postgres" ; then export DBA="-U postgres" else if try_db_user "${USER}" ; then export DBA="" else if try_db_user "${PGUSER}" ; then export DBA="" else cat <&1 psql -qXAt ${DBA} -f "${AWLDIR}/dba/schema-management.sql" "${DBNAME}" 2>&1 # # Load the DAViCal tables psql -qXAt ${DBA} -f "${DBADIR}/davical.sql" "${DBNAME}" 2>&1 # # Set permissions for the application DB user on the database if ! ${DBADIR}/update-davical-database --dbname "${DBNAME}" --appuser "${AWL_APPUSER}" --nopatch --owner "${AWL_DBAUSER}" ; then cat < (1997 9:00 AM EDT)September 2-11 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=DAILY;COUNT=10' ); -- -- -------------------------------------------------------------------- -- Daily until December 24, 1997: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=DAILY;UNTIL=19971224T000000Z -- -- ==> (1997 9:00 AM EDT)September 2-30;October 1-25 -- (1997 9:00 AM EST)October 26-31;November 1-30;December 1-23 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=DAILY;UNTIL=19971224T000000' ); -- -- -------------------------------------------------------------------- -- Every other day - forever: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=DAILY;INTERVAL=2 -- ==> (1997 9:00 AM EDT)September2,4,6,8...24,26,28,30; -- October 2,4,6...20,22,24 -- (1997 9:00 AM EST)October 26,28,30;November 1,3,5,7...25,27,29; -- Dec 1,3,... -- --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=DAILY;INTERVAL=2' ) LIMIT 50; -- -------------------------------------------------------------------- -- Every 10 days, 5 occurrences: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5 -- -- ==> (1997 9:00 AM EDT)September 2,12,22;October 2,12 -- --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=DAILY;INTERVAL=10;COUNT=5' ); -- -------------------------------------------------------------------- -- Everyday in January, for 3 years: -- -- DTSTART;TZID=US-Eastern:19980101T090000 -- RRULE:FREQ=YEARLY;UNTIL=20000131T090000Z; -- BYMONTH=1;BYDAY=SU,MO,TU,WE,TH,FR,SA -- or -- RRULE:FREQ=DAILY;UNTIL=20000131T090000Z;BYMONTH=1 -- -- ==> (1998 9:00 AM EDT)January 1-31 -- (1999 9:00 AM EDT)January 1-31 -- (2000 9:00 AM EDT)January 1-31 -- --- ? No instance on January 31, since 9:00am EDT is after 2000-01-31 09:00:00 UTC. I think that is correct. --- ? SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19980101T090000', 'FREQ=YEARLY;UNTIL=20000131T090000Z;BYMONTH=1;BYDAY=SU,MO,TU,WE,TH,FR,SA' ); --- ? No instance on January 31, since 9:00am EDT is after 2000-01-31 09:00:00 UTC. I think that is correct. --- ? SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19980101T090000', 'FREQ=DAILY;UNTIL=20000131T090000Z;BYMONTH=1' ); -- -------------------------------------------------------------------- -- Weekly for 10 occurrences -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=WEEKLY;COUNT=10 -- -- ==> (1997 9:00 AM EDT)September 2,9,16,23,30;October 7,14,21 -- (1997 9:00 AM EST)October 28;November 4 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=WEEKLY;COUNT=10' ); -- -- -------------------------------------------------------------------- -- Weekly until December 24, 1997 -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=WEEKLY;UNTIL=19971224T000000Z -- -- ==> (1997 9:00 AM EDT)September 2,9,16,23,30;October 7,14,21 -- (1997 9:00 AM EST)October 28;November 4,11,18,25; -- December 2,9,16,23 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=WEEKLY;UNTIL=19971224T000000Z' ); -- -- -------------------------------------------------------------------- -- Every other week - forever: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=WEEKLY;INTERVAL=2;WKST=SU -- -- ==> (1997 9:00 AM EDT)September 2,16,30;October 14 -- (1997 9:00 AM EST)October 28;November 11,25;December 9,23 -- (1998 9:00 AM EST)January 6,20;February 3, 17 -- ... --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=WEEKLY;INTERVAL=2;WKST=SU' ) LIMIT 13; -- -- -------------------------------------------------------------------- -- Weekly on Tuesday and Thursday for 5 weeks: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH -- or -- RRULE:FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH -- -- ==> (1997 9:00 AM EDT)September 2,4,9,11,16,18,23,25,30;October 2 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH' ); --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH' ); -- -- -------------------------------------------------------------------- -- Every other week on Monday, Wednesday and Friday until December 24, -- 1997, but starting on Tuesday, September 2, 1997: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU; -- BYDAY=MO,WE,FR -- ==> (1997 9:00 AM EDT)September 2,3,5,15,17,19,29;October -- 1,3,13,15,17 -- (1997 9:00 AM EST)October 27,29,31;November 10,12,14,24,26,28; -- December 8,10,12,22 -- !!! This is challenging, because it starts on DTSTART even though DTSTART fails the repeat criteria. In fact no known provide a UI that allows data like this to be created. --- !!! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;BYDAY=MO,WE,FR' ); -- -- -------------------------------------------------------------------- -- Every other week on Tuesday and Thursday, for 8 occurrences: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH -- -- ==> (1997 9:00 AM EDT)September 2,4,16,18,30;October 2,14,16 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH' ); -- -- -------------------------------------------------------------------- -- Monthly on the 1st Friday for ten occurrences: -- -- DTSTART;TZID=US-Eastern:19970905T090000 -- RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR -- -- ==> (1997 9:00 AM EDT)September 5;October 3 -- (1997 9:00 AM EST)November 7;Dec 5 -- (1998 9:00 AM EST)January 2;February 6;March 6;April 3 -- (1998 9:00 AM EDT)May 1;June 5 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970905T090000', 'FREQ=MONTHLY;COUNT=10;BYDAY=1FR' ); -- -- -------------------------------------------------------------------- -- Monthly on the 1st Friday until December 24, 1997: -- -- DTSTART;TZID=US-Eastern:19970905T090000 -- RRULE:FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR -- -- ==> (1997 9:00 AM EDT)September 5;October 3 -- (1997 9:00 AM EST)November 7;December 5 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970905T090000', 'FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR' ); -- -- -------------------------------------------------------------------- -- Every other month on the 1st and last Sunday of the month for 10 -- occurrences: -- -- DTSTART;TZID=US-Eastern:19970907T090000 -- RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU -- -- ==> (1997 9:00 AM EDT)September 7,28 -- (1997 9:00 AM EST)November 2,30 -- (1998 9:00 AM EST)January 4,25;March 1,29 -- (1998 9:00 AM EDT)May 3,31 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970907T090000', 'FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU' ); -- -- -------------------------------------------------------------------- -- Monthly on the second to last Monday of the month for 6 months: -- -- DTSTART;TZID=US-Eastern:19970922T090000 -- RRULE:FREQ=MONTHLY;COUNT=6;BYDAY=-2MO -- -- ==> (1997 9:00 AM EDT)September 22;October 20 -- (1997 9:00 AM EST)November 17;December 22 -- (1998 9:00 AM EST)January 19;February 16 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=MONTHLY;COUNT=6;BYDAY=-2MO' ); -- -- -------------------------------------------------------------------- -- Monthly on the third to the last day of the month, forever: -- -- DTSTART;TZID=US-Eastern:19970928T090000 -- RRULE:FREQ=MONTHLY;BYMONTHDAY=-3 -- -- ==> (1997 9:00 AM EDT)September 28 -- (1997 9:00 AM EST)October 29;November 28;December 29 -- (1998 9:00 AM EST)January 29;February 26 -- ... --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=MONTHLY;BYMONTHDAY=-3' ) LIMIT 6; -- -- -------------------------------------------------------------------- -- Monthly on the 2nd and 15th of the month for 10 occurrences: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15 -- -- ==> (1997 9:00 AM EDT)September 2,15;October 2,15 -- (1997 9:00 AM EST)November 2,15;December 2,15 -- (1998 9:00 AM EST)January 2,15 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15' ); -- -- -------------------------------------------------------------------- -- Monthly on the first and last day of the month for 10 occurrences: -- -- DTSTART;TZID=US-Eastern:19970930T090000 -- RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1 -- -- ==> (1997 9:00 AM EDT)September 30;October 1 -- (1997 9:00 AM EST)October 31;November 1,30;December 1,31 -- (1998 9:00 AM EST)January 1,31;February 1 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970930T090000', 'FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1' ); -- -- -------------------------------------------------------------------- -- Every 18 months on the 10th thru 15th of the month for 10 -- occurrences: -- -- DTSTART;TZID=US-Eastern:19970910T090000 -- RRULE:FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14, -- 15 -- -- ==> (1997 9:00 AM EDT)September 10,11,12,13,14,15 -- (1999 9:00 AM EST)March 10,11,12,13 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970910T090000', 'FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14,15' ); -- -- -------------------------------------------------------------------- -- Every Tuesday, every other month: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=MONTHLY;INTERVAL=2;BYDAY=TU -- -- ==> (1997 9:00 AM EDT)September 2,9,16,23,30 -- (1997 9:00 AM EST)November 4,11,18,25 -- (1998 9:00 AM EST)January 6,13,20,27;March 3,10,17,24,31 -- ... --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=MONTHLY;INTERVAL=2;BYDAY=TU' ) LIMIT 18; -- -- -------------------------------------------------------------------- -- Yearly in June and July for 10 occurrences: -- -- DTSTART;TZID=US-Eastern:19970610T090000 -- RRULE:FREQ=YEARLY;COUNT=10;BYMONTH=6,7 -- ==> (1997 9:00 AM EDT)June 10;July 10 -- (1998 9:00 AM EDT)June 10;July 10 -- (1999 9:00 AM EDT)June 10;July 10 -- (2000 9:00 AM EDT)June 10;July 10 -- (2001 9:00 AM EDT)June 10;July 10 -- Note: Since none of the BYDAY, BYMONTHDAY or BYYEARDAY components -- are specified, the day is gotten from DTSTART --- !!! We miss the first instance in June. Busted. --- !!! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970610T090000', 'FREQ=YEARLY;COUNT=10;BYMONTH=6,7' ); -- -- -------------------------------------------------------------------- -- Every other year on January, February, and March for 10 occurrences: -- -- DTSTART;TZID=US-Eastern:19970310T090000 -- RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3 -- -- ==> (1997 9:00 AM EST)March 10 -- (1999 9:00 AM EST)January 10;February 10;March 10 -- (2001 9:00 AM EST)January 10;February 10;March 10 -- (2003 9:00 AM EST)January 10;February 10;March 10 --- !!! We miss the first instance in March. Busted. --- !!! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970310T090000', 'FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3' ); -- -- -------------------------------------------------------------------- -- Every 3rd year on the 1st, 100th and 200th day for 10 occurrences: -- -- DTSTART;TZID=US-Eastern:19970101T090000 -- RRULE:FREQ=YEARLY;INTERVAL=3;COUNT=10;BYYEARDAY=1,100,200 -- -- ==> (1997 9:00 AM EST)January 1 -- (1997 9:00 AM EDT)April 10;July 19 -- (2000 9:00 AM EST)January 1 -- (2000 9:00 AM EDT)April 9;July 18 -- (2003 9:00 AM EST)January 1 -- (2003 9:00 AM EDT)April 10;July 19 -- (2006 9:00 AM EST)January 1 --- ! We don't support BYYEARDAY yet. --- ! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970101T090000', 'FREQ=YEARLY;INTERVAL=3;COUNT=10;BYYEARDAY=1,100,200' ); -- -- -------------------------------------------------------------------- -- Every 20th Monday of the year, forever: -- DTSTART;TZID=US-Eastern:19970519T090000 -- RRULE:FREQ=YEARLY;BYDAY=20MO -- -- ==> (1997 9:00 AM EDT)May 19 -- (1998 9:00 AM EDT)May 18 -- (1999 9:00 AM EDT)May 17 -- ... --- ! We don't support BYDAY for yearly events. We don't support YEARLY at all well, TBH --- ! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970519T090000', 'FREQ=YEARLY;BYDAY=20MO' ) LIMIT 3; -- -- -------------------------------------------------------------------- -- Monday of week number 20 (where the default start of the week is -- Monday), forever: -- -- DTSTART;TZID=US-Eastern:19970512T090000 -- RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO -- -- ==> (1997 9:00 AM EDT)May 12 -- (1998 9:00 AM EDT)May 11 -- (1999 9:00 AM EDT)May 17 -- ... --- ! We don't support BYWEEKNO at all yet. --- ! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970512T090000', 'FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO' ) LIMIT 3; -- -- -------------------------------------------------------------------- -- Every Thursday in March, forever: -- -- DTSTART;TZID=US-Eastern:19970313T090000 -- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=TH -- -- ==> (1997 9:00 AM EST)March 13,20,27 -- (1998 9:00 AM EST)March 5,12,19,26 -- (1999 9:00 AM EST)March 4,11,18,25 -- ... --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970313T090000', 'FREQ=YEARLY;BYMONTH=3;BYDAY=TH' ) LIMIT 11; -- -- -------------------------------------------------------------------- -- Every Thursday, but only during June, July, and August, forever: -- -- DTSTART;TZID=US-Eastern:19970605T090000 -- RRULE:FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8 -- -- ==> (1997 9:00 AM EDT)June 5,12,19,26;July 3,10,17,24,31; -- August 7,14,21,28 -- (1998 9:00 AM EDT)June 4,11,18,25;July 2,9,16,23,30; -- August 6,13,20,27 -- (1999 9:00 AM EDT)June 3,10,17,24;July 1,8,15,22,29; -- August 5,12,19,26 -- ... --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970605T090000', 'FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8' ) LIMIT 39; -- -- -------------------------------------------------------------------- -- Every Friday the 13th, forever: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- EXDATE;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13 -- -- ==> (1998 9:00 AM EST)February 13;March 13;November 13 -- (1999 9:00 AM EDT)August 13 -- (2000 9:00 AM EDT)October 13 -- ... --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13' ) LIMIT 35; -- -- -------------------------------------------------------------------- -- The first Saturday that follows the first Sunday of the month, -- forever: -- -- DTSTART;TZID=US-Eastern:19970913T090000 -- RRULE:FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13 -- -- ==> (1997 9:00 AM EDT)September 13;October 11 -- (1997 9:00 AM EST)November 8;December 13 -- (1998 9:00 AM EST)January 10;February 7;March 7 -- (1998 9:00 AM EDT)April 11;May 9;June 13... -- ... --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970913T090000', 'FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13' ) LIMIT 10; -- -- -------------------------------------------------------------------- -- Every four years, the first Tuesday after a Monday in November, -- forever (U.S. Presidential Election day): -- -- DTSTART;TZID=US-Eastern:19961105T090000 -- RRULE:FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;BYMONTHDAY=2,3,4, -- 5,6,7,8 -- -- ==> (1996 9:00 AM EST)November 5 -- (2000 9:00 AM EST)November 7 -- (2004 9:00 AM EST)November 2 -- ... --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19961105T090000', 'FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;BYMONTHDAY=2,3,4,5,6,7,8' ) LIMIT 6; -- -- -------------------------------------------------------------------- -- The 3rd instance into the month of one of Tuesday, Wednesday or -- Thursday, for the next 3 months: -- -- DTSTART;TZID=US-Eastern:19970904T090000 -- RRULE:FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3 -- -- ==> (1997 9:00 AM EDT)September 4;October 7 -- (1997 9:00 AM EST)November 6 --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970904T090000', 'FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3' ); -- -- -------------------------------------------------------------------- -- The 2nd to last weekday of the month: -- -- DTSTART;TZID=US-Eastern:19970929T090000 -- RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2 -- -- ==> (1997 9:00 AM EDT)September 29 -- (1997 9:00 AM EST)October 30;November 27;December 30 -- (1998 9:00 AM EST)January 29;February 26;March 30 -- ... --- SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970929T090000', 'FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2' ) LIMIT 8; -- -- -------------------------------------------------------------------- -- Every 3 hours from 9:00 AM to 5:00 PM on a specific day: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=HOURLY;INTERVAL=3;UNTIL=19970902T170000Z -- -- ==> (September 2, 1997 EDT)09:00,12:00,15:00 --- !! FREQ=HOURLY Not implemented --- !! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=HOURLY;INTERVAL=3;UNTIL=19970902T170000Z' ); -- -- -------------------------------------------------------------------- -- Every 15 minutes for 6 occurrences: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=MINUTELY;INTERVAL=15;COUNT=6 -- -- ==> (September 2, 1997 EDT)09:00,09:15,09:30,09:45,10:00,10:15 --- !! FREQ=MINUTELY Not implemented --- !! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('', '' ); -- -- -------------------------------------------------------------------- -- Every hour and a half for 4 occurrences: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=MINUTELY;INTERVAL=90;COUNT=4 -- -- ==> (September 2, 1997 EDT)09:00,10:30;12:00;13:30 --- !! FREQ=HOURLY Not implemented --- !! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('', '' ); -- -- -------------------------------------------------------------------- -- Every 20 minutes from 9:00 AM to 4:40 PM every day: -- -- DTSTART;TZID=US-Eastern:19970902T090000 -- RRULE:FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40 -- or -- RRULE:FREQ=MINUTELY;INTERVAL=20;BYHOUR=9,10,11,12,13,14,15,16 -- -- ==> (September 2, 1997 EDT)9:00,9:20,9:40,10:00,10:20, -- ... 16:00,16:20,16:40 -- (September 3, 1997 EDT)9:00,9:20,9:40,10:00,10:20, -- ...16:00,16:20,16:40 -- ... --- !! FREQ=MINUTELY and/or BYHOUR Not implemented --- !! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970902T090000', 'FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40' ) LIMIT 500; -- -- -------------------------------------------------------------------- -- An example where the days generated makes a difference because of -- WKST: -- -- DTSTART;TZID=US-Eastern:19970805T090000 -- RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO -- -- ==> (1997 EDT)Aug 5,10,19,24 -- -- changing only WKST from MO to SU, yields different results... -- -- DTSTART;TZID=US-Eastern:19970805T090000 -- RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU -- ==> (1997 EDT)August 5,17,19,31 -- --- !! WKST Not implemented. The second one works fine because WKST == SU in all our code. --- !! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970805T090000', 'FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO' ); --- !! SET timezone TO 'US/Eastern'; SELECT * FROM event_instances('19970805T090000', 'FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU' ); --davical-1.1.1/dba/rrule_functions.sql0000644000000000000000000006305311732473153014510 0ustar /** * PostgreSQL Functions for RRULE handling * * @package rscds * @subpackage database * @author Andrew McMillan * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later * * Coverage of this function set * - COUNT & UNTIL are handled, generally * - DAILY frequency, including BYDAY, BYMONTH, BYMONTHDAY, BYWEEKNO, BYMONTHDAY * - WEEKLY frequency, including BYDAY, BYMONTH, BYMONTHDAY, BYWEEKNO, BYSETPOS * - MONTHLY frequency, including BYDAY, BYMONTH, BYSETPOS * - YEARLY frequency, including BYMONTH, BYMONTHDAY, BYSETPOS, BYDAY * * Not covered as yet * - DAILY: BYYEARDAY, BYSETPOS* * - WEEKLY: BYYEARDAY * - MONTHLY: BYYEARDAY, BYMONTHDAY, BYWEEKNO * - YEARLY: BYYEARDAY * - SECONDLY * - MINUTELY * - HOURLY * */ -- Create a composite type for the parts of the RRULE. DROP TYPE rrule_parts CASCADE; CREATE TYPE rrule_parts AS ( base TIMESTAMP WITH TIME ZONE, until TIMESTAMP WITH TIME ZONE, freq TEXT, count INT, interval INT, bysecond INT[], byminute INT[], byhour INT[], bymonthday INT[], byyearday INT[], byweekno INT[], byday TEXT[], bymonth INT[], bysetpos INT[], wkst TEXT ); -- Create a function to parse the RRULE into it's composite type CREATE or REPLACE FUNCTION parse_rrule_parts( TIMESTAMP WITH TIME ZONE, TEXT ) RETURNS rrule_parts AS $$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; result rrule_parts%ROWTYPE; tempstr TEXT; BEGIN result.base := basedate; result.until := substring(repeatrule from 'UNTIL=([0-9TZ]+)(;|$)'); result.freq := substring(repeatrule from 'FREQ=([A-Z]+)(;|$)'); result.count := substring(repeatrule from 'COUNT=([0-9]+)(;|$)'); result.interval := COALESCE(substring(repeatrule from 'INTERVAL=([0-9]+)(;|$)')::int, 1); result.wkst := substring(repeatrule from 'WKST=(MO|TU|WE|TH|FR|SA|SU)(;|$)'); result.byday := string_to_array( substring(repeatrule from 'BYDAY=(([+-]?[0-9]{0,2}(MO|TU|WE|TH|FR|SA|SU),?)+)(;|$)'), ','); result.byyearday := string_to_array(substring(repeatrule from 'BYYEARDAY=([0-9,+-]+)(;|$)'), ','); result.byweekno := string_to_array(substring(repeatrule from 'BYWEEKNO=([0-9,+-]+)(;|$)'), ','); result.bymonthday := string_to_array(substring(repeatrule from 'BYMONTHDAY=([0-9,+-]+)(;|$)'), ','); result.bymonth := string_to_array(substring(repeatrule from 'BYMONTH=(([+-]?[0-1]?[0-9],?)+)(;|$)'), ','); result.bysetpos := string_to_array(substring(repeatrule from 'BYSETPOS=(([+-]?[0-9]{1,3},?)+)(;|$)'), ','); result.bysecond := string_to_array(substring(repeatrule from 'BYSECOND=([0-9,]+)(;|$)'), ','); result.byminute := string_to_array(substring(repeatrule from 'BYMINUTE=([0-9,]+)(;|$)'), ','); result.byhour := string_to_array(substring(repeatrule from 'BYHOUR=([0-9,]+)(;|$)'), ','); RETURN result; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Return a SETOF dates within the month of a particular date which match a string of BYDAY rule specifications CREATE or REPLACE FUNCTION rrule_month_byday_set( TIMESTAMP WITH TIME ZONE, TEXT[] ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE in_time ALIAS FOR $1; byday ALIAS FOR $2; dayrule TEXT; i INT; dow INT; index INT; first_dow INT; each_day TIMESTAMP WITH TIME ZONE; this_month INT; results TIMESTAMP WITH TIME ZONE[]; BEGIN IF byday IS NULL THEN -- We still return the single date as a SET RETURN NEXT in_time; RETURN; END IF; i := 1; dayrule := byday[i]; WHILE dayrule IS NOT NULL LOOP dow := position(substring( dayrule from '..$') in 'SUMOTUWETHFRSA') / 2; each_day := date_trunc( 'month', in_time ) + (in_time::time)::interval; this_month := date_part( 'month', in_time ); first_dow := date_part( 'dow', each_day ); -- Coerce each_day to be the first 'dow' of the month each_day := each_day - ( first_dow::text || 'days')::interval + ( dow::text || 'days')::interval + CASE WHEN dow < first_dow THEN '1 week'::interval ELSE '0s'::interval END; -- RAISE NOTICE 'From "%", for % finding dates. dow=%, this_month=%, first_dow=%', each_day, dayrule, dow, this_month, first_dow; IF length(dayrule) > 2 THEN index := (substring(dayrule from '^[0-9-]+'))::int; IF index = 0 THEN RAISE NOTICE 'Ignored invalid BYDAY rule part "%".', bydayrule; ELSIF index > 0 THEN -- The simplest case, such as 2MO for the second monday each_day := each_day + ((index - 1)::text || ' weeks')::interval; ELSE each_day := each_day + '5 weeks'::interval; WHILE date_part('month', each_day) != this_month LOOP each_day := each_day - '1 week'::interval; END LOOP; -- Note that since index is negative, (-2 + 1) == -1, for example index := index + 1; IF index < 0 THEN each_day := each_day + (index::text || ' weeks')::interval ; END IF; END IF; -- Sometimes (e.g. 5TU or -5WE) there might be no such date in some months IF date_part('month', each_day) = this_month THEN results[date_part('day',each_day)] := each_day; -- RAISE NOTICE 'Added "%" to list for %', each_day, dayrule; END IF; ELSE -- Return all such days that are within the given month WHILE date_part('month', each_day) = this_month LOOP results[date_part('day',each_day)] := each_day; each_day := each_day + '1 week'::interval; -- RAISE NOTICE 'Added "%" to list for %', each_day, dayrule; END LOOP; END IF; i := i + 1; dayrule := byday[i]; END LOOP; FOR i IN 1..31 LOOP IF results[i] IS NOT NULL THEN RETURN NEXT results[i]; END IF; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Return a SETOF dates within the month of a particular date which match a string of BYDAY rule specifications CREATE or REPLACE FUNCTION rrule_month_bymonthday_set( TIMESTAMP WITH TIME ZONE, INT[] ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE in_time ALIAS FOR $1; bymonthday ALIAS FOR $2; month_start TIMESTAMP WITH TIME ZONE; daysinmonth INT; i INT; BEGIN month_start := date_trunc( 'month', in_time ) + (in_time::time)::interval; daysinmonth := date_part( 'days', (month_start + interval '1 month') - interval '1 day' ); FOR i IN 1..31 LOOP EXIT WHEN bymonthday[i] IS NULL; CONTINUE WHEN bymonthday[i] > daysinmonth; CONTINUE WHEN bymonthday[i] < (-1 * daysinmonth); IF bymonthday[i] > 0 THEN RETURN NEXT month_start + ((bymonthday[i] - 1)::text || 'days')::interval; ELSIF bymonthday[i] < 0 THEN RETURN NEXT month_start + ((daysinmonth + bymonthday[i])::text || 'days')::interval; ELSE RAISE NOTICE 'Ignored invalid BYMONTHDAY part "%".', bymonthday[i]; END IF; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Return a SETOF dates within the week of a particular date which match a single BYDAY rule specification CREATE or REPLACE FUNCTION rrule_week_byday_set( TIMESTAMP WITH TIME ZONE, TEXT[] ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE in_time ALIAS FOR $1; byday ALIAS FOR $2; dayrule TEXT; dow INT; our_day TIMESTAMP WITH TIME ZONE; i INT; BEGIN IF byday IS NULL THEN -- We still return the single date as a SET RETURN NEXT in_time; RETURN; END IF; our_day := date_trunc( 'week', in_time ) + (in_time::time)::interval; i := 1; dayrule := byday[i]; WHILE dayrule IS NOT NULL LOOP dow := position(dayrule in 'SUMOTUWETHFRSA') / 2; RETURN NEXT our_day + ((dow - 1)::text || 'days')::interval; i := i + 1; dayrule := byday[i]; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE or REPLACE FUNCTION event_has_exceptions( TEXT ) RETURNS BOOLEAN AS $$ SELECT $1 ~ E'\nRECURRENCE-ID(;TZID=[^:]+)?:[[:space:]]*[[:digit:]]{8}(T[[:digit:]]{6})?' $$ LANGUAGE 'sql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Test the weekday of this date against the array of weekdays from the BYDAY rule (FREQ=WEEKLY or less) ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION test_byday_rule( TIMESTAMP WITH TIME ZONE, TEXT[] ) RETURNS BOOLEAN AS $$ DECLARE testme ALIAS FOR $1; byday ALIAS FOR $2; BEGIN -- Note that this doesn't work for MONTHLY/YEARLY BYDAY clauses which might have numbers prepended -- so don't call it that way... IF byday IS NOT NULL THEN RETURN ( substring( to_char( testme, 'DY') for 2 from 1) = ANY (byday) ); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Test the month of this date against the array of months from the rule ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION test_bymonth_rule( TIMESTAMP WITH TIME ZONE, INT[] ) RETURNS BOOLEAN AS $$ DECLARE testme ALIAS FOR $1; bymonth ALIAS FOR $2; BEGIN IF bymonth IS NOT NULL THEN RETURN ( date_part( 'month', testme) = ANY (bymonth) ); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Test the day in month of this date against the array of monthdays from the rule ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION test_bymonthday_rule( TIMESTAMP WITH TIME ZONE, INT[] ) RETURNS BOOLEAN AS $$ DECLARE testme ALIAS FOR $1; bymonthday ALIAS FOR $2; BEGIN IF bymonthday IS NOT NULL THEN RETURN ( date_part( 'day', testme) = ANY (bymonthday) ); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Test the day in year of this date against the array of yeardays from the rule ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION test_byyearday_rule( TIMESTAMP WITH TIME ZONE, INT[] ) RETURNS BOOLEAN AS $$ DECLARE testme ALIAS FOR $1; byyearday ALIAS FOR $2; BEGIN IF byyearday IS NOT NULL THEN RETURN ( date_part( 'doy', testme) = ANY (byyearday) ); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Given a cursor into a set, process the set returning the subset matching the BYSETPOS -- -- Note that this function *requires* PostgreSQL 8.3 or later for the cursor handling syntax -- to work. I guess we could do it with an array, instead, for compatibility with earlier -- releases, since there's a maximum of 366 positions in a set. ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION rrule_bysetpos_filter( REFCURSOR, INT[] ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE curse ALIAS FOR $1; bysetpos ALIAS FOR $2; valid_date TIMESTAMP WITH TIME ZONE; i INT; BEGIN IF bysetpos IS NULL THEN LOOP FETCH curse INTO valid_date; EXIT WHEN NOT FOUND; RETURN NEXT valid_date; END LOOP; ELSE FOR i IN 1..366 LOOP EXIT WHEN bysetpos[i] IS NULL; IF bysetpos[i] > 0 THEN FETCH ABSOLUTE bysetpos[i] FROM curse INTO valid_date; ELSE MOVE LAST IN curse; FETCH RELATIVE (bysetpos[i] + 1) FROM curse INTO valid_date; END IF; IF valid_date IS NOT NULL THEN RETURN NEXT valid_date; END IF; END LOOP; END IF; CLOSE curse; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ------------------------------------------------------------------------------------------------------ -- Return another day's worth of events: i.e. one day that matches the criteria, since we don't -- currently implement sub-day scheduling. -- -- This is cheeky: The incrementing by a day is done outside the call, so we either return the -- empty set (if the input date fails our filters) or we return a set containing the input date. ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION daily_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; BEGIN IF rrule.bymonth IS NOT NULL AND NOT date_part('month',after) = ANY ( rrule.bymonth ) THEN RETURN; END IF; IF rrule.byweekno IS NOT NULL AND NOT date_part('week',after) = ANY ( rrule.byweekno ) THEN RETURN; END IF; IF rrule.byyearday IS NOT NULL AND NOT date_part('doy',after) = ANY ( rrule.byyearday ) THEN RETURN; END IF; IF rrule.bymonthday IS NOT NULL AND NOT date_part('day',after) = ANY ( rrule.bymonthday ) THEN RETURN; END IF; IF rrule.byday IS NOT NULL AND NOT substring( to_char( after, 'DY') for 2 from 1) = ANY ( rrule.byday ) THEN RETURN; END IF; -- Since we don't do BYHOUR, BYMINUTE or BYSECOND yet this becomes a trivial RETURN NEXT after; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Return another week's worth of events -- -- Doesn't handle truly obscure and unlikely stuff like BYWEEKNO=5;BYMONTH=1;BYDAY=WE,TH,FR;BYSETPOS=-2 -- Imagine that. ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION weekly_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; valid_date TIMESTAMP WITH TIME ZONE; curse REFCURSOR; weekno INT; i INT; BEGIN IF rrule.byweekno IS NOT NULL THEN weekno := date_part('week',after); IF NOT weekno = ANY ( rrule.byweekno ) THEN RETURN; END IF; END IF; OPEN curse SCROLL FOR SELECT r FROM rrule_week_byday_set(after, rrule.byday ) r; RETURN QUERY SELECT d FROM rrule_bysetpos_filter(curse,rrule.bysetpos) d; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Return another month's worth of events ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION monthly_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; valid_date TIMESTAMP WITH TIME ZONE; curse REFCURSOR; setpos INT; i INT; BEGIN /** * Need to investigate whether it is legal to set both of these, and whether * we are correct to UNION the results, or whether we should INTERSECT them. * So at this point, we refer to the specification, which grants us this * wonderfully enlightening vision: * * If multiple BYxxx rule parts are specified, then after evaluating the * specified FREQ and INTERVAL rule parts, the BYxxx rule parts are * applied to the current set of evaluated occurrences in the following * order: BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY, BYHOUR, * BYMINUTE, BYSECOND and BYSETPOS; then COUNT and UNTIL are evaluated. * * My guess is that this means 'INTERSECT' */ IF rrule.byday IS NOT NULL AND rrule.bymonthday IS NOT NULL THEN OPEN curse SCROLL FOR SELECT r FROM rrule_month_byday_set(after, rrule.byday ) r INTERSECT SELECT r FROM rrule_month_bymonthday_set(after, rrule.bymonthday ) r ORDER BY 1; ELSIF rrule.bymonthday IS NOT NULL THEN OPEN curse SCROLL FOR SELECT r FROM rrule_month_bymonthday_set(after, rrule.bymonthday ) r ORDER BY 1; ELSE OPEN curse SCROLL FOR SELECT r FROM rrule_month_byday_set(after, rrule.byday ) r ORDER BY 1; END IF; RETURN QUERY SELECT d FROM rrule_bysetpos_filter(curse,rrule.bysetpos) d; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- If this is YEARLY;BYMONTH, abuse MONTHLY;BYMONTH for everything except the BYSETPOS ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION rrule_yearly_bymonth_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; current_base TIMESTAMP WITH TIME ZONE; rr rrule_parts; i INT; BEGIN IF rrule.bymonth IS NOT NULL THEN -- Ensure we don't pass BYSETPOS down rr := rrule; rr.bysetpos := NULL; FOR i IN 1..12 LOOP EXIT WHEN rr.bymonth[i] IS NULL; current_base := date_trunc( 'year', after ) + ((rr.bymonth[i] - 1)::text || ' months')::interval + (after::time)::interval; RETURN QUERY SELECT r FROM monthly_set(current_base,rr) r; END LOOP; ELSE -- We don't yet implement byweekno, byblah RETURN NEXT after; END IF; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Return another year's worth of events ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION yearly_set( TIMESTAMP WITH TIME ZONE, rrule_parts ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; current_base TIMESTAMP WITH TIME ZONE; curse REFCURSOR; curser REFCURSOR; i INT; BEGIN IF rrule.bymonth IS NOT NULL THEN OPEN curse SCROLL FOR SELECT r FROM rrule_yearly_bymonth_set(after, rrule ) r; FOR current_base IN SELECT d FROM rrule_bysetpos_filter(curse,rrule.bysetpos) d LOOP current_base := date_trunc( 'day', current_base ) + (after::time)::interval; RETURN NEXT current_base; END LOOP; ELSE -- We don't yet implement byweekno, byblah RETURN NEXT after; END IF; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- Combine all of that into something which we can use to generate a series from an arbitrary DTSTART/RRULE ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION rrule_event_instances_range( TIMESTAMP WITH TIME ZONE, TEXT, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH TIME ZONE, INT ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; mindate ALIAS FOR $3; maxdate ALIAS FOR $4; max_count ALIAS FOR $5; loopmax INT; loopcount INT; base_day TIMESTAMP WITH TIME ZONE; current_base TIMESTAMP WITH TIME ZONE; current TIMESTAMP WITH TIME ZONE; rrule rrule_parts%ROWTYPE; BEGIN loopcount := 0; SELECT * INTO rrule FROM parse_rrule_parts( basedate, repeatrule ); IF rrule.count IS NOT NULL THEN loopmax := rrule.count; ELSE -- max_count is pretty arbitrary, so we scale it somewhat here depending on the frequency. IF rrule.freq = 'DAILY' THEN loopmax := max_count * 20; ELSIF rrule.freq = 'WEEKLY' THEN loopmax := max_count * 10; ELSE loopmax := max_count; END IF; END IF; current_base := basedate; base_day := date_trunc('day',basedate); WHILE loopcount < loopmax AND current_base <= maxdate LOOP IF rrule.freq = 'DAILY' THEN FOR current IN SELECT d FROM daily_set(current_base,rrule) d WHERE d >= base_day LOOP -- IF test_byday_rule(current,rrule.byday) AND test_bymonthday_rule(current,rrule.bymonthday) AND test_bymonth_rule(current,rrule.bymonth) THEN EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; -- END IF; END LOOP; current_base := current_base + (rrule.interval::text || ' days')::interval; ELSIF rrule.freq = 'WEEKLY' THEN FOR current IN SELECT w FROM weekly_set(current_base,rrule) w WHERE w >= base_day LOOP IF test_byyearday_rule(current,rrule.byyearday) AND test_bymonthday_rule(current,rrule.bymonthday) AND test_bymonth_rule(current,rrule.bymonth) THEN EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; END IF; END LOOP; current_base := current_base + (rrule.interval::text || ' weeks')::interval; ELSIF rrule.freq = 'MONTHLY' THEN FOR current IN SELECT m FROM monthly_set(current_base,rrule) m WHERE m >= base_day LOOP -- IF /* test_byyearday_rule(current,rrule.byyearday) -- AND */ test_bymonth_rule(current,rrule.bymonth) -- THEN EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; -- END IF; END LOOP; current_base := current_base + (rrule.interval::text || ' months')::interval; ELSIF rrule.freq = 'YEARLY' THEN FOR current IN SELECT y FROM yearly_set(current_base,rrule) y WHERE y >= base_day LOOP EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; END LOOP; current_base := current_base + (rrule.interval::text || ' years')::interval; ELSE RAISE NOTICE 'A frequency of "%" is not handled', rrule.freq; RETURN; END IF; EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; END LOOP; -- RETURN QUERY; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- A simplified DTSTART/RRULE only interface which applies some performance assumptions ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION event_instances( TIMESTAMP WITH TIME ZONE, TEXT ) RETURNS SETOF TIMESTAMP WITH TIME ZONE AS $$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; maxdate TIMESTAMP WITH TIME ZONE; BEGIN maxdate := current_date + '10 years'::interval; RETURN QUERY SELECT d FROM rrule_event_instances_range( basedate, repeatrule, basedate, maxdate, 300 ) d; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------------------------------------------ -- In most cases we just want to know if there *is* an event overlapping the range, so we have a -- specific function for that. Note that this is *not* strict, and can be called with NULLs. ------------------------------------------------------------------------------------------------------ CREATE or REPLACE FUNCTION rrule_event_overlaps( TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH TIME ZONE, TEXT, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH TIME ZONE ) RETURNS BOOLEAN AS $$ DECLARE dtstart ALIAS FOR $1; dtend ALIAS FOR $2; repeatrule ALIAS FOR $3; in_mindate ALIAS FOR $4; in_maxdate ALIAS FOR $5; base_date TIMESTAMP WITH TIME ZONE; mindate TIMESTAMP WITH TIME ZONE; maxdate TIMESTAMP WITH TIME ZONE; BEGIN IF dtstart IS NULL THEN RETURN NULL; END IF; IF dtend IS NULL THEN base_date := dtstart; ELSE base_date := dtend; END IF; IF in_mindate IS NULL THEN mindate := current_date - '10 years'::interval; ELSE mindate := in_mindate; END IF; IF in_maxdate IS NULL THEN maxdate := current_date + '10 years'::interval; ELSE -- If we add the duration onto the event, then an overlap occurs if dtend <= increased end of range. maxdate := in_maxdate + (base_date - dtstart); END IF; IF repeatrule IS NULL THEN RETURN (dtstart <= maxdate AND base_date >= mindate); END IF; SELECT d INTO mindate FROM rrule_event_instances_range( base_date, repeatrule, mindate, maxdate, 60 ) d LIMIT 1; RETURN FOUND; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Create a composite type for the parts of the RRULE. DROP TYPE rrule_instance CASCADE; CREATE TYPE rrule_instance AS ( dtstart TIMESTAMP WITH TIME ZONE, rrule TEXT, instance TIMESTAMP WITH TIME ZONE ); CREATE or REPLACE FUNCTION rrule_event_instances( TIMESTAMP WITH TIME ZONE, TEXT ) RETURNS SETOF rrule_instance AS $$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; maxdate TIMESTAMP WITH TIME ZONE; current TIMESTAMP WITH TIME ZONE; result rrule_instance%ROWTYPE; BEGIN maxdate := current_date + '10 years'::interval; result.dtstart := basedate; result.rrule := repeatrule; FOR current IN SELECT d FROM rrule_event_instances_range( basedate, repeatrule, basedate, maxdate, 300 ) d LOOP result.instance := current; RETURN NEXT result; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION icalendar_interval_to_SQL( TEXT ) RETURNS interval AS $function$ SELECT CASE WHEN substring($1,1,1) = '-' THEN -1 ELSE 1 END * regexp_replace( regexp_replace($1, '[PT-]', '', 'g'), '([A-Z])', E'\\1 ', 'g')::interval; $function$ LANGUAGE 'SQL' IMMUTABLE STRICT; davical-1.1.1/dba/better_perms.sql0000644000000000000000000003070711265574305013764 0ustar CREATE or REPLACE FUNCTION legacy_privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ DECLARE in_priv ALIAS FOR $1; out_bits BIT(24); BEGIN out_bits := 0::BIT(24); IF in_priv ~* 'A' THEN out_bits = ~ out_bits; RETURN out_bits; END IF; -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- 1 DAV:read -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'R' THEN out_bits := out_bits | 4609::BIT(24); END IF; -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- 2 DAV:write-properties -- 4 DAV:write-content -- 64 DAV:bind -- 128 DAV:unbind IF in_priv ~* 'W' THEN out_bits := out_bits | 198::BIT(24); END IF; -- 64 DAV:bind IF in_priv ~* 'B' THEN out_bits := out_bits | 64::BIT(24); END IF; -- 128 DAV:unbind IF in_priv ~* 'U' THEN out_bits := out_bits | 128::BIT(24); END IF; -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'F' THEN out_bits := out_bits | 4608::BIT(24); END IF; RETURN out_bits; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- This legacy conversion function will eventually be removed, once all logic -- has been converted to use bitmaps, or to use the bits_to_priv() output. -- -- NOTE: Round-trip through this and then back through legacy_privilege_to_bits -- function is lossy! Through legacy_privilege_to_bits() and back through -- this one is not. -- CREATE or REPLACE FUNCTION bits_to_legacy_privilege( BIT(24) ) RETURNS TEXT AS $$ DECLARE in_bits ALIAS FOR $1; out_priv TEXT; BEGIN out_priv := ''; IF in_bits = (~ 0::BIT(24)) THEN out_priv = 'A'; RETURN out_priv; END IF; -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- 1 DAV:read -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF (in_bits & 4609::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN out_priv := 'R'; ELSE out_priv := 'F'; END IF; END IF; -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- 2 DAV:write-properties -- 4 DAV:write-content -- 64 DAV:bind -- 128 DAV:unbind IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 6::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'W'; ELSE IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'B'; END IF; IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'U'; END IF; END IF; END IF; RETURN out_priv; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION get_permissions( INT, INT ) RETURNS TEXT AS $$ DECLARE in_from ALIAS FOR $1; in_to ALIAS FOR $2; out_confers TEXT; bit_confers BIT(24); group_role_no INT; tmp_txt TEXT; dbg TEXT DEFAULT ''; r RECORD; counter INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN 'A'; END IF; -- dbg := 'S-'; SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 WHERE r1.from_user = in_from AND r1.to_user = in_to AND NOT usr_is_role(r1.to_user,'Group'); IF FOUND THEN RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No simple relationships between % and %', in_from, in_to; SELECT bit_or(r1.confers & r2.confers) INTO bit_confers FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user WHERE r1.from_user=in_from AND r2.to_user=in_to AND r2.from_user IN (SELECT user_no FROM roles LEFT JOIN role_member USING(role_no) WHERE role_name='Group'); IF bit_confers != 0::BIT(24) THEN RETURN dbg || bits_to_legacy_privilege(bit_confers); END IF; RETURN ''; -- RAISE NOTICE 'No complex relationships between % and %', in_from, in_to; SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 LEFT OUTER JOIN relationship r2 ON(r1.to_user = r2.to_user) WHERE r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) ; IF FOUND THEN -- dbg := 'H-'; -- RAISE NOTICE 'Permissions to shared group % ', out_confers; RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN ''; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION get_group_role_no() RETURNS INT AS $$ SELECT role_no FROM roles WHERE role_name = 'Group' $$ LANGUAGE 'SQL' IMMUTABLE; CREATE or REPLACE FUNCTION has_legacy_privilege( INT, TEXT, INT ) RETURNS BOOLEAN AS $$ DECLARE in_from ALIAS FOR $1; in_legacy_privilege ALIAS FOR $2; in_to ALIAS FOR $3; in_confers BIT(24); group_role_no INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN TRUE; END IF; SELECT get_group_role_no() INTO group_role_no; SELECT legacy_privilege_to_bits(in_legacy_privilege) INTO in_confers; IF EXISTS(SELECT 1 FROM relationship WHERE from_user = in_from AND to_user = in_to AND (in_confers & confers) = in_confers AND NOT EXISTS(SELECT 1 FROM role_member WHERE to_user = user_no AND role_no = group_role_no) ) THEN -- A direct relationship from A to B that grants sufficient -- RAISE NOTICE 'Permissions directly granted'; RETURN TRUE; END IF; IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user WHERE (in_confers & r1.confers & r2.confers) = in_confers AND r1.from_user=in_from AND r2.to_user=in_to AND r2.from_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) ) THEN -- An indirect relationship from A to B via group G that grants sufficient -- RAISE NOTICE 'Permissions mediated via group'; RETURN TRUE; END IF; IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.to_user WHERE (in_confers & r1.confers & r2.confers) = in_confers AND r1.from_user=in_from AND r2.from_user=in_to AND r2.to_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) AND NOT EXISTS(SELECT 1 FROM relationship WHERE from_user=r2.to_user) ) THEN -- An indirect reflexive relationship from both A & B to group G which grants sufficient -- RAISE NOTICE 'Permissions to shared group'; RETURN TRUE; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN FALSE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Given a verbose DAV: or CalDAV: privilege name return the bitmask CREATE or REPLACE FUNCTION privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ DECLARE raw_priv ALIAS FOR $1; in_priv TEXT; BEGIN in_priv := trim(lower(regexp_replace(raw_priv, '^.*:', ''))); IF in_priv = 'all' THEN RETURN ~ 0::BIT(24); END IF; RETURN (CASE WHEN in_priv = 'read' THEN 4609 -- 1 + 512 + 4096 WHEN in_priv = 'write' THEN 198 -- 2 + 4 + 64 + 128 WHEN in_priv = 'write-properties' THEN 2 WHEN in_priv = 'write-content' THEN 4 WHEN in_priv = 'unlock' THEN 8 WHEN in_priv = 'read-acl' THEN 16 WHEN in_priv = 'read-current-user-privilege-set' THEN 32 WHEN in_priv = 'bind' THEN 64 WHEN in_priv = 'unbind' THEN 128 WHEN in_priv = 'write-acl' THEN 256 WHEN in_priv = 'read-free-busy' THEN 4608 -- 512 + 4096 WHEN in_priv = 'schedule-deliver' THEN 7168 -- 1024 + 2048 + 4096 WHEN in_priv = 'schedule-deliver-invite' THEN 1024 WHEN in_priv = 'schedule-deliver-reply' THEN 2048 WHEN in_priv = 'schedule-query-freebusy' THEN 4096 WHEN in_priv = 'schedule-send' THEN 57344 -- 8192 + 16384 + 32768 WHEN in_priv = 'schedule-send-invite' THEN 8192 WHEN in_priv = 'schedule-send-reply' THEN 16384 WHEN in_priv = 'schedule-send-freebusy' THEN 32768 ELSE 0 END)::BIT(24); END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- Given an array of verbose DAV: or CalDAV: privilege names return the bitmask CREATE or REPLACE FUNCTION privilege_to_bits( TEXT[] ) RETURNS BIT(24) AS $$ DECLARE raw_privs ALIAS FOR $1; in_priv TEXT; out_bits BIT(24); i INT; all BIT(24); start INT; finish INT; BEGIN out_bits := 0::BIT(24); all := ~ out_bits; SELECT array_lower(raw_privs,1) INTO start; SELECT array_upper(raw_privs,1) INTO finish; FOR i IN start .. finish LOOP SELECT out_bits | privilege_to_bits(raw_privs[i]) INTO out_bits; IF out_bits = all THEN RETURN all; END IF; END LOOP; RETURN out_bits; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- This legacy conversion function will eventually be removed, once all logic -- has been converted to use bitmaps, or to use the bits_to_priv() output. -- -- NOTE: Round-trip through this and then back through privilege_to_bits -- function is lossy! Through privilege_to_bits() and back through -- this one is not. -- CREATE or REPLACE FUNCTION bits_to_privilege( BIT(24) ) RETURNS TEXT[] AS $$ DECLARE in_bits ALIAS FOR $1; out_priv TEXT[]; BEGIN out_priv := ARRAY[]::text[]; IF in_bits = (~ 0::BIT(24)) THEN out_priv := out_priv || ARRAY['DAV:all']; END IF; IF (in_bits & 513::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read']; END IF; IF (in_bits & 512::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:read-free-busy']; END IF; END IF; IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 198::BIT(24)) = 198::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write']; ELSE IF (in_bits & 2::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-properties']; END IF; IF (in_bits & 4::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-content']; END IF; IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:bind']; END IF; IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:unbind']; END IF; END IF; END IF; IF (in_bits & 8::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:unlock']; END IF; IF (in_bits & 16::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read-acl']; END IF; IF (in_bits & 32::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read-current-user-privilege-set']; END IF; IF (in_bits & 256::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-acl']; END IF; IF (in_bits & 7168::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 7168::BIT(24)) = 7168::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver']; ELSE IF (in_bits & 1024::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver-invite']; END IF; IF (in_bits & 2048::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver-reply']; END IF; IF (in_bits & 4096::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-query-freebusy']; END IF; END IF; END IF; IF (in_bits & 57344::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 57344::BIT(24)) = 57344::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send']; ELSE IF (in_bits & 8192::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-invite']; END IF; IF (in_bits & 16384::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-reply']; END IF; IF (in_bits & 32768::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-freebusy']; END IF; END IF; END IF; RETURN out_priv; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; davical-1.1.1/dba/caldav_functions.sql0000644000000000000000000013377511751203704014614 0ustar /** * PostgreSQL Functions for CalDAV handling * * @package rscds * @subpackage database * @author Andrew McMillan * @copyright Catalyst IT Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ CREATE or REPLACE FUNCTION apply_month_byday( TIMESTAMP WITH TIME ZONE, TEXT ) RETURNS TIMESTAMP WITH TIME ZONE AS $$ DECLARE in_time ALIAS FOR $1; byday ALIAS FOR $2; weeks INT; dow INT; temp_txt TEXT; dd INT; mm INT; yy INT; our_dow INT; our_answer TIMESTAMP WITH TIME ZONE; BEGIN dow := position(substring( byday from '..$') in 'SUMOTUWETHFRSA') / 2; temp_txt := substring(byday from '([0-9]+)'); weeks := temp_txt::int; -- RAISE NOTICE 'DOW: %, Weeks: %(%s)', dow, weeks, temp_txt; IF substring(byday for 1) = '-' THEN -- Last XX of month, or possibly second-to-last, but unlikely mm := extract( 'month' from in_time); yy := extract( 'year' from in_time); -- Start with the last day of the month our_answer := (yy::text || '-' || (mm+1)::text || '-01')::timestamp - '1 day'::interval; dd := extract( 'dow' from our_answer); dd := dd - dow; IF dd < 0 THEN dd := dd + 7; END IF; -- Having calculated the right day of the month, we now apply that back to in_time -- which contains the otherwise-unobtainable timezone detail (and the time) our_answer = our_answer - (dd::text || 'days')::interval; dd := extract( 'day' from our_answer) - extract( 'day' from in_time); our_answer := in_time + (dd::text || 'days')::interval; IF weeks > 1 THEN weeks := weeks - 1; our_answer := our_answer - (weeks::text || 'weeks')::interval; END IF; ELSE -- Shift our date to the correct day of week.. our_dow := extract( 'dow' from in_time); our_dow := our_dow - dow; dd := extract( 'day' from in_time); IF our_dow >= dd THEN our_dow := our_dow - 7; END IF; our_answer := in_time - (our_dow::text || 'days')::interval; dd = extract( 'day' from our_answer); -- Shift the date to the correct week... dd := weeks - ((dd+6) / 7); IF dd != 0 THEN our_answer := our_answer + ((dd::text || 'weeks')::interval); END IF; END IF; RETURN our_answer; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION calculate_later_timestamp( TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH TIME ZONE, TEXT ) RETURNS TIMESTAMP WITH TIME ZONE AS $$ DECLARE earliest ALIAS FOR $1; basedate ALIAS FOR $2; repeatrule ALIAS FOR $3; frequency TEXT; temp_txt TEXT; length INT; count INT; byday TEXT; bymonthday INT; basediff INTERVAL; past_repeats INT8; units TEXT; dow TEXT; our_answer TIMESTAMP WITH TIME ZONE; loopcount INT; BEGIN IF basedate > earliest THEN RETURN basedate; END IF; temp_txt := substring(repeatrule from 'UNTIL=([0-9TZ]+)(;|$)'); IF temp_txt IS NOT NULL AND temp_txt::timestamp with time zone < earliest THEN RETURN NULL; END IF; frequency := substring(repeatrule from 'FREQ=([A-Z]+)(;|$)'); IF frequency IS NULL THEN RETURN NULL; END IF; past_repeats = 0; length = 1; temp_txt := substring(repeatrule from 'INTERVAL=([0-9]+)(;|$)'); IF temp_txt IS NOT NULL THEN length := temp_txt::int; basediff := earliest - basedate; -- RAISE NOTICE 'Frequency: %, Length: %(%), Basediff: %', frequency, length, temp_txt, basediff; -- Calculate the number of past periods between our base date and our earliest date IF frequency = 'WEEKLY' OR frequency = 'DAILY' THEN past_repeats := extract('epoch' from basediff)::INT8 / 86400; -- RAISE NOTICE 'Days: %', past_repeats; IF frequency = 'WEEKLY' THEN past_repeats := past_repeats / 7; END IF; ELSE past_repeats = extract( 'years' from basediff ); IF frequency = 'MONTHLY' THEN past_repeats = (past_repeats *12) + extract( 'months' from basediff ); END IF; END IF; IF length IS NOT NULL THEN past_repeats = (past_repeats / length) + 1; END IF; END IF; -- Check that we have not exceeded the COUNT= limit temp_txt := substring(repeatrule from 'COUNT=([0-9]+)(;|$)'); IF temp_txt IS NOT NULL THEN count := temp_txt::int; -- RAISE NOTICE 'Periods: %, Count: %(%), length: %', past_repeats, count, temp_txt, length; IF ( count <= past_repeats ) THEN RETURN NULL; END IF; ELSE count := NULL; END IF; temp_txt := substring(repeatrule from 'BYSETPOS=([0-9-]+)(;|$)'); byday := substring(repeatrule from 'BYDAY=([0-9A-Z,]+-)(;|$)'); IF byday IS NOT NULL AND frequency = 'MONTHLY' THEN -- Since this could move the date around a month we go back one -- period just to be extra sure. past_repeats = past_repeats - 1; IF temp_txt IS NOT NULL THEN -- Crudely hack the BYSETPOS onto the front of BYDAY. While this -- is not as per rfc2445, RRULE syntax is so complex and overblown -- that nobody correctly uses comma-separated BYDAY or BYSETPOS, and -- certainly not within a MONTHLY RRULE. byday := temp_txt || byday; END IF; END IF; past_repeats = past_repeats * length; units := CASE WHEN frequency = 'DAILY' THEN 'days' WHEN frequency = 'WEEKLY' THEN 'weeks' WHEN frequency = 'MONTHLY' THEN 'months' WHEN frequency = 'YEARLY' THEN 'years' END; temp_txt := substring(repeatrule from 'BYMONTHDAY=([0-9,]+)(;|$)'); bymonthday := temp_txt::int; -- With all of the above calculation, this date should be close to (but less than) -- the target, and we should only loop once or twice. our_answer := basedate + (past_repeats::text || units)::interval; IF our_answer IS NULL THEN RAISE EXCEPTION 'our_answer IS NULL! basedate:% past_repeats:% units:%', basedate, past_repeats, units; END IF; loopcount := 500; -- Desirable to stop an infinite loop if there is something we cannot handle LOOP -- RAISE NOTICE 'Testing date: %', our_answer; IF frequency = 'DAILY' THEN IF byday IS NOT NULL THEN LOOP dow = substring( to_char( our_answer, 'DY' ) for 2); EXIT WHEN byday ~* dow; -- Increment for our next time through the loop... our_answer := our_answer + (length::text || units)::interval; END LOOP; END IF; ELSIF frequency = 'WEEKLY' THEN -- Weekly repeats are only on specific days -- This is really not right, since a WEEKLY on MO,WE,FR should -- occur three times each week and this will only be once a week. dow = substring( to_char( our_answer, 'DY' ) for 2); ELSIF frequency = 'MONTHLY' THEN IF byday IS NOT NULL THEN -- This works fine, except that maybe there are multiple BYDAY -- components. e.g. 1TU,3TU might be 1st & 3rd tuesdays. our_answer := apply_month_byday( our_answer, byday ); ELSE -- If we did not get a BYDAY= then we kind of have to assume it is the same day each month our_answer := our_answer + '1 month'::interval; END IF; ELSIF bymonthday IS NOT NULL AND frequency = 'MONTHLY' AND bymonthday < 1 THEN -- We do not deal with this situation at present RAISE NOTICE 'The case of negative BYMONTHDAY is not handled yet.'; END IF; EXIT WHEN our_answer >= earliest; -- Give up if we have exceeded the count IF ( count IS NOT NULL AND past_repeats > count ) THEN RETURN NULL; ELSE past_repeats := past_repeats + 1; END IF; loopcount := loopcount - 1; IF loopcount < 0 THEN RAISE NOTICE 'Giving up on repeat rule "%" - after 100 increments from % we are still not after %', repeatrule, basedate, earliest; RETURN NULL; END IF; -- Increment for our next time through the loop... our_answer := our_answer + (length::text || units)::interval; END LOOP; RETURN our_answer; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION usr_is_role( INT, TEXT ) RETURNS BOOLEAN AS $$ SELECT EXISTS( SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_member.user_no=$1 AND roles.role_name=$2 ) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION legacy_get_permissions( INT, INT ) RETURNS TEXT AS $$ DECLARE in_from ALIAS FOR $1; in_to ALIAS FOR $2; out_confers TEXT; tmp_confers1 TEXT; tmp_confers2 TEXT; tmp_txt TEXT; dbg TEXT DEFAULT ''; r RECORD; counter INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN 'A'; END IF; -- dbg := 'S-'; SELECT rt1.confers INTO out_confers FROM relationship r1 JOIN relationship_type rt1 USING ( rt_id ) WHERE r1.from_user = in_from AND r1.to_user = in_to AND NOT usr_is_role(r1.to_user,'Group'); IF FOUND THEN RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No simple relationships between % and %', in_from, in_to; out_confers := ''; FOR r IN SELECT rt1.confers AS r1, rt2.confers AS r2 FROM relationship r1 JOIN relationship_type rt1 USING(rt_id) JOIN relationship r2 ON r1.to_user=r2.from_user JOIN relationship_type rt2 ON r2.rt_id=rt2.rt_id WHERE r1.from_user=in_from AND r2.to_user=in_to AND EXISTS( SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_member.user_no=r1.to_user AND roles.role_name='Group') AND NOT EXISTS( SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_member.user_no=r2.to_user AND roles.role_name='Group') AND NOT EXISTS( SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_member.user_no=r1.from_user AND roles.role_name='Group') LOOP -- RAISE NOTICE 'Permissions to group % from group %', r.r1, r.r2; -- FIXME: This is an oversimplification -- dbg := 'C-'; tmp_confers1 := r.r1; tmp_confers2 := r.r2; IF tmp_confers1 != tmp_confers2 THEN IF tmp_confers1 ~* 'A' THEN -- Ensure that A is expanded to all supported privs before being used as a mask tmp_confers1 := 'AFBRWU'; END IF; IF tmp_confers2 ~* 'A' THEN -- Ensure that A is expanded to all supported privs before being used as a mask tmp_confers2 := 'AFBRWU'; END IF; -- RAISE NOTICE 'Expanded permissions to group % from group %', tmp_confers1, tmp_confers2; tmp_txt = ''; FOR counter IN 1 .. length(tmp_confers2) LOOP IF tmp_confers1 ~* substring(tmp_confers2,counter,1) THEN tmp_txt := tmp_txt || substring(tmp_confers2,counter,1); END IF; END LOOP; tmp_confers2 := tmp_txt; END IF; FOR counter IN 1 .. length(tmp_confers2) LOOP IF NOT out_confers ~* substring(tmp_confers2,counter,1) THEN out_confers := out_confers || substring(tmp_confers2,counter,1); END IF; END LOOP; END LOOP; IF out_confers ~* 'A' OR (out_confers ~* 'B' AND out_confers ~* 'F' AND out_confers ~* 'R' AND out_confers ~* 'W' AND out_confers ~* 'U') THEN out_confers := 'A'; END IF; IF out_confers != '' THEN RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No complex relationships between % and %', in_from, in_to; SELECT rt1.confers INTO out_confers, tmp_confers1 FROM relationship r1 JOIN relationship_type rt1 ON ( r1.rt_id = rt1.rt_id ) LEFT OUTER JOIN relationship r2 ON ( rt1.rt_id = r2.rt_id ) WHERE r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND r1.to_user = r2.to_user AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) AND usr_is_role(r1.to_user,'Group'); IF FOUND THEN -- dbg := 'H-'; -- RAISE NOTICE 'Permissions to shared group % ', out_confers; RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN ''; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Function to convert a PostgreSQL date into UTC + the format used by iCalendar CREATE or REPLACE FUNCTION to_ical_utc( TIMESTAMP WITH TIME ZONE ) RETURNS TEXT AS $$ SELECT to_char( $1 at time zone 'UTC', 'YYYYMMDD"T"HH24MISS"Z"' ) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Function to set an arbitrary DAV property CREATE or REPLACE FUNCTION set_dav_property( TEXT, INTEGER, TEXT, TEXT ) RETURNS BOOLEAN AS $$ DECLARE path ALIAS FOR $1; change_user ALIAS FOR $2; key ALIAS FOR $3; value ALIAS FOR $4; BEGIN -- Check that there is either a resource, collection or user at this location. IF NOT EXISTS( SELECT 1 FROM caldav_data WHERE dav_name = path UNION SELECT 1 FROM collection WHERE dav_name = path UNION SELECT 1 FROM dav_principal WHERE dav_name = path UNION SELECT 1 FROM dav_binding WHERE dav_name = path ) THEN RETURN FALSE; END IF; PERFORM true FROM property WHERE dav_name = path AND property_name = key; IF FOUND THEN UPDATE property SET changed_by=change_user::integer, changed_on=current_timestamp, property_value=value WHERE dav_name = path AND property_name = key; ELSE INSERT INTO property ( dav_name, changed_by, changed_on, property_name, property_value ) VALUES( path, change_user::integer, current_timestamp, key, value ); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' STRICT; -- List a user's relationships as a text string CREATE or REPLACE FUNCTION relationship_list( INT8 ) RETURNS TEXT AS $$ DECLARE user ALIAS FOR $1; r RECORD; rlist TEXT; BEGIN rlist := ''; FOR r IN SELECT rt_name, fullname FROM relationship LEFT JOIN relationship_type USING(rt_id) LEFT JOIN usr tgt ON to_user = tgt.user_no WHERE from_user = user LOOP rlist := rlist || CASE WHEN rlist = '' THEN '' ELSE ', ' END || r.rt_name || '(' || r.fullname || ')'; END LOOP; RETURN rlist; END; $$ LANGUAGE 'plpgsql'; DROP FUNCTION rename_davical_user( TEXT, TEXT ); DROP TRIGGER usr_modified ON usr CASCADE; CREATE or REPLACE FUNCTION usr_modified() RETURNS TRIGGER AS $$ DECLARE oldpath TEXT; newpath TEXT; BEGIN -- in case we trigger on other events in future IF TG_OP = 'UPDATE' THEN IF NEW.username != OLD.username THEN oldpath := '/' || OLD.username || '/'; newpath := '/' || NEW.username || '/'; UPDATE collection SET parent_container = replace( parent_container, oldpath, newpath), dav_name = replace( dav_name, oldpath, newpath) WHERE substring(dav_name from 1 for char_length(oldpath)) = oldpath; END IF; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER usr_modified AFTER UPDATE ON usr FOR EACH ROW EXECUTE PROCEDURE usr_modified(); DROP TRIGGER collection_modified ON collection CASCADE; CREATE or REPLACE FUNCTION collection_modified() RETURNS TRIGGER AS $$ DECLARE BEGIN -- in case we trigger on other events in future IF TG_OP = 'UPDATE' THEN IF NEW.dav_name != OLD.dav_name THEN UPDATE caldav_data SET dav_name = replace( dav_name, OLD.dav_name, NEW.dav_name), user_no = NEW.user_no WHERE substring(dav_name from 1 for char_length(OLD.dav_name)) = OLD.dav_name; END IF; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER collection_modified AFTER UPDATE ON collection FOR EACH ROW EXECUTE PROCEDURE collection_modified(); DROP TRIGGER caldav_data_modified ON caldav_data CASCADE; CREATE or REPLACE FUNCTION caldav_data_modified() RETURNS TRIGGER AS $$ DECLARE coll_id caldav_data.collection_id%TYPE; BEGIN IF TG_OP = 'UPDATE' THEN IF NEW.caldav_data = OLD.caldav_data AND NEW.collection_id = OLD.collection_id THEN -- Nothing for us to do RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN -- On insert or update modified, we set the NEW collection tag to the md5 of the -- etag of the updated row which gives us something predictable for our regression -- tests, but something different from the actual etag of the new event. UPDATE collection SET modified = current_timestamp, dav_etag = md5(NEW.dav_etag) WHERE collection_id = NEW.collection_id; IF TG_OP = 'INSERT' THEN RETURN NEW; END IF; END IF; IF TG_OP = 'DELETE' THEN -- On delete we set the OLD collection tag to the md5 of the old path & the old -- etag, which again gives us something predictable for our regression tests. UPDATE collection SET modified = current_timestamp, dav_etag = md5(OLD.dav_name::text||OLD.dav_etag) WHERE collection_id = OLD.collection_id; RETURN OLD; END IF; IF NEW.collection_id != OLD.collection_id THEN -- If we've switched the collection_id of this event, then we also need to update -- the etag of the old collection - as we do for delete. UPDATE collection SET modified = current_timestamp, dav_etag = md5(OLD.dav_name::text||OLD.dav_etag) WHERE collection_id = OLD.collection_id; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER caldav_data_modified AFTER INSERT OR UPDATE OR DELETE ON caldav_data FOR EACH ROW EXECUTE PROCEDURE caldav_data_modified(); DROP TRIGGER caldav_data_sync_dav_id ON caldav_data CASCADE; DROP TRIGGER calendar_item_sync_dav_id ON calendar_item CASCADE; CREATE or REPLACE FUNCTION sync_dav_id ( ) RETURNS TRIGGER AS $$ DECLARE BEGIN IF TG_OP = 'DELETE' THEN -- Just let the ON DELETE CASCADE handle this case RETURN OLD; END IF; IF NEW.dav_id IS NULL THEN NEW.dav_id = nextval('dav_id_seq'); END IF; IF TG_OP = 'UPDATE' THEN IF OLD.dav_id != NEW.dav_id OR OLD.collection_id != NEW.collection_id OR OLD.user_no != NEW.user_no OR OLD.dav_name != NEW.dav_name THEN UPDATE calendar_item SET dav_id = NEW.dav_id, user_no = NEW.user_no, collection_id = NEW.collection_id, dav_name = NEW.dav_name WHERE dav_name = OLD.dav_name OR dav_id = OLD.dav_id; END IF; RETURN NEW; END IF; UPDATE calendar_item SET dav_id = NEW.dav_id, user_no = NEW.user_no, collection_id = NEW.collection_id, dav_name = NEW.dav_name WHERE dav_name = NEW.dav_name OR dav_id = NEW.dav_id; RETURN NEW; END $$ LANGUAGE 'plpgsql'; CREATE TRIGGER caldav_data_sync_dav_id AFTER INSERT OR UPDATE ON caldav_data FOR EACH ROW EXECUTE PROCEDURE sync_dav_id(); -- New in 1.2.6 CREATE or REPLACE FUNCTION legacy_privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ DECLARE in_priv ALIAS FOR $1; out_bits BIT(24); BEGIN out_bits := 0::BIT(24); IF in_priv ~* 'A' THEN out_bits = ~ out_bits; RETURN out_bits; END IF; -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- 1 DAV:read -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'R' THEN out_bits := out_bits | 4609::BIT(24); END IF; -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- 2 DAV:write-properties -- 4 DAV:write-content -- 64 DAV:bind -- 128 DAV:unbind IF in_priv ~* 'W' THEN out_bits := out_bits | 198::BIT(24); END IF; -- 64 DAV:bind IF in_priv ~* 'B' THEN out_bits := out_bits | 64::BIT(24); END IF; -- 128 DAV:unbind IF in_priv ~* 'U' THEN out_bits := out_bits | 128::BIT(24); END IF; -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'F' THEN out_bits := out_bits | 4608::BIT(24); END IF; RETURN out_bits; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- This legacy conversion function will eventually be removed, once all logic -- has been converted to use bitmaps, or to use the bits_to_priv() output. -- -- NOTE: Round-trip through this and then back through legacy_privilege_to_bits -- function is lossy! Through legacy_privilege_to_bits() and back through -- this one is not. -- CREATE or REPLACE FUNCTION bits_to_legacy_privilege( BIT(24) ) RETURNS TEXT AS $$ DECLARE in_bits ALIAS FOR $1; out_priv TEXT; BEGIN out_priv := ''; IF in_bits = (~ 0::BIT(24)) THEN out_priv = 'A'; RETURN out_priv; END IF; -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- 1 DAV:read -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF (in_bits & 4609::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN out_priv := 'R'; ELSE out_priv := 'F'; END IF; END IF; -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- 2 DAV:write-properties -- 4 DAV:write-content -- 64 DAV:bind -- 128 DAV:unbind IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 6::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'W'; ELSE IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'B'; END IF; IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'U'; END IF; END IF; END IF; RETURN out_priv; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION get_permissions( INT, INT ) RETURNS TEXT AS $$ DECLARE in_from ALIAS FOR $1; in_to ALIAS FOR $2; out_confers TEXT; bit_confers BIT(24); group_role_no INT; tmp_txt TEXT; dbg TEXT DEFAULT ''; r RECORD; counter INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN 'A'; END IF; -- dbg := 'S-'; SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 WHERE r1.from_user = in_from AND r1.to_user = in_to AND NOT usr_is_role(r1.to_user,'Group'); IF FOUND THEN RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No simple relationships between % and %', in_from, in_to; SELECT bit_or(r1.confers & r2.confers) INTO bit_confers FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user WHERE r1.from_user=in_from AND r2.to_user=in_to AND r2.from_user IN (SELECT user_no FROM roles LEFT JOIN role_member USING(role_no) WHERE role_name='Group'); IF bit_confers != 0::BIT(24) THEN RETURN dbg || bits_to_legacy_privilege(bit_confers); END IF; RETURN ''; -- RAISE NOTICE 'No complex relationships between % and %', in_from, in_to; SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 LEFT OUTER JOIN relationship r2 ON(r1.to_user = r2.to_user) WHERE r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) ; IF FOUND THEN -- dbg := 'H-'; -- RAISE NOTICE 'Permissions to shared group % ', out_confers; RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN ''; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE or REPLACE FUNCTION get_group_role_no() RETURNS INT AS $$ SELECT role_no FROM roles WHERE role_name = 'Group' $$ LANGUAGE 'SQL' IMMUTABLE; CREATE or REPLACE FUNCTION has_legacy_privilege( INT, TEXT, INT ) RETURNS BOOLEAN AS $$ DECLARE in_from ALIAS FOR $1; in_legacy_privilege ALIAS FOR $2; in_to ALIAS FOR $3; in_confers BIT(24); group_role_no INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN TRUE; END IF; SELECT get_group_role_no() INTO group_role_no; SELECT legacy_privilege_to_bits(in_legacy_privilege) INTO in_confers; IF EXISTS(SELECT 1 FROM relationship WHERE from_user = in_from AND to_user = in_to AND (in_confers & confers) = in_confers AND NOT EXISTS(SELECT 1 FROM role_member WHERE to_user = user_no AND role_no = group_role_no) ) THEN -- A direct relationship from A to B that grants sufficient -- RAISE NOTICE 'Permissions directly granted'; RETURN TRUE; END IF; IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user WHERE (in_confers & r1.confers & r2.confers) = in_confers AND r1.from_user=in_from AND r2.to_user=in_to AND r2.from_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) ) THEN -- An indirect relationship from A to B via group G that grants sufficient -- RAISE NOTICE 'Permissions mediated via group'; RETURN TRUE; END IF; IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.to_user WHERE (in_confers & r1.confers & r2.confers) = in_confers AND r1.from_user=in_from AND r2.from_user=in_to AND r2.to_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) AND NOT EXISTS(SELECT 1 FROM relationship WHERE from_user=r2.to_user) ) THEN -- An indirect reflexive relationship from both A & B to group G which grants sufficient -- RAISE NOTICE 'Permissions to shared group'; RETURN TRUE; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN FALSE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Given a verbose DAV: or CalDAV: privilege name return the bitmask CREATE or REPLACE FUNCTION privilege_to_bits( TEXT ) RETURNS BIT(24) AS $$ DECLARE raw_priv ALIAS FOR $1; in_priv TEXT; BEGIN in_priv := trim(lower(regexp_replace(raw_priv, '^.*:', ''))); IF in_priv = 'all' THEN RETURN ~ 0::BIT(24); END IF; RETURN (CASE WHEN in_priv = 'read' THEN 4609 -- 1 + 512 + 4096 WHEN in_priv = 'write' THEN 198 -- 2 + 4 + 64 + 128 WHEN in_priv = 'write-properties' THEN 2 WHEN in_priv = 'write-content' THEN 4 WHEN in_priv = 'unlock' THEN 8 WHEN in_priv = 'read-acl' THEN 16 WHEN in_priv = 'read-current-user-privilege-set' THEN 32 WHEN in_priv = 'bind' THEN 64 WHEN in_priv = 'unbind' THEN 128 WHEN in_priv = 'write-acl' THEN 256 WHEN in_priv = 'read-free-busy' THEN 4608 -- 512 + 4096 WHEN in_priv = 'schedule-deliver' THEN 7168 -- 1024 + 2048 + 4096 WHEN in_priv = 'schedule-deliver-invite' THEN 1024 WHEN in_priv = 'schedule-deliver-reply' THEN 2048 WHEN in_priv = 'schedule-query-freebusy' THEN 4096 WHEN in_priv = 'schedule-send' THEN 57344 -- 8192 + 16384 + 32768 WHEN in_priv = 'schedule-send-invite' THEN 8192 WHEN in_priv = 'schedule-send-reply' THEN 16384 WHEN in_priv = 'schedule-send-freebusy' THEN 32768 ELSE 0 END)::BIT(24); END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- Given an array of verbose DAV: or CalDAV: privilege names return the bitmask CREATE or REPLACE FUNCTION privilege_to_bits( TEXT[] ) RETURNS BIT(24) AS $$ DECLARE raw_privs ALIAS FOR $1; in_priv TEXT; out_bits BIT(24); i INT; all_privs BIT(24); start INT; finish INT; BEGIN out_bits := 0::BIT(24); all_privs := ~ out_bits; SELECT array_lower(raw_privs,1) INTO start; SELECT array_upper(raw_privs,1) INTO finish; FOR i IN start .. finish LOOP SELECT out_bits | privilege_to_bits(raw_privs[i]) INTO out_bits; IF out_bits = 65535::BIT(24) THEN RETURN all_privs; END IF; END LOOP; RETURN out_bits; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- NOTE: Round-trip through this and then back through privilege_to_bits -- function is lossy! Through privilege_to_bits() and back through -- this one is not. -- CREATE or REPLACE FUNCTION bits_to_privilege( BIT(24) ) RETURNS TEXT[] AS $$ DECLARE in_bits ALIAS FOR $1; out_priv TEXT[]; BEGIN IF in_bits = (~ 0::BIT(24)) THEN out_priv := out_priv || ARRAY['DAV:all']; END IF; IF (in_bits & 513::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read']; END IF; IF (in_bits & 512::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:read-free-busy']; END IF; END IF; IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 198::BIT(24)) = 198::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write']; ELSE IF (in_bits & 2::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-properties']; END IF; IF (in_bits & 4::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-content']; END IF; IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:bind']; END IF; IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:unbind']; END IF; END IF; END IF; IF (in_bits & 8::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:unlock']; END IF; IF (in_bits & 16::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read-acl']; END IF; IF (in_bits & 32::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read-current-user-privilege-set']; END IF; IF (in_bits & 256::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-acl']; END IF; IF (in_bits & 7168::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 7168::BIT(24)) = 7168::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver']; ELSE IF (in_bits & 1024::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver-invite']; END IF; IF (in_bits & 2048::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver-reply']; END IF; IF (in_bits & 4096::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-query-freebusy']; END IF; END IF; END IF; IF (in_bits & 57344::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 57344::BIT(24)) = 57344::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send']; ELSE IF (in_bits & 8192::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-invite']; END IF; IF (in_bits & 16384::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-reply']; END IF; IF (in_bits & 32768::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-freebusy']; END IF; END IF; END IF; RETURN out_priv; END $$ LANGUAGE 'PlPgSQL' IMMUTABLE STRICT; -- Expanded group memberships out to some depth CREATE or REPLACE FUNCTION expand_memberships( INT8, INT ) RETURNS SETOF INT8 AS $$ SELECT group_id FROM group_member WHERE member_id = $1 UNION SELECT expanded.g_id FROM (SELECT CASE WHEN $2 > 0 THEN expand_memberships( group_id, $2 - 1) END AS g_id FROM group_member WHERE member_id = $1) AS expanded WHERE expanded.g_id IS NOT NULL; $$ LANGUAGE 'SQL' STABLE STRICT; -- Expanded group members out to some depth CREATE or REPLACE FUNCTION expand_members( INT8, INT ) RETURNS SETOF INT8 AS $$ SELECT member_id FROM group_member WHERE group_id = $1 UNION SELECT expanded.m_id FROM (SELECT CASE WHEN $2 > 0 THEN expand_members( member_id, $2 - 1) END AS m_id FROM group_member WHERE group_id = $1) AS expanded WHERE expanded.m_id IS NOT NULL; $$ LANGUAGE 'SQL' STABLE STRICT; -- Privileges from accessor to grantor, by principal_id CREATE or REPLACE FUNCTION pprivs( INT8, INT8, INT ) RETURNS BIT(24) AS $$ DECLARE in_accessor ALIAS FOR $1; in_grantor ALIAS FOR $2; in_depth ALIAS FOR $3; out_conferred BIT(24); BEGIN out_conferred := 0::BIT(24); -- Self can always have full access IF in_grantor = in_accessor THEN RETURN ~ out_conferred; END IF; SELECT bit_or(subquery.privileges) INTO out_conferred FROM ( SELECT privileges FROM grants WHERE by_principal=in_grantor AND by_collection IS NULL AND (to_principal=in_accessor OR to_principal IN (SELECT expand_memberships(in_accessor,in_depth))) UNION SELECT bit_or(sq2.privileges) FROM ( SELECT 32::BIT(24) AS privileges FROM expand_memberships(in_accessor,in_depth) WHERE expand_memberships = in_grantor UNION SELECT default_privileges AS privileges FROM principal WHERE principal_id = in_grantor ) AS sq2 ) AS subquery ; IF out_conferred IS NULL THEN SELECT default_privileges INTO out_conferred FROM principal WHERE principal_id = in_grantor; END IF; RETURN out_conferred; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; -- Privileges from accessor to grantor, by user_no CREATE or REPLACE FUNCTION uprivs( INT8, INT8, INT ) RETURNS BIT(24) AS $$ DECLARE in_accessor ALIAS FOR $1; in_grantor ALIAS FOR $2; in_depth ALIAS FOR $3; out_conferred BIT(24); BEGIN out_conferred := 0::BIT(24); -- Self can always have full access IF in_grantor = in_accessor THEN RETURN ~ out_conferred; END IF; SELECT pprivs( p1.principal_id, p2.principal_id, in_depth ) INTO out_conferred FROM principal p1, principal p2 WHERE p1.user_no = in_accessor AND p2.user_no = in_grantor; RETURN out_conferred; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; -- Privileges from accessor (by principal_id) to path CREATE or REPLACE FUNCTION path_privs( INT8, TEXT, INT ) RETURNS BIT(24) AS $$ DECLARE in_accessor ALIAS FOR $1; in_path ALIAS FOR $2; in_depth ALIAS FOR $3; alt1_path TEXT; alt2_path TEXT; grantor_collection INT8; grantor_principal INT8; collection_path TEXT; collection_privileges BIT(24); out_conferred BIT(24); BEGIN out_conferred := 0::BIT(24); IF in_path ~ '^/?$' THEN -- RAISE NOTICE 'Collection is root: Collection: %', in_path; RETURN 1; -- basic read privileges on root directory END IF; -- We need to canonicalise the path, so: -- If it matches '/' + some characters (+ optional '/') => a principal URL IF in_path ~ '^/[^/]+/?$' THEN alt1_path := replace(in_path, '/', ''); SELECT pprivs(in_accessor,principal_id, in_depth) INTO out_conferred FROM usr JOIN principal USING(user_no) WHERE username = alt1_path; -- RAISE NOTICE 'Path is Principal: Principal: %, Collection: %, Permissions: %', in_accessor, in_path, out_conferred; RETURN out_conferred; END IF; -- Otherwise look for the longest segment matching up to the last '/', or if we append one, or if we replace a final '.ics' with one. alt1_path := in_path; IF alt1_path ~ E'\\.ics$' THEN alt1_path := substr(alt1_path, 1, length(alt1_path) - 4) || '/'; END IF; alt2_path := regexp_replace( in_path, '[^/]*$', ''); SELECT collection.collection_id, grantor.principal_id, collection.dav_name, collection.default_privileges INTO grantor_collection, grantor_principal, collection_path, collection_privileges FROM collection JOIN principal grantor USING (user_no) WHERE dav_name = in_path || '/' OR dav_name = alt1_path OR dav_name = alt2_path ORDER BY LENGTH(collection.dav_name) DESC LIMIT 1; -- Self will always need full access to their own collections! IF grantor_principal = in_accessor THEN -- RAISE NOTICE 'Principal IS owner: Principal: %, Collection: %', in_accessor, in_path; RETURN ~ out_conferred; END IF; SELECT bit_or(privileges) INTO out_conferred FROM grants WHERE by_collection = grantor_collection AND (to_principal=in_accessor OR to_principal IN (SELECT expand_memberships(in_accessor,in_depth))); IF out_conferred IS NULL THEN IF collection_privileges IS NULL THEN IF grantor_principal IS NULL THEN alt1_path := regexp_replace( in_path, '/[^/]+/?$', '/'); SELECT path_privs(in_accessor,alt1_path,in_depth) INTO out_conferred; -- RAISE NOTICE 'Collection is NULL: Principal: %, Collection: %, Permissions: %', in_accessor, in_path, out_conferred; ELSE SELECT pprivs(in_accessor,grantor_principal,in_depth) INTO out_conferred; -- RAISE NOTICE 'Collection priveleges are NULL: Principal: %, Collection: %, Permissions: %', in_accessor, in_path, out_conferred; END IF; ELSE out_conferred := collection_privileges; -- RAISE NOTICE 'Default Collection priveleges apply: Principal: %, Collection: %, Permissions: %', in_accessor, in_path, out_conferred; END IF; END IF; RETURN out_conferred; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; -- List a user's memberships as a text string CREATE or REPLACE FUNCTION is_member_of_list( INT8 ) RETURNS TEXT AS $$ DECLARE in_member_id ALIAS FOR $1; m RECORD; mlist TEXT; BEGIN mlist := ''; FOR m IN SELECT displayname, group_id FROM group_member JOIN principal ON (group_id = principal_id) WHERE member_id = in_member_id LOOP mlist := mlist || CASE WHEN mlist = '' THEN '' ELSE ', ' END || COALESCE( m.displayname, m.group_id::text); END LOOP; RETURN mlist; END; $$ LANGUAGE 'plpgsql' STRICT; -- List a user's members as a text string CREATE or REPLACE FUNCTION has_members_list( INT8 ) RETURNS TEXT AS $$ DECLARE in_member_id ALIAS FOR $1; m RECORD; mlist TEXT; BEGIN mlist := ''; FOR m IN SELECT displayname, group_id FROM group_member JOIN principal ON (member_id = principal_id) WHERE group_id = in_member_id LOOP mlist := mlist || CASE WHEN mlist = '' THEN '' ELSE ', ' END || COALESCE( m.displayname, m.group_id::text); END LOOP; RETURN mlist; END; $$ LANGUAGE 'plpgsql' STRICT; -- List the privileges as a text string CREATE or REPLACE FUNCTION privileges_list( BIT(24) ) RETURNS TEXT AS $$ DECLARE in_privileges ALIAS FOR $1; privileges TEXT[]; plist TEXT; start INT; finish INT; i INT; BEGIN plist := ''; privileges := bits_to_privilege(in_privileges); SELECT array_lower(privileges,1) INTO start; IF start IS NOT NULL THEN SELECT array_upper(privileges,1) INTO finish; FOR i IN start .. finish LOOP plist := plist || CASE WHEN plist = '' THEN '' ELSE ', ' END || privileges[i]; END LOOP; END IF; RETURN plist; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; DROP TRIGGER principal_modified ON principal CASCADE; CREATE or REPLACE FUNCTION principal_modified() RETURNS TRIGGER AS $$ DECLARE BEGIN -- in case we trigger on other events in future IF TG_OP = 'UPDATE' THEN IF NEW.type_id != OLD.type_id THEN UPDATE grants SET is_group = (NEW.type_id = 3) WHERE grants.to_principal = NEW.principal_id; END IF; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER principal_modified AFTER UPDATE ON principal FOR EACH ROW EXECUTE PROCEDURE principal_modified(); DROP TRIGGER grants_modified ON grants CASCADE; CREATE or REPLACE FUNCTION grants_modified() RETURNS TRIGGER AS $$ DECLARE old_to_principal INT8; new_is_group BOOL; BEGIN -- in case we trigger on other events in future IF TG_OP = 'INSERT' THEN old_to_principal := NULL; ELSE old_to_principal := OLD.to_principal; END IF; IF TG_OP = 'INSERT' OR NEW.to_principal != old_to_principal THEN SELECT (type_id = 3) INTO new_is_group FROM principal WHERE principal_id = NEW.to_principal; IF NEW.is_group != new_is_group THEN NEW.is_group := new_is_group; END IF; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER grants_modified AFTER INSERT OR UPDATE ON grants FOR EACH ROW EXECUTE PROCEDURE grants_modified(); -- An expanded list of the grants this principal has access to CREATE or REPLACE FUNCTION p_has_proxy_access_to( INT8, INT ) RETURNS SETOF INT8 AS $$ SELECT by_principal FROM ( SELECT by_principal FROM grants WHERE to_principal IN (SELECT $1 UNION SELECT expand_memberships($1,$2)) AND (privileges & 5::BIT(24)) != 0::BIT(24) AND by_collection IS NULL AND by_principal != $1 UNION SELECT principal_id AS by_principal FROM principal WHERE (default_privileges & 5::BIT(24)) != 0::BIT(24) AND principal_id != $1 ) subquery; $$ LANGUAGE 'SQL' STABLE STRICT; -- A list of the principals who can proxy to this principal CREATE or REPLACE FUNCTION grants_proxy_access_from_p( INT8, INT ) RETURNS SETOF INT8 AS $$ SELECT DISTINCT by_principal FROM grants WHERE by_collection IS NULL AND by_principal != $1 AND by_principal IN (SELECT expand_members(g2.to_principal,$2) FROM grants g2 WHERE g2.by_principal = $1) ; $$ LANGUAGE 'SQL' STABLE STRICT; -- New in 1.2.7 CREATE or REPLACE FUNCTION write_sync_change( INT8, INT, TEXT ) RETURNS BOOLEAN AS $$ DECLARE in_collection_id ALIAS FOR $1; in_status ALIAS FOR $2; in_dav_name ALIAS FOR $3; tmp_int INT8; BEGIN SELECT 1 INTO tmp_int FROM sync_tokens WHERE collection_id = in_collection_id LIMIT 1; IF NOT FOUND THEN RETURN FALSE; END IF; SELECT dav_id INTO tmp_int FROM caldav_data WHERE dav_name = in_dav_name; INSERT INTO sync_changes ( collection_id, sync_status, dav_id, dav_name) VALUES( in_collection_id, in_status, tmp_int, in_dav_name); RETURN TRUE; END $$ LANGUAGE 'PlPgSQL' VOLATILE STRICT; CREATE or REPLACE FUNCTION new_sync_token( INT8, INT8 ) RETURNS INT8 AS $$ DECLARE in_old_sync_token ALIAS FOR $1; in_collection_id ALIAS FOR $2; tmp_int INT8; new_token sync_tokens.sync_token%TYPE; old_modification_time sync_tokens.modification_time%TYPE; BEGIN IF in_old_sync_token > 0 THEN SELECT modification_time INTO old_modification_time FROM sync_tokens WHERE sync_token = in_old_sync_token AND collection_id = in_collection_id; IF NOT FOUND THEN -- They are in an inconsistent state: we return NULL so they can re-start the process RETURN NULL; END IF; END IF; -- Find the most recent sync_token SELECT sync_token, modification_time INTO new_token, old_modification_time FROM sync_tokens WHERE collection_id = in_collection_id ORDER BY modification_time DESC LIMIT 1; IF FOUND THEN SELECT 1 INTO tmp_int FROM sync_changes WHERE collection_id = in_collection_id AND sync_time > old_modification_time LIMIT 1; IF NOT FOUND THEN -- Return the latest sync_token we have for this collection, since there are no changes. RETURN new_token; END IF; END IF; -- Looks like we need a new sync_token for this collection... SELECT nextval('sync_tokens_sync_token_seq') INTO new_token; INSERT INTO sync_tokens(collection_id, sync_token) VALUES( in_collection_id, new_token ); -- Having created our new token we do some clean-up of old tokens SELECT modification_time, sync_token INTO old_modification_time, tmp_int FROM sync_tokens WHERE collection_id = in_collection_id AND modification_time < (current_timestamp - '7 days'::interval) ORDER BY collection_id, modification_time DESC; DELETE FROM sync_changes WHERE collection_id = in_collection_id AND sync_time < old_modification_time; DELETE FROM sync_tokens WHERE collection_id = in_collection_id AND sync_token < tmp_int; -- Returning the new token RETURN new_token; END $$ LANGUAGE 'PlPgSQL' STRICT; DROP TRIGGER alarm_changed ON calendar_alarm CASCADE; CREATE or REPLACE FUNCTION alarm_changed() RETURNS TRIGGER AS $$ DECLARE oldcomponent TEXT; newcomponent TEXT; BEGIN -- in case we trigger on other events in future IF TG_OP = 'UPDATE' THEN IF NEW.component != OLD.component THEN UPDATE caldav_data SET caldav_data = replace( caldav_data, OLD.component, NEW.component ), dav_etag = md5(replace( caldav_data, OLD.component, NEW.component )) WHERE caldav_data.dav_id = NEW.dav_id; END IF; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER alarm_changed AFTER UPDATE ON calendar_alarm FOR EACH ROW EXECUTE PROCEDURE alarm_changed(); CREATE or REPLACE FUNCTION real_path_exists( TEXT ) RETURNS BOOLEAN AS $$ DECLARE in_path ALIAS FOR $1; tmp BOOLEAN; BEGIN IF in_path = '/' THEN RETURN TRUE; END IF; IF in_path ~ '^/[^/]+/$' THEN SELECT TRUE INTO tmp FROM usr WHERE username = substring( in_path from 2 for length(in_path) - 2); IF FOUND THEN RETURN TRUE; END IF; ELSE IF in_path ~ '^/.*/$' THEN SELECT TRUE INTO tmp FROM collection WHERE dav_name = in_path; IF FOUND THEN RETURN TRUE; END IF; END IF; END IF; RETURN FALSE; END; $$ LANGUAGE plpgsql ; CREATE or REPLACE FUNCTION collections_within( INT, INT ) RETURNS SETOF INT AS $$ DECLARE in_collection_id ALIAS FOR $1; in_depth ALIAS FOR $2; resource_id INT; found_some BOOLEAN; BEGIN in_depth := in_depth - 1; found_some = FALSE; FOR resource_id IN SELECT b.bound_source_id FROM dav_binding b JOIN collection pc ON (b.parent_container = pc.dav_name) WHERE pc.collection_id = in_collection_id LOOP found_some = TRUE; RETURN NEXT resource_id; IF in_depth > 0 THEN FOR resource_id IN SELECT * FROM collections_within( resource_id, in_depth ) LOOP RETURN NEXT resource_id; END LOOP; END IF; END LOOP; FOR resource_id IN SELECT c.collection_id FROM collection c JOIN collection pc ON (c.parent_container = pc.dav_name) WHERE pc.collection_id = in_collection_id LOOP found_some = TRUE; RETURN NEXT resource_id; IF in_depth > 0 THEN FOR resource_id IN SELECT * FROM collections_within( resource_id, in_depth ) LOOP RETURN NEXT resource_id; END LOOP; END IF; END LOOP; IF found_some THEN RETURN; END IF; FOR resource_id IN SELECT c.collection_id FROM collection c JOIN dav_principal pc ON (c.parent_container = pc.dav_name) WHERE pc.principal_id = in_collection_id LOOP RETURN NEXT resource_id; IF in_depth > 0 THEN FOR resource_id IN SELECT * FROM collections_within( resource_id, in_depth ) LOOP RETURN NEXT resource_id; END LOOP; END IF; END LOOP; END; $$ LANGUAGE plpgsql ; davical-1.1.1/dba/windows/0000755000000000000000000000000011776303357012237 5ustar davical-1.1.1/dba/windows/create-database.bat0000644000000000000000000001237411246135773015740 0ustar @echo off rem Build the DAViCal database rem BAT file changes are internal only setlocal if db%1 EQU db ( echo Usage: create-database dbnameprefix [adminpassword [pguser]] exit /B 1 ) set DBNAME=%1-davical set ADMINPW=%2 set DBADIR=%CD%\.. rem Attempt to locate the AWL directory set AWLDIR=%DBADIR%\..\..\awl\dba echo %AWLDIR% if EXIST %AWLDIR%\awl-tables.sql ( rem awldir=%AWLDIR% ) ELSE ( echo awl directory not found exit /B 2 ) rem Set DB user, web user, DB config directory, Windows DB config directory set AWL_DBAUSER=davical_dba set AWL_APPUSER=davical_app set DBA=%AWL_DBAUSER% rem Need PostgreSQL location if DEFINED %PGDIR% ( rem Use existing variable ) ELSE ( if EXIST "c:\Program Files\PostgreSQL\8.3\bin\createuser" ( set PGDIR="c:\Program Files\PostgreSQL\8.3\bin" ) ) echo PGDIR=%PGDIR% rem set PGDIR=%PGLOCALEDIR%\..\..\bin rem Get the major version for PostgreSQL rem set DBVERSION="`%PGDIR\psql -qAt -c "SELECT version();" template1 | cut -f2 -d' ' | cut -f1-2 -d'.'`" rem Show general info IF usr%3 NEQ usr ( set USERNAME=%3 ) echo username=%USERNAME% rem Create DB user, web user %PGDIR%\createuser -U %USERNAME% --no-createdb --no-createrole --no-superuser %AWL_DBAUSER% %PGDIR%\createuser -U %USERNAME% --no-createdb --no-createrole --no-superuser %AWL_APPUSER% echo Creating DB=%DBNAME% %PGDIR%\createdb -E UTF8 -T template0 -U %USERNAME% %DBNAME% if %ERRORLEVEL% NEQ 0 ( echo Unable to create database exit /B 2 ) rem This will fail if the language already exists, but it should not rem because we created from template0. %PGDIR%\createlang -U %USERNAME% plpgsql %DBNAME% rem Test if egrep is available rem You can download egrep.exe for Windows e.g. from UnxUtils: http://unxutils.sourceforge.net/): egrep 2>NULL echo egrep results: %ERRORLEVEL% if %ERRORLEVEL% EQU 3 ( rem No egrep rem Load the AWL base tables and schema management tables echo load windows\awl-tables.sql [no egrep] %PGDIR%\psql -q -f %AWLDIR/awl-tables.sql %DBNAME% %USERNAME% 2>&1 echo load windows\schema-management.sql [no egrep] %PGDIR%\psql -q -f %AWLDIR%/schema-management.sql %DBNAME% %USERNAME% 2>&1 rem Load the DAViCal tables echo load davical [no egrep] %PGDIR%\psql -q -f %DBADIR%\davical.sql %DBNAME% %USERNAME% 2>&1 ) ELSE ( rem egrep is available rem Load the AWL base tables and schema management tables echo load windows\awl-tables [egrep] %PGDIR%\psql -q -f %AWLDIR%/awl-tables.sql %DBNAME% %USERNAME% 2>&1 | egrep -v "(^CREATE |^GRANT|^BEGIN|^COMMIT| NOTICE: )" echo load WINDOWS schema-management [egrep] %PGDIR%\psql -q -f %AWLDIR%/schema-management.sql %DBNAME% %USERNAME% 2>&1 | egrep -v "(^CREATE |^GRANT|^BEGIN|^COMMIT| NOTICE: |^t$)" rem Load the DAViCal tables echo load davical [egrep] %PGDIR%\psql -q -f %DBADIR%/davical.sql %DBNAME% %USERNAME% 2>&1 | egrep -v "(^CREATE |^GRANT|^BEGIN|^COMMIT| NOTICE: |^t$)" ) del NULL echo load caldav_functions %PGDIR%\psql -q -f %DBADIR%/caldav_functions.sql %DBNAME% %USERNAME% echo TBD: Set permissions for the application DB user on the database rem if EXIST %DBADIR%\update-davical-database ( rem %DBADIR%\update-davical-database --dbname %DBNAME% --appuser %AWL_APPUSER% --nopatch --owner %AWL_DBAUSER% rem ) ELSE ( rem if EXIST %DBADIR%\..\update-davical-database ( rem %DBADIR%\..\update-davical-database --dbname %DBNAME% --appuser %AWL_APPUSER% --nopatch --owner %AWL_DBAUSER% rem ) ELSE ( rem echo Could not find update-davical-database...ignoring rem ) rem ) rem if %ERRORLEVEL% NEQ 0 ( rem echo * * * * ERROR * * * * rem echo The database administration utility failed. This is usually due to the Perl YAML rem echo or the Perl DBD::Pg libraries not being available. rem echo See: http://wiki.davical.org/w/Install_Errors/No_Perl_YAML rem exit /B 2 rem ) rem Load the required base data echo load base-data %PGDIR%\psql -q -f %DBADIR%/base-data.sql %DBNAME% %USERNAME% rem We can override the admin password generation for regression testing predictability rem if [ %ADMINPW}" = "" ] ; then rem # rem # Generate a random administrative password. If pwgen is available we'll use that, rem # otherwise try and hack something up using a few standard utilities rem ADMINPW="`pwgen -Bcny 2>/dev/null | tr \"\\\'\" '^='`" rem fi rem rem if [ "$ADMINPW" = "" ] ; then rem # OK. They didn't supply one, and pwgen didn't work, so we hack something rem # together from /dev/random ... rem ADMINPW="`dd if=/dev/urandom bs=512 count=1 2>/dev/null | tr -c -d "[:alnum:]" | cut -c2-9`" rem fi rem rem # Right. We're getting desperate now. We'll have to use a default password rem # and hope that they change it to something more sensible. IF pw%ADMINPW% EQU pw ( set ADMINPW=please change this password ) rem fi %PGDIR%\psql -q -c "UPDATE usr SET password = '**%ADMINPW%' WHERE user_no = 1;" %DBNAME% %USERNAME% echo The password for the 'admin' user has been set to "%ADMINPW%" rem The supported locales are in a separate file to make them easier to upgrade %PGDIR%\psql -q -f %DBADIR%/supported_locales.sql %DBNAME% %USERNAME% echo DONE :END endlocal davical-1.1.1/debian/0000755000000000000000000000000011776303362011235 5ustar davical-1.1.1/debian/keepme0000644000000000000000000000000011215137004012376 0ustar davical-1.1.1/debian/davical-doc.docs0000644000000000000000000000003011215137004014230 0ustar docs/website/ docs/api/ davical-1.1.1/debian/ignore_these_files0000644000000000000000000000011511446014440015000 0ustar docs/website/wiki htdocs/.gitignore inc/test-RRULE.php inc/test-RRULE-v2.php davical-1.1.1/debian/davical-doc.install0000644000000000000000000000000011215137004014743 0ustar davical-1.1.1/debian/copyright0000644000000000000000000000370311633117640013165 0ustar This package was debianized by Andrew McMillan It was downloaded from http://debian.mcmillan.net.nz/packages/davical/ Upstream Author: Andrew McMillan Copyright: 2006-2011 Andrew McMillan This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA You are free to distribute this software under the terms of the GNU General Public License. On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL file. License for Translation Building code ===================================== The following files inherit their license separately: scripts/po/extract.pl scripts/po/rebuild-translations.sh The process used for building the translations for DAViCal is based on prior code originally from the Horde project and subsequently from the Gallery project. It has also been somewhat further modified here. The applicable Horde license is the LGPL, as identified here: http://cvs.horde.org/co.php/horde/COPYING?r=2.1 Authors: Copyright 2000-2002 Joris Braakman Copyright 2001-2002 Chuck Hagenbuch Copyright 2001-2002 Jan Schneider Copyright 2002-2003 Bharat Mediratta Copyright 2006-2008 Andrew McMillan davical-1.1.1/debian/source/0000755000000000000000000000000011776303357012541 5ustar davical-1.1.1/debian/source/format0000644000000000000000000000001511651212132013726 0ustar 3.0 (native) davical-1.1.1/debian/davical.prerm0000644000000000000000000000044311743107074013704 0ustar #!/bin/sh set -e [ -n "${DEBUG}" ] && set -o xtrace PACKAGE=::package:: [ -n "${DEBUG}" ] && echo "PreRM Parameters: $@" case $1 in remove) # This file might be hanging around in some cases. Fixes Bug#668980 rm -f /var/log/davical-upgrade.log || true ;; esac #DEBHELPER# davical-1.1.1/debian/davical.install0000644000000000000000000000060011651212132014206 0ustar dba htdocs inc locale usr/share/davical debian/keepme etc/davical/.keep config/example-config.php usr/share/doc/davical/examples/davical-conf.php config/example-administration.yml usr/share/doc/davical/examples/administration.yml config/debug-config.php config/other-config.php usr/share/doc/davical/examples scripts/cron-sync-ldap.php scripts/tz-update.php usr/share/davical/scripts davical-1.1.1/debian/control0000644000000000000000000000272011776150052012635 0ustar Source: davical Section: web Priority: extra Maintainer: Andrew McMillan Standards-Version: 3.9.2 Build-Depends: debhelper (>= 7), libawl-php, gettext Vcs-git: git://repo.or.cz/davical.git Vcs-browser: http://repo.or.cz/w/davical.git Homepage: http://davical.org/ Package: davical Architecture: all Depends: ${misc:Depends}, debconf (>= 1.0.32), php5-pgsql, postgresql-client (>= 8.1), libawl-php (>= 0.53-1~), libawl-php (<< 0.54), libdbd-pg-perl, libyaml-perl Recommends: postgresql (>= 8.3) Description: The DAViCal CalDAV & CardDAV Server The DAViCal CalDAV Server is designed to store CalDAV calendars and CardDAV addressbooks, such as those from Evolution, Sunbird/Lightning, Mulberry, iCal, iPhone or SOHO Organizer, in a central location, providing shared calendars, free/busy publication and a basic administration interface. Package: davical-doc Section: doc Architecture: all Depends: ${misc:Depends} Description: The DAViCal CalDAV & CardDAV Server - technical documentation The DAViCal CalDAV Server is designed to store CalDAV calendars and CardDAV addressbooks, such as those from Evolution, Sunbird/Lightning, Mulberry, iCal, iPhone or SOHO Organizer, in a central location, providing shared calendars, free/busy publication and a basic administration interface. . This package contains detailed technical documentation for the classes and methods in the DAViCal programs. Some user-centric configuration documentation is also included. davical-1.1.1/debian/compat0000644000000000000000000000000211026156213012420 0ustar 5 davical-1.1.1/debian/davical.postrm0000644000000000000000000000025311215137004014070 0ustar #!/bin/sh set -e [ -n "${DEBUG}" ] && set -o xtrace PACKAGE=::package:: [ -n "${DEBUG}" ] && echo "PostRM Parameters: $@" case $1 in purge) ;; esac #DEBHELPER# davical-1.1.1/debian/davical.postinst0000644000000000000000000000060411633117640014437 0ustar #!/bin/sh set -e [ -n "${DEBUG}" ] && set -o xtrace PACKAGE=::package:: [ -n "${DEBUG}" ] && echo "PostInst Parameters: $@" case $1 in configure) # Attempt to run the database upgrade script with default # settings, but ignore any possible failure. /usr/share/davical/dba/update-davical-database > /var/log/davical-upgrade.log 2>&1 || true ;; esac #DEBHELPER# davical-1.1.1/debian/README.Debian0000644000000000000000000000074711215137004013270 0ustar DAViCal for Debian ---------------- This is a CalDAV Server which I wrote because I was getting sick of the length of time it was taking to make worthwhile CalDAV server-side implementations that worked OK with Evolution. Then, when I finally did find a CalDAV store that worked, I found that it was quite bloated because it wanted to do vast amounts of irrelevant stuff. Well, irrelevant for me in any case. Andrew McMillan , Tue. 2 May 2006 07:11:22 +1200 davical-1.1.1/debian/rules0000755000000000000000000000364311711710027012310 0ustar #!/usr/bin/make -f # # rules for DAViCal # # This file allows you to build any of the binary packages independantly, via binary- targets. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # This has to be exported to make some magic below work. export DH_OPTIONS build: build-stamp build-stamp: dh_testdir $(MAKE) touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp $(MAKE) clean -rm -f build dh_clean install: DH_OPTIONS= install: build dh_testdir dh_testroot dh_prep dh_installdirs dh_install # This single target is used to build all the packages, all at once, or # one at a time. So keep in mind: any options passed to commands here will # affect _all_ packages. Anything you want to only affect one package # should be put in another target, such as the install target. binary-common: dh_testdir dh_testroot dh_installchangelogs ChangeLog dh_installdocs --exclude=.gitignore # dh_installexamples # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installcatalogs # dh_installpam # dh_installmime # dh_installinit # dh_installman # dh_installcron # dh_installinfo # dh_installwm # dh_installudev # dh_lintian # dh_undocumented # dh_strip # dh_link dh_compress --exclude=.js dh_fixperms rm debian/davical/usr/share/davical/htdocs/.htaccess || true # dh_perl # dh_python # dh_makeshlibs dh_installdeb # dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb # Build architecture independant packages using the common target. binary-indep: build install $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common # Build architecture dependant packages using the common target. binary-arch: build install # Any other binary targets build just one binary package at a time. binary-%: build install make -f debian/rules binary-common DH_OPTIONS=-p$* binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary-common binary install davical-1.1.1/debian/davical.docs0000644000000000000000000000002411217636053013502 0ustar README TODO CREDITS davical-1.1.1/debian/changelog0000644000000000000000000005452211776303356013122 0ustar davical (1.1.1-1) unstable; urgency=high * New upstream release (closes:#656392) -- Andrew McMillan Mon, 09 Jul 2012 01:11:10 +1200 davical (1.1.0-1) unstable; urgency=low * New upstream release * New release to Debian (closes:#668980, #661985). -- Andrew McMillan Sun, 17 Jun 2012 23:01:18 +1200 davical (1.0.2-1) unstable; urgency=low * New upstream release. * New release to Debian (closes:#643809, #618957). -- Andrew McMillan Fri, 13 Jan 2012 23:44:36 +1300 davical (1.0.1-1) unstable; urgency=low * New upstream release. -- Andrew McMillan Thu, 05 Jan 2012 12:07:18 +1300 davical (1.0.0-1) unstable; urgency=low * New upstream release. -- Andrew McMillan Wed, 04 Jan 2012 16:41:50 +1300 davical (0.9.9.7-1) unstable; urgency=low * New upstream release. -- Andrew McMillan Mon, 24 Oct 2011 20:09:10 +1300 davical (0.9.9.6-1) unstable; urgency=low * New upstream release (closes:#628566,#619513,#619477,#619515,#641591) * Switch to dpkg-source 3.0 (native) format -- Andrew McMillan Tue, 27 Sep 2011 13:23:28 +1300 davical (0.9.9.5-1) unstable; urgency=low * New upstream release (closes:#610612, #639262) -- Andrew McMillan Tue, 13 Sep 2011 13:15:50 +1200 davical (0.9.9.4-1) unstable; urgency=low * New upstream release * Run update-davical-database in postinst (closes: #578357) * Remove ancient references to rscds package. -- Andrew McMillan Tue, 28 Dec 2010 02:15:56 +1300 davical (0.9.9.3-0) unstable; urgency=low * New upstream release -- Andrew McMillan Fri, 24 Sep 2010 12:50:41 +1200 davical (0.9.9.2-0) unstable; urgency=low * New upstream release -- Andrew McMillan Tue, 21 Sep 2010 14:28:04 +1200 davical (0.9.9.1-0) unstable; urgency=low * New upstream release -- Andrew McMillan Mon, 13 Sep 2010 21:30:32 +1200 davical (0.9.9-0) unstable; urgency=low * New upstream release (closes: #508673, #573687) -- Andrew McMillan Sat, 17 Apr 2010 13:19:24 +1200 davical (0.9.8.4-0) unstable; urgency=low * New upstream release -- Andrew McMillan Tue, 09 Mar 2010 09:51:07 +1300 davical (0.9.8.3-0) unstable; urgency=low * New upstream release -- Andrew McMillan Thu, 25 Feb 2010 11:39:05 +1300 davical (0.9.8.2-0) unstable; urgency=low * New upstream release -- Andrew McMillan Tue, 23 Feb 2010 23:26:10 +1300 davical (0.9.8.1-0) unstable; urgency=low * New upstream release -- Andrew McMillan Fri, 05 Feb 2010 08:51:01 -0800 davical (0.9.8-0) unstable; urgency=low * New upstream release (closes: #561288, #561285) -- Andrew McMillan Fri, 25 Dec 2009 00:49:47 +1300 davical (0.9.7.6-0) unstable; urgency=low * New upstream release. -- Andrew McMillan Sat, 24 Oct 2009 12:42:37 +1300 davical (0.9.7.5-0) unstable; urgency=low * New upstream release. -- Andrew McMillan Thu, 22 Oct 2009 20:15:38 +1300 davical (0.9.7.4-0) unstable; urgency=low * New upstream release. -- Andrew McMillan Wed, 07 Oct 2009 17:03:14 -0700 davical (0.9.7.3-0) unstable; urgency=low * New upstream release. -- Andrew McMillan Tue, 06 Oct 2009 12:41:48 -0700 davical (0.9.7.2-0) unstable; urgency=low * New upstream version. -- Andrew McMillan Sat, 12 Sep 2009 10:33:57 +1200 davical (0.9.7.1-0) unstable; urgency=low * New upstream release. * Updated french translation from Christian Perrier (closes: #537715) * Allow postgresql-client-8.4 as a possible dependency. -- Andrew McMillan Mon, 24 Aug 2009 12:32:51 +1200 davical (0.9.7-0) unstable; urgency=low * New upstream release. -- Andrew McMillan Mon, 22 Jun 2009 13:56:14 +1200 davical (0.9.6.3) unstable; urgency=low * General bug fixing. * Added Italian locale from Alessandro De Zorzi * Adjust timezone handling in regression testing (Markus Warg). * Many fixes to caldav-client from Michael Rasmussen. * Update caldav-client to use direct socket IO from Andres Obrero. * Added dummy handler for POST CANCEL events for iCal compatibilty (Wolfgang Herget). * Support usernames with spaces or punctuation. * Correct errors in handling confidential events. * Improved response to GET for calendar with a single event. * Documentation corrections. * Remove the misguided hide_todo configuration option. * Fix a bug in hiding alarms. * Deprecate 'collections_always_exist' config option and restrict it's scope. * Updated French translation. * Updated relational integrity constraints. * Fix database versioning. -- Andrew McMillan Fri, 10 Apr 2009 23:55:18 +1200 davical (0.9.6.2) unstable; urgency=low * Fix creation of database when template1 has pl/pgsql installed. * Improvements to regression testing. * Switch to use iCalComponent object rather than iCalendar, in many cases. * Calculate DTEND when it is not set according to RFC2445. * Much improved XML namespace handling. * Configuration setting to control whether I should see appointments where I am organizer/attendee, even if they are PRIVATE and not in my own calendar. * Updated French translation (closes: #505861) * Add facility to delete collections through the management interface. -- Andrew McMillan Tue, 18 Nov 2008 18:22:33 +1300 davical (0.9.6.1) unstable; urgency=low * Fix LOCK timeout handling. * Handle match on calendar-home-set in principal-property-search REPORT. -- Andrew McMillan Sun, 02 Nov 2008 23:17:12 +1300 davical (0.9.6) unstable; urgency=low * Corect debian/control dependencies. * GET request for a collection URL with no events will now return an empty VCALENDAR rather than a 404 * Added free/busy permission handling to the POST free/busy request handler -- Andrew McMillan Sat, 01 Nov 2008 11:02:41 +1300 davical (0.9.5.91) unstable; urgency=low * Enable headers for caldav scheduling. -- Andrew McMillan Wed, 29 Oct 2008 08:48:26 +1300 davical (0.9.5.90) unstable; urgency=low * Updated french debconf templates (closes: #501266) * Add support for Apple getctag extensions. * Add configuration to allow disabling PUT of collection. * Extension of caldav-client.php inspired by Daniel Serrabou. * Bugfix for importing of events with multiple VEVENT modifiers. * Support for POST freebusy request. * Convert RRule functions to newer PostgreSQL function syntax. * Add support for proposed calendar-user-principal property. * Bugfixes and coverage improvements in recurrence rule calculations. * Cleaned up lots of uninitialised variable warnings. -- Andrew McMillan Tue, 28 Oct 2008 20:43:21 +1300 davical (0.9.5.3) unstable; urgency=low * Fix translation inefficiencies (closes: #495307) * Add the built docs into the source, since PhpDocumentor is not in Debian. * Fixes for lintian cleanliness. * Renaming stuff from RSCDS to DAViCal. -- Andrew McMillan Thu, 18 Sep 2008 00:14:08 +1200 davical (0.9.5.2) unstable; urgency=low * Fix license text for Debian acceptance. * Minor packaging tweaks identified by Debian acceptance procedures. -- Andrew McMillan Tue, 05 Aug 2008 09:43:01 +1200 davical (0.9.5.1) unstable; urgency=low * The name is changing from rscds to davical. * Fix typo in ldap driver. * Remove common problem-causing things from sample config. * Improve query for events in a time period. * Allow for authentication to be external. * Finally upload to Debian (closes: #490444) -- Andrew McMillan Mon, 14 Jul 2008 21:30:06 +1200 rscds (0.9.5) unstable; urgency=low * Allow users to delete their own relationships, not just admin. -- Andrew McMillan Wed, 07 May 2008 21:29:39 +1200 rscds (0.9.4.5) unstable; urgency=low * Fix quoting in create database script. -- Andrew McMillan Mon, 05 May 2008 15:42:09 +1200 rscds (0.9.4.4) unstable; urgency=low * Fix dependencies for postgresql-client. * Fix bug with deletion of relationships. * Add updated German translation from Sykosch Arnold. -- Andrew McMillan Mon, 05 May 2008 15:40:25 +1200 rscds (0.9.4.3) unstable; urgency=low * Work on making the installation process more foolproof. -- Andrew McMillan Sun, 13 Apr 2008 01:02:05 +1200 rscds (0.9.4.2) unstable; urgency=low * Add Japanese translation by Shu NAKAMAE * Reverse logic for maintenance of user relationships. * Rationalise package dependencies. * Improve translatability of admin interface. * Bug fixes and enhancements to LDAP driver. -- Andrew McMillan Sat, 12 Apr 2008 21:16:57 +1200 rscds (0.9.4) unstable; urgency=low * Performance improvements to get_permissions() * Further performance improvements from bypassing get_permissions() * Other performance improvements from refactoring queries * Fix to .ics import to handle timezones correctly. * Work around issues introduced when open_basedir is enabled. * More rscds => davical renaming. * Create users for the database for DBA and application use during installation. * Work around differences in authentication when PHP is used with FastCGI * Fixes to CONFIDENTIAL event handling. -- Andrew McMillan Sat, 09 Feb 2008 22:44:42 +1300 rscds (0.9.3) unstable; urgency=low * Start renaming to DAViCal internally and in documentation. * Fix handling of CONFIDENTIAL events * Fixes to support iCal 3.0.1 and later. * Changes to support SOHO Organizer * Change style of response to Freebusy queries * Various refactoring. * Use relative URLs where possible and refactor to use URL formatting routine. * Start to implement structured support for DAV Principals * Fixes to timezone handling. -- Andrew McMillan Wed, 23 Jan 2008 18:42:49 +1300 rscds (0.9.2) unstable; urgency=low * Add support for principal-url and calendar-home-set properties. * All events should be PUBLIC unless CLASS specifies otherwise. * Calendars can now be set such that all events are PUBLIC. * Add support for automatically added relationships. * Make some use of the improvements to the iCalendar class. * Working with iCal 3.0 from Mac OS 10.5. * Refactoring of driver code for LDAP and external AWL DB. -- Andrew McMillan Sun, 04 Nov 2007 23:31:10 +1300 rscds (0.9.1) unstable; urgency=low * Reduce debug logging noise when debugging is iff * When class is NULL we should consider it to be PUBLIC. * Clean up some uninitialised variable warnings. * Refactoring caldav-PUT to allow calling from a different code path. * State how to make LDAP use an anonymous bind initially. * Include any VTODO in GET for a collection. * Minor permissions changes. * Fix VTODO handling by time-range queries. * Various fixes to LDAP authentication. * Fix permissions for RW access. -- Andrew McMillan Thu, 25 Oct 2007 16:30:06 +1300 rscds (0.9.0) unstable; urgency=low * Changes preparatory to renaming to DAViCal * Security (information leakage) fix from Maxime Delorme * Changes to support newer iCalendar parsing in AWL 0.20 * Add support for DAV::principal-property-search report * Refactoring of DAV report handling to improve extensibility * Much improved DAV property handling * Better support for VTODO and reports on VTODO -- Andrew McMillan Tue, 16 Oct 2007 13:28:16 +1300 rscds (0.8.0) unstable; urgency=low * Check whether a URL missing a trailing '/' might still be a collection. * Fix for REPORT to exclude PRIVATE events. * Show a list of the user's relationships in the admin page. * Add XML with MKCALENDAR support. * Add Polish language support from Rafał Ślubowski * Patch to support reporting of "Busy" for confidential events (Maxime Delorme). * Allow hiding of alarms for calendars which are not ours (Maxime Delorme). * Allow uploading whole calendars (Maxime Delorme). * Basic LDAP authentication (Maxime Delorme) * Add Hungarian (Magyar) language support from Dávid Takács * Ensure username is case-insensitive. * Improve security on viewing other's calendar entries. * Add basic support for installation in a Windows environment. * Add support for automatically creating a user's home calendar. * Add a primary key to the calendar_item table for performance. * Only process the filter criteria on a REPORT once. * Add a basic client library. -- Andrew McMillan Sat, 02 Jun 2007 12:42:21 +1200 rscds (0.7.1) unstable; urgency=low * Add support for PRIVATE events to REPORT, PROPFIND and GET * Fixes to the RRule parsing used for freebusy for PHP5. * Fix various bugs present when used with PHP5. * Fix a bug in create database script which allowed installation without an admin password. * Fix the response code on PUT which should be "204 No Content" rather than "200 OK". * Updated french translation. * Fix function definitions to be compatible with PostgreSQL 7.4 and 8.0. -- Andrew McMillan Sat, 10 Mar 2007 07:54:27 +1300 rscds (0.7.0) unstable; urgency=low * Changes to privacy model for FREEBUSY * Simplify relationships. * Fix internationalisation issues with updating users. * GET/PUT against a collection URL are now interpreted as WebDAV. * Ensure Etag is provided for GET of calendar items. * Removed superseded ics.php interface. People should GET/PUT against calendar collections directly for WebDAV instead. * Cleaned out files that should not be distributed. -- Andrew McMillan Mon, 19 Feb 2007 19:39:57 +1300 rscds (0.6.0) unstable; urgency=low * Add support for LOCK, UNLOCK and PROPPATCH methods. * Refactoring of code to simplify and improve readibility, * General specification compliance fixes and enhancements. * Fix bugs around 'Depth' header handling. * free-busy-query REPORT variant implemented according to caldav-15 draft. * freebusy.php changed to follow REPORT method. * Wrote a library class for dealing with iCalendar repeat rules. * New translation into Dutch by Eelco Maljaars. * New CSS styling for admin pages by Maxime Delorme. -- Andrew McMillan Sun, 24 Dec 2006 10:52:33 +1300 rscds (0.5.2) unstable; urgency=low * Don't send charset with GET since it breaks Evolution. -- Andrew McMillan Wed, 6 Dec 2006 00:03:47 +1300 rscds (0.5.1) unstable; urgency=low * Rebuild package without Wiki. -- Andrew McMillan Mon, 4 Dec 2006 00:10:05 +1300 rscds (0.5.0) unstable; urgency=low * We now support a basic authentication hook to allow external sources of authentication and user information. * Some simple ability has been added to the admin interface to list calendars and events. * When an event is added to a non-existent calendar, the calendar is automatically created (if $c->collections_always_exist is true). * The permissions architecture has been changed to allow extension towards the DAV access standards in due course. * Allow RSCDS to operate as a subdirectory in an existing virtual host. * The PHP register_globals directive need not be enabled any longer. * The RSCDS include directory need not be specified any longer. * RSCDS should now work without generating errors even with E_ALL set in php.ini * Add a Netherlands translation. -- Andrew McMillan Sun, 3 Dec 2006 18:43:47 +1300 rscds (0.4.0) unstable; urgency=low * Added initial Russian translation from Nick Khazov. * Updated Spanish translation from Lorena Paoletti. For the time being this es_AR translation is also being used for es_ES and es_MX in the absence of real translations from there. * Split the supported_locales data out from base_data to allow for easier updating of the supported locales on upgrade. * Fix bug in update-rscds-database which meant that hostname was always wrong. * Add explicit support for the HEAD method. * Start support for PROPPATCH with a placeholder. Put a placeholder in for the freebusy support, so people realise it isn't there yet. * Make the OPTIONS command more complete, with options which are hopefully OK for Mozilla and Evolution. * Added configuration option "enable_row_linking" which people can set to false to support browsers such as Konqueror to disable the javascript making browse rows clickable. * Updates to regression tests. * Minor documentation updates. * Write some basic freebusy support. * Fix bug in permissions application. * Fix failure to delete calendar entry from someone else's calendar which is writable. * When listing all users in a PROPFIND only show the ones that this user has rights for. * Update packaging to depend on libawl-php 0.12, since we now need that as a minimum version. * Create collections if they don't exist when someone PUTs something into them. * Create collections with the correct user_no. -- Andrew McMillan Wed, 22 Nov 2006 23:23:36 +1300 rscds (0.3.1) unstable; urgency=low * Fix bug in handling PUT of modified event where client does not send an If-None-Match header (e.g. Mulberry). * Updated french translation. * Include locale files in package :-) -- Andrew McMillan Mon, 13 Nov 2006 16:15:59 +1300 rscds (0.3.0) unstable; urgency=low * Add a bunch more regression tests. * Remove a non-working workaround for Evolution bug #354855 * More friendly error message when relational integrity constraints prevent deletion of a relationship type. * Don't always apply sample data to database creation. * Initial database framework for identifying supported locales. * Fix GET/PUT to use permissions properly. * Apply i18n framework. * Translations for Deutsch and Argentinian Spanish! * Add an 'administration' page to the website. * Apply permissions to MKCALENDAR and MKCOL * Fix permission calculation function. * Ensure that permissions and path prefixes are being correctly applied. * Check that some smart bastard isn't playing silly buggers with our URL. * French translation by Guillaume Rosquin. * Add 'administration' page to website/docs. * New release. -- Andrew McMillan Fri, 10 Nov 2006 15:20:17 +1300 rscds (0.2.2) unstable; urgency=low * Improvements to styling of maintenance pages. * Removed broken link from relationship_types browser. * Fix bug deleting relationship from user. * Better and more useful front page when you log on. * Fix base data for relationship type of 'Is a member of group' * Much improved (though still imperfect) script for applying updates to the database. * New release -- Andrew McMillan Tue, 31 Oct 2006 11:40:32 +1300 rscds (0.2.1) unstable; urgency=low * New release. -- Andrew McMillan Fri, 27 Oct 2006 12:09:10 +1300 rscds (0.2.0) unstable; urgency=low * A code sanity review and clean up. Much commenting of code and review for behaviour against the specification. * Extend RSCDSUser to allow for addition/deletion of relationships. * Adjust the dba scripts to do update, as well as create. * Develop page for list / delete / add relationship types. * Split the data into base / sample so we know what is essential. -- Andrew McMillan Tue, 17 Oct 2006 10:55:12 +1300 rscds (0.1.6) unstable; urgency=low * Fix some bugs in caldav-REPORT, which was not working with Lightning. * Complete work on PROPFIND so that Mulberry now works. * Add MKCOL, which is based on MKCALENDAR, to support hierarchies of collections better. * Rewrite REPORT to use the new XML libraries. * Commence support of relationships and permissions. * Write new ics.php which allows export of the full repository (for an admin), or a subset of the repository. * That new ics.php allows webcal presentation of the calendars also, so that even if evolution can't support tasks as CalDAV, it can at least refer to tasks someone else puts there with (e.g.) Sunbird. * Started development of a regression testing framework. * Cleaned up code to remove as many warnings as possible. * Make caldav.php work with 'cadaver' for more DAV love. -- Andrew McMillan Sun, 8 Oct 2006 20:13:44 +1300 rscds (0.1.5) unstable; urgency=low * Support for some parts of PROPFIND and MKCALENDAR now in an effort to start to work with Mulberry. Alas an unsuccessful one so far. * User maintenance screens are now functional, although they still do not allow for manipulation of relationships. That's OK because they don't work out the other end yet either! -- Andrew McMillan Sun, 1 Oct 2006 20:46:55 +1300 rscds (0.1.4) unstable; urgency=low * Now working with both Evolution and Lightning+Thunderbird(alpha) * Restructured database to show some sense. * Initial support for TODO items, although either I have it wrong, or Lighning has it wrong. Lightning can write them, but it doesn't read them. -- Andrew McMillan Sun, 24 Sep 2006 17:18:30 +1200 rscds (0.1.3) unstable; urgency=low * Hopefully now fairly much ready to install. -- Andrew McMillan Wed, 13 Sep 2006 14:10:31 +1200 rscds (0.1.2) unstable; urgency=low * Add alternative depends on postgresql-client so we can install this on a machine running Sarge. -- Andrew McMillan Wed, 13 Sep 2006 12:03:53 +1200 rscds (0.1.1) unstable; urgency=low * Time for a real-world-ish release. -- Andrew McMillan Tue, 12 Sep 2006 05:10:32 -0500 rscds (0.1.0) unstable; urgency=low * Initial Debian packaging -- Andrew McMillan Tue, 2 May 2006 07:43:59 +1200 davical-1.1.1/README0000644000000000000000000000224011662273065010671 0ustar DAViCal CalDAV Server by Andrew McMillan. For documentation you are best advised to visit the sourceforge pages or to start searching from http://davical.org/ and see where you end up. There's lots of useful information at http://wiki.davical.org/ as well, and if you want access to update that contact us on IRC or send an e-mail to . Good luck! Andrew McMillan ----------------------------------------------- Copyright: 2006-2011 Andrew McMillan This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA davical-1.1.1/COPYING0000644000000000000000000013004611257015240011037 0ustar In general, DAViCal is licensed under the GPL v2, however some parts of DAViCal inherit licenses from other projects where the source code builds upon the work of others. In particular: scripts/po/extract.pl is licensed under the LGPL v2.1 inc/check_UTF-8.php is licensed under NPL 1.1/GPL 2.0/LGPL 2.1 The following licenses are included in this file: - GPL 2.0 - LGPL 2.1 ================================================================ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ================================================================ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! ================================================================ davical-1.1.1/TODO0000644000000000000000000000144711333057346010506 0ustar Desirable - accept the free/busy information as a POST - more translations of the administration interface - translations of the website. - the ability to see a better list of event data in the admin interface Important - Add ability to delete users & collections - Expose the Admin option to maintenance by admins. - Implement support for the ACL method - Implement support for updating the acl via PROPPATCH - Implement the DAV::acl-principal-prop-set report from RFC3744 - Implement the DAV::principal-match report from RFC3744 - Implement the DAV::principal-search-property-set report from RFC3744 - Implement draft-desruisseaux-caldav-sched specifications. Minor - Check for read-acl privilege to PROPFIND acl - Check for read-current-user-privilege-set to PROPFIND current user privs. davical-1.1.1/testing/0000755000000000000000000000000011776303360011466 5ustar davical-1.1.1/testing/dav_test0000755000000000000000000002225511726255725013241 0ustar #!/usr/bin/perl -w # # Run a test # use strict; use DBI; use Getopt::Long qw(:config permute); # allow mixed args. # Options variables my $debug = 0; my $dsn = "davical"; my $dbuser = ""; my $dbpass = ""; my $webhost = 'mycaldav'; my $althost = 'myempty'; my $testdef; my $suite; my $case; my $helpmeplease = 0; my $dbadir = $0; $dbadir =~ s{/[^/]*$}{}; my $patchdir = $dbadir . "/patches"; GetOptions ('debug!' => \$debug, 'dsn=s' => \$dsn, 'dbuser=s' => \$dbuser, 'dbpass=s' => \$dbpass, 'webhost=s' => \$webhost, 'althost=s' => \$althost, 'test=s' => \$testdef, 'suite=s' => \$suite, 'case=s' => \$case, 'help' => \$helpmeplease ); usage() if ( $helpmeplease || ((!defined($suite) || !defined($case)) && !defined($testdef))); my $dbh; my @arguments = ( "--basic", "--proxy", "", "--insecure" ); push @arguments, "--silent" unless ( $debug ); push @arguments, "--verbose" if ( $debug ); my $url; my $script; my @scripts = ( ); my $is_head_request = 0; my @auth = ( "--user", "user1:user1" ); if ( !defined($testdef) ) { $testdef = "tests/$suite/$case.test"; } my $datafile = $testdef; $datafile =~ s{\.test$}{}; push @arguments, "--header", 'X-DAViCal-Testcase: '.$datafile; $datafile .= '.data'; my $state = ""; my $data_binary; my $sql_variable = ""; my $sql_statement = ""; my $sql_values = {}; my $queries = (); my $replacements = (); open( TEST, '<', $testdef ) or die "Can't open '$testdef'"; while( ) { my $line = $_; # Do any variable replcements we have so far foreach my $variable ( keys %{$sql_values} ) { my $value = $sql_values->{$variable}; $line =~ s/##$variable##/$value/g; } if ( $state ne "" ) { if ( /^END$state$/ ) { if ( $state eq "SQL" ) { get_sql_value( $sql_variable, $sql_values, $sql_statement ); } elsif ( $state eq "DOSQL" ) { do_sql( $sql_statement ); } elsif ( $state eq "QUERY" ) { push @$queries, $sql_statement; } $state = ""; } elsif ( $state eq "DATA" ) { $data_binary .= $line; } elsif ( $state eq "SQL" || $state eq "QUERY" || $state eq "DOSQL" ) { $sql_statement .= $line; } next; } /^\s*(#|$)/ && next; $line =~ /^\s*HEAD\s*(#|$|=)/ && do { push @arguments, "--include"; }; $line =~ /^\s*VERBOSE\s*(#|$|=)/ && do { push @arguments, "--verbose"; }; $line =~ /^\s*NOAUTH\s*(#|$|=)/ && do { @auth = (); }; $line =~ /^\s*DIGEST\s*(#|$|=)/ && do { push @arguments, "--digest"; @auth = ( "--user", $1 ); }; $line =~ /^\s*AUTH\s*=\s*(\S.*)$/ && do { @auth = ( "--user", $1 ); }; $line =~ /^\s*DATA\s*=\s*(\S.*)$/ && do { my $basename = $1; if ( defined($suite) ) { if ( -e "tests/$suite/$basename.data" ) { $datafile="tests/$suite/$basename.data"; } elsif ( -e "tests/$suite/$basename" ) { $datafile="tests/$suite/$basename"; } } elsif ( -e "$basename.data" ) { $datafile="$basename.data"; } elsif ( -e $basename ) { $datafile=$basename; } else { die "Can't find DATA file $basename or $basename.data"; } }; $line =~ /^BEGINDATA\s*$/ && do { $data_binary = ""; $state = "DATA"; }; $line =~ /^GETSQL\s*=\s*(\S.*)$/ && do { $sql_variable = $1; $sql_statement = ""; $state = "SQL"; }; $line =~ /^DOSQL\s*$/ && do { $sql_statement = ""; $state = "DOSQL"; }; $line =~ /^REPLACE\s*=\s*(\S)(.*)$/ && do { my $separator = $1; $2 =~ /^([^$separator]*)$separator([^$separator]*)$separator$/ && do { push @$replacements, { 'pattern' => $1, 'replacement' => $2 }; }; }; $line =~ /^QUERY\s*$/ && do { $sql_statement = ""; $state = "QUERY"; }; $line =~ /^\s*TYPE\s*=\s*(\S.*)$/ && do { if ( $1 eq "HEAD" ) { $is_head_request = 1; } else { push @arguments, "--request", $1; } }; $line =~ /^\s*HEADER\s*=\s*(\S.*)$/ && do { my $arg = $1; $arg =~ s{regression.host}{$webhost}; $arg =~ s{alternate.host}{$althost}; push @arguments, "--header", $arg; }; $line =~ /^\s*URL\s*=\s*(\S.*)$/ && do { $url=$1; $url =~ s{regression.host}{$webhost}; $url =~ s{alternate.host}{$althost}; }; $line =~ /^\s*SCRIPT\s*=\s*(\S.*)$/ && do { $script=$1; $script =~ s{regression.host}{$webhost}; $script =~ s{alternate.host}{$althost}; push @scripts, $script; }; } if ( !defined($url) && !defined($script) ) { print < ) { my $line = $_; foreach my $replacement ( @$replacements ) { $line =~ s/$replacement->{'pattern'}/$replacement->{'replacement'}/; } print $line; } } if ( defined($script) ) { foreach $script ( @scripts ) { open RESULTS, "-|", $script; while( ) { my $line = $_; foreach my $replacement ( @$replacements ) { $line =~ s/$replacement->{'pattern'}/$replacement->{'replacement'}/; } print $line; } } } if ( defined(@{$queries}) && @{$queries} ) { opendb() unless defined($dbh); print "\n"; print STDERR "Processing special queries\n" if ( $debug ); foreach $sql_statement ( @$queries ) { # run SQL statement and dump results, into array of hashes my $results = $dbh->selectall_arrayref($sql_statement, { Slice => {} } ); if ( $dbh->err ) { print $dbh->errstr, "\n"; next; } foreach my $row ( @$results ) { print "Query result ================================================\n" if ( $debug ); my $sep = ""; foreach my $name ( sort keys %$row ) { my $value = $row->{$name}; $value = 'NULL' unless ( defined($value) ); printf("%17.17s: >%s<\n", $name, $value ); } print "\n"; } } } exit(0); =item do_sql( $sql_statement ) Queries the database using the specified statement and ignores the result. =cut sub do_sql { my $sql = shift; opendb() unless defined($dbh); $dbh->do($sql); if ( $dbh->err ) { print $dbh->errstr, "\n"; return; } print "SQL executed successfully.\n"; print $sql, "\n"; } =item get_sql_value( $sql_variable, $sql_values, $sql_statement ) Queries the database using the specified statement and puts the first column of the first row returned into the hash referenced $sql_values->{$sql_variable} for replacement later in the parsing process. =cut sub get_sql_value { my $varname = shift; my $values = shift; my $sql = shift; opendb() unless defined($dbh); my $results = $dbh->selectall_arrayref($sql); if ( $dbh->err ) { print $dbh->errstr, "\n"; return; } print STDERR "RESULT for $varname is ", $results->[0][0], "\n" if ( $debug ); $values->{$varname} = (defined($results->[0][0]) ? $results->[0][0] : ""); } =item opendb() Opens the database connection to the global $dbh handle. Note that the standard PostgreSQL environment variables will also work with DBD::Pg. =cut sub opendb { $dsn = "dbi:Pg:dbname=$dsn"; $dbh = DBI->connect($dsn, $dbuser, $dbpass, { AutoCommit => 1 } ) or die "Can't connect to database $dsn"; } sub usage { print < --case ] | [--test ] This program will read the file 'tests//.test and follow the instructions there. The following options are available for controlling the database, for those test cases which might require it: --dsn [;port=NNNN][;host=example.com] --dbuser --dbpass The test instructions will include lines defining the test like: ================================================= # This is an example URL=http://mycaldav/caldav.php/andrew/ HEADER=Depth: 0 HEADER=Content-type: text/xml TYPE=PROPFIND HEAD DATA=OTHERTEST # This will let you use ##somename## for this value after this GETSQL=somename SELECT column FROM table WHERE criteria ENDSQL # The data can be included in line BEGINDATA ... data content ... ENDDATA # The result could be some SQL output QUERY SELECT something, or, other FROM table ... ENDQUERY REPLACE=/pattern/replacement/options ================================================= URL The URL to request from. HEADER An additional header for the request TYPE The type of request (e.g. GET/PUT/POST/REPORT/...) HEAD Whether to include the headers in the recorded response VERBOSE Whether to provide the full request / response headers. DATA The name of a different test in this suite to use data from. REPLACE A perl regex replacement to post-process the result through. Additionally, if a file 'tests//.data' exists the contents of that file will be sent in the body of the request. EOERROR exit(1); } davical-1.1.1/testing/sniffstream0000755000000000000000000000604011167760074013740 0ustar #!/usr/bin/perl -w # # Sniff traffic and format as a stream of packet contents # use strict; use Getopt::Long qw(:config permute); # allow mixed args. # Options variables my $debug = 0; my $saveto; my $readfrom; my $interface = 'any'; my $dumpspec = 'tcp port 80'; my $helpmeplease = 0; GetOptions ('debug!' => \$debug, 'write=s' => \$saveto, 'file=s' => \$readfrom, 'interface=s' => \$interface, 'dumpspec=s' => \$dumpspec, 'help' => \$helpmeplease ); usage() if ( $helpmeplease ); if ( defined($saveto) ) { open( SAVETO, '>>', $saveto ) or die "Couldn't save to '$saveto'"; } if ( defined($readfrom) ) { if ( $readfrom ne '-' ) { open( STDIN, '<', $readfrom ) or die "Couldn't open '$readfrom'"; } } else { my @tcpdumpoptions = ('-i', $interface, '-s0', '-l', '-xx', '-n', '-q', $dumpspec ); open( STDIN, '-|', "tcpdump", @tcpdumpoptions ) or die "Couldn't start tcpdump process"; } my $timestamp; my $source = ''; my $dest = ''; my $lastsource = ''; my $lastdest = ''; my $show; my $packet; my $stream; while( ) { $show = 0; if ( /^([012]\d:[0-5]\d:[0-5]\d\.\d{6})\sIP\s([0-9.:]+)\s>\s([0-9.:]+):\ tcp/ ) { $timestamp = $1; $source = $2; $dest = $3; } elsif ( /^\s+(0x....):\s(( [0-9a-f]{4}){1,8})/i ) { my $pos = hex($1); my $hex = $2; next unless defined($hex); if ( $pos == 64 ) { $hex = substr( $hex, 10 ); $pos += 4; } if ( $pos >= 68 ) { my @hex = split /\s+/, $hex; my $ascii = ""; foreach my $xch ( @hex ) { next if ( $xch eq '' ); $ascii .= chr(hex(substr($xch,0,2))); $ascii .= chr(hex(substr($xch,2,2))); } $show = 1; $_ = $ascii; } } elsif ( /^\.\./ ) { s/^\.\.......//; $show = 1; } else { $show = 1; } if ( $show ) { if ( $source ne $lastsource || $dest ne $lastdest ) { putline( "\n\n=============== $timestamp $source ==> $dest\n" ); $lastsource = $source; $lastdest = $dest; } putline( $_ ); } } ########################################################### sub putline { my $line = shift; print $line; print SAVETO $line if ( defined($saveto) ); } ########################################################### sub usage { print < Append the stream to the named file. --file (-|) Format the input from the named file, or stdin. --interface Run tcpdump against the specified interface. --dumpspec Run tcpdump with that capture specification . The default interface is 'any' and the default dumpspec is 'tcp port 80'. EOERROR exit 1; } davical-1.1.1/testing/run_regressions.sh0000755000000000000000000001175511651212132015251 0ustar #!/bin/bash # # Run the regression tests and display differences # DBNAME=regression PGPOOL=inactive HOSTNAME=regression # We need to run the regression tests in the timezone they were written for. export PGTZ=Pacific/Auckland ALLSUITES="regression-suite binding carddav scheduling timezone" . ./regression.conf [ -z "${DSN}" ] && DSN="${DBNAME}" [ -n "${HOSTNAME}" ] && WEBHOST="--webhost ${HOSTNAME}" [ -n "${ALTHOST}" ] && ALTHOST="--althost ${ALTHOST}" SUITE=${1:-"regression-suite"} ACCEPT_ALL=${2:-""} [ -z "${UNTIL}" ] && UNTIL=99999 [ -z "${SUITE}" ] && SUITE="regression-suite" check_result() { TEST="$1" if [ ! -f "${REGRESSION}/${TEST}.result" ] ; then touch "${REGRESSION}/${TEST}.result" fi diff --text -u "${REGRESSION}/${TEST}.result" "${RESULTS}/${TEST}" >"${REGRESSION}/diffs/${TEST}" if [ -s "${REGRESSION}/diffs/${TEST}" ] ; then echo "=======================================" echo "Displaying diff for test ${TEST}" echo "=======================================" cat "${REGRESSION}/diffs/${TEST}" echo "=======================================" if [ "${ACCEPT_ALL}" = "" ] ; then read -p "[${TEST}] Accept new result [e/r/v/f/x/y/N]? " ACCEPT else ACCEPT=${ACCEPT_ALL} fi if [ "${ACCEPT}" = "y" ] ; then cp "${RESULTS}/${TEST}" "${REGRESSION}/${TEST}.result" elif [ "${ACCEPT}" = "x" ]; then echo "./dav_test --dsn '${DSN}' ${WEBHOST} ${ALTHOST} --suite '${SUITE}' --case '${TEST}' --debug" exit elif [ "${ACCEPT}" = "v" ]; then echo "Showing test $REGRESSION/${TEST}.test" cat "$REGRESSION/${TEST}.test" return 2 elif [ "${ACCEPT}" = "f" ]; then echo "Showing full details of ${TEST}" cat "${REGRESSION}/${TEST}.test" echo "Showing full result of ${TEST}" cat "${RESULTS}/${TEST}" return 2 elif [ "${ACCEPT}" = "e" ]; then echo "Editing test $REGRESSION/${TEST}.test" vi "$REGRESSION/${TEST}.test" return 2 elif [ "${ACCEPT}" = "r" ]; then echo "Rerunning test ${TEST}" return 1 fi else echo "Test ${TEST} passed OK!" fi return 0 } drop_database() { dropdb $1 if psql -ltA | cut -f1 -d'|' | grep "^$1$" >/dev/null ; then # Restart PGPool to ensure we can drop and recreate the database # FIXME: We should really drop everything *from* the database and create it # from that, so we don't need to do this. [ "${PGPOOL}" = "inactive" ] || sudo /etc/init.d/pgpool restart dropdb $1 if psql -ltA | cut -f1 -d'|' | grep "^$1$" >/dev/null ; then echo "Failed to drop $1 database" exit 1 fi fi } restore_database() { drop_database ${DBNAME} TEST="Restore-Database" createdb --owner davical_dba --encoding UTF8 ${DBNAME} >"${RESULTS}/${TEST}" 2>&1 psql ${DBNAME} -q -f "${REGRESSION}/initial.dbdump" >>"${RESULTS}/${TEST}" 2>&1 check_result "${TEST}" } dump_database() { TEST="Dump-Database" pg_dump -Fp ${DBNAME} > "${REGRESSION}/initial.dbdump" 2>&1 } initialise_regression() { drop_database ${DBNAME} TEST="Create-Database" ../dba/create-database.sh ${DBNAME} 'nimda' >"${RESULTS}/${TEST}" 2>&1 check_result "${TEST}" TEST="Upgrade-Database" ../dba/update-davical-database --dbname=${DBNAME} --nopatch --appuser davical_app --owner davical_dba >"${RESULTS}/${TEST}" 2>&1 check_result "${TEST}" if [ -f "${REGRESSION}/sample-data.sql" ]; then TEST="Load-Sample-Data" psql -q -f "${REGRESSION}/sample-data.sql" "${DBNAME}" >"${RESULTS}/${TEST}" 2>&1 check_result "${TEST}" fi TEST="Really-Upgrade-Database" ../dba/update-davical-database --dbname=${DBNAME} --appuser davical_app --owner davical_dba >"${RESULTS}/${TEST}" 2>&1 check_result "${TEST}" } run_regression_suite() { RESULTS="${REGRESSION}/results" mkdir -p "${RESULTS}" mkdir -p "${REGRESSION}/diffs" if [ -f "${REGRESSION}/initial.dbdump" ]; then restore_database else initialise_regression fi for T in ${REGRESSION}/*.test ; do [ -f "${T}" ] || break TEST="`basename ${T} .test`" TESTNUM="`echo ${TEST} | cut -f1 -d'-'`" TESTNUM="${TEST/-*}" if [ "${TESTNUM}" -gt "${UNTIL}" ] ; then break; fi RESULT=999 while [ "${RESULT}" -gt 0 ]; do ./dav_test --dsn "${DSN}" ${WEBHOST} ${ALTHOST} --suite "${SUITE}" --case "${TEST}" | ./normalise_result > "${RESULTS}/${TEST}" # Fix Vim syntax highlighting by putting an esac here. Silly, huh? RESULT=999 while [ "${RESULT}" -gt 1 ]; do check_result "${TEST}" RESULT=$? done done TCOUNT="$(( ${TCOUNT} + 1 ))" done } TSTART="`date +%s`" TCOUNT=0 if [ "${SUITE}" = "all" ]; then for SUITE in ${ALLSUITES} ; do REGRESSION="tests/${SUITE}" if [ "${SUITE}" != "regression-suite" ]; then dump_database fi run_regression_suite "${SUITE}" done else REGRESSION="tests/${SUITE}" run_regression_suite "${SUITE}" fi TFINISH="`date +%s`" echo "Regression test run took $(( ${TFINISH} - ${TSTART} )) seconds for ${TCOUNT} tests." davical-1.1.1/testing/regression.conf.example0000644000000000000000000000071511362722273016151 0ustar # # A configuration file for the regression testing. # # The name of the regression testing database DBNAME=regression # Whether pgpool is running on this host ('inactive' or something else). PGPOOL=inactive # A hostname to use for DAViCal running in the root HOSTNAME=mycaldav # A hostname to use for DAViCal running in a sub-folder called '/cal/' ALTHOST=altcaldav # A Perl DBI data source name for the regression test database DSN="${DBNAME};port=5432" davical-1.1.1/testing/test-RRULE-v2.php0000755000000000000000000001173411651212132014367 0ustar #!/usr/bin/php dbg = array(); require_once("RRule-v2.php"); require_once('AwlQuery.php'); @header("Content-Type: text/plain"); echo <<description = $description; $this->dtstart = $start; $this->recur = $recur; $this->result_description = $result_description; $this->result_limit = 30; } function PHPTest() { $result = ''; $start = microtime(true); $rule = new RepeatRule( $this->dtstart, $this->recur ); $i = 0; while( $date = $rule->next() ) { if ( ($i++ % 4) == 0 ) $result .= "\n"; $result .= " " . $date->format('Y-m-d H:i:s'); if ( $i >= $this->result_limit ) break; } $this->PHP_time = microtime(true) - $start; return $result; } function SQLTest() { $result = ''; $sql = "SELECT event_instances::timestamp AS event_date FROM event_instances(:dtstart,:rrule) LIMIT ".$this->result_limit; $start = microtime(true); $qry = new AwlQuery($sql, array( ':dtstart' => $this->dtstart, ':rrule' => $this->recur) ); // printf( "%s\n", $qry->querystring); if ( $qry->Exec("test") && $qry->rows() > 0 ) { $i = 0; while( $row = $qry->Fetch() ) { if ( ($i++ % 4) == 0 ) $result .= "\n"; $result .= " " . $row->event_date; } } $this->SQL_time = microtime(true) - $start; return $result; } } $tests = array( new RRuleTest( "Daily for 7 days", "20061103T073000", "RRULE:FREQ=DAILY;COUNT=7" ) , new RRuleTest( "Weekly for 26 weeks", "20061102T100000", "RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH" ) , new RRuleTest( "Fortnightly for 4 events", "20061103T160000", "RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4" ) , new RRuleTest( "Fortnightly for 28 events", "20061103T160000", "RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20071122T235900" ) , new RRuleTest( "3/wk for 5 weeks", "20081101T160000", "RRULE:FREQ=WEEKLY;COUNT=15;INTERVAL=1;BYDAY=MO,WE,FR" ) , new RRuleTest( "Monthly forever", "20061104T073000", "RRULE:FREQ=MONTHLY" ) , new RRuleTest( "Monthly, on the 1st monday, 2nd wednesday, 3rd friday and last sunday, forever", "20061117T073000", "RRULE:FREQ=MONTHLY;BYDAY=1MO,2WE,3FR,-1SU" ) , new RRuleTest( "The working days of each month", "20061107T113000", "RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;UNTIL=20070101T000000" ) , new RRuleTest( "The last working day of each month", "20061107T113000", "RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1;COUNT=30" ) , new RRuleTest( "Every working day", "20081020T103000", "RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;COUNT=30" ) , new RRuleTest( "Every working day", "20081020T110000", "RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;COUNT=30" ) , new RRuleTest( "The last day of each month", "20110831", "RRULE:FREQ=MONTHLY;BYMONTHDAY=-1" ) , new RRuleTest( "1st Tuesday, 2nd Wednesday, 3rd Thursday & 4th Friday, every March, June, September, October and December (SQL is wrong)", "20081001T133000", "RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12" ) , new RRuleTest( "Every tuesday and friday", "20081017T084500", "RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR;COUNT=30" ) , new RRuleTest( "Every tuesday and friday", "20081017T084500", "RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,FR;COUNT=30" ) , new RRuleTest( "Every tuesday and friday", "20081017T084500", "RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=TU,FR;COUNT=30" ) , new RRuleTest( "Time zone 1", "19700315T030000", "FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3" ) , new RRuleTest( "Time zone 2", "19700927T020000", "FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9" ) , new RRuleTest( "Time zone 3", "19810329T030000", "FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU" ) , new RRuleTest( "Time zone 4", "20000404T010000", "FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;COUNT=15" ) , new RRuleTest( "Six Working Days", "20110905", "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=6" ) , new RRuleTest( "Six Working Days", "20110905", "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;COUNT=6" ) ); foreach( $tests AS $k => $test ) { echo "=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=\n"; echo "$test->dtstart - $test->recur\n"; echo "$test->description\n"; $php_result = $test->PHPTest(); $sql_result = $test->SQLTest(); if ( $php_result == $sql_result ) { printf( 'PHP & SQL results are identical (-: P: %6.4lf & S: %6.4lf'."\n", $test->PHP_time, $test->SQL_time); } else { printf( 'PHP & SQL results differ :-( P: %6.4lf & S: %6.4lf'."\n", $test->PHP_time, $test->SQL_time); echo "PHP Result:\n$php_result\n\n"; echo "SQL Result:\n$sql_result\n\n"; // Still under development } } exit(0); davical-1.1.1/testing/rrule_test_data0000644000000000000000000001357211633634540014601 0ustar # # Tests taken from the iCalendar standard # TZ=US/Eastern DTSTART=19970902T090000 RRULE=FREQ=DAILY;COUNT=10 DTSTART=19970902T090000 RRULE=FREQ=DAILY;UNTIL=19971224T000000 DTSTART=19970902T090000 LIMIT=50 RRULE=FREQ=DAILY;INTERVAL=2 DTSTART=19970902T090000 RRULE=FREQ=DAILY;INTERVAL=10;COUNT=5 DTSTART=19970902T090000 RRULE=FREQ=WEEKLY;COUNT=10 DTSTART=19970902T090000 RRULE=FREQ=WEEKLY;UNTIL=19971224T000000Z DTSTART=19970902T090000 LIMIT=13 RRULE=FREQ=WEEKLY;INTERVAL=2;WKST=SU DTSTART=19970902T090000 RRULE=FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH DTSTART=19970902T090000 RRULE=FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH DTSTART=19970902T090000 RRULE=FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH DTSTART=19970905T090000 RRULE=FREQ=MONTHLY;COUNT=10;BYDAY=1FR DTSTART=19970905T090000 RRULE=FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR DTSTART=19970907T090000 RRULE=FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU DTSTART=19970902T090000 RRULE=FREQ=MONTHLY;COUNT=6;BYDAY=-2MO DTSTART=19970902T090000 LIMIT=6 RRULE=FREQ=MONTHLY;BYMONTHDAY=-3 DTSTART=19970902T090000 RRULE=FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15 DTSTART=19970930T090000 RRULE=FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1 DTSTART=19970910T090000 RRULE=FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14,15 DTSTART=19970902T090000 LIMIT=18 RRULE=FREQ=MONTHLY;INTERVAL=2;BYDAY=TU DTSTART=19970313T090000 LIMIT=11 RRULE=FREQ=YEARLY;BYMONTH=3;BYDAY=TH DTSTART=19970605T090000 LIMIT=39 RRULE=FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8 DTSTART=19970902T090000 LIMIT=35 RRULE=FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13 DTSTART=19970913T090000 LIMIT=10 RRULE=FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13 DTSTART=19961105T090000 LIMIT=6 RRULE=FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;BYMONTHDAY=2,3,4,5,6,7,8 DTSTART=19970904T090000 RRULE=FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3 DTSTART=19970929T090000 LIMIT=8 RRULE=FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2 # # A number of RRULE we have accumulated in real life from a variety of sources # TZ=Pacific/Auckland DTSTART=20081020T110000 RRULE=FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR DTSTART=20081020T090000 RRULE=FREQ=WEEKLY;INTERVAL=1 DTSTART=20081024T140000 RRULE=FREQ=WEEKLY;INTERVAL=1 DTSTART=20061102T100000 RRULE=FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART=20081025T233000 RRULE=FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12 DTSTART=20081024T184500 RRULE=FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR DTSTART=20081025T233000 RRULE=FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12 DTSTART=20081024T184500 RRULE=FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR DTSTART=20021126T203000 RRULE=FREQ=DAILY;UNTIL=20021128T230000Z DTSTART=20071126T070000 RRULE=FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU DTSTART=20050202T050000 RRULE=FREQ=WEEKLY;UNTIL=20050322T160000Z;BYDAY=TU DTSTART=20040803T000000 RRULE=FREQ=DAILY;UNTIL=20040804 DTSTART=20071211T074500 RRULE=FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH DTSTART=20061103T160000 RRULE=FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900 DTSTART=20061103T073000 RRULE=FREQ=MONTHLY DTSTART=20071123T120000 RRULE=FREQ=MONTHLY;INTERVAL=1;BYDAY=4FR DTSTART=20081114T000000 RRULE=FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR DTSTART=20081121T160000 RRULE=FREQ=MONTHLY;INTERVAL=1;BYDAY=3FR DTSTART=20020220T053000 RRULE=FREQ=DAILY;UNTIL=20020528T153000Z;INTERVAL=14 DTSTART=20060921T020000 RRULE=FREQ=WEEKLY;UNTIL=20061004T140000Z;BYDAY=WE DTSTART=20060801T090000 RRULE=FREQ=YEARLY;INTERVAL=1 DTSTART=20030301T050000 RRULE=FREQ=DAILY;UNTIL=20030228T230000Z DTSTART=20031013T200000 RRULE=FREQ=DAILY;UNTIL=20031016T220000Z DTSTART=20021022T193000 RRULE=FREQ=DAILY;UNTIL=20021024T220000Z DTSTART=20050224T220000 RRULE=FREQ=DAILY;UNTIL=20050224T230000Z DTSTART=20040916T000000 RRULE=FREQ=DAILY;UNTIL=20040917 DTSTART=20030530T200000 RRULE=FREQ=DAILY;UNTIL=20030530T220000Z DTSTART=20040616T180000 RRULE=FREQ=DAILY;UNTIL=20040616T220000Z DTSTART=20021030T203000 RRULE=FREQ=WEEKLY;UNTIL=20021204T073000Z;BYDAY=WE DTSTART=20050415T183000 RRULE=FREQ=WEEKLY;UNTIL=20050513T063000Z;BYDAY=FR DTSTART=20030711T180000 RRULE=FREQ=DAILY;UNTIL=20030712T220000Z DTSTART=20050128T200000 RRULE=FREQ=DAILY;UNTIL=20050129T230000Z DTSTART=20030326T193000 RRULE=FREQ=WEEKLY;UNTIL=20030507T063000Z;BYDAY=WE DTSTART=20060405T190000 RRULE=FREQ=DAILY;UNTIL=20060406T070000Z DTSTART=20051122T200000 RRULE=FREQ=DAILY;COUNT=2 DTSTART=20030212T203000 RRULE=FREQ=WEEKLY;UNTIL=20030319T073000Z;BYDAY=WE DTSTART=20030617T200000 RRULE=FREQ=DAILY;UNTIL=20030618T220000Z DTSTART=20050809T183000 RRULE=FREQ=DAILY;COUNT=2 DTSTART=20051124T200000 RRULE=FREQ=DAILY;COUNT=2 DTSTART=20020913T183000 RRULE=FREQ=WEEKLY;UNTIL=20020920T063000Z;BYDAY=FR DTSTART=20030827T183000 RRULE=FREQ=WEEKLY;UNTIL=20031105T073000Z;BYDAY=WE DTSTART=20030825T183000 RRULE=FREQ=WEEKLY;UNTIL=20031103T073000Z;BYDAY=MO DTSTART=20020912T183000 RRULE=FREQ=WEEKLY;UNTIL=20020919T063000Z;BYDAY=TH DTSTART=20021205T203000 RRULE=FREQ=DAILY;UNTIL=20021205T230000Z DTSTART=20031022T040000 RRULE=FREQ=WEEKLY;UNTIL=20031216T160000Z;BYDAY=TU DTSTART=20060511T180000 RRULE=FREQ=DAILY;UNTIL=20060514T060000Z DTSTART=20021203T203000 RRULE=FREQ=DAILY;UNTIL=20021203T230000Z DTSTART=20040602T180000 RRULE=FREQ=DAILY;UNTIL=20040602T220000Z DTSTART=20070307T203000 RRULE=FREQ=WEEKLY;COUNT=2;BYDAY=WE DTSTART=20030918T180000 RRULE=FREQ=DAILY;UNTIL=20030918T220000Z DTSTART=20050831T180000 RRULE=FREQ=WEEKLY;UNTIL=20051109T070000Z;BYDAY=WE DTSTART=20021028T203000 RRULE=FREQ=WEEKLY;UNTIL=20021202T073000Z;BYDAY=MO DTSTART=20030210T203000 RRULE=FREQ=WEEKLY;UNTIL=20030317T073000Z;BYDAY=MO DTSTART=20021212T203000 RRULE=FREQ=DAILY;UNTIL=20021212T230000Z DTSTART=20050131T203000 RRULE=FREQ=WEEKLY;UNTIL=20050314T073000Z;BYDAY=MO DTSTART=20030324T193000 RRULE=FREQ=WEEKLY;UNTIL=20030512T063000Z;BYDAY=MO DTSTART=20030414T180000 RRULE=FREQ=DAILY;UNTIL=20030420T220000Z DTSTART=20050105T220000 RRULE=FREQ=DAILY;UNTIL=20050106T230000Z DTSTART=20020919T180000 RRULE=FREQ=DAILY;UNTIL=20020919T220000Z davical-1.1.1/testing/README.regression_tests0000644000000000000000000000152111265573044015747 0ustar Regression Testing ================== At present these regression tests are basically written to work in my own environment. While I am, of course, happy to see patches that make them more generic they are still very much a work in progress. In order to run them in your environment you will need to ensure both the Webserver and Database server run in the 'Pacific/Auckland' timezone since the regression testing puts a number of events into the database in a floating timezone, and some responses which are affected by these events are reported in UTC (mostly freebusy results). On a Debian system you can do this by adding the line: export TZ=Pacific/Auckland to /etc/apache2/envvars, and the line: TZ = 'Pacific/Auckland' to /etc/postgresql/8.4/main/environment You will also need to edit regression.conf as indicated in that file. davical-1.1.1/testing/watch-port-80.sh0000755000000000000000000000140511215140072014325 0ustar #!/bin/sh PORT=${1:-"80"} IFACE=${2:-"any"} IP=${3:-""} # Only include packets that contain data NOTSYNFIN=" and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)" DUMP="tcp port ${PORT}" IPCLAUSE="" if [ "${IFACE}" != "any" ]; then if [ -z "${IP}" ]; then IP="`ip addr show dev ${IFACE} | grep ' inet ' | tr -s ' ' | cut -f3 -d' ' | cut -f1 -d'/'`" fi IPCLAUSE=" and ((src host ${IP} and src port ${PORT}) or (dst host ${IP} and dst port ${PORT}))" fi DUMPFILE="dumps/`date '+%FT%T'`.dump" # touch "${DUMPFILE}" sudo tcpdump -i $IFACE -s0 -l -n -q -A "${DUMP}${NOTSYNFIN}${IPCLAUSE}" >"${DUMPFILE}" 2>&1 & DUMPPID="$!" less "${DUMPFILE}" sudo kill "${DUMPPID}" if [ "`stat --format='%s' \"${DUMPFILE}\"`" -le 230 ] ; then rm "${DUMPFILE}" fi davical-1.1.1/testing/rrule-performance.test0000755000000000000000000000106311633634540016021 0ustar #!/usr/bin/perl # # use strict; use autodie; my ($dtstart, $rrule, $limit ); $limit = 100; $dtstart = '19270311T040000Z'; while( <> ) { m{\s* TZ \s* [:=] \s* (\S+.*) $}xi && do { printf( "SET timezone TO '%s';\n", $1); }; m{\s* LIMIT \s* [:=] \s* (\d+) $}xi && do { $limit = $1; }; m{\s* DTSTART \s* [:=] \s* (\S+.*) $}ix && do { $dtstart = $1; }; m{\s* RRULE \s* [:=] \s* (\S+.*) $}ix && do { $rrule = $1; printf( "SELECT * FROM event_instances('%s', '%s' ) LIMIT %d;\n", $dtstart, $rrule, $limit); $limit = 100; }; } davical-1.1.1/testing/normalise_result0000755000000000000000000000207011506011103014760 0ustar #!/usr/bin/perl -w # # Given a result on stdin, try and normalise some # elements of it (such as HTTP Header dates) so that we can # simply compare it with other results # use strict; while( ) { /^Server: Apache(\/[0-9.]+)?/ && do { $_ = ""; }; /^X-Powered-By: PHP\/[0-9.]+/ && do { $_ = ""; }; /^X-Pad: avoid browser bug/ && do { $_ = ""; }; /^Keep-Alive:/ && do { $_ = ""; }; /^Connection:/ && do { $_ = ""; }; /^Transfer-Encoding:/ && do { $_ = ""; }; /^Vary: / && do { $_ = ""; }; /^X-(DAViCal|RSCDS)-Version: (DAViCal|RSCDS)\/[0-9.]+\.[0-9.]+\.[0-9.]+; DB\/[0-9.]+\.[0-9.]+\.[0-9.]+/ && do { $_ = ""; }; # HTTP Standard Dates s/(Mon|Tue|Wed|Thu|Fri|Sat|Sun), [0-3][0-9] (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) 2[0-9]{3} [0-2][0-9](:[0-5][0-9]){2} GMT/Dow, 01 Jan 2000 00:00:00 GMT/; # Fix up any opaquelocktokens to something regular s/opaquelocktoken:[[:xdigit:]]{8}-([[:xdigit:]]{4}-){3}[[:xdigit:]]{12}/opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/; print; } davical-1.1.1/testing/tests/0000755000000000000000000000000011776301342012626 5ustar davical-1.1.1/testing/tests/scheduling/0000755000000000000000000000000011776303360014755 5ustar davical-1.1.1/testing/tests/scheduling/3029-DELETE-reply.test0000644000000000000000000000070111653476741020352 0ustar # # iCal DELETE's the invitation in the .in # TYPE=DELETE URL=http://regression.host/manager1/.in/user1E1A13F04-iCal-schedule.ics HEADER=User-Agent: DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD AUTH=manager1:manager1 # # Query to confirm we got rid of it. There should be two now. QUERY SELECT dav_name FROM calendar_item WHERE uid = 'E1A13F04-iCal-schedule' ORDER BY dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3026-PUT-Accept.test0000644000000000000000000000346411651212132020106 0ustar # # Testing for iCal accepting an invitation # TYPE=PUT URL=http://regression.host/user1/home/E1A13F04-iCal-schedule.ics HEADER=User-Agent: DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEADER=If-Match: "905cdcc0d1a76ef63ef8d238575c3856" HEADER=Content-Type: text/calendar # REPLACE=#\d{8}T\d{6}#YYYYMMDDThhmmss# # REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ # QUERY # ENDQUERY BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT:mailto:user1@example.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:5 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_name, caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", summary FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE calendar_item.uid = 'E1A13F04-iCal-schedule' ORDER BY caldav_data.dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3025-DELETE-invite.test0000644000000000000000000000064111653606713020506 0ustar # # iCal DELETE's the invitation in the .in # TYPE=DELETE URL=http://regression.host/user1/.in/E1A13F04-iCal-schedule.ics HEADER=User-Agent: DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD # # Query to confirm we got rid of it. There should be two now. QUERY SELECT dav_name FROM calendar_item WHERE uid = 'E1A13F04-iCal-schedule' ORDER BY dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3029-DELETE-reply.result0000644000000000000000000000061611732477400020705 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< dav_name: >/user1/home/E1A13F04-iCal-schedule.ics< davical-1.1.1/testing/tests/scheduling/3021-POST-availability.test0000644000000000000000000000176111651212132021467 0ustar # # Testing for how iCal does a POST for free/busy # TYPE=POST URL=http://regression.host/caldav.php/manager1/.out/ HEADER=X-DAViCal-Flush-Cache: true HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEADER=Originator: mailto:manager1@example.net HEADER=Recipient: mailto:manager1@example.net, mailto:user1@example.net HEADER=Content-Type: text/calendar AUTH=manager1:manager1 BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN VERSION:2.0 METHOD:REQUEST PRODID:-//Apple Inc.//iCal 4.0.4//EN BEGIN:VFREEBUSY UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 DTEND:20111019T110000Z ATTENDEE:mailto:manager1@example.net ATTENDEE:mailto:user1@example.net DTSTART:20111018T110000Z X-CALENDARSERVER-MASK-UID:E1A13F04-iCal-schedule DTSTAMP:20111019T085957Z ORGANIZER:mailto:manager1@example.net SUMMARY:Availability for mailto:manager1@example.net and mailto:user1@ex ample.net END:VFREEBUSY END:VCALENDAR ENDDATA REPLACE=/DTSTAMP:\d{8}T\d{6}Z/DTSTAMP:yyyymmddThhmmssZ/ davical-1.1.1/testing/tests/scheduling/3001-POST-CANCEL.test0000644000000000000000000000324311633117640017745 0ustar # # Testing for how iCal does a POST for free/busy # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=X-DAViCal-Flush-Cache: true HEADER=User-Agent: DAVKit/4.0.3 (732); CalendarStore/4.0.4 (997); iCal/4.0.4 (1395); Mac OS X/10.6.5 (10H574) HEADER=Recipient: mailto:user2@example.net HEADER=Content-Type: text/calendar HEADER=Originator: mailto:user1@example.net HEADER=Content-Type: text/calendar # REPLACE=#\d{8}T\d{6}#YYYYMMDDThhmmss# # REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ # QUERY # ENDQUERY BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN VERSION:2.0 METHOD:CANCEL PRODID:-//Apple Inc.//iCal 4.0.4//EN BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VEVENT ATTENDEE;CN="user2@example.net";CUTYPE=INDIVIDUAL;EMAIL="user2@example .net";PARTSTAT=DECLINED;ROLE=REQ-PARTICIPANT:mailto:user2@example .net ATTENDEE;CN="User One";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto: user1@example.net DTEND;TZID=Europe/Paris:20101214T030000 TRANSP:OPAQUE ORGANIZER;CN="User One":mailto:user1@example.net UID:EE496371-F00D-4550-8E05-13782C5B7A5C DTSTAMP:20101213T001258Z STATUS:CANCELLED SEQUENCE:6 SUMMARY:adding event to test invitee with wireshark DTSTART;TZID=Europe/Paris:20101214T020000 CREATED:20101212T235850Z END:VEVENT END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/scheduling/3028-DELETE-reply.test0000644000000000000000000000064111653476541020352 0ustar # # iCal DELETE's the invitation in the .in # TYPE=DELETE URL=http://regression.host/user1/.in/E1A13F04-iCal-schedule.ics HEADER=User-Agent: DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD # # Query to confirm we got rid of it. There should be two now. QUERY SELECT dav_name FROM calendar_item WHERE uid = 'E1A13F04-iCal-schedule' ORDER BY dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3022-POST-availability.test0000644000000000000000000000176111651212132021470 0ustar # # Testing for how iCal does a POST for free/busy # TYPE=POST URL=http://regression.host/caldav.php/manager1/.out/ HEADER=X-DAViCal-Flush-Cache: true HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEADER=Originator: mailto:manager1@example.net HEADER=Recipient: mailto:manager1@example.net, mailto:user1@example.net HEADER=Content-Type: text/calendar AUTH=manager1:manager1 BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN VERSION:2.0 METHOD:REQUEST PRODID:-//Apple Inc.//iCal 4.0.4//EN BEGIN:VFREEBUSY UID:01B40176-4934-46AE-9C0A-19ECC41200E6 DTEND:20111025T110000Z ATTENDEE:mailto:manager1@example.net ATTENDEE:mailto:user1@example.net DTSTART:20111024T110000Z X-CALENDARSERVER-MASK-UID:E1A13F04-iCal-schedule DTSTAMP:20111019T090043Z ORGANIZER:mailto:manager1@example.net SUMMARY:Availability for mailto:manager1@example.net and mailto:user1@ex ample.net END:VFREEBUSY END:VCALENDAR ENDDATA REPLACE=/DTSTAMP:\d{8}T\d{6}Z/DTSTAMP:yyyymmddThhmmssZ/ davical-1.1.1/testing/tests/scheduling/3028-DELETE-reply.result0000644000000000000000000000072211732477376020716 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< dav_name: >/user1/home/E1A13F04-iCal-schedule.ics< dav_name: >/manager1/.in/user1E1A13F04-iCal-schedule.ics< davical-1.1.1/testing/tests/scheduling/3020-PUT-iCal-no-attendees.test0000644000000000000000000000236611651212132022135 0ustar # # PUT an event with attendees # TYPE=PUT URL=http://regression.host/caldav.php/manager1/home/E1A13F04-iCal-schedule.ics HEADER=Content-Type: text/calendar HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD AUTH=manager1:manager1 BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T195908Z SEQUENCE:3 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_name, caldav_type, logged_user, caldav_data.caldav_data, summary FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE calendar_item.uid = 'E1A13F04-iCal-schedule'; ENDQUERY davical-1.1.1/testing/tests/scheduling/3024-PUT-iCal-with-attendees.test0000644000000000000000000000345411651212132022477 0ustar # # PUT an event with attendees # TYPE=PUT URL=http://regression.host/caldav.php/manager1/home/E1A13F04-iCal-schedule.ics HEADER=Content-Type: text/calendar HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD AUTH=manager1:manager1 # Before we run, this time we'll set schedule-deliver privileges # on the invitee... DOSQL UPDATE dav_principal SET default_privileges = privilege_to_bits(ARRAY['schedule-deliver']) WHERE dav_name = '/user1/' ENDDOSQL BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:5 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_name, caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", summary FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE calendar_item.uid = 'E1A13F04-iCal-schedule' ORDER BY caldav_data.dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3020-PUT-iCal-no-attendees.result0000644000000000000000000000225211732477365022513 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "f50eb3ddd963c757b4f63aa12a4f4346" Content-Length: 0 Content-Type: text/plain; charset="utf-8" caldav_data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T195908Z SEQUENCE:3 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >20< davical-1.1.1/testing/tests/scheduling/3033-DELETE-organizer-event.result0000644000000000000000000000653011732477411022667 0ustar SQL executed successfully. DELETE FROM caldav_data WHERE dav_name ~ E'/\\.in/.*E1A13F04-iCal-schedule\\.ics' HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caldav_data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:CANCEL REQUEST-STATUS:2.0 BEGIN:VEVENT UID:E1A13F04-iCal-schedule DTEND:20111019T010000Z ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user1@example.net ATTENDEE;CN=user2@example.net;CUTYPE=INDIVIDUAL;EMAIL=user2@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user2@example.net ATTENDEE;CN=user3@example.net;CUTYPE=INDIVIDUAL;EMAIL=user3@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user3@example.net DTSTART:20111019T000000Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < dav_name: >/user1/.in/E1A13F04-iCal-schedule.ics< caldav_data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:CANCEL REQUEST-STATUS:2.0 BEGIN:VEVENT UID:E1A13F04-iCal-schedule DTEND:20111019T010000Z ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user1@example.net ATTENDEE;CN=user2@example.net;CUTYPE=INDIVIDUAL;EMAIL=user2@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user2@example.net ATTENDEE;CN=user3@example.net;CUTYPE=INDIVIDUAL;EMAIL=user3@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user3@example.net DTSTART:20111019T000000Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < dav_name: >/user2/.in/E1A13F04-iCal-schedule.ics< caldav_data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:CANCEL REQUEST-STATUS:2.0 BEGIN:VEVENT UID:E1A13F04-iCal-schedule DTEND:20111019T010000Z ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user1@example.net ATTENDEE;CN=user2@example.net;CUTYPE=INDIVIDUAL;EMAIL=user2@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user2@example.net ATTENDEE;CN=user3@example.net;CUTYPE=INDIVIDUAL;EMAIL=user3@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user3@example.net DTSTART:20111019T000000Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < dav_name: >/user3/.in/E1A13F04-iCal-schedule.ics< davical-1.1.1/testing/tests/scheduling/3023-PUT-iCal-with-attendees.test0000644000000000000000000000311511651212132022470 0ustar # # PUT an event with attendees # TYPE=PUT URL=http://regression.host/caldav.php/manager1/home/E1A13F04-iCal-schedule.ics HEADER=Content-Type: text/calendar HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD AUTH=manager1:manager1 BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:4 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_name, caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", summary FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE calendar_item.uid = 'E1A13F04-iCal-schedule' ORDER BY caldav_data.dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3024-PUT-iCal-with-attendees.result0000644000000000000000000000774711732477372023072 0ustar SQL executed successfully. UPDATE dav_principal SET default_privileges = privilege_to_bits(ARRAY['schedule-deliver']) WHERE dav_name = '/user1/' HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caldav_type: >VEVENT< dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >20< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user1@example.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:5 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user1/.in/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >10< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:5 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user1/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >10< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:5 END:VEVENT END:VCALENDAR < davical-1.1.1/testing/tests/scheduling/3021-POST-availability.result0000644000000000000000000000237411651212132022027 0ustar mailto:manager1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20111018T110000Z DTEND:20111019T110000Z FREEBUSY:20111018T210000Z/20111018T220000Z UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 ORGANIZER:mailto:manager1@example.net ATTENDEE:mailto:manager1@example.net END:VFREEBUSY END:VCALENDAR mailto:user1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20111018T110000Z DTEND:20111019T110000Z UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 ORGANIZER:mailto:manager1@example.net ATTENDEE:mailto:user1@example.net END:VFREEBUSY END:VCALENDAR davical-1.1.1/testing/tests/scheduling/Restore-Database.result0000644000000000000000000000043011751447426021344 0ustar setval -------- 1645 (1 row) setval -------- 1 (1 row) setval -------- 10 (1 row) setval -------- 10 (1 row) setval -------- 1 (1 row) setval -------- 42 (1 row) setval -------- 14 (1 row) setval -------- 1000 (1 row) davical-1.1.1/testing/tests/scheduling/3026-PUT-Accept.result0000644000000000000000000000705411653752625020466 0ustar caldav_type: >VEVENT< dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< logged_user: >10< summary: >Meeting with User1< user_no: >20< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:5 ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT:mailto:user1@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user1/home/E1A13F04-iCal-schedule.ics< logged_user: >10< summary: >Meeting with User1< user_no: >10< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT:mailto:user1@example.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN=Manager 1;SCHEDULE-STATUS=1.2:mailto:manager1@example.net SEQUENCE:5 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/manager1/.in/user1E1A13F04-iCal-schedule.ics< logged_user: >10< summary: >Meeting with User1< user_no: >20< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:5 ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT:mailto:user1@example.net END:VEVENT END:VCALENDAR < davical-1.1.1/testing/tests/scheduling/3031-DELETE-reply.result0000644000000000000000000000052111732477407020700 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< davical-1.1.1/testing/tests/scheduling/3033-DELETE-organizer-event.test0000644000000000000000000000171711653647510022333 0ustar # # We now DELETE the ORGANIZER's copy of the actual event. # - This should send a CANCEL reply and remove each attendee's # copy of the event # TYPE=DELETE URL=http://regression.host/manager1/home/E1A13F04-iCal-schedule.ics HEADER=User-Agent: DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD AUTH=manager1:manager1 # Before we run, this time we'll assume everyone has read their inbox # and all existing iTIP messages are deleted. DOSQL DELETE FROM caldav_data WHERE dav_name ~ E'/\\.in/.*E1A13F04-iCal-schedule\\.ics' ENDDOSQL # # Query to confirm we got rid of it. There should be two now: # - An event in the manager's calendar, with a PARTSTART=DECLINED for user 1 # - An iTIP message in the managers's inbox. QUERY SELECT calendar_item.dav_name, caldav_data.caldav_data FROM calendar_item JOIN caldav_data USING(dav_id, dav_name) WHERE uid = 'E1A13F04-iCal-schedule' ORDER BY dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3027-PUT-iCal-with-attendees.result0000644000000000000000000001202111732477375023055 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caldav_type: >VEVENT< dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >20< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user1@example.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:6 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user1/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >10< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:6 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/manager1/.in/user1E1A13F04-iCal-schedule.ics< logged_user: >10< summary: >Meeting with User1< user_no: >20< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:5 ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT:mailto:user1@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user1/.in/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >10< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:6 END:VEVENT END:VCALENDAR < davical-1.1.1/testing/tests/scheduling/3010-PUT-with-attendees.result0000644000000000000000000002772311732477364022214 0ustar HTTP/1.1 100 Continue HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caldav_type: >VEVENT< dav_name: >/user1/home/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >10< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:PUT-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20101123T110000 DTEND;TZID=Pacific/Auckland:20101123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 2;LANGUAGE=en;SCHEDULE-STATUS=1.2:MAILTO:user2@example.n et ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 3;LANGUAGE=en;SCHEDULE-STATUS=1.2:MAILTO:user3@example.n et ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 4;LANGUAGE=en;SCHEDULE-STATUS=1.2:MAILTO:user4@example.n et END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user2/.in/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >11< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:PUT-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20101123T110000 DTEND;TZID=Pacific/Auckland:20101123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user2/home/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >11< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:PUT-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20101123T110000 DTEND;TZID=Pacific/Auckland:20101123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user3/.in/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >12< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:PUT-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20101123T110000 DTEND;TZID=Pacific/Auckland:20101123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user3/home/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >12< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:PUT-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20101123T110000 DTEND;TZID=Pacific/Auckland:20101123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user4/.in/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >13< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:PUT-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20101123T110000 DTEND;TZID=Pacific/Auckland:20101123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user4/home/PUT-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >13< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:PUT-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20101123T110000 DTEND;TZID=Pacific/Auckland:20101123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < davical-1.1.1/testing/tests/scheduling/3032-PUT-iCal-with-attendees.test0000644000000000000000000000403611654150636022510 0ustar # # PUT an event with several attendees - so we can delete the organizer # copy in the next request. # # After this we should see 7 events: 1 manager, 3 attendees, 3 attendee iTIP # TYPE=PUT URL=http://regression.host/caldav.php/manager1/home/E1A13F04-iCal-schedule.ics HEADER=Content-Type: text/calendar HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD AUTH=manager1:manager1 BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net ATTENDEE;CN="user2@example.net";CUTYPE=INDIVIDUAL;EMAIL="user2@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user2@ex ample.net ATTENDEE;CN="user3@example.net";CUTYPE=INDIVIDUAL;EMAIL="user3@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user3@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_name, caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", summary FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE calendar_item.uid = 'E1A13F04-iCal-schedule' ORDER BY caldav_data.dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3010-PUT-with-attendees.test0000644000000000000000000000372111651212132021621 0ustar # # PUT an event with attendees # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/PUT-attendees.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:PUT-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20101123T110000 DTEND;TZID=Pacific/Auckland:20101123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4TU ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_name, caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", summary FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE calendar_item.uid = 'PUT-attendees' ORDER BY caldav_data.dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3030-DELETE-attendee-event.test0000644000000000000000000000145411654143005022106 0ustar # # We now DELETE the ATTENDEE's copy of the actual event. # - This should send a CANCEL reply and update the manager's # event copy with the PARTSTAT=DECLINED # TYPE=DELETE URL=http://regression.host/user1/home/E1A13F04-iCal-schedule.ics HEADER=User-Agent: DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD # # Query to confirm we got rid of it. There should be two now: # - An event in the manager's calendar, with a PARTSTART=DECLINED for user 1 # - An iTIP message in the managers's inbox. QUERY SELECT calendar_item.dav_name, regexp_replace(caldav_data,'DTSTAMP:[0-9T]{15}Z','DTSTAMP:looks good') AS vcalendar FROM calendar_item JOIN caldav_data USING(dav_id, dav_name) WHERE uid = 'E1A13F04-iCal-schedule' ORDER BY dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3023-PUT-iCal-with-attendees.result0000644000000000000000000000274411732477371023060 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caldav_type: >VEVENT< dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >20< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T110000 ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=3.8 :mailto:user1@example.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T100000 DTSTAMP:20111018T200107Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:4 END:VEVENT END:VCALENDAR < davical-1.1.1/testing/tests/scheduling/3031-DELETE-reply.test0000644000000000000000000000102711653610353020332 0ustar # # Now DELETE's the cancelation reply in the Manager's .in # TYPE=DELETE URL=http://regression.host/manager1/.in/user1E1A13F04-iCal-schedule.ics HEADER=User-Agent: DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEAD AUTH=manager1:manager1 # # Query to confirm we got rid of it. There should only be one # lonely meeting in the manager's calendar (which has been declined). QUERY SELECT dav_name FROM calendar_item WHERE uid = 'E1A13F04-iCal-schedule' ORDER BY dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3022-POST-availability.result0000644000000000000000000000245011651212132022023 0ustar mailto:manager1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20111024T110000Z DTEND:20111025T110000Z UID:01B40176-4934-46AE-9C0A-19ECC41200E6 ORGANIZER:mailto:manager1@example.net ATTENDEE:mailto:manager1@example.net END:VFREEBUSY END:VCALENDAR mailto:user1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20111024T110000Z DTEND:20111025T110000Z FREEBUSY:20111024T184500Z/20111024T193000Z FREEBUSY:20111024T220000Z/20111025T030000Z UID:01B40176-4934-46AE-9C0A-19ECC41200E6 ORGANIZER:mailto:manager1@example.net ATTENDEE:mailto:user1@example.net END:VFREEBUSY END:VCALENDAR davical-1.1.1/testing/tests/scheduling/3032-PUT-iCal-with-attendees.result0000644000000000000000000002544011732477410023050 0ustar HTTP/1.1 100 Continue HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caldav_type: >VEVENT< dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >20< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user1@example.net ATTENDEE;CN=user2@example.net;CUTYPE=INDIVIDUAL;EMAIL=user2@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user2@example.net ATTENDEE;CN=user3@example.net;CUTYPE=INDIVIDUAL;EMAIL=user3@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user3@example.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user1/.in/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >10< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net ATTENDEE;CN="user2@example.net";CUTYPE=INDIVIDUAL;EMAIL="user2@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user2@ex ample.net ATTENDEE;CN="user3@example.net";CUTYPE=INDIVIDUAL;EMAIL="user3@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user3@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user1/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >10< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net ATTENDEE;CN="user2@example.net";CUTYPE=INDIVIDUAL;EMAIL="user2@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user2@ex ample.net ATTENDEE;CN="user3@example.net";CUTYPE=INDIVIDUAL;EMAIL="user3@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user3@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user2/.in/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >11< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net ATTENDEE;CN="user2@example.net";CUTYPE=INDIVIDUAL;EMAIL="user2@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user2@ex ample.net ATTENDEE;CN="user3@example.net";CUTYPE=INDIVIDUAL;EMAIL="user3@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user3@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user2/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >11< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net ATTENDEE;CN="user2@example.net";CUTYPE=INDIVIDUAL;EMAIL="user2@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user2@ex ample.net ATTENDEE;CN="user3@example.net";CUTYPE=INDIVIDUAL;EMAIL="user3@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user3@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user3/.in/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >12< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:REQUEST BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net ATTENDEE;CN="user2@example.net";CUTYPE=INDIVIDUAL;EMAIL="user2@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user2@ex ample.net ATTENDEE;CN="user3@example.net";CUTYPE=INDIVIDUAL;EMAIL="user3@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user3@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user3/home/E1A13F04-iCal-schedule.ics< logged_user: >20< summary: >Meeting with User1< user_no: >12< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net ATTENDEE;CN="user2@example.net";CUTYPE=INDIVIDUAL;EMAIL="user2@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user2@ex ample.net ATTENDEE;CN="user3@example.net";CUTYPE=INDIVIDUAL;EMAIL="user3@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user3@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 END:VEVENT END:VCALENDAR < davical-1.1.1/testing/tests/scheduling/3027-PUT-iCal-with-attendees.test0000644000000000000000000000320111653757566022523 0ustar # # PUT an event with attendees # TYPE=PUT URL=http://regression.host/caldav.php/manager1/home/E1A13F04-iCal-schedule.ics HEADER=Content-Type: text/calendar HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEADER=If-Match: "d60f8959edc5eee6e949a2e5b81dd746" HEAD AUTH=manager1:manager1 BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 ATTENDEE;CN="Manager 1";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:manag er1@example.net ATTENDEE;CN="user1@example.net";CUTYPE=INDIVIDUAL;EMAIL="user1@example.n et";PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user1@ex ample.net TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:20111024T035702Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:6 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_name, caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", summary FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE calendar_item.uid = 'E1A13F04-iCal-schedule' ORDER BY caldav_data.dav_id ENDQUERY davical-1.1.1/testing/tests/scheduling/3025-DELETE-invite.result0000644000000000000000000000061611732477373021055 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< dav_name: >/user1/home/E1A13F04-iCal-schedule.ics< davical-1.1.1/testing/tests/scheduling/3001-POST-CANCEL.result0000644000000000000000000000032611633117640020303 0ustar 2.0;Success davical-1.1.1/testing/tests/scheduling/3030-DELETE-attendee-event.result0000644000000000000000000000367011732477401022456 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_name: >/manager1/home/E1A13F04-iCal-schedule.ics< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU DTSTART:20070930T020000 TZNAME:GMT+13:00 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU DTSTART:20080406T030000 TZNAME:GMT+12:00 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111018T195845Z UID:E1A13F04-iCal-schedule DTEND;TZID=Pacific/Auckland:20111019T140000 TRANSP:OPAQUE SUMMARY:Meeting with User1 DTSTART;TZID=Pacific/Auckland:20111019T130000 DTSTAMP:looks good ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:6 ATTENDEE;CN=Manager 1;CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:manager1@example.net ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=DECLINED;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=2.0:mai lto:user1@example.net END:VEVENT END:VCALENDAR < dav_name: >/manager1/.in/user1E1A13F04-iCal-schedule.ics< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0.4//EN CALSCALE:GREGORIAN METHOD:REPLY REQUEST-STATUS:2.0 BEGIN:VEVENT UID:E1A13F04-iCal-schedule DTEND:20111019T010000Z ATTENDEE;CN=user1@example.net;CUTYPE=INDIVIDUAL;EMAIL=user1@example.net; PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1.2 :mailto:user1@example.net DTSTART:20111019T000000Z ORGANIZER;CN="Manager 1":mailto:manager1@example.net SEQUENCE:7 DTSTAMP:looks good END:VEVENT END:VCALENDAR < davical-1.1.1/testing/tests/timezone/0000755000000000000000000000000011776303360014462 5ustar davical-1.1.1/testing/tests/timezone/5042-expand.result0000644000000000000000000000162511725762753017606 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "Some good etag" Content-Length: 780 Content-Type: application/xml; charset="utf-8" all good America/Indiana/Indianapolis Gregorian EDT 2012-03-11T07:00:00Z -05:00 -04:00 EST 2012-11-04T06:00:00Z -04:00 -05:00 EDT 2013-03-10T07:00:00Z -05:00 -04:00 davical-1.1.1/testing/tests/timezone/5043-expand.test0000644000000000000000000000047311651212132017223 0ustar # # Fetch an expanded timezone from the server. # TYPE=GET URL=http://regression.host/tz.php?action=expand&tzid=America/Indiana/Indianapolis&start=2014-01-01&end=2018-12-31 HEAD REPLACE=/dtstamp>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/dtstamp>all good/ REPLACE=!ETag: "\S+"!ETag: "Some good etag"! davical-1.1.1/testing/tests/timezone/5042-expand.test0000644000000000000000000000045211651212132017217 0ustar # # Fetch an expanded timezone from the server. # TYPE=GET URL=http://regression.host/tz.php?action=expand&tzid=America/Indiana/Indianapolis&end=2013-07-01 HEAD REPLACE=/dtstamp>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/dtstamp>all good/ REPLACE=!ETag: "\S+"!ETag: "Some good etag"! davical-1.1.1/testing/tests/timezone/5011-list.test0000644000000000000000000000027411651212132016711 0ustar # # List timezone server timezones # TYPE=GET URL=http://regression.host/tz.php?action=list HEAD REPLACE=/dtstamp>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/dtstamp>all good/ davical-1.1.1/testing/tests/timezone/5000-capabilities.result0000644000000000000000000000610111767336605020743 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 3011 Content-Type: application/xml; charset="utf-8" Olson releases/tzdata2012c mailto:admin@davical.example.com list List timezone identifiers and localized forms lang false true Specify desired localized form(s) changedsince false false Limit result to timezones changed since the given date returnall false false If present inactive timezones will be returned. get Returns one or more timezones as specified by the tzid parameter. format false false text/calendar application/calendar+xml Specify required format for timezone. lang false true Specify desired localized form(s) tzid true true Specify desired timezone identifiers expand Expands the specified timezone(s) into local onset and UTC offsets tzid true true Specify desired timezone identifiers start false false Specify start of the period of interest. If omitted the current year is assumed. end false false Specify end of the period of interest. If omitted the current year + 10 is assumed. capabilities Gets the capabilities of the server davical-1.1.1/testing/tests/timezone/5020-updatecheck.test0000644000000000000000000000016611651212132020216 0ustar # # Request the timezone server update itself # SCRIPT=../scripts/tz-update.php regression.host ../zonedb/vtimezones davical-1.1.1/testing/tests/timezone/5031-get.test0000644000000000000000000000037411651212132016520 0ustar # # List timezone server timezones # TYPE=GET URL=http://regression.host/tz.php?action=get&tzid=Europe/Madrid&lang=es_ES&format=text/calendar HEAD REPLACE=/LAST-MODIFIED:[0-9TZ]{16}/LAST-MODIFIED:all good/ REPLACE=!ETag: "\S+"!ETag: "Some good etag"! davical-1.1.1/testing/tests/timezone/5033-get.result0000644000000000000000000000046411651212132017061 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 183 Content-Type: text/xml; charset="utf-8" This server currently only supports text/calendar format. davical-1.1.1/testing/tests/timezone/5043-expand.result0000644000000000000000000000414611651212132017563 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "Some good etag" Content-Length: 2012 Content-Type: application/xml; charset="utf-8" all good America/Indiana/Indianapolis Gregorian EDT 2014-03-09T07:00:00Z -05:00 -04:00 EST 2014-11-02T06:00:00Z -04:00 -05:00 EDT 2015-03-08T07:00:00Z -05:00 -04:00 EST 2015-11-01T06:00:00Z -04:00 -05:00 EDT 2016-03-13T07:00:00Z -05:00 -04:00 EST 2016-11-06T06:00:00Z -04:00 -05:00 EDT 2017-03-12T07:00:00Z -05:00 -04:00 EST 2017-11-05T06:00:00Z -04:00 -05:00 EDT 2018-03-11T07:00:00Z -05:00 -04:00 EST 2018-11-04T06:00:00Z -04:00 -05:00 davical-1.1.1/testing/tests/timezone/5034-get.test0000644000000000000000000000036111651212132016517 0ustar # # Request bogus timezone that will never exist # TYPE=GET URL=http://regression.host/tz.php?action=get&tzid=US/Canada&lang=en_CA HEAD REPLACE=/LAST-MODIFIED:[0-9TZ]{16}/LAST-MODIFIED:all good/ REPLACE=!ETag: "\S+"!ETag: "Some good etag"! davical-1.1.1/testing/tests/timezone/5040-expand.result0000644000000000000000000001026011725762745017600 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "Some good etag" Content-Length: 4134 Content-Type: application/xml; charset="utf-8" all good Pacific/Auckland Gregorian NZST 2012-04-01T14:00:00Z +13:00 +12:00 NZDT 2012-09-30T14:00:00Z +12:00 +13:00 NZST 2013-04-07T14:00:00Z +13:00 +12:00 NZDT 2013-09-29T14:00:00Z +12:00 +13:00 NZST 2014-04-06T14:00:00Z +13:00 +12:00 NZDT 2014-09-28T14:00:00Z +12:00 +13:00 NZST 2015-04-05T14:00:00Z +13:00 +12:00 NZDT 2015-09-27T14:00:00Z +12:00 +13:00 NZST 2016-04-03T14:00:00Z +13:00 +12:00 NZDT 2016-09-25T14:00:00Z +12:00 +13:00 NZST 2017-04-02T14:00:00Z +13:00 +12:00 NZDT 2017-09-24T14:00:00Z +12:00 +13:00 NZST 2018-04-01T14:00:00Z +13:00 +12:00 NZDT 2018-09-30T14:00:00Z +12:00 +13:00 NZST 2019-04-07T14:00:00Z +13:00 +12:00 NZDT 2019-09-29T14:00:00Z +12:00 +13:00 NZST 2020-04-05T14:00:00Z +13:00 +12:00 NZDT 2020-09-27T14:00:00Z +12:00 +13:00 NZST 2021-04-04T14:00:00Z +13:00 +12:00 NZDT 2021-09-26T14:00:00Z +12:00 +13:00 NZST 2022-04-03T14:00:00Z +13:00 +12:00 NZDT 2022-09-25T14:00:00Z +12:00 +13:00 davical-1.1.1/testing/tests/timezone/5041-expand.result0000644000000000000000000001230611725762746017605 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "Some good etag" Content-Length: 5180 Content-Type: application/xml; charset="utf-8" all good America/Indiana/Indianapolis Gregorian EDT 2009-03-08T07:00:00Z -05:00 -04:00 EST 2009-11-01T06:00:00Z -04:00 -05:00 EDT 2010-03-14T07:00:00Z -05:00 -04:00 EST 2010-11-07T06:00:00Z -04:00 -05:00 EDT 2011-03-13T07:00:00Z -05:00 -04:00 EST 2011-11-06T06:00:00Z -04:00 -05:00 EDT 2012-03-11T07:00:00Z -05:00 -04:00 EST 2012-11-04T06:00:00Z -04:00 -05:00 EDT 2013-03-10T07:00:00Z -05:00 -04:00 EST 2013-11-03T06:00:00Z -04:00 -05:00 EDT 2014-03-09T07:00:00Z -05:00 -04:00 EST 2014-11-02T06:00:00Z -04:00 -05:00 EDT 2015-03-08T07:00:00Z -05:00 -04:00 EST 2015-11-01T06:00:00Z -04:00 -05:00 EDT 2016-03-13T07:00:00Z -05:00 -04:00 EST 2016-11-06T06:00:00Z -04:00 -05:00 EDT 2017-03-12T07:00:00Z -05:00 -04:00 EST 2017-11-05T06:00:00Z -04:00 -05:00 EDT 2018-03-11T07:00:00Z -05:00 -04:00 EST 2018-11-04T06:00:00Z -04:00 -05:00 EDT 2019-03-10T07:00:00Z -05:00 -04:00 EST 2019-11-03T06:00:00Z -04:00 -05:00 EDT 2020-03-08T07:00:00Z -05:00 -04:00 EST 2020-11-01T06:00:00Z -04:00 -05:00 EDT 2021-03-14T07:00:00Z -05:00 -04:00 EST 2021-11-07T06:00:00Z -04:00 -05:00 EDT 2022-03-13T07:00:00Z -05:00 -04:00 EST 2022-11-06T06:00:00Z -04:00 -05:00 davical-1.1.1/testing/tests/timezone/5033-get.test0000644000000000000000000000037511651212132016523 0ustar # # Get timezone with invalid format # TYPE=GET URL=http://regression.host/tz.php?action=get&tzid=Pacific/Auckland&lang=pt_BR&format=text/html HEAD REPLACE=/LAST-MODIFIED:[0-9TZ]{16}/LAST-MODIFIED:all good/ REPLACE=!ETag: "\S+"!ETag: "Some good etag"! davical-1.1.1/testing/tests/timezone/5032-get.result0000644000000000000000000000046411651212132017060 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 183 Content-Type: text/xml; charset="utf-8" This server currently only supports text/calendar format. davical-1.1.1/testing/tests/timezone/5041-expand.test0000644000000000000000000000045411651212132017220 0ustar # # Fetch an expanded timezone from the server. # TYPE=GET URL=http://regression.host/tz.php?action=expand&tzid=America/Indiana/Indianapolis&start=2009-01-01 HEAD REPLACE=/dtstamp>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/dtstamp>all good/ REPLACE=!ETag: "\S+"!ETag: "Some good etag"! davical-1.1.1/testing/tests/timezone/5025-update-remote.test0000644000000000000000000000051011651212132020507 0ustar # # Request the timezone server update itself # # First set some old last_modified but only for Pacific zones SCRIPT=psql regression -c "UPDATE timezones SET last_modified='2011-01-01' where tzid ~ '^Pacific/A'" # # Now sync with bedework server SCRIPT=../scripts/tz-update.php regression.host http://dev.bedework.org/tzsvr/ davical-1.1.1/testing/tests/timezone/5034-get.result0000644000000000000000000000017511651212132017061 0ustar HTTP/1.1 404 Not Found Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/timezone/Restore-Database.result0000644000000000000000000000043011751447456021054 0ustar setval -------- 1670 (1 row) setval -------- 1 (1 row) setval -------- 10 (1 row) setval -------- 10 (1 row) setval -------- 1 (1 row) setval -------- 47 (1 row) setval -------- 14 (1 row) setval -------- 1000 (1 row) davical-1.1.1/testing/tests/timezone/5020-updatecheck.result0000644000000000000000000004046111732501514020564 0ustar Writing new zone for 'zones.h' Writing new zone for 'Europe/Budapest' Writing new zone for 'Europe/Podgorica' Writing new zone for 'Europe/Mariehamn' Writing new zone for 'Europe/Copenhagen' Writing new zone for 'Europe/Lisbon' Writing new zone for 'Europe/Moscow' Writing new zone for 'Europe/Vienna' Writing new zone for 'Europe/Andorra' Writing updated zone for 'Europe/Prague' Writing new zone for 'Europe/Simferopol' Writing new zone for 'Europe/Amsterdam' Writing new zone for 'Europe/Minsk' Writing new zone for 'Europe/Monaco' Writing new zone for 'Europe/Zaporozhye' Writing new zone for 'Europe/Sofia' Writing new zone for 'Europe/Tirane' Writing new zone for 'Europe/Kiev' Writing new zone for 'Europe/Jersey' Writing updated zone for 'Europe/Helsinki' Writing new zone for 'Europe/Istanbul' Writing new zone for 'Europe/Sarajevo' Writing new zone for 'Europe/Zurich' Writing new zone for 'Europe/Riga' Writing new zone for 'Europe/Guernsey' Writing new zone for 'Europe/Bucharest' Writing new zone for 'Europe/Tallinn' Writing new zone for 'Europe/Vatican' Writing new zone for 'Europe/Berlin' Writing new zone for 'Europe/Oslo' Writing new zone for 'Europe/Stockholm' Writing new zone for 'Europe/Belgrade' Writing new zone for 'Europe/Ljubljana' Writing new zone for 'Europe/Athens' Writing new zone for 'Europe/Madrid' Writing new zone for 'Europe/Gibraltar' Writing new zone for 'Europe/Bratislava' Writing new zone for 'Europe/Warsaw' Writing new zone for 'Europe/Brussels' Writing new zone for 'Europe/Uzhgorod' Writing new zone for 'Europe/London' Writing new zone for 'Europe/Volgograd' Writing new zone for 'Europe/San_Marino' Writing new zone for 'Europe/Dublin' Writing new zone for 'Europe/Isle_of_Man' Writing new zone for 'Europe/Rome' Writing new zone for 'Europe/Vilnius' Writing new zone for 'Europe/Skopje' Writing new zone for 'Europe/Vaduz' Writing updated zone for 'Europe/Zagreb' Writing new zone for 'Europe/Paris' Writing new zone for 'Europe/Luxembourg' Writing new zone for 'Europe/Kaliningrad' Writing new zone for 'Europe/Nicosia' Writing new zone for 'Europe/Chisinau' Writing new zone for 'Europe/Malta' Writing new zone for 'Europe/Samara' Writing new zone for 'Atlantic/St_Helena' Writing new zone for 'Atlantic/Madeira' Writing new zone for 'Atlantic/Cape_Verde' Writing new zone for 'Atlantic/Canary' Writing new zone for 'Atlantic/Azores' Writing new zone for 'Atlantic/Reykjavik' Writing new zone for 'Atlantic/Faroe' Writing new zone for 'Atlantic/Stanley' Writing new zone for 'Atlantic/South_Georgia' Writing new zone for 'Atlantic/Bermuda' Writing new zone for 'Pacific/Norfolk' Writing new zone for 'Pacific/Funafuti' Writing new zone for 'Pacific/Tahiti' Writing new zone for 'Pacific/Majuro' Writing new zone for 'Pacific/Wake' Writing new zone for 'Pacific/Pago_Pago' Writing new zone for 'Pacific/Palau' Writing new zone for 'Pacific/Marquesas' Writing new zone for 'Pacific/Fakaofo' Writing new zone for 'Pacific/Efate' Writing new zone for 'Pacific/Noumea' Writing new zone for 'Pacific/Guadalcanal' Writing new zone for 'Pacific/Chatham' Writing new zone for 'Pacific/Gambier' Writing new zone for 'Pacific/Tarawa' Writing new zone for 'Pacific/Pitcairn' Writing new zone for 'Pacific/Nauru' Writing new zone for 'Pacific/Easter' Writing new zone for 'Pacific/Johnston' Writing new zone for 'Pacific/Rarotonga' Writing new zone for 'Pacific/Galapagos' Writing new zone for 'Pacific/Pohnpei' Writing new zone for 'Pacific/Tongatapu' Writing new zone for 'Pacific/Fiji' Writing new zone for 'Pacific/Kwajalein' Writing new zone for 'Pacific/Guam' Writing new zone for 'Pacific/Wallis' Writing new zone for 'Pacific/Kosrae' Writing new zone for 'Pacific/Port_Moresby' Writing new zone for 'Pacific/Niue' Writing new zone for 'Pacific/Enderbury' Writing new zone for 'Pacific/Kiritimati' Writing new zone for 'Pacific/Honolulu' Writing new zone for 'Pacific/Midway' Writing updated zone for 'Pacific/Auckland' Writing new zone for 'Pacific/Saipan' Writing new zone for 'Pacific/Chuuk' Writing new zone for 'Pacific/Apia' Writing new zone for 'Australia/Sydney' Writing new zone for 'Australia/Hobart' Writing new zone for 'Australia/Currie' Writing new zone for 'Australia/Adelaide' Writing new zone for 'Australia/Broken_Hill' Writing new zone for 'Australia/Eucla' Writing new zone for 'Australia/Darwin' Writing new zone for 'Australia/Brisbane' Writing new zone for 'Australia/Melbourne' Writing new zone for 'Australia/Perth' Writing new zone for 'Australia/Lindeman' Writing new zone for 'Australia/Lord_Howe' Writing new zone for 'Africa/Casablanca' Writing new zone for 'Africa/Ndjamena' Writing new zone for 'Africa/Addis_Ababa' Writing new zone for 'Africa/Windhoek' Writing new zone for 'Africa/Nouakchott' Writing new zone for 'Africa/Tunis' Writing new zone for 'Africa/Algiers' Writing new zone for 'Africa/Johannesburg' Writing new zone for 'Africa/Cairo' Writing new zone for 'Africa/Bamako' Writing new zone for 'Africa/Abidjan' Writing new zone for 'Africa/Mbabane' Writing new zone for 'Africa/Maseru' Writing new zone for 'Africa/Mogadishu' Writing new zone for 'Africa/Banjul' Writing new zone for 'Africa/Freetown' Writing new zone for 'Africa/Luanda' Writing new zone for 'Africa/Dakar' Writing new zone for 'Africa/Kampala' Writing new zone for 'Africa/Dar_es_Salaam' Writing new zone for 'Africa/Malabo' Writing new zone for 'Africa/Kinshasa' Writing new zone for 'Africa/Kigali' Writing new zone for 'Africa/Bujumbura' Writing new zone for 'Africa/Conakry' Writing new zone for 'Africa/Blantyre' Writing new zone for 'Africa/Niamey' Writing new zone for 'Africa/Djibouti' Writing new zone for 'Africa/Lagos' Writing new zone for 'Africa/Brazzaville' Writing new zone for 'Africa/Tripoli' Writing new zone for 'Africa/Lusaka' Writing new zone for 'Africa/Ouagadougou' Writing new zone for 'Africa/Bangui' Writing new zone for 'Africa/El_Aaiun' Writing new zone for 'Africa/Lubumbashi' Writing new zone for 'Africa/Bissau' Writing new zone for 'Africa/Libreville' Writing new zone for 'Africa/Harare' Writing new zone for 'Africa/Porto-Novo' Writing new zone for 'Africa/Monrovia' Writing new zone for 'Africa/Juba' Writing new zone for 'Africa/Ceuta' Writing new zone for 'Africa/Nairobi' Writing new zone for 'Africa/Douala' Writing new zone for 'Africa/Khartoum' Writing new zone for 'Africa/Maputo' Writing new zone for 'Africa/Accra' Writing new zone for 'Africa/Lome' Writing new zone for 'Africa/Sao_Tome' Writing new zone for 'Africa/Asmara' Writing new zone for 'Africa/Gaborone' Writing new zone for 'zones.tab' Writing new zone for 'Arctic/Longyearbyen' Writing new zone for 'Antarctica/Rothera' Writing new zone for 'Antarctica/South_Pole' Writing new zone for 'Antarctica/Mawson' Writing new zone for 'Antarctica/Casey' Writing new zone for 'Antarctica/Palmer' Writing new zone for 'Antarctica/Vostok' Writing new zone for 'Antarctica/Macquarie' Writing new zone for 'Antarctica/Syowa' Writing new zone for 'Antarctica/McMurdo' Writing new zone for 'Antarctica/DumontDUrville' Writing new zone for 'Antarctica/Davis' Writing new zone for 'America/Caracas' Writing new zone for 'America/Chihuahua' Writing new zone for 'America/Eirunepe' Writing new zone for 'America/Belem' Writing new zone for 'America/Cambridge_Bay' Writing new zone for 'America/St_Johns' Writing new zone for 'America/Cancun' Writing new zone for 'America/Santarem' Writing new zone for 'America/Toronto' Writing new zone for 'America/Chicago' Writing new zone for 'America/Metlakatla' Writing new zone for 'America/Winnipeg' Writing new zone for 'America/Boa_Vista' Writing new zone for 'America/Cuiaba' Writing new zone for 'America/Guayaquil' Writing new zone for 'America/North_Dakota/Beulah' Writing new zone for 'America/North_Dakota/Center' Writing new zone for 'America/North_Dakota/New_Salem' Writing new zone for 'America/Cayenne' Writing new zone for 'America/Barbados' Writing new zone for 'America/Moncton' Writing new zone for 'America/Montevideo' Writing new zone for 'America/Mazatlan' Writing new zone for 'America/Anguilla' Writing new zone for 'America/Tortola' Writing new zone for 'America/Juneau' Writing new zone for 'America/Asuncion' Writing new zone for 'America/St_Vincent' Writing new zone for 'America/Inuvik' Writing new zone for 'America/Blanc-Sablon' Writing new zone for 'America/Iqaluit' Writing new zone for 'America/Swift_Current' Writing new zone for 'America/Bogota' Writing new zone for 'America/Rainy_River' Writing new zone for 'America/Recife' Writing new zone for 'America/Lima' Writing new zone for 'America/Porto_Velho' Writing new zone for 'America/Scoresbysund' Writing new zone for 'America/Costa_Rica' Writing new zone for 'America/Fortaleza' Writing new zone for 'America/Dominica' Writing new zone for 'America/Tegucigalpa' Writing new zone for 'America/El_Salvador' Writing new zone for 'America/Grand_Turk' Writing new zone for 'America/Nome' Writing new zone for 'America/Ojinaga' Writing new zone for 'America/Creston' Writing new zone for 'America/Tijuana' Writing new zone for 'America/Campo_Grande' Writing new zone for 'America/Jamaica' Writing new zone for 'America/Mexico_City' Writing new zone for 'America/La_Paz' Writing new zone for 'America/Guatemala' Writing new zone for 'America/Santa_Isabel' Writing new zone for 'America/Nassau' Writing new zone for 'America/Shiprock' Writing new zone for 'America/St_Lucia' Writing new zone for 'America/Marigot' Writing new zone for 'America/Rio_Branco' Writing new zone for 'America/Grenada' Writing new zone for 'America/Port-au-Prince' Writing new zone for 'America/Guyana' Writing new zone for 'America/St_Kitts' Writing new zone for 'America/Atikokan' Writing new zone for 'America/Miquelon' Writing new zone for 'America/Anchorage' Writing new zone for 'America/Hermosillo' Writing new zone for 'America/Managua' Writing new zone for 'America/Antigua' Writing new zone for 'America/Godthab' Writing new zone for 'America/Phoenix' Writing new zone for 'America/Cayman' Writing new zone for 'America/Sitka' Writing new zone for 'America/Thule' Writing new zone for 'America/Montserrat' Writing new zone for 'America/Martinique' Writing new zone for 'America/Araguaina' Writing new zone for 'America/Puerto_Rico' Writing new zone for 'America/Adak' Writing new zone for 'America/Dawson' Writing updated zone for 'America/New_York' Writing new zone for 'America/Monterrey' Writing new zone for 'America/Curacao' Writing new zone for 'America/Whitehorse' Writing new zone for 'America/Argentina/Ushuaia' Writing new zone for 'America/Argentina/Jujuy' Writing new zone for 'America/Argentina/Salta' Writing new zone for 'America/Argentina/Rio_Gallegos' Writing new zone for 'America/Argentina/San_Juan' Writing new zone for 'America/Argentina/Mendoza' Writing new zone for 'America/Argentina/Cordoba' Writing new zone for 'America/Argentina/San_Luis' Writing new zone for 'America/Argentina/Catamarca' Writing new zone for 'America/Argentina/La_Rioja' Writing new zone for 'America/Argentina/Tucuman' Writing new zone for 'America/Argentina/Buenos_Aires' Writing new zone for 'America/Kralendijk' Writing new zone for 'America/Paramaribo' Writing new zone for 'America/Goose_Bay' Writing new zone for 'America/Guadeloupe' Writing new zone for 'America/Dawson_Creek' Writing new zone for 'America/Resolute' Writing new zone for 'America/Belize' Writing new zone for 'America/Denver' Writing new zone for 'America/Brasilia' Writing new zone for 'America/Merida' Writing new zone for 'America/Lower_Princes' Writing updated zone for 'America/Los_Angeles' Writing new zone for 'America/Halifax' Writing new zone for 'America/Noronha' Writing new zone for 'America/Regina' Writing new zone for 'America/St_Barthelemy' Writing new zone for 'America/Santiago' Writing new zone for 'America/Bahia_Banderas' Writing new zone for 'America/Indiana/Winamac' Writing new zone for 'America/Indiana/Tell_City' Writing new zone for 'America/Indiana/Vincennes' Writing new zone for 'America/Indiana/Indianapolis' Writing new zone for 'America/Indiana/Petersburg' Writing new zone for 'America/Indiana/Knox' Writing new zone for 'America/Indiana/Marengo' Writing new zone for 'America/Indiana/Vevay' Writing new zone for 'America/Kentucky/Louisville' Writing new zone for 'America/Kentucky/Monticello' Writing new zone for 'America/Rankin_Inlet' Writing new zone for 'America/Glace_Bay' Writing new zone for 'America/Yakutat' Writing new zone for 'America/Boise' Writing new zone for 'America/Edmonton' Writing new zone for 'America/Yellowknife' Writing new zone for 'America/Maceio' Writing new zone for 'America/St_Thomas' Writing new zone for 'America/Montreal' Writing new zone for 'America/Pangnirtung' Writing new zone for 'America/Detroit' Writing new zone for 'America/Port_of_Spain' Writing new zone for 'America/Manaus' Writing new zone for 'America/Vancouver' Writing new zone for 'America/Matamoros' Writing new zone for 'America/Nipigon' Writing new zone for 'America/Havana' Writing new zone for 'America/Menominee' Writing new zone for 'America/Thunder_Bay' Writing new zone for 'America/Santo_Domingo' Writing new zone for 'America/Aruba' Writing new zone for 'America/Danmarkshavn' Writing new zone for 'America/Panama' Writing new zone for 'America/Sao_Paulo' Writing new zone for 'America/Bahia' Writing new zone for 'Indian/Chagos' Writing new zone for 'Indian/Comoro' Writing new zone for 'Indian/Mayotte' Writing new zone for 'Indian/Kerguelen' Writing new zone for 'Indian/Mauritius' Writing new zone for 'Indian/Mahe' Writing new zone for 'Indian/Antananarivo' Writing new zone for 'Indian/Maldives' Writing new zone for 'Indian/Reunion' Writing new zone for 'Indian/Christmas' Writing new zone for 'Indian/Cocos' Writing new zone for 'Asia/Seoul' Writing new zone for 'Asia/Sakhalin' Writing new zone for 'Asia/Tehran' Writing new zone for 'Asia/Aden' Writing new zone for 'Asia/Macau' Writing new zone for 'Asia/Bishkek' Writing new zone for 'Asia/Kabul' Writing new zone for 'Asia/Hovd' Writing new zone for 'Asia/Anadyr' Writing new zone for 'Asia/Kuwait' Writing new zone for 'Asia/Omsk' Writing new zone for 'Asia/Manila' Writing new zone for 'Asia/Makassar' Writing new zone for 'Asia/Vientiane' Writing new zone for 'Asia/Oral' Writing new zone for 'Asia/Kashgar' Writing new zone for 'Asia/Yekaterinburg' Writing new zone for 'Asia/Kamchatka' Writing new zone for 'Asia/Harbin' Writing new zone for 'Asia/Aqtobe' Writing new zone for 'Asia/Chongqing' Writing new zone for 'Asia/Samarkand' Writing new zone for 'Asia/Kuala_Lumpur' Writing new zone for 'Asia/Taipei' Writing new zone for 'Asia/Shanghai' Writing new zone for 'Asia/Singapore' Writing new zone for 'Asia/Kuching' Writing new zone for 'Asia/Tbilisi' Writing new zone for 'Asia/Dhaka' Writing new zone for 'Asia/Krasnoyarsk' Writing new zone for 'Asia/Istanbul' Writing new zone for 'Asia/Tashkent' Writing new zone for 'Asia/Jerusalem' Writing new zone for 'Asia/Ulaanbaatar' Writing new zone for 'Asia/Beirut' Writing new zone for 'Asia/Jayapura' Writing new zone for 'Asia/Tokyo' Writing new zone for 'Asia/Bangkok' Writing new zone for 'Asia/Kolkata' Writing new zone for 'Asia/Baku' Writing new zone for 'Asia/Karachi' Writing new zone for 'Asia/Muscat' Writing new zone for 'Asia/Kathmandu' Writing new zone for 'Asia/Gaza' Writing new zone for 'Asia/Yerevan' Writing new zone for 'Asia/Colombo' Writing new zone for 'Asia/Phnom_Penh' Writing new zone for 'Asia/Vladivostok' Writing new zone for 'Asia/Almaty' Writing new zone for 'Asia/Riyadh' Writing new zone for 'Asia/Thimphu' Writing new zone for 'Asia/Dubai' Writing new zone for 'Asia/Qyzylorda' Writing new zone for 'Asia/Aqtau' Writing new zone for 'Asia/Hong_Kong' Writing new zone for 'Asia/Novosibirsk' Writing new zone for 'Asia/Dushanbe' Writing new zone for 'Asia/Ashgabat' Writing new zone for 'Asia/Brunei' Writing new zone for 'Asia/Novokuznetsk' Writing new zone for 'Asia/Pyongyang' Writing new zone for 'Asia/Magadan' Writing new zone for 'Asia/Bahrain' Writing new zone for 'Asia/Hebron' Writing new zone for 'Asia/Damascus' Writing new zone for 'Asia/Qatar' Writing new zone for 'Asia/Choibalsan' Writing new zone for 'Asia/Ho_Chi_Minh' Writing new zone for 'Asia/Yakutsk' Writing new zone for 'Asia/Irkutsk' Writing new zone for 'Asia/Dili' Writing new zone for 'Asia/Urumqi' Writing new zone for 'Asia/Nicosia' Writing new zone for 'Asia/Pontianak' Writing new zone for 'Asia/Amman' Writing new zone for 'Asia/Jakarta' Writing new zone for 'Asia/Baghdad' Writing new zone for 'Asia/Rangoon' Added 414 new zones, updated data for 6 zones and added 0 new aliases davical-1.1.1/testing/tests/timezone/5011-list.result0000644000000000000000000000042311651212132017244 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 162 Content-Type: application/xml; charset="utf-8" all good davical-1.1.1/testing/tests/timezone/5010-list.test0000644000000000000000000000046711651212132016714 0ustar # # List timezone server timezones # TYPE=GET URL=http://regression.host/tz.php?action=list&returnall&lang=en_US HEAD REPLACE=/dtstamp>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/dtstamp>all good/ REPLACE=/last-modified>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/last-modified>all good/ davical-1.1.1/testing/tests/timezone/5025-update-remote.result0000644000000000000000000000073411651212132021056 0ustar UPDATE 2 Fetching timezone list Found timezone Pacific/Auckland needs updating Fetching zone for Pacific/Auckland from http://dev.bedework.org/tzsvr/?action=get&tzid=Pacific/Auckland Writing updated zone for 'Pacific/Auckland' Found timezone Pacific/Apia needs updating Fetching zone for Pacific/Apia from http://dev.bedework.org/tzsvr/?action=get&tzid=Pacific/Apia Writing updated zone for 'Pacific/Apia' Added 0 new zones, updated data for 2 zones and added 206 new aliases davical-1.1.1/testing/tests/timezone/5010-list.result0000644000000000000000000000616011672063015017256 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 3238 Content-Type: application/xml; charset="utf-8" all good America/Los_Angeles all good America/Los_Angeles America/New_York all good America/New_York Europe/Helsinki all good Europe/Helsinki Europe/Prague all good Europe/Prague Europe/Zagreb all good Europe/Zagreb /mozilla.org/20050126_1/Antarctica/McMurdo all good Antarctica/McMurdo /mozilla.org/20050126_1/Antarctica/McMurdo /mozilla.org/20050126_1/Pacific/Auckland all good Pacific/Auckland /mozilla.org/20050126_1/Pacific/Auckland /mozilla.org/20070129_1/Antarctica/McMurdo all good Antarctica/McMurdo /mozilla.org/20070129_1/Antarctica/McMurdo New Zealand Standard Time all good Pacific/Auckland New Zealand Standard Time Pacific/Auckland all good Pacific/Auckland Prague_in_Central_Europe all good Prague_in_Central_Europe /softwarestudio.org/Olson_20011030_5/Pacific/Auckland all good Pacific/Auckland /softwarestudio.org/Olson_20011030_5/Pacific/Auckland Somewhere_in_Central_Europe all good Somewhere_in_Central_Europe (UTC-05:00) Eastern Time (US & Canada) all good America/New_York (UTC-05:00) Eastern Time (US & Canada) davical-1.1.1/testing/tests/timezone/5030-get.test0000644000000000000000000000035211651212132016513 0ustar # # List timezone server timezones # TYPE=GET URL=http://regression.host/tz.php?action=get&tzid=Pacific/Auckland&lang=en_US HEAD REPLACE=/LAST-MODIFIED:[0-9TZ]{16}/LAST-MODIFIED:all good/ REPLACE=!ETag: "\S+"!ETag: "Some good etag"! davical-1.1.1/testing/tests/timezone/5021-list.result0000644000000000000000000016327011732501525017266 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Type: application/xml; charset="utf-8" all good Africa/Abidjan all good Africa/Abidjan Africa/Accra all good Africa/Accra Africa/Addis_Ababa all good Africa/Addis_Ababa Africa/Algiers all good Africa/Algiers Africa/Asmara all good Africa/Asmara Africa/Bamako all good Africa/Bamako Africa/Bangui all good Africa/Bangui Africa/Banjul all good Africa/Banjul Africa/Bissau all good Africa/Bissau Africa/Blantyre all good Africa/Blantyre Africa/Brazzaville all good Africa/Brazzaville Africa/Bujumbura all good Africa/Bujumbura Africa/Cairo all good Africa/Cairo Africa/Casablanca all good Africa/Casablanca Africa/Ceuta all good Africa/Ceuta Africa/Conakry all good Africa/Conakry Africa/Dakar all good Africa/Dakar Africa/Dar_es_Salaam all good Africa/Dar_es_Salaam Africa/Djibouti all good Africa/Djibouti Africa/Douala all good Africa/Douala Africa/El_Aaiun all good Africa/El_Aaiun Africa/Freetown all good Africa/Freetown Africa/Gaborone all good Africa/Gaborone Africa/Harare all good Africa/Harare Africa/Johannesburg all good Africa/Johannesburg Africa/Juba all good Africa/Juba Africa/Kampala all good Africa/Kampala Africa/Khartoum all good Africa/Khartoum Africa/Kigali all good Africa/Kigali Africa/Kinshasa all good Africa/Kinshasa Africa/Lagos all good Africa/Lagos Africa/Libreville all good Africa/Libreville Africa/Lome all good Africa/Lome Africa/Luanda all good Africa/Luanda Africa/Lubumbashi all good Africa/Lubumbashi Africa/Lusaka all good Africa/Lusaka Africa/Malabo all good Africa/Malabo Africa/Maputo all good Africa/Maputo Africa/Maseru all good Africa/Maseru Africa/Mbabane all good Africa/Mbabane Africa/Mogadishu all good Africa/Mogadishu Africa/Monrovia all good Africa/Monrovia Africa/Nairobi all good Africa/Nairobi Africa/Ndjamena all good Africa/Ndjamena Africa/Niamey all good Africa/Niamey Africa/Nouakchott all good Africa/Nouakchott Africa/Ouagadougou all good Africa/Ouagadougou Africa/Porto-Novo all good Africa/Porto-Novo Africa/Sao_Tome all good Africa/Sao_Tome Africa/Tripoli all good Africa/Tripoli Africa/Tunis all good Africa/Tunis Africa/Windhoek all good Africa/Windhoek America/Adak all good America/Adak America/Anchorage all good America/Anchorage America/Anguilla all good America/Anguilla America/Antigua all good America/Antigua America/Araguaina all good America/Araguaina America/Argentina/Buenos_Aires all good America/Argentina/Buenos_Aires America/Argentina/Catamarca all good America/Argentina/Catamarca America/Argentina/Cordoba all good America/Argentina/Cordoba America/Argentina/Jujuy all good America/Argentina/Jujuy America/Argentina/La_Rioja all good America/Argentina/La_Rioja America/Argentina/Mendoza all good America/Argentina/Mendoza America/Argentina/Rio_Gallegos all good America/Argentina/Rio_Gallegos America/Argentina/Salta all good America/Argentina/Salta America/Argentina/San_Juan all good America/Argentina/San_Juan America/Argentina/San_Luis all good America/Argentina/San_Luis America/Argentina/Tucuman all good America/Argentina/Tucuman America/Argentina/Ushuaia all good America/Argentina/Ushuaia America/Aruba all good America/Aruba America/Asuncion all good America/Asuncion America/Atikokan all good America/Atikokan America/Bahia all good America/Bahia America/Bahia_Banderas all good America/Bahia_Banderas America/Barbados all good America/Barbados America/Belem all good America/Belem America/Belize all good America/Belize America/Blanc-Sablon all good America/Blanc-Sablon America/Boa_Vista all good America/Boa_Vista America/Bogota all good America/Bogota America/Boise all good America/Boise America/Brasilia all good America/Brasilia America/Cambridge_Bay all good America/Cambridge_Bay America/Campo_Grande all good America/Campo_Grande America/Cancun all good America/Cancun America/Caracas all good America/Caracas America/Cayenne all good America/Cayenne America/Cayman all good America/Cayman America/Chicago all good America/Chicago America/Chihuahua all good America/Chihuahua America/Costa_Rica all good America/Costa_Rica America/Creston all good America/Creston America/Cuiaba all good America/Cuiaba America/Curacao all good America/Curacao America/Danmarkshavn all good America/Danmarkshavn America/Dawson all good America/Dawson America/Dawson_Creek all good America/Dawson_Creek America/Denver all good America/Denver America/Detroit all good America/Detroit America/Dominica all good America/Dominica America/Edmonton all good America/Edmonton America/Eirunepe all good America/Eirunepe America/El_Salvador all good America/El_Salvador America/Fortaleza all good America/Fortaleza America/Glace_Bay all good America/Glace_Bay America/Godthab all good America/Godthab America/Goose_Bay all good America/Goose_Bay America/Grand_Turk all good America/Grand_Turk America/Grenada all good America/Grenada America/Guadeloupe all good America/Guadeloupe America/Guatemala all good America/Guatemala America/Guayaquil all good America/Guayaquil America/Guyana all good America/Guyana America/Halifax all good America/Halifax America/Havana all good America/Havana America/Hermosillo all good America/Hermosillo America/Indiana/Indianapolis all good America/Indiana/Indianapolis America/Indiana/Knox all good America/Indiana/Knox America/Indiana/Marengo all good America/Indiana/Marengo America/Indiana/Petersburg all good America/Indiana/Petersburg America/Indiana/Tell_City all good America/Indiana/Tell_City America/Indiana/Vevay all good America/Indiana/Vevay America/Indiana/Vincennes all good America/Indiana/Vincennes America/Indiana/Winamac all good America/Indiana/Winamac America/Inuvik all good America/Inuvik America/Iqaluit all good America/Iqaluit America/Jamaica all good America/Jamaica America/Juneau all good America/Juneau America/Kentucky/Louisville all good America/Kentucky/Louisville America/Kentucky/Monticello all good America/Kentucky/Monticello America/Kralendijk all good America/Kralendijk America/La_Paz all good America/La_Paz America/Lima all good America/Lima America/Los_Angeles all good America/Los_Angeles America/Lower_Princes all good America/Lower_Princes America/Maceio all good America/Maceio America/Managua all good America/Managua America/Manaus all good America/Manaus America/Marigot all good America/Marigot America/Martinique all good America/Martinique America/Matamoros all good America/Matamoros America/Mazatlan all good America/Mazatlan America/Menominee all good America/Menominee America/Merida all good America/Merida America/Metlakatla all good America/Metlakatla America/Mexico_City all good America/Mexico_City America/Miquelon all good America/Miquelon America/Moncton all good America/Moncton America/Monterrey all good America/Monterrey America/Montevideo all good America/Montevideo America/Montreal all good America/Montreal America/Montserrat all good America/Montserrat America/Nassau all good America/Nassau America/New_York all good America/New_York America/Nipigon all good America/Nipigon America/Nome all good America/Nome America/Noronha all good America/Noronha America/North_Dakota/Beulah all good America/North_Dakota/Beulah America/North_Dakota/Center all good America/North_Dakota/Center America/North_Dakota/New_Salem all good America/North_Dakota/New_Salem America/Ojinaga all good America/Ojinaga America/Panama all good America/Panama America/Pangnirtung all good America/Pangnirtung America/Paramaribo all good America/Paramaribo America/Phoenix all good America/Phoenix America/Port-au-Prince all good America/Port-au-Prince America/Port_of_Spain all good America/Port_of_Spain America/Porto_Velho all good America/Porto_Velho America/Puerto_Rico all good America/Puerto_Rico America/Rainy_River all good America/Rainy_River America/Rankin_Inlet all good America/Rankin_Inlet America/Recife all good America/Recife America/Regina all good America/Regina America/Resolute all good America/Resolute America/Rio_Branco all good America/Rio_Branco America/Santa_Isabel all good America/Santa_Isabel America/Santarem all good America/Santarem America/Santiago all good America/Santiago America/Santo_Domingo all good America/Santo_Domingo America/Sao_Paulo all good America/Sao_Paulo America/Scoresbysund all good America/Scoresbysund America/Shiprock all good America/Shiprock America/Sitka all good America/Sitka America/St_Barthelemy all good America/St_Barthelemy America/St_Johns all good America/St_Johns America/St_Kitts all good America/St_Kitts America/St_Lucia all good America/St_Lucia America/St_Thomas all good America/St_Thomas America/St_Vincent all good America/St_Vincent America/Swift_Current all good America/Swift_Current America/Tegucigalpa all good America/Tegucigalpa America/Thule all good America/Thule America/Thunder_Bay all good America/Thunder_Bay America/Tijuana all good America/Tijuana America/Toronto all good America/Toronto America/Tortola all good America/Tortola America/Vancouver all good America/Vancouver America/Whitehorse all good America/Whitehorse America/Winnipeg all good America/Winnipeg America/Yakutat all good America/Yakutat America/Yellowknife all good America/Yellowknife Antarctica/Casey all good Antarctica/Casey Antarctica/Davis all good Antarctica/Davis Antarctica/DumontDUrville all good Antarctica/DumontDUrville Antarctica/Macquarie all good Antarctica/Macquarie Antarctica/Mawson all good Antarctica/Mawson Antarctica/McMurdo all good Antarctica/McMurdo Antarctica/Palmer all good Antarctica/Palmer Antarctica/Rothera all good Antarctica/Rothera Antarctica/South_Pole all good Antarctica/South_Pole Antarctica/Syowa all good Antarctica/Syowa Antarctica/Vostok all good Antarctica/Vostok Arctic/Longyearbyen all good Arctic/Longyearbyen Asia/Aden all good Asia/Aden Asia/Almaty all good Asia/Almaty Asia/Amman all good Asia/Amman Asia/Anadyr all good Asia/Anadyr Asia/Aqtau all good Asia/Aqtau Asia/Aqtobe all good Asia/Aqtobe Asia/Ashgabat all good Asia/Ashgabat Asia/Baghdad all good Asia/Baghdad Asia/Bahrain all good Asia/Bahrain Asia/Baku all good Asia/Baku Asia/Bangkok all good Asia/Bangkok Asia/Beirut all good Asia/Beirut Asia/Bishkek all good Asia/Bishkek Asia/Brunei all good Asia/Brunei Asia/Choibalsan all good Asia/Choibalsan Asia/Chongqing all good Asia/Chongqing Asia/Colombo all good Asia/Colombo Asia/Damascus all good Asia/Damascus Asia/Dhaka all good Asia/Dhaka Asia/Dili all good Asia/Dili Asia/Dubai all good Asia/Dubai Asia/Dushanbe all good Asia/Dushanbe Asia/Gaza all good Asia/Gaza Asia/Harbin all good Asia/Harbin Asia/Hebron all good Asia/Hebron Asia/Ho_Chi_Minh all good Asia/Ho_Chi_Minh Asia/Hong_Kong all good Asia/Hong_Kong Asia/Hovd all good Asia/Hovd Asia/Irkutsk all good Asia/Irkutsk Asia/Istanbul all good Asia/Istanbul Asia/Jakarta all good Asia/Jakarta Asia/Jayapura all good Asia/Jayapura Asia/Jerusalem all good Asia/Jerusalem Asia/Kabul all good Asia/Kabul Asia/Kamchatka all good Asia/Kamchatka Asia/Karachi all good Asia/Karachi Asia/Kashgar all good Asia/Kashgar Asia/Kathmandu all good Asia/Kathmandu Asia/Kolkata all good Asia/Kolkata Asia/Krasnoyarsk all good Asia/Krasnoyarsk Asia/Kuala_Lumpur all good Asia/Kuala_Lumpur Asia/Kuching all good Asia/Kuching Asia/Kuwait all good Asia/Kuwait Asia/Macau all good Asia/Macau Asia/Magadan all good Asia/Magadan Asia/Makassar all good Asia/Makassar Asia/Manila all good Asia/Manila Asia/Muscat all good Asia/Muscat Asia/Nicosia all good Asia/Nicosia Asia/Novokuznetsk all good Asia/Novokuznetsk Asia/Novosibirsk all good Asia/Novosibirsk Asia/Omsk all good Asia/Omsk Asia/Oral all good Asia/Oral Asia/Phnom_Penh all good Asia/Phnom_Penh Asia/Pontianak all good Asia/Pontianak Asia/Pyongyang all good Asia/Pyongyang Asia/Qatar all good Asia/Qatar Asia/Qyzylorda all good Asia/Qyzylorda Asia/Rangoon all good Asia/Rangoon Asia/Riyadh all good Asia/Riyadh Asia/Sakhalin all good Asia/Sakhalin Asia/Samarkand all good Asia/Samarkand Asia/Seoul all good Asia/Seoul Asia/Shanghai all good Asia/Shanghai Asia/Singapore all good Asia/Singapore Asia/Taipei all good Asia/Taipei Asia/Tashkent all good Asia/Tashkent Asia/Tbilisi all good Asia/Tbilisi Asia/Tehran all good Asia/Tehran Asia/Thimphu all good Asia/Thimphu Asia/Tokyo all good Asia/Tokyo Asia/Ulaanbaatar all good Asia/Ulaanbaatar Asia/Urumqi all good Asia/Urumqi Asia/Vientiane all good Asia/Vientiane Asia/Vladivostok all good Asia/Vladivostok Asia/Yakutsk all good Asia/Yakutsk Asia/Yekaterinburg all good Asia/Yekaterinburg Asia/Yerevan all good Asia/Yerevan Atlantic/Azores all good Atlantic/Azores Atlantic/Bermuda all good Atlantic/Bermuda Atlantic/Canary all good Atlantic/Canary Atlantic/Cape_Verde all good Atlantic/Cape_Verde Atlantic/Faroe all good Atlantic/Faroe Atlantic/Madeira all good Atlantic/Madeira Atlantic/Reykjavik all good Atlantic/Reykjavik Atlantic/South_Georgia all good Atlantic/South_Georgia Atlantic/Stanley all good Atlantic/Stanley Atlantic/St_Helena all good Atlantic/St_Helena Australia/Adelaide all good Australia/Adelaide Australia/Brisbane all good Australia/Brisbane Australia/Broken_Hill all good Australia/Broken_Hill Australia/Currie all good Australia/Currie Australia/Darwin all good Australia/Darwin Australia/Eucla all good Australia/Eucla Australia/Hobart all good Australia/Hobart Australia/Lindeman all good Australia/Lindeman Australia/Lord_Howe all good Australia/Lord_Howe Australia/Melbourne all good Australia/Melbourne Australia/Perth all good Australia/Perth Australia/Sydney all good Australia/Sydney Europe/Amsterdam all good Europe/Amsterdam Europe/Andorra all good Europe/Andorra Europe/Athens all good Europe/Athens Europe/Belgrade all good Europe/Belgrade Europe/Berlin all good Europe/Berlin Europe/Bratislava all good Europe/Bratislava Europe/Brussels all good Europe/Brussels Europe/Bucharest all good Europe/Bucharest Europe/Budapest all good Europe/Budapest Europe/Chisinau all good Europe/Chisinau Europe/Copenhagen all good Europe/Copenhagen Europe/Dublin all good Europe/Dublin Europe/Gibraltar all good Europe/Gibraltar Europe/Guernsey all good Europe/Guernsey Europe/Helsinki all good Europe/Helsinki Europe/Isle_of_Man all good Europe/Isle_of_Man Europe/Istanbul all good Europe/Istanbul Europe/Jersey all good Europe/Jersey Europe/Kaliningrad all good Europe/Kaliningrad Europe/Kiev all good Europe/Kiev Europe/Lisbon all good Europe/Lisbon Europe/Ljubljana all good Europe/Ljubljana Europe/London all good Europe/London Europe/Luxembourg all good Europe/Luxembourg Europe/Madrid all good Europe/Madrid Europe/Malta all good Europe/Malta Europe/Mariehamn all good Europe/Mariehamn Europe/Minsk all good Europe/Minsk Europe/Monaco all good Europe/Monaco Europe/Moscow all good Europe/Moscow Europe/Nicosia all good Europe/Nicosia Europe/Oslo all good Europe/Oslo Europe/Paris all good Europe/Paris Europe/Podgorica all good Europe/Podgorica Europe/Prague all good Europe/Prague Europe/Riga all good Europe/Riga Europe/Rome all good Europe/Rome Europe/Samara all good Europe/Samara Europe/San_Marino all good Europe/San_Marino Europe/Sarajevo all good Europe/Sarajevo Europe/Simferopol all good Europe/Simferopol Europe/Skopje all good Europe/Skopje Europe/Sofia all good Europe/Sofia Europe/Stockholm all good Europe/Stockholm Europe/Tallinn all good Europe/Tallinn Europe/Tirane all good Europe/Tirane Europe/Uzhgorod all good Europe/Uzhgorod Europe/Vaduz all good Europe/Vaduz Europe/Vatican all good Europe/Vatican Europe/Vienna all good Europe/Vienna Europe/Vilnius all good Europe/Vilnius Europe/Volgograd all good Europe/Volgograd Europe/Warsaw all good Europe/Warsaw Europe/Zagreb all good Europe/Zagreb Europe/Zaporozhye all good Europe/Zaporozhye Europe/Zurich all good Europe/Zurich Indian/Antananarivo all good Indian/Antananarivo Indian/Chagos all good Indian/Chagos Indian/Christmas all good Indian/Christmas Indian/Cocos all good Indian/Cocos Indian/Comoro all good Indian/Comoro Indian/Kerguelen all good Indian/Kerguelen Indian/Mahe all good Indian/Mahe Indian/Maldives all good Indian/Maldives Indian/Mauritius all good Indian/Mauritius Indian/Mayotte all good Indian/Mayotte Indian/Reunion all good Indian/Reunion Pacific/Apia all good Pacific/Apia Pacific/Auckland all good Pacific/Auckland Pacific/Chatham all good Pacific/Chatham Pacific/Chuuk all good Pacific/Chuuk Pacific/Easter all good Pacific/Easter Pacific/Efate all good Pacific/Efate Pacific/Enderbury all good Pacific/Enderbury Pacific/Fakaofo all good Pacific/Fakaofo Pacific/Fiji all good Pacific/Fiji Pacific/Funafuti all good Pacific/Funafuti Pacific/Galapagos all good Pacific/Galapagos Pacific/Gambier all good Pacific/Gambier Pacific/Guadalcanal all good Pacific/Guadalcanal Pacific/Guam all good Pacific/Guam Pacific/Honolulu all good Pacific/Honolulu Pacific/Johnston all good Pacific/Johnston Pacific/Kiritimati all good Pacific/Kiritimati Pacific/Kosrae all good Pacific/Kosrae Pacific/Kwajalein all good Pacific/Kwajalein Pacific/Majuro all good Pacific/Majuro Pacific/Marquesas all good Pacific/Marquesas Pacific/Midway all good Pacific/Midway Pacific/Nauru all good Pacific/Nauru Pacific/Niue all good Pacific/Niue Pacific/Norfolk all good Pacific/Norfolk Pacific/Noumea all good Pacific/Noumea Pacific/Pago_Pago all good Pacific/Pago_Pago Pacific/Palau all good Pacific/Palau Pacific/Pitcairn all good Pacific/Pitcairn Pacific/Pohnpei all good Pacific/Pohnpei Pacific/Port_Moresby all good Pacific/Port_Moresby Pacific/Rarotonga all good Pacific/Rarotonga Pacific/Saipan all good Pacific/Saipan Pacific/Tahiti all good Pacific/Tahiti Pacific/Tarawa all good Pacific/Tarawa Pacific/Tongatapu all good Pacific/Tongatapu Pacific/Wake all good Pacific/Wake Pacific/Wallis all good Pacific/Wallis zones.h all good zones.h zones.tab all good zones.tab davical-1.1.1/testing/tests/timezone/5021-list.test0000644000000000000000000000044211651212132016707 0ustar # # List timezone server timezones # TYPE=GET URL=http://regression.host/tz.php?action=list HEAD REPLACE=/dtstamp>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/dtstamp>all good/ REPLACE=/last-modified>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/last-modified>all good/ davical-1.1.1/testing/tests/timezone/5000-capabilities.test0000644000000000000000000000016011651212132020357 0ustar # # Request timezone server capabilities # TYPE=GET URL=http://regression.host/tz.php?action=capabilities HEAD davical-1.1.1/testing/tests/timezone/5030-get.result0000644000000000000000000000750411651212132017060 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "Some good etag" Last-Modified: Dow, 01 Jan 2000 00:00:00 GMT Content-Disposition: Attachment; Filename="Pacific-Auckland.ics" Content-Length: 3658 Content-Type: text/calendar; charset=UTF-8 BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN PRODID:/bedework.org//NONSGML Bedework//EN LAST-MODIFIED:all good TZ-URL: http://mycaldav/tz.php?action=get&tzid=Pacific/Auckland&lang=en_US TZNAME:Pacific/Auckland BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD BEGIN:STANDARD TZOFFSETFROM:+113904 TZOFFSETTO:+1130 TZNAME:NZMT DTSTART:18681102T000000 RDATE:18681102T000000 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1130 TZOFFSETTO:+1230 TZNAME:NZST DTSTART:19271106T020000 RDATE:19271106T020000 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1230 TZOFFSETTO:+1130 TZNAME:NZMT DTSTART:19280304T020000 RDATE:19280304T020000 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1130 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19281014T020000 RDATE:19281014T020000 RDATE:19291013T020000 RDATE:19301012T020000 RDATE:19311011T020000 RDATE:19321009T020000 RDATE:19331008T020000 RDATE:19340930T020000 RDATE:19350929T020000 RDATE:19360927T020000 RDATE:19370926T020000 RDATE:19380925T020000 RDATE:19390924T020000 RDATE:19400929T020000 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1130 TZNAME:NZMT DTSTART:19290317T020000 RDATE:19290317T020000 RDATE:19300316T020000 RDATE:19310315T020000 RDATE:19320320T020000 RDATE:19330319T020000 RDATE:19340429T020000 RDATE:19350428T020000 RDATE:19360426T020000 RDATE:19370425T020000 RDATE:19380424T020000 RDATE:19390430T020000 RDATE:19400428T020000 END:STANDARD BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19460101T000000 RDATE:19460101T000000 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19741103T020000 RDATE:19741103T020000 RDATE:19751026T020000 RDATE:19761031T020000 RDATE:19771030T020000 RDATE:19781029T020000 RDATE:19791028T020000 RDATE:19801026T020000 RDATE:19811025T020000 RDATE:19821031T020000 RDATE:19831030T020000 RDATE:19841028T020000 RDATE:19851027T020000 RDATE:19861026T020000 RDATE:19871025T020000 RDATE:19881030T020000 RDATE:19891008T020000 RDATE:19901007T020000 RDATE:19911006T020000 RDATE:19921004T020000 RDATE:19931003T020000 RDATE:19941002T020000 RDATE:19951001T020000 RDATE:19961006T020000 RDATE:19971005T020000 RDATE:19981004T020000 RDATE:19991003T020000 RDATE:20001001T020000 RDATE:20011007T020000 RDATE:20021006T020000 RDATE:20031005T020000 RDATE:20041003T020000 RDATE:20051002T020000 RDATE:20061001T020000 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19750223T020000 RDATE:19750223T020000 RDATE:19760307T030000 RDATE:19770306T030000 RDATE:19780305T030000 RDATE:19790304T030000 RDATE:19800302T030000 RDATE:19810301T030000 RDATE:19820307T030000 RDATE:19830306T030000 RDATE:19840304T030000 RDATE:19850303T030000 RDATE:19860302T030000 RDATE:19870301T030000 RDATE:19880306T030000 RDATE:19890305T030000 RDATE:19900318T030000 RDATE:19910317T030000 RDATE:19920315T030000 RDATE:19930321T030000 RDATE:19940320T030000 RDATE:19950319T030000 RDATE:19960317T030000 RDATE:19970316T030000 RDATE:19980315T030000 RDATE:19990321T030000 RDATE:20000319T030000 RDATE:20010318T030000 RDATE:20020317T030000 RDATE:20030316T030000 RDATE:20040321T030000 RDATE:20050320T030000 RDATE:20060319T030000 RDATE:20070318T030000 END:STANDARD END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/timezone/5032-get.test0000644000000000000000000000040711651212132016516 0ustar # # List timezone server timezones # TYPE=GET URL=http://regression.host/tz.php?action=get&tzid=Europe/London&lang=en_UK&format=application/calendar+xml HEAD REPLACE=/LAST-MODIFIED:[0-9TZ]{16}/LAST-MODIFIED:all good/ REPLACE=!ETag: "\S+"!ETag: "Some good etag"! davical-1.1.1/testing/tests/timezone/5040-expand.test0000644000000000000000000000040111651212132017207 0ustar # # List timezone server timezones # TYPE=GET URL=http://regression.host/tz.php?action=expand&tzid=Pacific/Auckland HEAD REPLACE=/dtstamp>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/dtstamp>all good/ REPLACE=!ETag: "\S+"!ETag: "Some good etag"! davical-1.1.1/testing/tests/timezone/5031-get.result0000644000000000000000000000622611725762741017103 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "Some good etag" Last-Modified: Dow, 01 Jan 2000 00:00:00 GMT Content-Disposition: Attachment; Filename="Europe-Madrid.ics" Content-Length: 2975 Content-Type: text/calendar; charset=UTF-8 BEGIN:VCALENDAR PRODID:-//Morphoss Ltd//NONSGML aCal//EN VERSION:2.0 LAST-MODIFIED:all good TZ-URL:http://mycaldav/tz.php?action=get&tzid=Europe/Madrid&lang=es_ES&f ormat=text/calendar TZNAME:Europe/Madrid BEGIN:VTIMEZONE TZID:Europe/Madrid X-LIC-LOCATION:Europe/Madrid BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19961027T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:STANDARD TZOFFSETFROM:-001444 TZOFFSETTO:+0000 TZNAME:WET DTSTART:19010101T000000 RDATE:19010101T000000 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:WEST DTSTART:19170505T230000 RDATE:19170505T230000 RDATE:19180415T230000 RDATE:19190405T230000 RDATE:19240416T230000 RDATE:19260417T230000 RDATE:19270409T230000 RDATE:19280414T230000 RDATE:19290420T230000 RDATE:19370522T230000 RDATE:19380322T230000 RDATE:19390415T230000 RDATE:19400316T230000 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:WET DTSTART:19171007T000000 RDATE:19171007T000000 RDATE:19181007T000000 RDATE:19191007T000000 RDATE:19241005T000000 RDATE:19261003T000000 RDATE:19271002T000000 RDATE:19281007T000000 RDATE:19291006T000000 RDATE:19371003T000000 RDATE:19381002T000000 RDATE:19391008T000000 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:WEMT DTSTART:19420502T230000 RDATE:19420502T230000 RDATE:19430417T230000 RDATE:19440415T230000 RDATE:19450414T230000 RDATE:19460413T230000 END:DAYLIGHT BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:WEST DTSTART:19420902T000000 RDATE:19420902T000000 RDATE:19431004T000000 RDATE:19441011T000000 RDATE:19450930T010000 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19460930T000000 RDATE:19460930T000000 RDATE:19490930T010000 RDATE:19741006T010000 RDATE:19751005T010000 RDATE:19760926T010000 RDATE:19770925T010000 RDATE:19781001T010000 RDATE:19790930T030000 RDATE:19800928T030000 RDATE:19810927T030000 RDATE:19820926T030000 RDATE:19830925T030000 RDATE:19840930T030000 RDATE:19850929T030000 RDATE:19860928T030000 RDATE:19870927T030000 RDATE:19880925T030000 RDATE:19890924T030000 RDATE:19900930T030000 RDATE:19910929T030000 RDATE:19920927T030000 RDATE:19930926T030000 RDATE:19940925T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19490430T230000 RDATE:19490430T230000 RDATE:19740413T230000 RDATE:19750419T230000 RDATE:19760327T230000 RDATE:19770402T230000 RDATE:19780402T230000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19790101T000000 RDATE:19790101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0000755000000000000000000000000011776303360016137 5ustar davical-1.1.1/testing/tests/regression-suite/0106-Evo-GET-1.test0000644000000000000000000000024311446006434020723 0ustar # # Now we GET the entry that was in the report. # TYPE=GET URL=http://mycaldav/caldav.php/user1/home/20061101T073004Z.ics HEADER=User-Agent: Evolution/1.8.1 HEAD davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection.test0000644000000000000000000001205011651212132023276 0ustar # # PUT a calendar collection to user2 so we have some starting events # # There is no CalDAV defined behaviour for this. # TYPE=PUT URL=http://mycaldav/caldav.php/user2/home/ HEADER=User-Agent: RSCDS Testing/0.7.x HEADER=Content-Type: text/calendar; charset=utf-8 HEADER=X-DAViCal-Flush-Cache: now AUTH=admin:nimda HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN X-WR-CALNAME:User 2's Calendar, as uploaded by Admin VERSION:2.0 BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR DTSTART;TZID=Pacific/Auckland:20081020T110000 DTEND;TZID=Pacific/Auckland:20081020T113000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081020T090000 DTEND;TZID=Pacific/Auckland:20081020T100000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081024T140000 DTEND;TZID=Pacific/Auckland:20081024T150000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:America/Los_Angeles X-TZINFO:America/Los_Angeles[2007g/Partial@883612800000] BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:19980405T020000 RRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:19981025T020000 RRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday RRULE:FREQ=MONTHLY;BYDAY=1MO,2TU,3TH,-1FR;INTERVAL=1 DESCRIPTION:An all day event on various days. DTSTART;TZID=America/Los_Angeles:20081006T000000 CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20081123T210725Z SEQUENCE:6 UID:bd262d20-1cdb-012d-1264-002421a2359e SUMMARY:Afternoon run DESCRIPTION: DTSTART;TZID=America/Los_Angeles:20081123T150000 CREATED:20081123T210644Z DTSTAMP:20081123T210725Z DURATION:PT1H LOCATION: RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20110101T005414Z SEQUENCE:12 URL;VALUE=URI:http://www.oregontrufflefestival.com UID:56f0e0e0-f742-012d-680c-002421a2359e SUMMARY:Willamette Valley Vineyards at the Oregon Truffle Festival DESCRIPTION:The 6th Annual Oregon Truffle Festival will be held in and arou nd Eugene Oregon over three brisk winter days from January 28-30\, 2011. Cr eated to celebrate the magnificent Oregon truffles as they reach the peak o f ripeness in their native soil\, it is the first festival of its kind in N orth America\, dedicated to sharing the experience of the chefs\, foragers and fans of Oregon\\'s wild truffles\, from their hidden source in the fore st to their glory on the table.\n\nThe theme for 2011 is "Slow Food"\, and Willamette Valley Vineyards will be hosting a gourmet wine luncheon during the festival. Please visit www.oregontrufflefestival.com for more info and to purchase tickets.\n\n DTSTART;TZID=America/Los_Angeles:20110128 CREATED:20101231T193025Z DTSTAMP:20110101T005414Z DURATION:P1D LOCATION:Eugene Oregon X-VENUE: X-EMAIL-RSVP-UPDATES:true RRULE:FREQ=DAILY;COUNT=3;INTERVAL=1 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS "A1 CalDAV DATA" FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user2/home/' ENDQUERY QUERY SELECT count(*) FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '^/user2/home/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0825-Spec-PROPFIND-6.test0000644000000000000000000000100711446006434021702 0ustar # # PROPFIND based on RFC2518 Spec against an iCalendar resource # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0955-DELTICKET.result0000644000000000000000000000065311751114715021310 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_owner_id: >1002< privileges: >000000000001001000100001< target_collection: >160< target_resource_i: >NULL< timeout: >01:00:00< davical-1.1.1/testing/tests/regression-suite/0915-extended-MKCOL.test0000644000000000000000000000125511446006434022076 0ustar # # Extended MKCOL test - Test failure # TYPE=MKCOL URL=http://mycaldav/caldav.php/User%20Six/failure%20%39Extended%20MKCOL%39/ HEADER=Content-Type: text/xml AUTH=User Six:user6 HEAD BEGINDATA Failed Calendar tomorrow ENDDATA QUERY SELECT user_no, parent_container, dav_displayname, is_calendar, public_events_only, is_addressbook FROM collection WHERE dav_name ~ '/User Six/failure'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/1100-REPORT-sync-changed.test0000644000000000000000000000072511743154033022772 0ustar # # Check for support of REPORT sync-collection with no sync-token # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-agent: sync-collection changes REPORT HEADER=Content-type: text/xml HEAD # BEGINDATA data:,27 ENDDATA davical-1.1.1/testing/tests/regression-suite/0931-REPORT-expand-property.test0000644000000000000000000000073611446006434023606 0ustar # # expand-property REPORT # TYPE=REPORT URL=http://regression.host/caldav.php/user1/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0920-PROPFIND-supported-stuff.test0000644000000000000000000000101711446006434024014 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/.out/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0244-Moz-POST-FB.result0000644000000000000000000000363511633117640021606 0ustar mailto:user2@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20081020T110000Z DTEND:20081105T110000Z FREEBUSY:20081021T220000Z/20081021T223000Z FREEBUSY:20081023T220000Z/20081023T223000Z FREEBUSY:20081024T010000Z/20081024T020000Z FREEBUSY:20081026T200000Z/20081026T210000Z FREEBUSY:20081026T220000Z/20081026T223000Z FREEBUSY:20081028T220000Z/20081028T223000Z FREEBUSY:20081030T220000Z/20081030T223000Z FREEBUSY:20081031T010000Z/20081031T020000Z FREEBUSY:20081031T070000Z/20081101T070000Z FREEBUSY:20081102T200000Z/20081102T210000Z FREEBUSY:20081102T220000Z/20081102T223000Z FREEBUSY:20081103T080000Z/20081104T080000Z FREEBUSY:20081104T220000Z/20081104T223000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user2@example.net END:VFREEBUSY END:VCALENDAR class: >PUBLIC< finish: >20081019T223000Z< rrule: >FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR< start: >20081019T220000Z< class: >PUBLIC< finish: >20081019T210000Z< rrule: >FREQ=WEEKLY;INTERVAL=1< start: >20081019T200000Z< class: >PUBLIC< finish: >20081024T020000Z< rrule: >FREQ=WEEKLY;INTERVAL=1< start: >20081024T010000Z< class: >PUBLIC< finish: >20081007T070000Z< rrule: >FREQ=MONTHLY;BYDAY=1MO,2TU,3TH,-1FR;INTERVAL=1< start: >20081006T070000Z< davical-1.1.1/testing/tests/regression-suite/0548-iCal-PROPFIND.result0000644000000000000000000007303211776301365022074 0ustar HTTP/1.1 100 Continue HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "908ab117a03a63e9f130ae222c0f3477" Content-Length: 29891 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/?add-member /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ User 1 "89514106d00f37cc9ee71689c450d2ef" /caldav.php/user1/ /caldav.php/.resources/1002 /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ /caldav.php/user1/home/?add-member #0252D4FF /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ 1 user1 home "243d78db0cc75a576d2603eef69efdc9" /caldav.php/user1/ /caldav.php/.resources/160 /caldav.php/user1/home/ data:,27 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ /caldav.php/user1/addresses/?add-member /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ user1 addresses "24c9e15e52afc47c225b757e7bee1f9d" 65500 /caldav.php/user1/ /caldav.php/.resources/460 /caldav.php/user1/home/ data:,28 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ /caldav.php/user1/created/?add-member /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ created "bac273dae96780a3c8ed0c032266322c" /caldav.php/user1/ /caldav.php/.resources/1523 /caldav.php/user1/home/ data:,29 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.in/ /caldav.php/user1/.in/?add-member /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ User 1 Inbox "0389feae460444b4b5db3b16c94b1e43" /caldav.php/user1/ /caldav.php/.resources/1541 /caldav.php/user1/home/ data:,25 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.out/ /caldav.php/user1/.out/?add-member /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ User 1 Outbox "1" /caldav.php/user1/ /caldav.php/.resources/1542 /caldav.php/user1/home/ data:,30 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/?add-member #391B71A0 /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ iCal Calendar "ac192d10783fff90598af2facc8259df" /caldav.php/user1/ /caldav.php/.resources/1547 /caldav.php/user1/home/ data:,22 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ /caldav.php/user1/calendar-proxy-read/?add-member /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /user1/calendar-proxy-read/ "abad5538c4aa570cc54b6ff0d36a4565" /caldav.php/user1/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ /caldav.php/user1/calendar-proxy-write/?add-member /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /user1/calendar-proxy-write/ "04ba2c2164225fb5abce13f2c523b6c7" /caldav.php/user1/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0965-GET.test0000644000000000000000000000067611751114265020066 0ustar # # Test GET access to a non-public calendar using a ticket. # TYPE=GET URL=http://regression.host/public.php/user2/home/9429a973-2b13-4b1a-be09-948d75425c45.ics NOAUTH # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 161 AND target_resource_id is null; ENDSQL HEADER=User-Agent: DAViCalTester/public HEADER=Ticket: ##ticket## HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0210-Moz-PUT-PRIVATE.result0000644000000000000000000000046711732222773022311 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "5def8ae2b20893a1c7f4dbaeb008f2f1" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0962-REPORT-expanded.test0000644000000000000000000000165311633117640022240 0ustar # # Test REPORT access to a non-public calendar using a ticket. # TYPE=REPORT URL=http://regression.host/caldav.php/user5/home/ AUTH=user5:user5 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dav_name, dtstart, dtstart AT TIME ZONE 'UTC' AS dtstart_utc, rrule FROM calendar_item WHERE dav_name ~ '^/user5/home/' AND rrule IS NOT NULL AND dtstart < '20101201T000000Z' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0821-Spec-PROPFIND-2.test0000644000000000000000000000171511446006434021700 0ustar # # A Spec compliant check for all DAV properties, and an extra # couple of bogus ones as well to ensure we fail(!) # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml HEAD REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# BEGINDATA ENDDATA REPLACE=/ETag: "[0-9a-f]{32}"/ETag: "deadbeefcafefeeddeadbeefcafefeed"/ # REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ davical-1.1.1/testing/tests/regression-suite/0839-Spec-UNLOCK-1.test0000644000000000000000000000050611446006434021457 0ustar # # Test specification compliance for LOCK/UNLOCK request # - This should fail because we provide an invalid lock token # TYPE=UNLOCK URL=http://regression.host/caldav.php/user1/home/i1278618276.ics HEADER=Lock-Token: HEAD # # There is no data for an UNLOCK request # davical-1.1.1/testing/tests/regression-suite/0561-iOS-PROPPATCH.result0000644000000000000000000000145211756132275022025 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" property_name: >http://apple.com/ns/ical/:calendar-color< property_value: >#0252D4FF< property_name: >http://apple.com/ns/ical/:calendar-order< property_value: >1< property_name: >urn:ietf:params:xml:ns:caldav:schedule-default-calendar-URL< property_value: > /caldav.php/user1/home/ < property_name: >urn:org:davical:outer< property_value: > inside inside2 < davical-1.1.1/testing/tests/regression-suite/0559-iOS-REPORT.test0000644000000000000000000000176611651212132021141 0ustar # # Testing with a process similar to iPhone 5 # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEAD AUTH=user1:user1 HEADER=User-Agent: iOS/10.7.2 (11C35) dataaccessd/1.0 HEADER=Content-Type: text/xml HEADER=Depth: 1 # BEGINDATA ENDDATA # QUERY SELECT caldav_data.dav_name, dtstart, rrule FROM calendar_item JOIN caldav_data USING(dav_id) WHERE caldav_data.dav_name ~ '^/user1/home/' AND caldav_data.caldav_type = 'VEVENT' AND (rrule IS NOT NULL OR dtstart IS NULL OR ( (dtend IS NULL AND dtstart > '20110922T000000Z') OR dtend > '20110922T000000Z' ) ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/0235-Moz-REPORT.result0000644000000000000000000000346411732223011021535 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "7c1cd3dd9aa20bfd2ce309046cdff993" Content-Length: 1527 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT CREATED:20071203T202630Z LAST-MODIFIED:20071203T202834Z DTSTAMP:20071203T202630Z UID:e70576e9-c1e0-431e-a507-0386fd82f223 SUMMARY:Morning Meeting RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T074500 DTEND;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T083000 X-MOZ-LOCATIONPATH:e70576e9-c1e0-431e-a507-0386fd82f223.ics LOCATION:Suzies Coffee Lounge DESCRIPTION:Twice-weekly breakfast meeting CATEGORIES:Business BEGIN:VALARM TRIGGER;VALUE=DURATION:-PT10M DESCRIPTION:Mozilla Alarm: Morning Meeting ACTION:DISPLAY END:VALARM END:VEVENT END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0508-iCal-REPORT.test0000644000000000000000000000104611446006434021310 0ustar # # iCal does a calendar-multiget REPORT to fetch new events # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=Content-Type: text/xml HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEAD # Reformatted for readability BEGINDATA /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics ENDDATA davical-1.1.1/testing/tests/regression-suite/0004-Mulberry-1.test0000644000000000000000000000021511446006434021352 0ustar # # So we should now make a calendar that we will use for some # testing. TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/user1/created/ HEAD davical-1.1.1/testing/tests/regression-suite/0835-freebusy.test0000644000000000000000000000227011651212132021246 0ustar # # Request a freebusy report by URL # TYPE=GET URL=http://mycaldav/freebusy.php/user1/home/?start=20061001T000000&period=P4WT12H HEAD AUTH=manager1:manager1 REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ QUERY SELECT calendar_item.rrule, calendar_item.status, dtstart AT TIME ZONE olson_name AS "a) Start", olson_name AS "b) Location", to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "c)UTC Start", to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "d) UTC End" FROM usr INNER JOIN collection USING (user_no) INNER JOIN caldav_data USING (collection_id) INNER JOIN calendar_item USING(dav_id) LEFT JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user1/home/' AND collection.is_calendar AND collection.schedule_transp = 'opaque' AND rrule_event_overlaps( dtstart, dtend, rrule, '20061001T000000Z', '20061029T120000Z' ) AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ORDER BY 3 ENDQUERY davical-1.1.1/testing/tests/regression-suite/0922-PROPFIND-supported-stuff.result0000644000000000000000000000062011732223644024356 0ustar HTTP/1.1 404 Not Found Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 129 Content-Type: text/xml; charset="utf-8" That resource is not present on this server. davical-1.1.1/testing/tests/regression-suite/0003-Mulberry-1.test0000644000000000000000000000062711446006434021360 0ustar # # Before creating a calendar in Mulberry, we should be able # to do a PROPFIND and it should not be there. TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEADER=Depth: 1 HEADER=Content-Type: text/xml; charset=utf-8 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0702-caldav4j-PUT.result0000644000000000000000000000305611732223543022123 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "c056350d3c91ac45724c0f9773778941" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR PRODID:-//OSAF//NONSGML Scoooby Server//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:America/New_York LAST-MODIFIED:20051220T211408Z BEGIN:STANDARD DTSTART:20051030T060000 TZOFFSETTO:-0500 TZOFFSETFROM:+0000 TZNAME:EST END:STANDARD BEGIN:DAYLIGHT DTSTART:20060402T010000 TZOFFSETTO:-0400 TZOFFSETFROM:-0500 TZNAME:EDT END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DTSTART;VALUE=DATE:20060101 DTEND;VALUE=DATE:20060102 SUMMARY:All_Day_NY_JAN1 UID:C68DADAD-37CE-44F7-8A37-52E1D02E29CA SEQUENCE:4 DTSTAMP:20090515T095326Z END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< dav_etag: >c056350d3c91ac45724c0f9773778941< description: >NULL< dtend: >2006-01-02 00:00:00+13< dtstamp: >2009-05-15 09:53:26< dtstart: >2006-01-01 00:00:00+13< due: >NULL< last_modified: >2009-05-15 09:53:26< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >NULL< status: >NULL< summary: >All_Day_NY_JAN1< transp: >NULL< tz_id: >NULL< uid: >C68DADAD-37CE-44F7-8A37-52E1D02E29CA< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0230-Moz-REPORT-Tasks-Completed.result0000644000000000000000000000354311732223007024530 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "8bfa1d55385dd1c0d877ba64358b56d4" Content-Length: 1574 Content-Type: text/xml; charset="utf-8" /davical/caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics "509b0f0d8a3363379f9f5727f5dd74a0" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTODO CREATED:20070805T200215Z LAST-MODIFIED:20070805T201531Z DTSTAMP:20070805T200215Z UID:2178279a-aec2-471f-832d-1f6df6203f2f SUMMARY:Incomplete\, uncancelled X-MOZ-LOCATIONPATH:2178279a-aec2-471f-832d-1f6df6203f2f.ics DESCRIPTION:This task is incomplete and has not been cancelled (has no status at all) END:VTODO END:VCALENDAR HTTP/1.1 200 OK /davical/caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics "cb3d9dc3e8c157f53eba3ea0e1e0f146" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTODO CREATED:20070805T201557Z LAST-MODIFIED:20070805T201643Z DTSTAMP:20070805T201557Z UID:917b9e47-b748-4550-a566-657fbe672447 SUMMARY:50% Complete\, uncancelled STATUS:IN-PROCESS PERCENT-COMPLETE:50 X-MOZ-LOCATIONPATH:917b9e47-b748-4550-a566-657fbe672447.ics DESCRIPTION:This task is in progress (50% complete) and has not been cancelled. END:VTODO END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0911-Space-MKCALENDAR.result0000644000000000000000000000066211732223635022423 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >Space Calendar< is_calendar: >1< parent_container: >/User Six/< public_events_onl: >0< user_no: >15< davical-1.1.1/testing/tests/regression-suite/0816-Spec-UNLOCK-1.result0000644000000000000000000000042011732223553022005 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0951-MKTICKET.test0000644000000000000000000000132211446006434020641 0ustar # # MKTICKET request for a ticket on a collection we don't have rights to # TYPE=MKTICKET URL=http://regression.host/caldav.php/user4/home/ HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" BEGINDATA Second-3600 1 ENDDATA QUERY SELECT dav_owner_id, date_trunc( 'minute', (expires - current_timestamp + '55 seconds')::interval(0)) AS timeout, privileges, target_collection_id, target_resource_id FROM access_ticket ENDQUERY REPLACE=!\S{8}!Good Ticket ID! davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user4.data0000644000000000000000000040017611446006434024312 0ustar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN X-WR-CALNAME:mir-test BEGIN:VTODO DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:14495745 X-PILOTSTAT:0 CREATED:20060320T200030Z UID:KOrganizer-25397773.546 SEQUENCE:1 LAST-MODIFIED:20070124T213510Z SUMMARY:Event at 2006-03-22 22:45:00 CLASS:PUBLIC PRIORITY:5 DUE:20060321T230000Z DTSTART:20060322T104500Z COMPLETED:20060323T083800Z PERCENT-COMPLETE:100 BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-PT15M END:VALARM END:VTODO BEGIN:VTODO DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:2 X-PILOTSTAT:0 CREATED:20061203T011420Z UID:libkcal-752176592.682 SEQUENCE:0 LAST-MODIFIED:20070124T213510Z DESCRIPTION:To register your Palm™ handheld electronically\, you must have an Internet connection or a modem connected to your computer.\n\nSpecial rewards are available only for registered users:\n\n- Discounts from Palm™ Software Connections \n- Update and upgrade information\n\nFor more information\, go to http://productreg.palm.com.\n SUMMARY:Don't forget to register! CLASS:PUBLIC PRIORITY:1 PERCENT-COMPLETE:0 END:VTODO BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453913 X-PILOTSTAT:0 CREATED:20070217T230020Z UID:KOrganizer-1211065846.551 SEQUENCE:0 LAST-MODIFIED:20070221T200044Z SUMMARY:Event at 2007-03-21 19:15:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070321T071500Z DTEND:20070321T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451847 X-PILOTSTAT:0 CREATED:20050729T192225Z UID:KOrganizer-1288241059.115 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2005-07-30 07:30:00 LOCATION:test CLASS:PUBLIC PRIORITY:3 DTSTART:20050729T193000Z DTEND:20050729T194500Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-PT1M END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451846 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-589255590.706 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2002-09-11 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020910T160000Z DTEND:20020910T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451845 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1353942805.140 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2002-09-30 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020930T063000Z DTEND:20020930T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451844 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-639274358.130 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2002-11-02 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021101T130000Z DTEND:20021101T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451843 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1052165538.720 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2002-11-21 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021120T160000Z DTEND:20021120T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451842 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-130822969.932 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2003-12-19 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031219T080000Z DTEND:20031219T083000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451841 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-723679733.90 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2004-08-06 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040806T070000Z DTEND:20040806T100000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451851 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1123041440.757 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Repeating event starting 2002-02-20 05:30:00 by FREQ=DAILY;UNTIL=20020528T153000Z;INTERVAL=14 CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20020528T153000Z;INTERVAL=14 EXDATE;VALUE=DATE:20020402 DTSTART:20020219T163000Z DTEND:20020219T180000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451850 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1686153385.653 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2002-09-07 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020907T070000Z DTEND:20020907T150000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451849 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-822103046.270 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2002-11-07 03:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021106T140000Z DTEND:20021106T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451848 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1582464105.706 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2003-10-28 03:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031027T140000Z DTEND:20031027T160000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453235 X-PILOTSTAT:0 CREATED:20070117T074413Z UID:libkcal-367014638.77 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2007-01-19 21:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070119T080000Z DTEND:20070119T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453578 X-PILOTSTAT:0 CREATED:20070124T212719Z UID:KOrganizer-1632032952.718 SEQUENCE:0 LAST-MODIFIED:20070124T213448Z SUMMARY:Event at 2007-03-01 20:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070301T073000Z DTEND:20070301T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451859 X-PILOTSTAT:0 CREATED:20060524T093947Z UID:KOrganizer-1759353555.1036 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Repeating event starting 2006-09-21 02:00:00 by FREQ=WEEKLY;UNTIL=20061004T140000Z;BYDAY=WE CLASS:PUBLIC PRIORITY:5 RRULE:FREQ=WEEKLY;UNTIL=20061004T140000Z;BYDAY=WE DTSTART:20060920T140000Z DTEND:20060920T180000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451858 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-647789764.670 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Repeating event starting 2003-03-01 05:00:00 by FREQ=DAILY;UNTIL=20030228T230000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20030228T230000Z EXDATE;VALUE=DATE:20030301 DTSTART:20030228T160000Z DTEND:20030228T230000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451857 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-571584239.862 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Repeating event starting 2003-10-13 20:00:00 by FREQ=DAILY;UNTIL=20031016T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20031016T220000Z DTSTART:20031013T070000Z DTEND:20031016T220000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P3D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451856 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1512015300.907 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Repeating event starting 2002-10-22 19:30:00 by FREQ=DAILY;UNTIL=20021024T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20021024T220000Z EXDATE;VALUE=DATE:20021023 DTSTART:20021022T063000Z DTEND:20021024T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451855 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-2114344132.965 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-09-23 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020923T063000Z DTEND:20020923T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451854 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1424963174.253 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-11-06 04:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021105T153000Z DTEND:20021105T163000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451853 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-334227107.122 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-12-04 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021204T073000Z DTEND:20021204T133000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451852 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-680720714.1001 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2004-02-25 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040224T130000Z DTEND:20040224T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453587 X-PILOTSTAT:0 CREATED:20070124T213116Z UID:KOrganizer-550940693.954 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2007-04-10 18:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070410T063000Z DTEND:20070410T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451868 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-2066319147.664 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-03-06 22:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020306T090000Z DTEND:20020306T100000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451867 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-429195916.943 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-04-26 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020425T120000Z DTEND:20020425T123000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451866 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-744514207.96 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-11-01 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021101T073000Z DTEND:20021101T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451865 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-142621045.201 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-11-05 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021105T073000Z DTEND:20021105T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451864 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1989318571.454 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2003-01-06 22:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030106T090000Z DTEND:20030106T100000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451863 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-724373582.591 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2003-01-28 22:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030128T090000Z DTEND:20030128T100000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451862 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-481358493.847 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2003-05-07 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030506T160000Z DTEND:20030506T200000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451861 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-2065263089.283 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2003-08-26 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030825T120000Z DTEND:20030825T123000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451860 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-1665923076.160 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2004-09-10 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040909T170000Z DTEND:20040909T200000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451877 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1110641771.1024 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Repeating event starting 2005-02-02 05:00:00 by FREQ=WEEKLY;UNTIL=20050322T160000Z;BYDAY=TU CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20050322T160000Z;BYDAY=TU DTSTART:20050201T160000Z DTEND:20050201T190000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451876 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-1321212322.195 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Repeating event starting 2004-08-03 00:00:00 by FREQ=DAILY;UNTIL=20040804 CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20040804 DTSTART;VALUE=DATE:20040803 DTEND;VALUE=DATE:20040804 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451875 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-959318604.221 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-08-28 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020827T160000Z DTEND:20020827T173000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-PT5M END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451874 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1408713853.418 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-10-07 19:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021007T063000Z DTEND:20021007T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451873 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1077060236.504 SEQUENCE:0 LAST-MODIFIED:20070124T213449Z SUMMARY:Event at 2002-10-09 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021009T070000Z DTEND:20021009T080000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451872 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1451704381.591 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2002-10-11 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021010T120000Z DTEND:20021010T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451871 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1204424718.88 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2002-12-04 03:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021203T140000Z DTEND:20021203T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451870 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1282397005.581 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2003-09-26 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030925T120000Z DTEND:20030925T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451869 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-829569168.688 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2003-10-22 03:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031021T140000Z DTEND:20031021T150000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451882 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1193972627.889 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Repeating event starting 2002-11-26 20:30:00 by FREQ=DAILY;UNTIL=20021128T230000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20021128T230000Z EXDATE;VALUE=DATE:20021127 DTSTART:20021126T073000Z DTEND:20021128T230000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451881 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1947424919.1052 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Repeating event starting 2005-02-24 22:00:00 by FREQ=DAILY;UNTIL=20050224T230000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20050224T230000Z DTSTART:20050224T090000Z DTEND:20050224T230000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451880 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1040913699.828 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2002-09-16 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020916T063000Z DTEND:20020916T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451879 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1294476626.829 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2003-05-03 06:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030502T180000Z DTEND:20030502T210000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451878 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1055008174.109 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2003-06-10 17:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030610T050000Z DTEND:20030610T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453611 X-PILOTSTAT:0 CREATED:20070124T212947Z UID:KOrganizer-1396751201.1020 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2007-03-20 19:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070320T073000Z DTEND:20070320T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451887 X-PILOTSTAT:0 CREATED:20050814T195953Z UID:KOrganizer-342324400.1065 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2005-12-05 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051205T070000Z DTEND:20051205T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451886 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1811699916.176 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2002-10-01 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020930T120000Z DTEND:20020930T133000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451885 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-208850055.487 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2002-10-09 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021008T120000Z DTEND:20021008T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451884 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1710734567.933 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2003-05-14 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030514T080000Z DTEND:20030514T083000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451883 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1176148155.421 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2003-09-04 00:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030903T123000Z DTEND:20030903T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451893 X-PILOTSTAT:0 CREATED:20050814T195032Z UID:KOrganizer-1532096742.930 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2005-10-24 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051024T060000Z DTEND:20051024T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451892 X-PILOTSTAT:0 CREATED:20050814T194920Z UID:KOrganizer-1625124712.125 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2005-10-11 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051011T060000Z DTEND:20051011T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451891 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-1541763920.239 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Repeating event starting 2004-09-16 00:00:00 by FREQ=DAILY;UNTIL=20040917 CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20040917 DTSTART;VALUE=DATE:20040916 DTEND;VALUE=DATE:20040917 TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451890 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1653269400.152 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2002-08-27 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020826T120000Z DTEND:20020826T133000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-PT1H END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451889 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1192146868.794 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2003-05-01 00:15:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030430T121500Z DTEND:20030430T131500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451888 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1022004810.636 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2003-10-17 07:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031016T180000Z DTEND:20031016T210000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453623 X-PILOTSTAT:0 CREATED:20070124T212922Z UID:KOrganizer-269370179.1064 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2007-03-15 20:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070315T073000Z DTEND:20070315T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451899 X-PILOTSTAT:0 CREATED:20050814T195928Z UID:KOrganizer-1560165065.218 SEQUENCE:0 LAST-MODIFIED:20070124T213450Z SUMMARY:Event at 2005-12-02 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051202T070000Z DTEND:20051202T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451898 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-881600230.996 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Repeating event starting 2003-05-30 20:00:00 by FREQ=DAILY;UNTIL=20030530T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20030530T220000Z DTSTART:20030530T080000Z DTEND:20030530T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451897 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1959579499.495 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2002-09-04 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020904T063000Z DTEND:20020904T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451896 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1675852008.229 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2002-10-01 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART;VALUE=DATE:20021001 DTEND;VALUE=DATE:20021002 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451895 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-2012437282.982 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2002-10-29 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021029T073000Z DTEND:20021029T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451894 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-532086566.634 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2002-11-19 03:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021118T143000Z DTEND:20021118T163000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451902 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-2096827521.784 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Repeating event starting 2004-06-16 18:00:00 by FREQ=DAILY;UNTIL=20040616T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20040616T220000Z DTSTART:20040616T060000Z DTEND:20040616T220000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451901 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-1371307975.524 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2002-02-26 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020225T130000Z DTEND:20020225T140000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451900 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-29501553.142 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2004-09-04 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040904T080000Z DTEND:20040904T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453241 X-PILOTSTAT:0 CREATED:20070117T074413Z UID:libkcal-305027183.821 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2007-01-26 21:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070126T080000Z DTEND:20070126T090000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453909 X-PILOTSTAT:0 CREATED:20070221T200043Z UID:libkcal-356065993.882 SEQUENCE:0 LAST-MODIFIED:20070221T200043Z SUMMARY:Event at 2007-05-11 00:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070510T120000Z DTEND:20070510T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451906 X-PILOTSTAT:0 CREATED:20050814T195907Z UID:KOrganizer-519951890.512 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2005-12-01 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051201T070000Z DTEND:20051201T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451905 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-1623898273.769 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2002-04-05 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020404T120000Z DTEND:20020404T140000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451904 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-677943530.1035 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2002-09-25 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020925T063000Z DTEND:20020925T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451903 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-621613832.230 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2004-11-12 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20041111T130000Z DTEND:20041111T150000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451916 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1320911446.836 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Repeating event starting 2002-10-30 20:30:00 by FREQ=WEEKLY;UNTIL=20021204T073000Z;BYDAY=WE CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20021204T073000Z;BYDAY=WE DTSTART:20021030T073000Z DTEND:20021030T131500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451915 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-247737881.1034 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Repeating event starting 2005-04-15 18:30:00 by FREQ=WEEKLY;UNTIL=20050513T063000Z;BYDAY=FR CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20050513T063000Z;BYDAY=FR DTSTART:20050415T063000Z DTEND:20050415T113000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451914 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-145382464.740 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2002-09-11 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020911T063000Z DTEND:20020911T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451913 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-817273620.913 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2002-11-30 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021129T150000Z DTEND:20021129T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451912 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-734047853.574 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2003-01-28 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030128T080000Z DTEND:20030128T090000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451911 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1896176446.680 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2003-03-18 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030318T080000Z DTEND:20030318T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451910 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-45118192.951 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2003-05-15 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030515T070000Z DTEND:20030515T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451909 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1465969358.564 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2003-09-25 06:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030924T180000Z DTEND:20030924T200000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451908 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-252164306.653 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2003-10-21 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031020T120000Z DTEND:20031020T140000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451907 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1225211214.949 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2004-01-26 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040126T080000Z DTEND:20040126T083000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451922 X-PILOTSTAT:0 CREATED:20050814T194329Z UID:KOrganizer-1571060348.340 SEQUENCE:0 LAST-MODIFIED:20070124T213451Z SUMMARY:Event at 2005-09-01 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050901T060000Z DTEND:20050901T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451921 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-545492870.973 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2002-10-29 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021029T073000Z DTEND:20021029T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451920 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-268989763.356 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2002-11-07 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021107T073000Z DTEND:20021107T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451919 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-223550567.539 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2003-01-27 23:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030127T100000Z DTEND:20030127T110000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451918 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1931226847.404 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2003-09-03 02:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030902T143000Z DTEND:20030902T153000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451917 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-824353234.758 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2003-10-31 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031031T080000Z DTEND:20031031T083000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451928 X-PILOTSTAT:0 CREATED:20060320T200205Z UID:KOrganizer-1241596503.111 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2006-03-24 23:00:00 LOCATION:bhs CLASS:PUBLIC PRIORITY:5 DTSTART:20060324T110000Z DTEND:20060324T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451927 X-PILOTSTAT:0 CREATED:20050814T194506Z UID:KOrganizer-1325946143.757 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2005-09-22 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050922T060000Z DTEND:20050922T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451926 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1171510238.661 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Repeating event starting 2003-07-11 18:00:00 by FREQ=DAILY;UNTIL=20030712T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20030712T220000Z DTSTART:20030711T060000Z DTEND:20030712T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451925 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-758088585.406 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Repeating event starting 2005-01-28 20:00:00 by FREQ=DAILY;UNTIL=20050129T230000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20050129T230000Z DTSTART:20050128T070000Z DTEND:20050129T230000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451924 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1063781651.118 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2002-08-22 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020822T070000Z DTEND:20020822T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451923 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-98921073.921 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2002-10-26 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021025T120000Z DTEND:20021025T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451933 X-PILOTSTAT:0 CREATED:20050814T195108Z UID:KOrganizer-1016508863.138 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2005-10-28 19:00:00 LOCATION:kl-111 CLASS:PUBLIC PRIORITY:3 DTSTART:20051028T060000Z DTEND:20051028T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451932 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-1082241187.489 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2002-02-22 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020221T120000Z DTEND:20020221T133000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451931 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-1654956090.979 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2002-05-03 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020502T120000Z DTEND:20020502T140000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451930 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1955799109.1003 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2003-05-21 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030520T120000Z DTEND:20030520T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451929 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-396989560.1072 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2004-08-02 22:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040802T100000Z DTEND:20040802T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451938 X-PILOTSTAT:0 CREATED:20050822T195912Z UID:KOrganizer-1757099750.216 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2005-08-26 02:00:00 LOCATION:Klareboderne CLASS:PUBLIC PRIORITY:3 DTSTART:20050825T140000Z DTEND:20050825T160000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451937 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1399279554.704 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Repeating event starting 2003-03-26 19:30:00 by FREQ=WEEKLY;UNTIL=20030507T063000Z;BYDAY=WE CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20030507T063000Z;BYDAY=WE EXDATE;VALUE=DATE:20030416 DTSTART:20030326T073000Z DTEND:20030326T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451936 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1379725410.1001 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2002-09-24 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020923T120000Z DTEND:20020923T133000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451935 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1528853965.493 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2003-09-18 00:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030917T123000Z DTEND:20030917T133000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451934 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1208863622.915 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2003-12-17 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031216T160000Z DTEND:20031216T163000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451946 X-PILOTSTAT:0 CREATED:20060524T094034Z UID:KOrganizer-1268251613.1081 SEQUENCE:0 LAST-MODIFIED:20070124T213452Z SUMMARY:Event at 2006-06-09 02:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20060608T140000Z DTEND:20060608T210000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451945 X-PILOTSTAT:0 CREATED:20060320T200334Z UID:KOrganizer-1316417293.928 SEQUENCE:2 LAST-MODIFIED:20070124T213452Z SUMMARY:Repeating event starting 2006-04-05 19:00:00 by FREQ=DAILY;UNTIL=20060406T070000Z LOCATION:ballerup CLASS:PUBLIC PRIORITY:5 RRULE:FREQ=DAILY;UNTIL=20060406T070000Z DTSTART:20060405T070000Z DTEND:20060405T220000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451944 X-PILOTSTAT:0 CREATED:20050814T194855Z UID:KOrganizer-1032814688.266 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2005-10-10 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051010T060000Z DTEND:20051010T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451943 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-275695243.1018 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2002-09-24 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020923T160000Z DTEND:20020923T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451942 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1909409644.470 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2002-10-09 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021008T110000Z DTEND:20021008T113000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451941 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-93108450.1057 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2003-05-28 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030528T070000Z DTEND:20030528T080000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451940 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1685650426.600 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2003-10-07 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031006T160000Z DTEND:20031006T200000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1W END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451939 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-2036447089.264 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2005-01-17 22:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050117T090000Z DTEND:20050117T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451950 X-PILOTSTAT:0 CREATED:20050829T111853Z UID:KOrganizer-1531501876.687 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2005-09-05 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050905T080000Z DTEND:20050905T090000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451949 X-PILOTSTAT:0 CREATED:20050814T195500Z UID:KOrganizer-400061712.176 SEQUENCE:3 LAST-MODIFIED:20070124T213453Z SUMMARY:Repeating event starting 2005-11-22 20:00:00 by FREQ=DAILY;COUNT=2 CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;COUNT=2 DTSTART:20051122T070000Z DTEND:20051122T230000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451948 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-40588559.687 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Repeating event starting 2003-02-12 20:30:00 by FREQ=WEEKLY;UNTIL=20030319T073000Z;BYDAY=WE CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20030319T073000Z;BYDAY=WE DTSTART:20030212T073000Z DTEND:20030212T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451947 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1344187686.193 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2002-10-01 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020930T160000Z DTEND:20020930T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453234 X-PILOTSTAT:0 CREATED:20070117T074412Z UID:libkcal-186613018.608 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2007-01-18 22:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070118T090000Z DTEND:20070118T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453908 X-PILOTSTAT:0 CREATED:20070221T200043Z UID:libkcal-1833164074.354 SEQUENCE:0 LAST-MODIFIED:20070221T200043Z SUMMARY:Event at 2007-04-12 00:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070411T120000Z DTEND:20070411T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451962 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-589387468.739 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Repeating event starting 2003-06-17 20:00:00 by FREQ=DAILY;UNTIL=20030618T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20030618T220000Z DTSTART:20030617T080000Z DTEND:20030618T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451961 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1081550300.938 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2002-10-27 06:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021026T170000Z DTEND:20021026T173000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451960 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1271651172.235 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2002-11-05 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021105T073000Z DTEND:20021105T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451959 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1439209644.459 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2002-11-12 05:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021111T163000Z DTEND:20021111T173000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451958 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1881284871.807 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2002-11-27 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021126T130000Z DTEND:20021126T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451957 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-624141615.157 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2002-12-06 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021205T150000Z DTEND:20021205T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451956 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-672191901.245 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2002-12-10 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021210T073000Z DTEND:20021210T110000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451955 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1541138818.1074 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2003-05-29 22:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030529T100000Z DTEND:20030529T200000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451954 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1269048507.300 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2003-08-26 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030826T070000Z DTEND:20030826T080000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451953 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-768755480.671 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2003-10-22 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031021T130000Z DTEND:20031021T140000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451952 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-19706228.125 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2004-08-23 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040823T060000Z DTEND:20040823T070000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451951 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-1677882372.178 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2004-09-16 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040915T120000Z DTEND:20040915T140000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453695 X-PILOTSTAT:0 CREATED:20070124T213245Z UID:KOrganizer-631336277.241 SEQUENCE:0 LAST-MODIFIED:20070124T213453Z SUMMARY:Event at 2007-05-01 18:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070501T063000Z DTEND:20070501T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451971 X-PILOTSTAT:0 CREATED:20050814T194651Z UID:KOrganizer-1659060362.673 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2005-09-27 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050927T060000Z DTEND:20050927T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451970 X-PILOTSTAT:0 CREATED:20050729T192741Z UID:KOrganizer-547039492.851 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z CLASS:PUBLIC PRIORITY:3 DTSTART:20050729T194500Z DTEND:20050729T214500Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-PT1M END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451969 X-PILOTSTAT:0 CREATED:20050729T193844Z UID:KOrganizer-1099949027.1055 SEQUENCE:2 LAST-MODIFIED:20070124T213454Z SUMMARY:Repeating event starting 2005-08-09 18:30:00 by FREQ=DAILY;COUNT=2 LOCATION:Klareboderne CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;COUNT=2 DTSTART:20050809T063000Z DTEND:20050809T220000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451968 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-211720587.187 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2002-08-28 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020827T120000Z DTEND:20020827T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451967 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-548731495.147 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2002-11-05 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021104T130000Z DTEND:20021104T190000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451966 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-347215494.1039 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2003-05-23 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030522T120000Z DTEND:20030522T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451965 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1762813400.161 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2003-07-07 22:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030707T100000Z DTEND:20030707T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451964 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1077249209.370 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2003-09-02 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030901T120000Z DTEND:20030901T123000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451963 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1201928610.547 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2003-09-23 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030922T130000Z DTEND:20030922T140000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451976 X-PILOTSTAT:0 CREATED:20050814T195647Z UID:KOrganizer-1138025243.527 SEQUENCE:1 LAST-MODIFIED:20070124T213454Z SUMMARY:Repeating event starting 2005-11-24 20:00:00 by FREQ=DAILY;COUNT=2 CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;COUNT=2 DTSTART:20051124T070000Z DTEND:20051124T230000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451975 X-PILOTSTAT:0 CREATED:20050729T193755Z UID:KOrganizer-1944568617.286 SEQUENCE:1 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2005-08-11 23:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050811T110000Z DTEND:20050811T120000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451974 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-2074581994.559 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2002-02-26 03:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020225T143000Z DTEND:20020225T153000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451973 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1539789441.581 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2002-11-15 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021115T073000Z DTEND:20021115T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451972 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1240533661.810 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2003-11-06 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031105T130000Z DTEND:20031105T133000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453232 X-PILOTSTAT:0 CREATED:20070117T074402Z UID:libkcal-125650352.185 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2007-01-15 21:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070115T080000Z DTEND:20070115T230000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453711 X-PILOTSTAT:0 CREATED:20070124T212258Z UID:KOrganizer-738458230.642 SEQUENCE:1 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2007-01-30 20:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070130T073000Z DTEND:20070130T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453712 X-PILOTSTAT:0 CREATED:20070124T213010Z UID:KOrganizer-1734853127.483 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2007-03-22 19:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070322T073000Z DTEND:20070322T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451981 X-PILOTSTAT:0 CREATED:20050826T095902Z UID:KOrganizer-6240027.699 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2005-09-06 19:30:00 LOCATION:Høje Tåstrup CLASS:PUBLIC PRIORITY:3 DTSTART:20050906T073000Z DTEND:20050906T090000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451980 X-PILOTSTAT:0 CREATED:20050814T200143Z UID:KOrganizer-668555287.189 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2005-12-12 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051212T070000Z DTEND:20051212T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451979 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-863120668.565 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2002-09-05 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020905T063000Z DTEND:20020905T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451978 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1780424263.776 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2003-04-29 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030428T170000Z DTEND:20030428T210000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451977 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-1364406704.107 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2004-08-19 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040819T070000Z DTEND:20040819T100000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12451990 X-PILOTSTAT:0 CREATED:20050814T200058Z UID:KOrganizer-810745804.721 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2005-12-08 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051208T070000Z DTEND:20051208T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451989 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-765934596.461 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2002-08-31 03:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020830T150000Z DTEND:20020830T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451988 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-396229364.599 SEQUENCE:0 LAST-MODIFIED:20070124T213454Z SUMMARY:Event at 2002-09-06 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020906T063000Z DTEND:20020906T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451987 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-2131935622.105 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-09-27 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020927T063000Z DTEND:20020927T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451986 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1118149605.948 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-12-02 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021202T073000Z DTEND:20021202T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451985 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-2065957537.505 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2003-01-26 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030125T160000Z DTEND:20030125T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451984 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1880312065.986 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2003-05-16 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030516T060000Z DTEND:20030516T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451983 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1530393784.511 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2003-09-23 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030922T120000Z DTEND:20030922T130000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451982 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1692819609.723 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2003-10-30 01:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031029T123000Z DTEND:20031029T130000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451996 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-267268802.802 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Repeating event starting 2002-09-13 18:30:00 by FREQ=WEEKLY;UNTIL=20020920T063000Z;BYDAY=FR CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20020920T063000Z;BYDAY=FR EXDATE;VALUE=DATE:20020920 DTSTART:20020913T063000Z DTEND:20020913T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451995 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-183271552.699 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-03-12 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020311T130000Z DTEND:20020311T140000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451994 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1564156755.83 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-08-21 19:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020821T073000Z DTEND:20020821T083000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-PT3M END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451993 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1045090772.930 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-09-18 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020918T063000Z DTEND:20020918T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451992 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1753025426.982 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-12-03 02:45:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021202T134500Z DTEND:20021202T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451991 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1139684300.385 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-12-18 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021217T150000Z DTEND:20021217T163000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452002 X-PILOTSTAT:0 CREATED:20050814T194541Z UID:KOrganizer-1782181593.838 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2005-09-23 18:00:00 LOCATION:kl-111 CLASS:PUBLIC PRIORITY:3 DTSTART:20050923T060000Z DTEND:20050923T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452001 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-446662745.838 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-04-11 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020410T120000Z DTEND:20020410T123000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452000 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-232329512.1034 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-10-31 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021031T073000Z DTEND:20021031T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451999 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-388918578.878 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-11-29 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021128T160000Z DTEND:20021128T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451998 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-100829294.645 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2003-02-28 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030227T150000Z DTEND:20030227T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12451997 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-30418358.476 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2003-09-11 23:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030911T110000Z DTEND:20030911T213000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452009 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-2074841085.871 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2003-06-21 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART;VALUE=DATE:20030621 DTEND;VALUE=DATE:20030622 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452008 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-234836881.818 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-10-24 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021023T120000Z DTEND:20021023T133000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452007 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1433402917.322 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-11-07 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021106T160000Z DTEND:20021106T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452006 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1046517717.351 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2002-12-13 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021212T160000Z DTEND:20021212T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452005 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-415496577.724 SEQUENCE:0 LAST-MODIFIED:20070124T213455Z SUMMARY:Event at 2003-03-23 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030323T070000Z DTEND:20030323T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452004 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-58675341.127 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2003-06-21 00:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030620T123000Z DTEND:20030620T130000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452003 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1804357297.335 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2003-09-01 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030831T170000Z DTEND:20030831T173000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453746 X-PILOTSTAT:0 CREATED:20070124T212556Z UID:KOrganizer-701998803.821 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2007-02-20 20:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070220T073000Z DTEND:20070220T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453563 X-PILOTSTAT:0 CREATED:20070124T213447Z UID:libkcal-979542311.1045 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2007-01-23 01:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070122T123000Z DTEND:20070122T133000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452015 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1369467354.953 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Repeating event starting 2003-08-27 18:30:00 by FREQ=WEEKLY;UNTIL=20031105T073000Z;BYDAY=WE CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20031105T073000Z;BYDAY=WE EXDATE;VALUE=DATE:20031015 DTSTART:20030827T063000Z DTEND:20030827T113000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452014 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-862236580.979 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Repeating event starting 2003-08-25 18:30:00 by FREQ=WEEKLY;UNTIL=20031103T073000Z;BYDAY=MO CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20031103T073000Z;BYDAY=MO EXDATE;VALUE=DATE:20031013 DTSTART:20030825T063000Z DTEND:20030825T113000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452013 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-814721216.280 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2002-10-02 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021001T120000Z DTEND:20021001T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452012 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1672206794.625 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2002-10-11 19:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021011T063000Z DTEND:20021011T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452011 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-936783626.511 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2002-11-14 03:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021113T140000Z DTEND:20021113T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452010 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-896129370.1018 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2004-06-10 19:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040610T073000Z DTEND:20040610T100000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453754 X-PILOTSTAT:0 CREATED:20070124T213149Z UID:KOrganizer-1744515772.739 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2007-04-12 18:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070412T063000Z DTEND:20070412T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452024 X-PILOTSTAT:0 CREATED:20050814T195801Z UID:KOrganizer-102081386.996 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2005-11-28 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051128T070000Z DTEND:20051128T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452023 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-2105180231.827 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Repeating event starting 2002-09-12 18:30:00 by FREQ=WEEKLY;UNTIL=20020919T063000Z;BYDAY=TH CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20020919T063000Z;BYDAY=TH EXDATE;VALUE=DATE:20020919 DTSTART:20020912T063000Z DTEND:20020912T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452022 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-340383776.896 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2002-09-18 02:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020917T143000Z DTEND:20020917T153000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452021 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-769882015.651 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2002-11-19 03:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021118T143000Z DTEND:20021118T163000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452020 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-508293985.968 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2003-05-16 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030515T160000Z DTEND:20030515T210000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452019 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1741929750.230 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2003-08-18 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030818T090000Z DTEND:20030818T100000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452018 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1006121415.248 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2003-08-19 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030819T070000Z DTEND:20030819T090000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452017 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-703065367.617 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2003-10-10 03:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031009T140000Z DTEND:20031009T153000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452016 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1949515845.984 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2004-02-21 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040220T130000Z DTEND:20040220T133000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452033 X-PILOTSTAT:0 CREATED:20060524T094110Z UID:KOrganizer-1650816570.794 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2006-06-16 22:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20060616T100000Z DTEND:20060616T190000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452032 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-849984507.747 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Repeating event starting 2002-12-05 20:30:00 by FREQ=DAILY;UNTIL=20021205T230000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20021205T230000Z DTSTART:20021205T073000Z DTEND:20021205T230000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452031 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-552750671.427 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2002-08-31 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020830T120000Z DTEND:20020830T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452030 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-79234141.608 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2002-10-11 04:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021010T153000Z DTEND:20021010T163000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452029 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-164963697.408 SEQUENCE:0 LAST-MODIFIED:20070124T213456Z SUMMARY:Event at 2002-11-12 02:15:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021111T131500Z DTEND:20021111T141500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452028 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1846504379.590 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2002-11-15 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021115T073000Z DTEND:20021115T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452027 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-159554538.440 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2003-09-08 06:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030907T180000Z DTEND:20030907T200000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452026 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-585548585.458 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2003-09-09 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030908T120000Z DTEND:20030908T130000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452025 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1099622629.520 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2003-09-23 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030922T120000Z DTEND:20030922T123000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453773 X-PILOTSTAT:0 CREATED:20070124T212431Z UID:KOrganizer-591358863.211 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2007-02-01 20:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070201T073000Z DTEND:20070201T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453774 X-PILOTSTAT:0 CREATED:20070124T212642Z UID:KOrganizer-129716648.746 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2007-02-27 21:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070227T080000Z DTEND:20070227T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453775 X-PILOTSTAT:0 CREATED:20070124T212806Z UID:KOrganizer-1459780733.285 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2007-03-06 20:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070306T073000Z DTEND:20070306T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453907 X-PILOTSTAT:0 CREATED:20070221T200042Z UID:libkcal-1471533825.612 SEQUENCE:0 LAST-MODIFIED:20070221T200042Z SUMMARY:Event at 2007-03-07 02:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070306T130000Z DTEND:20070306T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452043 X-PILOTSTAT:0 CREATED:20050814T200014Z UID:KOrganizer-1869628571.468 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2005-12-06 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051206T070000Z DTEND:20051206T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452042 X-PILOTSTAT:0 CREATED:20050810T202432Z UID:KOrganizer-2016497045.275 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2005-08-15 21:00:00 LOCATION:Lærerværelset CLASS:PUBLIC PRIORITY:3 DTSTART:20050815T090000Z DTEND:20050815T110000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452041 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-2039685585.970 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Repeating event starting 2003-10-22 04:00:00 by FREQ=WEEKLY;UNTIL=20031216T160000Z;BYDAY=TU CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20031216T160000Z;BYDAY=TU DTSTART:20031021T150000Z DTEND:20031021T183000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452040 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-633146427.453 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2002-02-21 00:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020220T113000Z DTEND:20020220T150000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452039 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-2117633683.908 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2002-04-24 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020423T120000Z DTEND:20020423T123000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452038 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-265144908.324 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2002-08-29 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020829T063000Z DTEND:20020829T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452037 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-697479598.608 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2003-02-05 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030205T080000Z DTEND:20030205T090000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452036 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1065457646.865 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2003-05-08 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030507T140000Z DTEND:20030507T144500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452035 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1571145881.916 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2003-05-14 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030513T120000Z DTEND:20030513T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452034 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-719251466.178 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2003-07-26 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030726T060000Z DTEND:20030726T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452049 X-PILOTSTAT:0 CREATED:20060227T110149Z UID:KOrganizer-2081735588.967 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Repeating event starting 2006-05-11 18:00:00 by FREQ=DAILY;UNTIL=20060514T060000Z CLASS:PUBLIC PRIORITY:5 RRULE:FREQ=DAILY;UNTIL=20060514T060000Z DTSTART:20060511T060000Z DTEND:20060513T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452048 X-PILOTSTAT:0 CREATED:20050814T194746Z UID:KOrganizer-2123856648.160 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2005-09-30 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050930T060000Z DTEND:20050930T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452047 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1653920106.332 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2002-10-03 02:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021002T143000Z DTEND:20021002T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452046 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1681129373.546 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2002-11-14 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021113T160000Z DTEND:20021113T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452045 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1403092089.280 SEQUENCE:0 LAST-MODIFIED:20070124T213457Z SUMMARY:Event at 2002-12-11 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021210T150000Z DTEND:20021210T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452044 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1712337319.1054 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2004-06-28 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040628T063000Z DTEND:20040628T110000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452053 X-PILOTSTAT:0 CREATED:20050814T194433Z UID:KOrganizer-490134801.711 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2005-09-20 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050920T060000Z DTEND:20050920T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452052 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-36373198.842 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-11-28 06:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021127T173000Z DTEND:20021127T200000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452051 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1780538774.1017 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-12-03 04:10:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021202T151000Z DTEND:20021202T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452050 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-872967326.863 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2003-11-29 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031128T130000Z DTEND:20031128T143000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453796 X-PILOTSTAT:0 CREATED:20070124T212848Z UID:KOrganizer-702492225.521 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2007-03-13 20:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070313T073000Z DTEND:20070313T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452063 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1595089298.730 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Repeating event starting 2002-12-03 20:30:00 by FREQ=DAILY;UNTIL=20021203T230000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20021203T230000Z EXDATE;VALUE=DATE:20021204 EXDATE;VALUE=DATE:20271231 DTSTART:20021203T073000Z DTEND:20021203T230000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452062 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-917472477.1048 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-08-21 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020821T070000Z DTEND:20020821T080000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452061 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1750177958.774 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-09-12 02:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020911T143000Z DTEND:20020911T153000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452060 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-379281985.366 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-10-04 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021004T063000Z DTEND:20021004T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452059 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-209808238.453 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-10-08 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021007T120000Z DTEND:20021007T133000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452058 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-253794414.697 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2003-03-21 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030320T160000Z DTEND:20030320T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452057 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-425860506.92 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2003-06-04 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030603T160000Z DTEND:20030603T200000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452056 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1317643479.828 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2003-11-10 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031110T080000Z DTEND:20031110T170000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452055 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-937139402.898 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2003-12-13 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031212T110000Z DTEND:20031212T210000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452054 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-1932174917.273 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2005-01-19 21:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050119T083000Z DTEND:20050119T090000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453807 X-PILOTSTAT:0 CREATED:20070124T213305Z UID:KOrganizer-1395173834.699 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2007-05-03 18:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070503T063000Z DTEND:20070503T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452073 X-PILOTSTAT:0 CREATED:20050814T195842Z UID:KOrganizer-1730801416.165 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2005-11-30 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051130T070000Z DTEND:20051130T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452072 X-PILOTSTAT:0 CREATED:20050814T194354Z UID:KOrganizer-406853360.634 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2005-09-02 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050902T060000Z DTEND:20050902T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452071 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-376020341.793 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Repeating event starting 2004-06-02 18:00:00 by FREQ=DAILY;UNTIL=20040602T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20040602T220000Z DTSTART:20040602T060000Z DTEND:20040602T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452070 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-1989686502.594 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-03-02 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020301T160000Z DTEND:20020301T210000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452069 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-499949909.792 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-09-13 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020912T160000Z DTEND:20020912T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452068 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-579646873.861 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-09-17 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020917T063000Z DTEND:20020917T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452067 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-628821013.246 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-10-01 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021001T063000Z DTEND:20021001T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452066 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1595290417.661 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-10-14 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021014T080000Z DTEND:20021014T090000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452065 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1783404419.679 SEQUENCE:0 LAST-MODIFIED:20070124T213458Z SUMMARY:Event at 2002-10-21 19:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021021T063000Z DTEND:20021021T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452064 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-199912874.835 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2002-10-24 03:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021023T143000Z DTEND:20021023T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453905 X-PILOTSTAT:0 CREATED:20070221T200042Z UID:libkcal-125820789.94 SEQUENCE:0 LAST-MODIFIED:20070221T200042Z SUMMARY:Event at 2007-03-06 02:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070305T130000Z DTEND:20070305T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452079 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-928524085.416 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z DESCRIPTION:Something or other else SUMMARY:Event at 2002-02-11 23:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020211T100000Z DTEND:20020211T113000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452078 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-2044288932.529 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2002-09-05 02:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020904T143000Z DTEND:20020904T153000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-PT1H END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452077 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1738019068.315 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2002-12-12 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021211T130000Z DTEND:20021211T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452076 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1755621387.662 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2003-03-01 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030301T070000Z DTEND:20030301T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452075 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-2129031911.882 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2003-05-08 03:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030507T150000Z DTEND:20030507T190000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452074 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-957569344.845 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2003-11-13 06:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031112T170000Z DTEND:20031112T203000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453914 X-PILOTSTAT:0 CREATED:20070217T225414Z UID:KOrganizer-236679345.661 SEQUENCE:2 LAST-MODIFIED:20070221T200044Z SUMMARY:Repeating event starting 2007-03-07 20:30:00 by FREQ=WEEKLY;COUNT=2;BYDAY=WE CLASS:PUBLIC PRIORITY:5 RRULE:FREQ=WEEKLY;COUNT=2;BYDAY=WE DTSTART:20070307T073000Z DTEND:20070307T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452085 X-PILOTSTAT:0 CREATED:20050814T194719Z UID:KOrganizer-1772890621.111 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2005-09-29 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050929T060000Z DTEND:20050929T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452084 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1823278872.713 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2002-10-22 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021021T120000Z DTEND:20021021T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452083 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1656896074.730 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2002-10-22 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021021T150000Z DTEND:20021021T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452082 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1365613586.755 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2002-11-22 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021122T073000Z DTEND:20021122T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452081 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-857676503.741 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2003-04-25 05:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030424T173000Z DTEND:20030424T193000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452080 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-646296168.758 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2003-04-26 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030426T060000Z DTEND:20030426T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453238 X-PILOTSTAT:0 CREATED:20070117T074413Z UID:libkcal-1069926005.477 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2007-01-22 20:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070122T073000Z DTEND:20070122T100000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453831 X-PILOTSTAT:0 CREATED:20070124T212501Z UID:KOrganizer-1604341089.409 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2007-02-06 20:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070206T073000Z DTEND:20070206T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452093 X-PILOTSTAT:0 CREATED:20050814T195309Z UID:KOrganizer-226448206.799 SEQUENCE:1 LAST-MODIFIED:20070124T213459Z DESCRIPTION:Review SUMMARY:Event at 2005-11-11 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051111T070000Z DTEND:20051111T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452092 X-PILOTSTAT:0 CREATED:20050814T195235Z UID:KOrganizer-534221956.209 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2005-11-05 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051104T110000Z DTEND:20051104T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452091 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-2074181858.934 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Repeating event starting 2003-09-18 18:00:00 by FREQ=DAILY;UNTIL=20030918T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20030918T220000Z DTSTART:20030918T060000Z DTEND:20030918T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452090 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1135103303.297 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2002-10-02 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021002T063000Z DTEND:20021002T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452089 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-387454150.1052 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2002-12-03 05:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021202T163000Z DTEND:20021202T173000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452088 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1595454741.811 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2003-05-02 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030502T090000Z DTEND:20030502T100000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452087 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-218275606.213 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2003-08-11 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030811T070000Z DTEND:20030811T090000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P2D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452086 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1579630913.793 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2003-11-05 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031104T110000Z DTEND:20031104T113000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P3D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453840 X-PILOTSTAT:0 CREATED:20070124T213050Z UID:KOrganizer-370516235.812 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z SUMMARY:Event at 2007-03-29 18:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070329T063000Z DTEND:20070329T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452105 X-PILOTSTAT:0 CREATED:20050814T194620Z UID:KOrganizer-1027531016.315 SEQUENCE:0 LAST-MODIFIED:20070124T213459Z DESCRIPTION:Review SUMMARY:Event at 2005-09-26 18:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050926T060000Z DTEND:20050926T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452104 X-PILOTSTAT:0 CREATED:20050814T194117Z UID:KOrganizer-1254693944.298 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Repeating event starting 2005-08-31 18:00:00 by FREQ=WEEKLY;UNTIL=20051109T070000Z;BYDAY=WE LOCATION:kl-111 CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20051109T070000Z;BYDAY=WE EXDATE;VALUE=DATE:20051019 DTSTART:20050831T060000Z DTEND:20050831T100000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452103 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-363124201.106 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Repeating event starting 2002-10-28 20:30:00 by FREQ=WEEKLY;UNTIL=20021202T073000Z;BYDAY=MO CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20021202T073000Z;BYDAY=MO EXDATE;VALUE=DATE:20021202 DTSTART:20021028T073000Z DTEND:20021028T131500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452102 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-774247267.873 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2002-04-22 23:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020422T110000Z DTEND:20020422T133000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452101 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-99027505.748 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2002-10-23 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021022T160000Z DTEND:20021022T173000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452100 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-845126012.339 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2002-11-07 06:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021106T170000Z DTEND:20021106T180000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452099 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1682153210.364 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2002-11-07 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021107T073000Z DTEND:20021107T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452098 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1912083550.790 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2002-11-23 03:15:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021122T141500Z DTEND:20021122T151500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452097 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-2122625345.144 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2003-07-06 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030705T160000Z DTEND:20030705T213000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452096 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1391827491.880 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2003-12-03 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031202T130000Z DTEND:20031202T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452095 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-557438505.213 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2004-10-02 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20041001T140000Z DTEND:20041001T150000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452094 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-1893863902.247 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2005-01-10 23:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050110T103000Z DTEND:20050110T110000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452114 X-PILOTSTAT:0 CREATED:20050814T195823Z UID:KOrganizer-1750028846.678 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2005-11-29 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051129T070000Z DTEND:20051129T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452113 X-PILOTSTAT:0 CREATED:20050814T195147Z UID:KOrganizer-531478213.970 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2005-10-31 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051031T070000Z DTEND:20051031T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452112 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-731296952.678 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Repeating event starting 2003-02-10 20:30:00 by FREQ=WEEKLY;UNTIL=20030317T073000Z;BYDAY=MO CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20030317T073000Z;BYDAY=MO DTSTART:20030210T073000Z DTEND:20030210T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452111 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-998404549.722 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Repeating event starting 2002-12-12 20:30:00 by FREQ=DAILY;UNTIL=20021212T230000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20021212T230000Z DTSTART:20021212T073000Z DTEND:20021212T230000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452110 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1290881671.256 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2002-08-28 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020828T063000Z DTEND:20020828T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452109 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-434321803.401 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2002-10-05 03:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021004T150000Z DTEND:20021004T160000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452108 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1366801637.899 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2003-05-09 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030509T063000Z DTEND:20030509T110000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452107 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1775039090.967 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2004-02-06 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040205T130000Z DTEND:20040205T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452106 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-657456592.1036 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2004-06-19 04:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040618T160000Z DTEND:20040618T210000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12453862 X-PILOTSTAT:0 CREATED:20070124T213032Z UID:KOrganizer-1964974121.664 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2007-03-27 18:30:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070327T063000Z DTEND:20070327T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453911 X-PILOTSTAT:0 CREATED:20070221T200043Z UID:libkcal-1536422870.705 SEQUENCE:0 LAST-MODIFIED:20070221T200043Z SUMMARY:Event at 2007-04-20 00:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070419T120000Z DTEND:20070419T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452119 X-PILOTSTAT:0 CREATED:20050814T195423Z UID:KOrganizer-1313050303.342 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2005-11-10 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051110T070000Z DTEND:20051110T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452118 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-95576125.1061 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Repeating event starting 2005-01-31 20:30:00 by FREQ=WEEKLY;UNTIL=20050314T073000Z;BYDAY=MO CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20050314T073000Z;BYDAY=MO DTSTART:20050131T073000Z DTEND:20050131T123000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452117 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-1695335249.803 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2002-04-08 23:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020408T110000Z DTEND:20020408T120000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452116 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1658848585.634 SEQUENCE:0 LAST-MODIFIED:20070124T213500Z SUMMARY:Event at 2002-09-07 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART;VALUE=DATE:20020907 DTEND;VALUE=DATE:20020908 TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452115 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1348102428.775 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2003-11-04 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031103T130000Z DTEND:20031103T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452125 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1273950378.671 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-09-10 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020910T063000Z DTEND:20020910T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452124 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-50908146.556 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-10-10 19:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021010T063000Z DTEND:20021010T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452123 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-530242634.686 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-11-19 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021119T073000Z DTEND:20021119T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452122 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1345435026.420 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-12-18 05:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021217T163000Z DTEND:20021217T173000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452121 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1810768863.741 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2003-10-30 02:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20031029T130000Z DTEND:20031029T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452120 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-1505368998.256 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2005-01-13 21:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20050113T083000Z DTEND:20050113T153000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453240 X-PILOTSTAT:0 CREATED:20070117T074414Z UID:libkcal-207492094.170 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2007-02-22 22:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070222T090000Z DTEND:20070222T110000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452131 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-43161913.1070 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Repeating event starting 2003-03-24 19:30:00 by FREQ=WEEKLY;UNTIL=20030512T063000Z;BYDAY=MO CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=WEEKLY;UNTIL=20030512T063000Z;BYDAY=MO EXDATE;VALUE=DATE:20030414 EXDATE;VALUE=DATE:20271231 DTSTART:20030324T073000Z DTEND:20030324T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452130 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1881242561.783 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-10-23 19:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021023T063000Z DTEND:20021023T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452129 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-1868356274.192 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-12-09 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021209T070000Z DTEND:20021209T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452128 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-662090617.196 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2003-08-07 01:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030806T130000Z DTEND:20030806T140000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452127 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-903236501.352 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2003-09-01 21:55:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030901T095500Z DTEND:20030901T100000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452126 X-PILOTSTAT:0 CREATED:20050814T160958Z UID:libkcal-8461016.195 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2004-09-21 21:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20040921T093000Z DTEND:20040921T100000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452135 X-PILOTSTAT:0 CREATED:20050814T195211Z UID:KOrganizer-915657925.108 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2005-11-03 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051103T070000Z DTEND:20051103T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452134 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1034179453.1025 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-10-31 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021031T073000Z DTEND:20021031T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452133 X-PILOTSTAT:0 CREATED:20050814T160955Z UID:libkcal-1564831085.1069 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-12-03 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021203T073000Z DTEND:20021203T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452132 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-1650360155.265 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2003-08-19 21:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030819T090000Z DTEND:20030819T100000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-PT5M END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452142 X-PILOTSTAT:0 CREATED:20050814T200038Z UID:KOrganizer-1363807535.433 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2005-12-07 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051207T070000Z DTEND:20051207T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452141 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1900080537.713 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Repeating event starting 2003-04-14 18:00:00 by FREQ=DAILY;UNTIL=20030420T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20030420T220000Z DTSTART:20030414T060000Z DTEND:20030420T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452140 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-705074019.733 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-04-03 23:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020403T110000Z DTEND:20020403T123000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452139 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-1753896417.1014 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-08-08 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART;VALUE=DATE:20020808 DTEND;VALUE=DATE:20020809 TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452138 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-673839817.290 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-08-29 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020828T120000Z DTEND:20020828T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452137 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-375156206.1070 SEQUENCE:0 LAST-MODIFIED:20070124T213501Z SUMMARY:Event at 2002-09-26 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020926T063000Z DTEND:20020926T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452136 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-995462243.318 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2003-08-27 01:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030826T133000Z DTEND:20030826T143000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453910 X-PILOTSTAT:0 CREATED:20070221T200042Z UID:libkcal-876798833.981 SEQUENCE:0 LAST-MODIFIED:20070221T200042Z SUMMARY:Event at 2007-03-09 02:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070308T130000Z DTEND:20070308T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452147 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1802748548.853 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Repeating event starting 2005-01-05 22:00:00 by FREQ=DAILY;UNTIL=20050106T230000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20050106T230000Z DTSTART:20050105T090000Z DTEND:20050106T230000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452146 X-PILOTSTAT:0 CREATED:20050814T160952Z UID:libkcal-897641360.629 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2002-03-02 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART;VALUE=DATE:20020302 DTEND;VALUE=DATE:20020303 TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452145 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-679398215.853 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2002-10-25 04:15:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021024T151500Z DTEND:20021024T161500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452144 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1690704588.1077 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2002-11-01 20:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021101T073000Z DTEND:20021101T124500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452143 X-PILOTSTAT:0 CREATED:20050814T160957Z UID:libkcal-989953154.387 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2003-09-02 22:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030902T100000Z DTEND:20030902T110000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452152 X-PILOTSTAT:0 CREATED:20050814T194946Z UID:KOrganizer-293245651.612 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2005-10-13 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051013T060000Z DTEND:20051013T120000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452151 X-PILOTSTAT:0 CREATED:20050814T194816Z UID:KOrganizer-829920097.578 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2005-10-03 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051003T060000Z DTEND:20051003T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452150 X-PILOTSTAT:0 CREATED:20050814T160951Z UID:libkcal-1459440544.810 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Repeating event starting 2002-09-19 18:00:00 by FREQ=DAILY;UNTIL=20020919T220000Z CLASS:PUBLIC PRIORITY:3 RRULE:FREQ=DAILY;UNTIL=20020919T220000Z DTSTART:20020919T060000Z DTEND:20020919T220000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452149 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-606835123.359 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2002-08-30 00:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020829T120000Z DTEND:20020829T150000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452148 X-PILOTSTAT:0 CREATED:20050814T160953Z UID:libkcal-1090755342.393 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2002-08-30 18:30:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20020830T063000Z DTEND:20020830T114500Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12453912 X-PILOTSTAT:0 CREATED:20070221T200043Z UID:libkcal-40337687.1050 SEQUENCE:0 LAST-MODIFIED:20070221T200043Z SUMMARY:Event at 2007-05-17 00:00:00 CLASS:PUBLIC PRIORITY:5 DTSTART:20070516T120000Z DTEND:20070516T140000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER;CN=User Four:MAILTO:user4@example.net X-PILOTID:12452155 X-PILOTSTAT:0 CREATED:20050814T200120Z UID:KOrganizer-1422474157.849 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2005-12-09 20:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20051209T070000Z DTEND:20051209T130000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452154 X-PILOTSTAT:0 CREATED:20050814T160954Z UID:libkcal-1332396888.870 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z SUMMARY:Event at 2002-10-25 05:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20021024T160000Z DTEND:20021024T170000Z TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20070417T195323Z ORGANIZER:MAILTO: X-PILOTID:12452153 X-PILOTSTAT:0 CREATED:20050814T160956Z UID:libkcal-929822560.1022 SEQUENCE:0 LAST-MODIFIED:20070124T213502Z DESCRIPTION:Something SUMMARY:Event at 2003-05-21 19:00:00 CLASS:PUBLIC PRIORITY:3 DTSTART:20030521T070000Z DTEND:20030521T080000Z TRANSP:OPAQUE BEGIN:VALARM DESCRIPTION: ACTION:DISPLAY TRIGGER;VALUE=DURATION:-P1D END:VALARM END:VEVENT END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0211-Moz-PUT-TENTATIVE.result0000644000000000000000000000046711732222774022544 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ac90acd649c25070b1a2a17fb31a105a" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0937-PROPFIND-inherited-acl-set.test0000644000000000000000000000057111446006434024157 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0530-iCal4-PROPFIND.result0000644000000000000000000000115311732223054022130 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "a69952d4b9b300b227d18e0cc7a2b2d3" Content-Length: 303 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0217-Moz-PUT-Cancelled-Task.result0000644000000000000000000000046711732223000023740 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "a2990674708634a311bb98a59865ca50" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0507-iCal-MKCALENDAR.test0000644000000000000000000000146411446006434021701 0ustar # # MKCALENDAR test for iCal # TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ HEADER=Content-Type: text/xml HEAD BEGINDATA Untitled #391B71A0 ENDDATA QUERY SELECT user_no, parent_container, dav_displayname, is_calendar, public_events_only FROM collection WHERE dav_name = '/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/'; ENDQUERY QUERY SELECT property_name, property_value, changed_by FROM property WHERE dav_name = '/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0888-GET-freebusy.test0000644000000000000000000000171511446006434021706 0ustar # # Request a freebusy report by URL # TYPE=GET URL=http://mycaldav/freebusy.php/user1@example.net?start=20061001T000000&end=20070630T235959 HEAD REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ REPLACE=/^DTSTART:20061001T000000Z\r?$/DTSTART:correct/ REPLACE=/^DTEND:20070630T235959Z\r?$/DTEND:correct/ QUERY SELECT calendar_item.rrule, status, to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS start, to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS finish FROM caldav_data INNER JOIN calendar_item USING(dav_id,user_no,dav_name) WHERE caldav_data.user_no = 10 AND rrule_event_overlaps( dtstart, dtend, rrule, '20061001T000000', '20070630T235959') AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) ORDER BY 2, 3 ENDQUERY davical-1.1.1/testing/tests/regression-suite/0821-Spec-PROPFIND-2.result0000644000000000000000000000247411732223554022244 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "deadbeefcafefeeddeadbeefcafefeed" Content-Length: 1023 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ 20090602T120000Z user1 home httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0840-Spec-PROPPATCH-1.test0000644000000000000000000000225011651212132022002 0ustar # # Check for support of PROPPATCH method # # Adding the 'owner' property to a collection # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEADER=User-agent: SpecTest PROPPATCH HEADER=Content-type: text/xml HEAD BEGINDATA A completely bogus property which should be saved. User One's Not Calendar ENDDATA QUERY SELECT dav_displayname, is_calendar, resourcetypes, modified > (current_timestamp - '120 seconds'::interval) AS changed_recently FROM collection WHERE dav_name = '/user1/home/' ORDER BY collection_id ENDQUERY QUERY SELECT dav_name, property_name, property_value, changed_by, changed_on > (current_timestamp - '120 seconds'::interval) AS changed_recently FROM property WHERE dav_name = '/user1/home/' ORDER BY dav_name, property_name ENDQUERY davical-1.1.1/testing/tests/regression-suite/0021-Mulberry-DELETE-2.test0000644000000000000000000000053211633117640022314 0ustar # # Do a DELETE with a correct etag which will succeed. TYPE=DELETE URL=http://mycaldav/caldav.php/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics HEADER=If-Match: "6cff373f55c3e8318ad1c0db93205d08" HEAD QUERY SELECT dav_id, dav_name, dav_etag FROM caldav_data WHERE dav_name = '/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0301-Chandler-HEAD-1.test0000644000000000000000000000024211446006434021770 0ustar # # Do an initial HEAD request (unauthenticated) TYPE=HEAD URL=http://mycaldav/caldav.php/user1/home/ NOAUTH HEADER=User-Agent: Chandler/0.7alpha4 (Linux) HEAD davical-1.1.1/testing/tests/regression-suite/0811-Spec-LOCK-1.result0000644000000000000000000000142611732223551021542 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 456 Content-Type: text/xml; charset="utf-8" 0 http://andrew.mcmillan.net.nz/node/5/ Second-300 opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ?column?: >Refreshed (should be 1)< refresh_success: >1< davical-1.1.1/testing/tests/regression-suite/0020-Mulberry-DELETE-1.result0000644000000000000000000000070611732222746022660 0ustar HTTP/1.1 412 Precondition Failed Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 44 Content-Type: text/plain; charset="utf-8" Resource has changed on server - not deleted dav_etag: >6cff373f55c3e8318ad1c0db93205d08< dav_name: >/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics< davical-1.1.1/testing/tests/regression-suite/0802-Spec-LOCK-1.result0000644000000000000000000000073011732223545021542 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 198 Content-Type: text/xml; charset="utf-8" /user1/home/i1278618276.ics HTTP/1.1 423 Resource Locked davical-1.1.1/testing/tests/regression-suite/0513-iCal-PUT.test0000644000000000000000000000371311651212132020734 0ustar # # Overwrite iCal event with another one # TYPE=PUT URL=http://mycaldav/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEADER=If-Match: "b7cfb403232dc83f936c15a179901d50" HEAD # # This event is a repeat Mo,Tu,We,Th,Fr forever # BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:5 TRANSP:OPAQUE UID:6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA DTSTART;TZID=Pacific/Auckland:20071126T070000 DTSTAMP:20071124T084239Z SUMMARY:Go to work CREATED:20071124T083709Z DTEND;TZID=Pacific/Auckland:20071126T170000 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU BEGIN:VALARM X-WR-ALARMUID:F33877C6-563B-4F20-B129-77A5B6C6944E ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0551-iPhone-REPORT.result0000644000000000000000000001123511743776445022240 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "d991e899426181952a974530d490423f" Content-Length: 4448 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT CREATED:20071203T202630Z LAST-MODIFIED:20071203T202834Z DTSTAMP:20071203T202630Z UID:e70576e9-c1e0-431e-a507-0386fd82f223 SUMMARY:Morning Meeting RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T074500 DTEND;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T083000 X-MOZ-LOCATIONPATH:e70576e9-c1e0-431e-a507-0386fd82f223.ics LOCATION:Suzies Coffee Lounge DESCRIPTION:Twice-weekly breakfast meeting CATEGORIES:Business BEGIN:VALARM TRIGGER;VALUE=DURATION:-PT10M DESCRIPTION:Mozilla Alarm: Morning Meeting ACTION:DISPLAY END:VALARM END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics "55f02f66966ee150320383803d1e0d34" BEGIN:VCALENDAR VERSION:2.0 PRODID:-//PYVOBJECT//NONSGML Version 1//EN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD DTSTART:20000319T030000 RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=3 TZNAME:Pacific/Auckland TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD BEGIN:DAYLIGHT DTSTART:20001001T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:Pacific/Auckland TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT UID:71e2ae82-7870-11db-c6d6-f6927c144649 DTSTAMP:20060511T043751Z DTSTART;TZID=Pacific/Auckland:20061103T160000 DTEND;TZID=Pacific/Auckland:20061103T174500 DESCRIPTION: LOCATION:Level 3 RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900 STATUS:CONFIRMED SUMMARY:Beer O'Clock END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" BEGIN:VCALENDAR VERSION:2.0 PRODID:-//PYVOBJECT//NONSGML Version 1//EN BEGIN:VEVENT UID:da81c0ee-7871-11db-c6d6-f6927c144649 DTSTAMP:20061024T115217Z DTSTART:20061103T073000 DTEND:20061103T093000 DESCRIPTION: LOCATION:Olivia's RRULE:FREQ=MONTHLY STATUS:CONFIRMED SUMMARY:Morning Mgmt Mtg END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics "efd0257efbc898d059c200d1391af060" BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:6 TRANSP:OPAQUE UID:AAA9318E-37D9-4319-8626-95ECD3D3B243 DTSTART;TZID=Pacific/Auckland:20071125T130000 DTSTAMP:20071124T224850Z SUMMARY:BBQ @ ML's CREATED:20071123T093048Z DTEND;TZID=Pacific/Auckland:20071125T190000 LOCATION:ML's House BEGIN:VALARM X-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0102-Evo-REPORT-1.test0000644000000000000000000000074611446006434021323 0ustar # # Do a REPORT request TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEAD HEADER=Depth: 1 HEADER=User-Agent: Evolution/1.8.1 HEADER=Content-Type: text/xml BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0533-iCal4-PROPPATCH.result0000644000000000000000000000114111747467512022266 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 335 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ All requested changes were made. HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0553-iPhone-PROPFIND.result0000644000000000000000000003200011750137704022424 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "badcdb23956a17ef94ec1b98cd36f6fe" Content-Length: 12994 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ User 1 "89514106d00f37cc9ee71689c450d2ef" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ user1 home "243d78db0cc75a576d2603eef69efdc9" #0252D4FF HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ user1 addresses "24c9e15e52afc47c225b757e7bee1f9d" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ created "bac273dae96780a3c8ed0c032266322c" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.in/ User 1 Inbox "0389feae460444b4b5db3b16c94b1e43" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.out/ User 1 Outbox "1" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ iCal Calendar "ac192d10783fff90598af2facc8259df" #391B71A0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ /user1/calendar-proxy-read/ "abad5538c4aa570cc54b6ff0d36a4565" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ /user1/calendar-proxy-write/ "04ba2c2164225fb5abce13f2c523b6c7" HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0545-iCLoud-PUT-encoded.result0000644000000000000000000000046711732223066023221 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "4a3aa58a3e11487e87d87024465d4182" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0311-Chandler-PUT-2.test0000644000000000000000000000206011633117640021741 0ustar # # PUT request like Chandler does it. # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics HEADER=Content-Type: text/calendar HEAD # # More typical Chandler data, without any timezone information. BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//PYVOBJECT//NONSGML Version 1//EN BEGIN:VEVENT UID:da81c0ee-7871-11db-c6d6-f6927c144649 DTSTAMP:20061024T115217Z DTSTART:20061103T073000 DTEND:20061103T093000 DESCRIPTION: LOCATION:Olivia's RRULE:FREQ=MONTHLY STATUS:CONFIRMED SUMMARY:Morning Mgmt Mtg END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart::timestamp without time zone, dtend::timestamp without time zone, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, last_modified, caldav_data AS "A1 CalDAV DATA" FROM caldav_data LEFT OUTER JOIN calendar_item USING(dav_id) WHERE caldav_data.dav_name = '/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0815-Spec-UNLOCK-1.test0000644000000000000000000000046011446006434021450 0ustar # # Test specification compliance for LOCK/UNLOCK request # - This should fail because we provide an invalid lock token # TYPE=UNLOCK URL=http://mycaldav/caldav.php/user1/home/ HEADER=Lock-Token: HEAD # # There is no data for an UNLOCK request # davical-1.1.1/testing/tests/regression-suite/0511-iCal-PROPFIND.test0000644000000000000000000000110711446006434021506 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/ HEAD HEADER=User-Agent: DAVKit/2.0 (10.5; wrbt) iCal 3.0 HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0231-Moz-REPORT-All-Tasks.result0000644000000000000000000001053111732223007023320 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ed088ba2e3b2a1de74167f7a96c8c07c" Content-Length: 4124 Content-Type: text/xml; charset="utf-8" /davical/caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics "509b0f0d8a3363379f9f5727f5dd74a0" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTODO CREATED:20070805T200215Z LAST-MODIFIED:20070805T201531Z DTSTAMP:20070805T200215Z UID:2178279a-aec2-471f-832d-1f6df6203f2f SUMMARY:Incomplete\, uncancelled X-MOZ-LOCATIONPATH:2178279a-aec2-471f-832d-1f6df6203f2f.ics DESCRIPTION:This task is incomplete and has not been cancelled (has no status at all) END:VTODO END:VCALENDAR HTTP/1.1 200 OK /davical/caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics "cb3d9dc3e8c157f53eba3ea0e1e0f146" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTODO CREATED:20070805T201557Z LAST-MODIFIED:20070805T201643Z DTSTAMP:20070805T201557Z UID:917b9e47-b748-4550-a566-657fbe672447 SUMMARY:50% Complete\, uncancelled STATUS:IN-PROCESS PERCENT-COMPLETE:50 X-MOZ-LOCATIONPATH:917b9e47-b748-4550-a566-657fbe672447.ics DESCRIPTION:This task is in progress (50% complete) and has not been cancelled. END:VTODO END:VCALENDAR HTTP/1.1 200 OK /davical/caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics "00ad5eb1eb5507884710b0b66aa5d5c4" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO CREATED:20070805T201647Z LAST-MODIFIED:20070805T201834Z DTSTAMP:20070805T201647Z UID:0575d895-a006-4ed8-9be6-0d1b6b6b1f96 SUMMARY:Due 7/8/7 16:30\, completed STATUS:COMPLETED DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070807T163000 COMPLETED:20070805T201737Z PERCENT-COMPLETE:100 X-MOZ-LOCATIONPATH:0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics DESCRIPTION:Due on 7/8/7 at 4:30pm\, but completed alread on 6/8/7 CATEGORIES:Projects END:VTODO END:VCALENDAR HTTP/1.1 200 OK /davical/caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics "a2990674708634a311bb98a59865ca50" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO CREATED:20070806T223244Z LAST-MODIFIED:20070806T223411Z DTSTAMP:20070806T223244Z UID:b1679f77-673d-4f46-b3eb-2420e1bba301 SUMMARY:A Cancelled Task\, with a start and due date STATUS:CANCELLED DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500 DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500 X-MOZ-LOCATIONPATH:b1679f77-673d-4f46-b3eb-2420e1bba301.ics DESCRIPTION:This is a task with a Start and a Due date\, but it has been cancelled. END:VTODO END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0230-Moz-REPORT-Tasks-Completed.test0000644000000000000000000000205611446006434024174 0ustar # # Do a REPORT request (test operation in subdirectory of unrelated site) # TYPE=REPORT URL=http://alternate.host/davical/caldav.php/user1/home/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA CANCELLED ENDDATA davical-1.1.1/testing/tests/regression-suite/0514-iCal-PUT-VTODO.result0000644000000000000000000000344111732223044022167 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "18134bbb51c8e25919c92a0d6265f789" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:19901007T020000 RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU TZNAME:NZDT END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO PRIORITY:5 SEQUENCE:7 DESCRIPTION:Organise a party UID:E6BC62F3-77C6-4FB7-BDD3-6882E2F1BE74 DTSTART;TZID=Pacific/Auckland:20040101T120000 DTSTAMP:20071124T220925Z SUMMARY:Celebrate a significant birthday CREATED:20071124T220749Z X-APPLE-SORT-ORDER:2147483647 DUE;VALUE=DATE:20100217 END:VTODO END:VCALENDAR < caldav_type: >VTODO< class: >PUBLIC< dav_etag: >18134bbb51c8e25919c92a0d6265f789< description: >Organise a party< dtend: >NULL< dtstamp: >2007-11-24 22:09:25< dtstart: >2004-01-01 12:00:00< due: >2010-02-17 00:00:00< last_modified: >2007-11-24 22:09:25< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >5< rrule: >NULL< status: >NULL< summary: >Celebrate a significant birthday< transp: >NULL< tz_id: >Pacific/Auckland< uid: >E6BC62F3-77C6-4FB7-BDD3-6882E2F1BE74< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0889-POST-freebusy.result0000644000000000000000000054055011643507155022426 0ustar mailto:user1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20001021T110000Z DTEND:20101106T110000Z FREEBUSY:20031231T230000Z/20100217T000000Z FREEBUSY:20051231T110000Z/20060101T110000Z FREEBUSY:20060101T220000Z/20060101T230000Z FREEBUSY:20060102T220000Z/20060102T230000Z FREEBUSY:20060103T220000Z/20060103T230000Z FREEBUSY:20060104T220000Z/20060104T230000Z FREEBUSY:20060105T220000Z/20060105T230000Z FREEBUSY:20060106T220000Z/20060106T230000Z FREEBUSY:20060107T220000Z/20060107T230000Z FREEBUSY:20060108T220000Z/20060108T230000Z FREEBUSY:20060109T220000Z/20060109T230000Z FREEBUSY:20060110T220000Z/20060110T230000Z FREEBUSY:20060111T220000Z/20060111T230000Z FREEBUSY:20060112T220000Z/20060112T230000Z FREEBUSY:20060113T220000Z/20060113T230000Z FREEBUSY:20060114T220000Z/20060114T230000Z FREEBUSY:20060115T220000Z/20060115T230000Z FREEBUSY:20060116T220000Z/20060116T230000Z FREEBUSY:20060117T220000Z/20060117T230000Z FREEBUSY:20060118T220000Z/20060118T230000Z FREEBUSY:20060119T220000Z/20060119T230000Z FREEBUSY:20060120T220000Z/20060120T230000Z FREEBUSY:20060121T220000Z/20060121T230000Z FREEBUSY:20060122T220000Z/20060122T230000Z FREEBUSY:20060123T220000Z/20060123T230000Z FREEBUSY:20060124T220000Z/20060124T230000Z FREEBUSY:20060125T220000Z/20060125T230000Z FREEBUSY:20060126T220000Z/20060126T230000Z FREEBUSY:20060127T220000Z/20060127T230000Z FREEBUSY:20060128T220000Z/20060128T230000Z FREEBUSY:20060129T220000Z/20060129T230000Z FREEBUSY:20060130T220000Z/20060130T230000Z FREEBUSY:20060131T220000Z/20060131T230000Z FREEBUSY:20060201T220000Z/20060201T230000Z FREEBUSY:20060202T220000Z/20060202T230000Z FREEBUSY:20060203T220000Z/20060203T230000Z FREEBUSY:20060204T220000Z/20060204T230000Z FREEBUSY:20060205T220000Z/20060205T230000Z FREEBUSY:20060206T220000Z/20060206T230000Z FREEBUSY:20060207T220000Z/20060207T230000Z FREEBUSY:20060208T220000Z/20060208T230000Z FREEBUSY:20060209T220000Z/20060209T230000Z FREEBUSY:20060210T220000Z/20060210T230000Z FREEBUSY:20060211T220000Z/20060211T230000Z FREEBUSY:20060212T220000Z/20060212T230000Z FREEBUSY:20060213T220000Z/20060213T230000Z FREEBUSY:20060214T220000Z/20060214T230000Z FREEBUSY:20060215T220000Z/20060215T230000Z FREEBUSY:20060216T220000Z/20060216T230000Z FREEBUSY:20060217T220000Z/20060217T230000Z FREEBUSY:20060218T220000Z/20060218T230000Z FREEBUSY:20060219T220000Z/20060219T230000Z FREEBUSY:20060220T220000Z/20060220T230000Z FREEBUSY:20060221T220000Z/20060221T230000Z FREEBUSY:20060222T220000Z/20060222T230000Z FREEBUSY:20060223T220000Z/20060223T230000Z FREEBUSY:20060224T220000Z/20060224T230000Z FREEBUSY:20060225T220000Z/20060225T230000Z FREEBUSY:20060226T220000Z/20060226T230000Z FREEBUSY:20060227T220000Z/20060227T230000Z FREEBUSY:20060228T220000Z/20060228T230000Z FREEBUSY:20060301T220000Z/20060301T230000Z FREEBUSY:20060302T220000Z/20060302T230000Z FREEBUSY:20060303T220000Z/20060303T230000Z FREEBUSY:20060304T220000Z/20060304T230000Z FREEBUSY:20060305T220000Z/20060305T230000Z FREEBUSY:20060306T220000Z/20060306T230000Z FREEBUSY:20060307T220000Z/20060307T230000Z FREEBUSY:20060308T220000Z/20060308T230000Z FREEBUSY:20060309T220000Z/20060309T230000Z FREEBUSY:20060310T220000Z/20060310T230000Z FREEBUSY:20060311T220000Z/20060311T230000Z FREEBUSY:20060312T220000Z/20060312T230000Z FREEBUSY:20060313T220000Z/20060313T230000Z FREEBUSY:20060314T220000Z/20060314T230000Z FREEBUSY:20060315T220000Z/20060315T230000Z FREEBUSY:20060316T220000Z/20060316T230000Z FREEBUSY:20060317T220000Z/20060317T230000Z FREEBUSY:20060318T220000Z/20060318T230000Z FREEBUSY:20060319T220000Z/20060319T230000Z FREEBUSY:20060320T220000Z/20060320T230000Z FREEBUSY:20060321T220000Z/20060321T230000Z FREEBUSY:20060322T220000Z/20060322T230000Z FREEBUSY:20060323T220000Z/20060323T230000Z FREEBUSY:20060324T220000Z/20060324T230000Z FREEBUSY:20060325T220000Z/20060325T230000Z FREEBUSY:20060326T220000Z/20060326T230000Z FREEBUSY:20060327T220000Z/20060327T230000Z FREEBUSY:20060328T220000Z/20060328T230000Z FREEBUSY:20060329T220000Z/20060329T230000Z FREEBUSY:20060330T220000Z/20060330T230000Z FREEBUSY:20060331T220000Z/20060331T230000Z FREEBUSY:20060401T220000Z/20060401T230000Z FREEBUSY:20060402T210000Z/20060402T220000Z FREEBUSY:20060403T210000Z/20060403T220000Z FREEBUSY:20060404T210000Z/20060404T220000Z FREEBUSY:20060405T210000Z/20060405T220000Z FREEBUSY:20060406T210000Z/20060406T220000Z FREEBUSY:20060407T210000Z/20060407T220000Z FREEBUSY:20060408T210000Z/20060408T220000Z FREEBUSY:20060409T210000Z/20060409T220000Z FREEBUSY:20060410T210000Z/20060410T220000Z FREEBUSY:20060411T210000Z/20060411T220000Z FREEBUSY:20060412T210000Z/20060412T220000Z FREEBUSY:20060413T210000Z/20060413T220000Z FREEBUSY:20060414T210000Z/20060414T220000Z FREEBUSY:20060415T210000Z/20060415T220000Z FREEBUSY:20060416T210000Z/20060416T220000Z FREEBUSY:20060417T210000Z/20060417T220000Z FREEBUSY:20060418T210000Z/20060418T220000Z FREEBUSY:20060419T210000Z/20060419T220000Z FREEBUSY:20060420T210000Z/20060420T220000Z FREEBUSY:20060421T210000Z/20060421T220000Z FREEBUSY:20060422T210000Z/20060422T220000Z FREEBUSY:20060423T210000Z/20060423T220000Z FREEBUSY:20060424T210000Z/20060424T220000Z FREEBUSY:20060425T210000Z/20060425T220000Z FREEBUSY:20060426T210000Z/20060426T220000Z FREEBUSY:20060427T210000Z/20060427T220000Z FREEBUSY:20060428T210000Z/20060428T220000Z FREEBUSY:20060429T210000Z/20060429T220000Z FREEBUSY:20060430T210000Z/20060430T220000Z FREEBUSY:20060501T210000Z/20060501T220000Z FREEBUSY:20060502T210000Z/20060502T220000Z FREEBUSY:20060503T210000Z/20060503T220000Z FREEBUSY:20060504T210000Z/20060504T220000Z FREEBUSY:20060505T210000Z/20060505T220000Z FREEBUSY:20060506T210000Z/20060506T220000Z FREEBUSY:20060507T210000Z/20060507T220000Z FREEBUSY:20060508T210000Z/20060508T220000Z FREEBUSY:20060509T210000Z/20060509T220000Z FREEBUSY:20060510T210000Z/20060510T220000Z FREEBUSY:20060511T210000Z/20060511T220000Z FREEBUSY:20060512T210000Z/20060512T220000Z FREEBUSY:20060513T210000Z/20060513T220000Z FREEBUSY:20060514T210000Z/20060514T220000Z FREEBUSY:20060515T210000Z/20060515T220000Z FREEBUSY:20060516T210000Z/20060516T220000Z FREEBUSY:20060517T210000Z/20060517T220000Z FREEBUSY:20060518T210000Z/20060518T220000Z FREEBUSY:20060519T210000Z/20060519T220000Z FREEBUSY:20060520T210000Z/20060520T220000Z FREEBUSY:20060521T210000Z/20060521T220000Z FREEBUSY:20060522T210000Z/20060522T220000Z FREEBUSY:20060523T210000Z/20060523T220000Z FREEBUSY:20060524T210000Z/20060524T220000Z FREEBUSY:20060525T210000Z/20060525T220000Z FREEBUSY:20060526T210000Z/20060526T220000Z FREEBUSY:20060527T210000Z/20060527T220000Z FREEBUSY:20060528T210000Z/20060528T220000Z FREEBUSY:20060529T210000Z/20060529T220000Z FREEBUSY:20060530T210000Z/20060530T220000Z FREEBUSY:20060531T210000Z/20060531T220000Z FREEBUSY:20060601T210000Z/20060601T220000Z FREEBUSY:20060602T210000Z/20060602T220000Z FREEBUSY:20060603T210000Z/20060603T220000Z FREEBUSY:20060604T210000Z/20060604T220000Z FREEBUSY:20060605T210000Z/20060605T220000Z FREEBUSY:20060606T210000Z/20060606T220000Z FREEBUSY:20060607T210000Z/20060607T220000Z FREEBUSY:20060608T210000Z/20060608T220000Z FREEBUSY:20060609T210000Z/20060609T220000Z FREEBUSY:20060610T210000Z/20060610T220000Z FREEBUSY:20060611T210000Z/20060611T220000Z FREEBUSY:20060612T210000Z/20060612T220000Z FREEBUSY:20060613T210000Z/20060613T220000Z FREEBUSY:20060614T210000Z/20060614T220000Z FREEBUSY:20060615T210000Z/20060615T220000Z FREEBUSY:20060616T210000Z/20060616T220000Z FREEBUSY:20060617T210000Z/20060617T220000Z FREEBUSY:20060618T210000Z/20060618T220000Z FREEBUSY:20060619T210000Z/20060619T220000Z FREEBUSY:20060620T210000Z/20060620T220000Z FREEBUSY:20060621T210000Z/20060621T220000Z FREEBUSY:20060622T210000Z/20060622T220000Z FREEBUSY:20060623T210000Z/20060623T220000Z FREEBUSY:20060624T210000Z/20060624T220000Z FREEBUSY:20060625T210000Z/20060625T220000Z FREEBUSY:20060626T210000Z/20060626T220000Z FREEBUSY:20060627T210000Z/20060627T220000Z FREEBUSY:20060628T210000Z/20060628T220000Z FREEBUSY:20060629T210000Z/20060629T220000Z FREEBUSY:20060630T210000Z/20060630T220000Z FREEBUSY:20060701T210000Z/20060701T220000Z FREEBUSY:20060702T210000Z/20060702T220000Z FREEBUSY:20060703T210000Z/20060703T220000Z FREEBUSY:20060704T210000Z/20060704T220000Z FREEBUSY:20060705T210000Z/20060705T220000Z FREEBUSY:20060706T210000Z/20060706T220000Z FREEBUSY:20060707T210000Z/20060707T220000Z FREEBUSY:20060708T210000Z/20060708T220000Z FREEBUSY:20060709T210000Z/20060709T220000Z FREEBUSY:20060710T210000Z/20060710T220000Z FREEBUSY:20060711T210000Z/20060711T220000Z FREEBUSY:20060712T210000Z/20060712T220000Z FREEBUSY:20060713T210000Z/20060713T220000Z FREEBUSY:20060714T210000Z/20060714T220000Z FREEBUSY:20060715T210000Z/20060715T220000Z FREEBUSY:20060716T210000Z/20060716T220000Z FREEBUSY:20060717T210000Z/20060717T220000Z FREEBUSY:20060718T210000Z/20060718T220000Z FREEBUSY:20060719T210000Z/20060719T220000Z FREEBUSY:20060720T210000Z/20060720T220000Z FREEBUSY:20060721T210000Z/20060721T220000Z FREEBUSY:20060722T210000Z/20060722T220000Z FREEBUSY:20060723T210000Z/20060723T220000Z FREEBUSY:20060724T210000Z/20060724T220000Z FREEBUSY:20060725T210000Z/20060725T220000Z FREEBUSY:20060726T210000Z/20060726T220000Z FREEBUSY:20060727T210000Z/20060727T220000Z FREEBUSY:20060728T210000Z/20060728T220000Z FREEBUSY:20060729T210000Z/20060729T220000Z FREEBUSY:20060730T210000Z/20060730T220000Z FREEBUSY:20060731T210000Z/20060731T220000Z FREEBUSY:20060801T210000Z/20060801T220000Z FREEBUSY:20060802T210000Z/20060802T220000Z FREEBUSY:20060803T210000Z/20060803T220000Z FREEBUSY:20060804T210000Z/20060804T220000Z FREEBUSY:20060805T210000Z/20060805T220000Z FREEBUSY:20060806T210000Z/20060806T220000Z FREEBUSY:20060807T210000Z/20060807T220000Z FREEBUSY:20060808T210000Z/20060808T220000Z FREEBUSY:20060809T210000Z/20060809T220000Z FREEBUSY:20060810T210000Z/20060810T220000Z FREEBUSY:20060811T210000Z/20060811T220000Z FREEBUSY:20060812T210000Z/20060812T220000Z FREEBUSY:20060813T210000Z/20060813T220000Z FREEBUSY:20060814T210000Z/20060814T220000Z FREEBUSY:20060815T210000Z/20060815T220000Z FREEBUSY:20060816T210000Z/20060816T220000Z FREEBUSY:20060817T210000Z/20060817T220000Z FREEBUSY:20060818T210000Z/20060818T220000Z FREEBUSY:20060819T210000Z/20060819T220000Z FREEBUSY:20060820T210000Z/20060820T220000Z FREEBUSY:20060821T210000Z/20060821T220000Z FREEBUSY:20060822T210000Z/20060822T220000Z FREEBUSY:20060823T210000Z/20060823T220000Z FREEBUSY:20060824T210000Z/20060824T220000Z FREEBUSY:20060825T210000Z/20060825T220000Z FREEBUSY:20060826T210000Z/20060826T220000Z FREEBUSY:20060827T210000Z/20060827T220000Z FREEBUSY:20060828T210000Z/20060828T220000Z FREEBUSY:20060829T210000Z/20060829T220000Z FREEBUSY:20060830T210000Z/20060830T220000Z FREEBUSY:20060831T210000Z/20060831T220000Z FREEBUSY:20060901T210000Z/20060901T220000Z FREEBUSY:20060902T210000Z/20060902T220000Z FREEBUSY:20060903T210000Z/20060903T220000Z FREEBUSY:20060904T210000Z/20060904T220000Z FREEBUSY:20060905T210000Z/20060905T220000Z FREEBUSY:20060906T210000Z/20060906T220000Z FREEBUSY:20060907T210000Z/20060907T220000Z FREEBUSY:20060908T210000Z/20060908T220000Z FREEBUSY:20060909T210000Z/20060909T220000Z FREEBUSY:20060910T210000Z/20060910T220000Z FREEBUSY:20060911T210000Z/20060911T220000Z FREEBUSY:20060912T210000Z/20060912T220000Z FREEBUSY:20060913T210000Z/20060913T220000Z FREEBUSY:20060914T210000Z/20060914T220000Z FREEBUSY:20060915T210000Z/20060915T220000Z FREEBUSY:20060916T210000Z/20060916T220000Z FREEBUSY:20060917T210000Z/20060917T220000Z FREEBUSY:20060918T210000Z/20060918T220000Z FREEBUSY:20060919T210000Z/20060919T220000Z FREEBUSY:20060920T210000Z/20060920T220000Z FREEBUSY:20060921T210000Z/20060921T220000Z FREEBUSY:20060922T210000Z/20060922T220000Z FREEBUSY:20060923T210000Z/20060923T220000Z FREEBUSY:20060924T210000Z/20060924T220000Z FREEBUSY:20060925T210000Z/20060925T220000Z FREEBUSY:20060926T210000Z/20060926T220000Z FREEBUSY:20060927T210000Z/20060927T220000Z FREEBUSY:20060928T210000Z/20060928T220000Z FREEBUSY:20060929T210000Z/20060929T220000Z FREEBUSY:20060930T210000Z/20060930T220000Z FREEBUSY:20061001T210000Z/20061001T220000Z FREEBUSY:20061002T210000Z/20061002T220000Z FREEBUSY:20061003T210000Z/20061003T220000Z FREEBUSY:20061004T210000Z/20061004T220000Z FREEBUSY:20061005T210000Z/20061005T220000Z FREEBUSY:20061006T210000Z/20061006T220000Z FREEBUSY:20061007T210000Z/20061007T220000Z FREEBUSY:20061008T210000Z/20061008T220000Z FREEBUSY:20061009T210000Z/20061009T220000Z FREEBUSY:20061010T210000Z/20061010T220000Z FREEBUSY:20061011T210000Z/20061011T220000Z FREEBUSY:20061012T210000Z/20061012T220000Z FREEBUSY:20061013T210000Z/20061013T220000Z FREEBUSY:20061014T210000Z/20061014T220000Z FREEBUSY:20061015T210000Z/20061015T220000Z FREEBUSY:20061016T210000Z/20061016T220000Z FREEBUSY:20061017T210000Z/20061017T220000Z FREEBUSY:20061018T210000Z/20061018T220000Z FREEBUSY:20061019T210000Z/20061019T220000Z FREEBUSY:20061020T210000Z/20061020T220000Z FREEBUSY:20061021T210000Z/20061021T220000Z FREEBUSY:20061022T210000Z/20061022T220000Z FREEBUSY:20061023T210000Z/20061023T220000Z FREEBUSY:20061024T210000Z/20061024T220000Z FREEBUSY:20061025T210000Z/20061025T220000Z FREEBUSY:20061026T210000Z/20061026T220000Z FREEBUSY:20061027T210000Z/20061027T220000Z FREEBUSY:20061028T210000Z/20061028T220000Z FREEBUSY:20061029T220000Z/20061029T230000Z FREEBUSY:20061030T220000Z/20061030T230000Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061031T220000Z/20061031T230000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T220000Z/20061101T230000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061102T220000Z/20061102T230000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061103T220000Z/20061103T230000Z FREEBUSY:20061104T220000Z/20061104T230000Z FREEBUSY:20061105T220000Z/20061105T230000Z FREEBUSY:20061106T220000Z/20061106T230000Z FREEBUSY:20061107T220000Z/20061107T230000Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061108T220000Z/20061108T230000Z FREEBUSY:20061109T220000Z/20061109T230000Z FREEBUSY:20061110T220000Z/20061110T230000Z FREEBUSY:20061111T220000Z/20061111T230000Z FREEBUSY:20061112T220000Z/20061112T230000Z FREEBUSY:20061113T220000Z/20061113T230000Z FREEBUSY:20061114T220000Z/20061114T230000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061115T220000Z/20061115T230000Z FREEBUSY:20061116T220000Z/20061116T230000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061117T220000Z/20061117T230000Z FREEBUSY:20061118T220000Z/20061118T230000Z FREEBUSY:20061119T220000Z/20061119T230000Z FREEBUSY:20061120T220000Z/20061120T230000Z FREEBUSY:20061121T220000Z/20061121T230000Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061122T220000Z/20061122T230000Z FREEBUSY:20061123T220000Z/20061123T230000Z FREEBUSY:20061124T220000Z/20061124T230000Z FREEBUSY:20061125T220000Z/20061125T230000Z FREEBUSY:20061126T220000Z/20061126T230000Z FREEBUSY:20061127T220000Z/20061127T230000Z FREEBUSY:20061128T220000Z/20061128T230000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061129T220000Z/20061129T230000Z FREEBUSY:20061130T220000Z/20061130T230000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061201T220000Z/20061201T230000Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061202T220000Z/20061202T230000Z FREEBUSY:20061203T220000Z/20061203T230000Z FREEBUSY:20061204T220000Z/20061204T230000Z FREEBUSY:20061205T220000Z/20061205T230000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061206T220000Z/20061206T230000Z FREEBUSY:20061207T220000Z/20061207T230000Z FREEBUSY:20061208T220000Z/20061208T230000Z FREEBUSY:20061209T220000Z/20061209T230000Z FREEBUSY:20061210T220000Z/20061210T230000Z FREEBUSY:20061211T220000Z/20061211T230000Z FREEBUSY:20061212T220000Z/20061212T230000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061213T220000Z/20061213T230000Z FREEBUSY:20061214T220000Z/20061214T230000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061215T220000Z/20061215T230000Z FREEBUSY:20061216T220000Z/20061216T230000Z FREEBUSY:20061217T220000Z/20061217T230000Z FREEBUSY:20061218T220000Z/20061218T230000Z FREEBUSY:20061219T220000Z/20061219T230000Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061220T220000Z/20061220T230000Z FREEBUSY:20061221T220000Z/20061221T230000Z FREEBUSY:20061222T220000Z/20061222T230000Z FREEBUSY:20061223T000000Z/20061223T020000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061223T220000Z/20061223T230000Z FREEBUSY:20061224T220000Z/20061224T230000Z FREEBUSY:20061225T220000Z/20061225T230000Z FREEBUSY:20061226T220000Z/20061226T230000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061227T220000Z/20061227T230000Z FREEBUSY:20061228T220000Z/20061228T230000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20061229T220000Z/20061229T230000Z FREEBUSY:20061230T220000Z/20061230T230000Z FREEBUSY:20061231T220000Z/20061231T230000Z FREEBUSY:20070101T220000Z/20070101T230000Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070102T220000Z/20070102T230000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070103T220000Z/20070103T230000Z FREEBUSY:20070104T220000Z/20070104T230000Z FREEBUSY:20070105T220000Z/20070105T230000Z FREEBUSY:20070106T220000Z/20070106T230000Z FREEBUSY:20070107T220000Z/20070107T230000Z FREEBUSY:20070108T220000Z/20070108T230000Z FREEBUSY:20070109T220000Z/20070109T230000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070110T220000Z/20070110T230000Z FREEBUSY:20070111T220000Z/20070111T230000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070112T220000Z/20070112T230000Z FREEBUSY:20070113T220000Z/20070113T230000Z FREEBUSY:20070114T220000Z/20070114T230000Z FREEBUSY:20070115T220000Z/20070115T230000Z FREEBUSY:20070116T220000Z/20070116T230000Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070117T220000Z/20070117T230000Z FREEBUSY:20070118T220000Z/20070118T230000Z FREEBUSY:20070119T220000Z/20070119T230000Z FREEBUSY:20070120T220000Z/20070120T230000Z FREEBUSY:20070121T220000Z/20070121T230000Z FREEBUSY:20070122T220000Z/20070122T230000Z FREEBUSY:20070123T220000Z/20070123T230000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070124T220000Z/20070124T230000Z FREEBUSY:20070125T220000Z/20070125T230000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070126T220000Z/20070126T230000Z FREEBUSY:20070127T220000Z/20070127T230000Z FREEBUSY:20070128T220000Z/20070128T230000Z FREEBUSY:20070129T220000Z/20070129T230000Z FREEBUSY:20070130T220000Z/20070130T230000Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070131T220000Z/20070131T230000Z FREEBUSY:20070201T220000Z/20070201T230000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070202T220000Z/20070202T230000Z FREEBUSY:20070203T220000Z/20070203T230000Z FREEBUSY:20070204T220000Z/20070204T230000Z FREEBUSY:20070205T220000Z/20070205T230000Z FREEBUSY:20070206T220000Z/20070206T230000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070207T220000Z/20070207T230000Z FREEBUSY:20070208T220000Z/20070208T230000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070209T220000Z/20070209T230000Z FREEBUSY:20070210T220000Z/20070210T230000Z FREEBUSY:20070211T220000Z/20070211T230000Z FREEBUSY:20070212T220000Z/20070212T230000Z FREEBUSY:20070213T220000Z/20070213T230000Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070214T220000Z/20070214T230000Z FREEBUSY:20070215T220000Z/20070215T230000Z FREEBUSY:20070216T220000Z/20070216T230000Z FREEBUSY:20070217T220000Z/20070217T230000Z FREEBUSY:20070218T220000Z/20070218T230000Z FREEBUSY:20070219T220000Z/20070219T230000Z FREEBUSY:20070220T220000Z/20070220T230000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070221T220000Z/20070221T230000Z FREEBUSY:20070222T220000Z/20070222T230000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070223T220000Z/20070223T230000Z FREEBUSY:20070224T220000Z/20070224T230000Z FREEBUSY:20070225T220000Z/20070225T230000Z FREEBUSY:20070226T220000Z/20070226T230000Z FREEBUSY:20070227T220000Z/20070227T230000Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070228T220000Z/20070228T230000Z FREEBUSY:20070301T220000Z/20070301T230000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070302T220000Z/20070302T230000Z FREEBUSY:20070303T220000Z/20070303T230000Z FREEBUSY:20070304T220000Z/20070304T230000Z FREEBUSY:20070305T220000Z/20070305T230000Z FREEBUSY:20070306T220000Z/20070306T230000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070307T220000Z/20070307T230000Z FREEBUSY:20070308T220000Z/20070308T230000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070309T220000Z/20070309T230000Z FREEBUSY:20070310T220000Z/20070310T230000Z FREEBUSY:20070311T210000Z/20070311T220000Z FREEBUSY:20070312T210000Z/20070312T220000Z FREEBUSY:20070313T210000Z/20070313T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070315T210000Z/20070315T220000Z FREEBUSY:20070316T210000Z/20070316T220000Z FREEBUSY:20070317T210000Z/20070317T220000Z FREEBUSY:20070318T210000Z/20070318T220000Z FREEBUSY:20070319T210000Z/20070319T220000Z FREEBUSY:20070320T210000Z/20070320T220000Z FREEBUSY:20070321T210000Z/20070321T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070322T210000Z/20070322T220000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070323T210000Z/20070323T220000Z FREEBUSY:20070324T210000Z/20070324T220000Z FREEBUSY:20070325T210000Z/20070325T220000Z FREEBUSY:20070326T210000Z/20070326T220000Z FREEBUSY:20070327T210000Z/20070327T220000Z FREEBUSY:20070328T210000Z/20070328T220000Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070329T210000Z/20070329T220000Z FREEBUSY:20070330T210000Z/20070330T220000Z FREEBUSY:20070331T210000Z/20070331T220000Z FREEBUSY:20070401T210000Z/20070401T220000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070402T210000Z/20070402T220000Z FREEBUSY:20070403T210000Z/20070403T220000Z FREEBUSY:20070404T210000Z/20070404T220000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070405T210000Z/20070405T220000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070406T210000Z/20070406T220000Z FREEBUSY:20070407T210000Z/20070407T220000Z FREEBUSY:20070408T210000Z/20070408T220000Z FREEBUSY:20070409T210000Z/20070409T220000Z FREEBUSY:20070410T210000Z/20070410T220000Z FREEBUSY:20070411T210000Z/20070411T220000Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070412T210000Z/20070412T220000Z FREEBUSY:20070413T210000Z/20070413T220000Z FREEBUSY:20070414T210000Z/20070414T220000Z FREEBUSY:20070415T210000Z/20070415T220000Z FREEBUSY:20070416T210000Z/20070416T220000Z FREEBUSY:20070417T210000Z/20070417T220000Z FREEBUSY:20070418T210000Z/20070418T220000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070419T210000Z/20070419T220000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070420T210000Z/20070420T220000Z FREEBUSY:20070421T210000Z/20070421T220000Z FREEBUSY:20070422T210000Z/20070422T220000Z FREEBUSY:20070423T210000Z/20070423T220000Z FREEBUSY:20070424T210000Z/20070424T220000Z FREEBUSY:20070425T210000Z/20070425T220000Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070426T210000Z/20070426T220000Z FREEBUSY:20070427T210000Z/20070427T220000Z FREEBUSY:20070428T210000Z/20070428T220000Z FREEBUSY:20070429T210000Z/20070429T220000Z FREEBUSY:20070430T210000Z/20070430T220000Z FREEBUSY:20070501T210000Z/20070501T220000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070502T210000Z/20070502T220000Z FREEBUSY:20070503T210000Z/20070503T220000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070504T210000Z/20070504T220000Z FREEBUSY:20070505T210000Z/20070505T220000Z FREEBUSY:20070506T210000Z/20070506T220000Z FREEBUSY:20070507T210000Z/20070507T220000Z FREEBUSY:20070508T210000Z/20070508T220000Z FREEBUSY:20070509T210000Z/20070509T220000Z FREEBUSY:20070510T210000Z/20070510T220000Z FREEBUSY:20070511T210000Z/20070511T220000Z FREEBUSY:20070512T210000Z/20070512T220000Z FREEBUSY:20070513T210000Z/20070513T220000Z FREEBUSY:20070514T210000Z/20070514T220000Z FREEBUSY:20070515T210000Z/20070515T220000Z FREEBUSY:20070516T210000Z/20070516T220000Z FREEBUSY:20070517T210000Z/20070517T220000Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070518T210000Z/20070518T220000Z FREEBUSY:20070519T210000Z/20070519T220000Z FREEBUSY:20070520T210000Z/20070520T220000Z FREEBUSY:20070521T210000Z/20070521T220000Z FREEBUSY:20070522T210000Z/20070522T220000Z FREEBUSY:20070523T210000Z/20070523T220000Z FREEBUSY:20070524T210000Z/20070524T220000Z FREEBUSY:20070525T210000Z/20070525T220000Z FREEBUSY:20070526T210000Z/20070526T220000Z FREEBUSY:20070527T210000Z/20070527T220000Z FREEBUSY:20070528T210000Z/20070528T220000Z FREEBUSY:20070529T210000Z/20070529T220000Z FREEBUSY:20070530T210000Z/20070530T220000Z FREEBUSY:20070531T210000Z/20070531T220000Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070601T210000Z/20070601T220000Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070602T210000Z/20070602T220000Z FREEBUSY:20070603T210000Z/20070603T220000Z FREEBUSY:20070604T210000Z/20070604T220000Z FREEBUSY:20070605T210000Z/20070605T220000Z FREEBUSY:20070606T210000Z/20070606T220000Z FREEBUSY:20070607T210000Z/20070607T220000Z FREEBUSY:20070608T210000Z/20070608T220000Z FREEBUSY:20070609T210000Z/20070609T220000Z FREEBUSY:20070610T210000Z/20070610T220000Z FREEBUSY:20070611T210000Z/20070611T220000Z FREEBUSY:20070612T210000Z/20070612T220000Z FREEBUSY:20070613T210000Z/20070613T220000Z FREEBUSY:20070614T210000Z/20070614T220000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070615T210000Z/20070615T220000Z FREEBUSY:20070616T210000Z/20070616T220000Z FREEBUSY:20070617T210000Z/20070617T220000Z FREEBUSY:20070618T210000Z/20070618T220000Z FREEBUSY:20070619T210000Z/20070619T220000Z FREEBUSY:20070620T210000Z/20070620T220000Z FREEBUSY:20070621T210000Z/20070621T220000Z FREEBUSY:20070622T210000Z/20070622T220000Z FREEBUSY:20070623T210000Z/20070623T220000Z FREEBUSY:20070624T210000Z/20070624T220000Z FREEBUSY:20070625T210000Z/20070625T220000Z FREEBUSY:20070626T210000Z/20070626T220000Z FREEBUSY:20070627T210000Z/20070627T220000Z FREEBUSY:20070628T210000Z/20070628T220000Z FREEBUSY:20070629T040000Z/20070629T054500Z FREEBUSY:20070629T210000Z/20070629T220000Z FREEBUSY:20070630T210000Z/20070630T220000Z FREEBUSY:20070701T210000Z/20070701T220000Z FREEBUSY:20070702T193000Z/20070702T213000Z FREEBUSY:20070702T210000Z/20070702T220000Z FREEBUSY:20070703T210000Z/20070703T220000Z FREEBUSY:20070704T210000Z/20070704T220000Z FREEBUSY:20070705T210000Z/20070705T220000Z FREEBUSY:20070706T210000Z/20070706T220000Z FREEBUSY:20070707T210000Z/20070707T220000Z FREEBUSY:20070708T210000Z/20070708T220000Z FREEBUSY:20070709T210000Z/20070709T220000Z FREEBUSY:20070710T210000Z/20070710T220000Z FREEBUSY:20070711T210000Z/20070711T220000Z FREEBUSY:20070712T210000Z/20070712T220000Z FREEBUSY:20070713T040000Z/20070713T054500Z FREEBUSY:20070713T210000Z/20070713T220000Z FREEBUSY:20070714T210000Z/20070714T220000Z FREEBUSY:20070715T210000Z/20070715T220000Z FREEBUSY:20070716T210000Z/20070716T220000Z FREEBUSY:20070717T210000Z/20070717T220000Z FREEBUSY:20070718T210000Z/20070718T220000Z FREEBUSY:20070719T210000Z/20070719T220000Z FREEBUSY:20070720T210000Z/20070720T220000Z FREEBUSY:20070721T210000Z/20070721T220000Z FREEBUSY:20070722T210000Z/20070722T220000Z FREEBUSY:20070723T210000Z/20070723T220000Z FREEBUSY:20070724T210000Z/20070724T220000Z FREEBUSY:20070725T210000Z/20070725T220000Z FREEBUSY:20070726T210000Z/20070726T220000Z FREEBUSY:20070727T040000Z/20070727T054500Z FREEBUSY:20070727T210000Z/20070727T220000Z FREEBUSY:20070728T210000Z/20070728T220000Z FREEBUSY:20070729T210000Z/20070729T220000Z FREEBUSY:20070730T210000Z/20070730T220000Z FREEBUSY:20070731T210000Z/20070731T220000Z FREEBUSY:20070801T210000Z/20070801T220000Z FREEBUSY:20070802T193000Z/20070802T213000Z FREEBUSY:20070802T210000Z/20070802T220000Z FREEBUSY:20070803T210000Z/20070803T220000Z FREEBUSY:20070804T210000Z/20070804T220000Z FREEBUSY:20070805T210000Z/20070805T220000Z FREEBUSY:20070806T210000Z/20070806T220000Z FREEBUSY:20070807T210000Z/20070807T220000Z FREEBUSY:20070808T210000Z/20070808T220000Z FREEBUSY:20070809T210000Z/20070809T220000Z FREEBUSY:20070810T040000Z/20070810T054500Z FREEBUSY:20070810T210000Z/20070810T220000Z FREEBUSY:20070811T210000Z/20070811T220000Z FREEBUSY:20070812T210000Z/20070812T220000Z FREEBUSY:20070813T210000Z/20070813T220000Z FREEBUSY:20070814T210000Z/20070814T220000Z FREEBUSY:20070815T210000Z/20070815T220000Z FREEBUSY:20070816T210000Z/20070816T220000Z FREEBUSY:20070817T210000Z/20070817T220000Z FREEBUSY:20070818T210000Z/20070818T220000Z FREEBUSY:20070819T210000Z/20070819T220000Z FREEBUSY:20070820T210000Z/20070820T220000Z FREEBUSY:20070821T210000Z/20070821T220000Z FREEBUSY:20070822T210000Z/20070822T220000Z FREEBUSY:20070823T210000Z/20070823T220000Z FREEBUSY:20070824T040000Z/20070824T054500Z FREEBUSY:20070824T210000Z/20070824T220000Z FREEBUSY:20070825T210000Z/20070825T220000Z FREEBUSY:20070826T210000Z/20070826T220000Z FREEBUSY:20070827T210000Z/20070827T220000Z FREEBUSY:20070828T210000Z/20070828T220000Z FREEBUSY:20070829T210000Z/20070829T220000Z FREEBUSY:20070830T210000Z/20070830T220000Z FREEBUSY:20070831T210000Z/20070831T220000Z FREEBUSY:20070901T210000Z/20070901T220000Z FREEBUSY:20070902T193000Z/20070902T213000Z FREEBUSY:20070902T210000Z/20070902T220000Z FREEBUSY:20070903T210000Z/20070903T220000Z FREEBUSY:20070904T210000Z/20070904T220000Z FREEBUSY:20070905T210000Z/20070905T220000Z FREEBUSY:20070906T210000Z/20070906T220000Z FREEBUSY:20070907T040000Z/20070907T054500Z FREEBUSY:20070907T210000Z/20070907T220000Z FREEBUSY:20070908T210000Z/20070908T220000Z FREEBUSY:20070909T210000Z/20070909T220000Z FREEBUSY:20070910T210000Z/20070910T220000Z FREEBUSY:20070911T210000Z/20070911T220000Z FREEBUSY:20070912T210000Z/20070912T220000Z FREEBUSY:20070913T210000Z/20070913T220000Z FREEBUSY:20070914T210000Z/20070914T220000Z FREEBUSY:20070915T210000Z/20070915T220000Z FREEBUSY:20070916T210000Z/20070916T220000Z FREEBUSY:20070917T210000Z/20070917T220000Z FREEBUSY:20070918T210000Z/20070918T220000Z FREEBUSY:20070919T210000Z/20070919T220000Z FREEBUSY:20070920T210000Z/20070920T220000Z FREEBUSY:20070921T040000Z/20070921T054500Z FREEBUSY:20070921T210000Z/20070921T220000Z FREEBUSY:20070922T210000Z/20070922T220000Z FREEBUSY:20070923T210000Z/20070923T220000Z FREEBUSY:20070924T210000Z/20070924T220000Z FREEBUSY:20070925T210000Z/20070925T220000Z FREEBUSY:20070926T210000Z/20070926T220000Z FREEBUSY:20070927T210000Z/20070927T220000Z FREEBUSY:20070928T210000Z/20070928T220000Z FREEBUSY:20070929T210000Z/20070929T220000Z FREEBUSY:20070930T210000Z/20070930T220000Z FREEBUSY:20071001T210000Z/20071001T220000Z FREEBUSY:20071002T183000Z/20071002T203000Z FREEBUSY:20071002T210000Z/20071002T220000Z FREEBUSY:20071003T210000Z/20071003T220000Z FREEBUSY:20071004T210000Z/20071004T220000Z FREEBUSY:20071005T030000Z/20071005T044500Z FREEBUSY:20071005T210000Z/20071005T220000Z FREEBUSY:20071006T210000Z/20071006T220000Z FREEBUSY:20071007T210000Z/20071007T220000Z FREEBUSY:20071008T210000Z/20071008T220000Z FREEBUSY:20071009T210000Z/20071009T220000Z FREEBUSY:20071010T210000Z/20071010T220000Z FREEBUSY:20071011T210000Z/20071011T220000Z FREEBUSY:20071012T210000Z/20071012T220000Z FREEBUSY:20071013T210000Z/20071013T220000Z FREEBUSY:20071014T210000Z/20071014T220000Z FREEBUSY:20071015T210000Z/20071015T220000Z FREEBUSY:20071016T210000Z/20071016T220000Z FREEBUSY:20071017T210000Z/20071017T220000Z FREEBUSY:20071018T210000Z/20071018T220000Z FREEBUSY:20071019T030000Z/20071019T044500Z FREEBUSY:20071019T210000Z/20071019T220000Z FREEBUSY:20071020T210000Z/20071020T220000Z FREEBUSY:20071021T210000Z/20071021T220000Z FREEBUSY:20071022T210000Z/20071022T220000Z FREEBUSY:20071023T210000Z/20071023T220000Z FREEBUSY:20071024T210000Z/20071024T220000Z FREEBUSY:20071025T210000Z/20071025T220000Z FREEBUSY:20071026T210000Z/20071026T220000Z FREEBUSY:20071027T210000Z/20071027T220000Z FREEBUSY:20071028T210000Z/20071028T220000Z FREEBUSY:20071029T210000Z/20071029T220000Z FREEBUSY:20071030T210000Z/20071030T220000Z FREEBUSY:20071031T210000Z/20071031T220000Z FREEBUSY:20071101T210000Z/20071101T220000Z FREEBUSY:20071102T030000Z/20071102T044500Z FREEBUSY:20071102T183000Z/20071102T203000Z FREEBUSY:20071102T210000Z/20071102T220000Z FREEBUSY:20071103T210000Z/20071103T220000Z FREEBUSY:20071104T220000Z/20071104T230000Z FREEBUSY:20071105T220000Z/20071105T230000Z FREEBUSY:20071106T220000Z/20071106T230000Z FREEBUSY:20071107T220000Z/20071107T230000Z FREEBUSY:20071108T220000Z/20071108T230000Z FREEBUSY:20071109T220000Z/20071109T230000Z FREEBUSY:20071110T220000Z/20071110T230000Z FREEBUSY:20071111T220000Z/20071111T230000Z FREEBUSY:20071112T220000Z/20071112T230000Z FREEBUSY:20071113T220000Z/20071113T230000Z FREEBUSY:20071114T220000Z/20071114T230000Z FREEBUSY:20071115T220000Z/20071115T230000Z FREEBUSY:20071116T030000Z/20071116T044500Z FREEBUSY:20071116T220000Z/20071116T230000Z FREEBUSY:20071117T220000Z/20071117T230000Z FREEBUSY:20071118T220000Z/20071118T230000Z FREEBUSY:20071119T220000Z/20071119T230000Z FREEBUSY:20071120T220000Z/20071120T230000Z FREEBUSY:20071121T220000Z/20071121T230000Z FREEBUSY:20071122T220000Z/20071122T230000Z FREEBUSY:20071123T220000Z/20071123T230000Z FREEBUSY:20071124T220000Z/20071124T230000Z FREEBUSY:20071125T000000Z/20071125T060000Z FREEBUSY:20071125T180000Z/20071126T040000Z FREEBUSY:20071125T220000Z/20071125T230000Z FREEBUSY:20071126T180000Z/20071127T040000Z FREEBUSY:20071126T220000Z/20071126T230000Z FREEBUSY:20071127T180000Z/20071128T040000Z FREEBUSY:20071127T220000Z/20071127T230000Z FREEBUSY:20071128T180000Z/20071129T040000Z FREEBUSY:20071128T220000Z/20071128T230000Z FREEBUSY:20071129T180000Z/20071130T040000Z FREEBUSY:20071129T220000Z/20071129T230000Z FREEBUSY:20071130T030000Z/20071130T044500Z FREEBUSY:20071130T220000Z/20071130T230000Z FREEBUSY:20071201T220000Z/20071201T230000Z FREEBUSY:20071202T180000Z/20071203T040000Z FREEBUSY:20071202T183000Z/20071202T203000Z FREEBUSY:20071202T220000Z/20071202T230000Z FREEBUSY:20071203T180000Z/20071204T040000Z FREEBUSY:20071203T220000Z/20071203T230000Z FREEBUSY:20071204T180000Z/20071205T040000Z FREEBUSY:20071204T220000Z/20071204T230000Z FREEBUSY:20071205T180000Z/20071206T040000Z FREEBUSY:20071205T220000Z/20071205T230000Z FREEBUSY:20071206T180000Z/20071207T040000Z FREEBUSY:20071206T220000Z/20071206T230000Z FREEBUSY:20071207T220000Z/20071207T230000Z FREEBUSY:20071208T220000Z/20071208T230000Z FREEBUSY:20071209T003000Z/20071210T003000Z FREEBUSY:20071209T180000Z/20071210T040000Z FREEBUSY:20071209T220000Z/20071209T230000Z FREEBUSY:20071210T180000Z/20071211T040000Z FREEBUSY:20071210T184500Z/20071210T193000Z FREEBUSY:20071210T220000Z/20071210T230000Z FREEBUSY:20071211T180000Z/20071212T040000Z FREEBUSY:20071211T220000Z/20071211T230000Z FREEBUSY:20071212T180000Z/20071213T040000Z FREEBUSY:20071212T184500Z/20071212T193000Z FREEBUSY:20071212T220000Z/20071212T230000Z FREEBUSY:20071213T180000Z/20071214T040000Z FREEBUSY:20071213T220000Z/20071213T230000Z FREEBUSY:20071214T030000Z/20071214T044500Z FREEBUSY:20071214T220000Z/20071214T230000Z FREEBUSY:20071215T220000Z/20071215T230000Z FREEBUSY:20071216T180000Z/20071217T040000Z FREEBUSY:20071216T220000Z/20071216T230000Z FREEBUSY:20071217T180000Z/20071218T040000Z FREEBUSY:20071217T184500Z/20071217T193000Z FREEBUSY:20071217T220000Z/20071217T230000Z FREEBUSY:20071218T180000Z/20071219T040000Z FREEBUSY:20071218T220000Z/20071218T230000Z FREEBUSY:20071219T180000Z/20071220T040000Z FREEBUSY:20071219T184500Z/20071219T193000Z FREEBUSY:20071219T220000Z/20071219T230000Z FREEBUSY:20071220T180000Z/20071221T040000Z FREEBUSY:20071220T220000Z/20071220T230000Z FREEBUSY:20071221T220000Z/20071221T230000Z FREEBUSY:20071222T220000Z/20071222T230000Z FREEBUSY:20071223T180000Z/20071224T040000Z FREEBUSY:20071223T220000Z/20071223T230000Z FREEBUSY:20071224T180000Z/20071225T040000Z FREEBUSY:20071224T184500Z/20071224T193000Z FREEBUSY:20071224T220000Z/20071224T230000Z FREEBUSY:20071225T180000Z/20071226T040000Z FREEBUSY:20071225T220000Z/20071225T230000Z FREEBUSY:20071226T180000Z/20071227T040000Z FREEBUSY:20071226T184500Z/20071226T193000Z FREEBUSY:20071226T220000Z/20071226T230000Z FREEBUSY:20071227T180000Z/20071228T040000Z FREEBUSY:20071227T220000Z/20071227T230000Z FREEBUSY:20071228T220000Z/20071228T230000Z FREEBUSY:20071229T220000Z/20071229T230000Z FREEBUSY:20071230T180000Z/20071231T040000Z FREEBUSY:20071230T220000Z/20071230T230000Z FREEBUSY:20071231T180000Z/20080101T040000Z FREEBUSY:20071231T184500Z/20071231T193000Z FREEBUSY:20071231T220000Z/20071231T230000Z FREEBUSY:20080101T180000Z/20080102T040000Z FREEBUSY:20080101T220000Z/20080101T230000Z FREEBUSY:20080102T180000Z/20080103T040000Z FREEBUSY:20080102T183000Z/20080102T203000Z FREEBUSY:20080102T184500Z/20080102T193000Z FREEBUSY:20080102T220000Z/20080102T230000Z FREEBUSY:20080103T180000Z/20080104T040000Z FREEBUSY:20080103T220000Z/20080103T230000Z FREEBUSY:20080104T220000Z/20080104T230000Z FREEBUSY:20080105T220000Z/20080105T230000Z FREEBUSY:20080106T180000Z/20080107T040000Z FREEBUSY:20080106T220000Z/20080106T230000Z FREEBUSY:20080107T180000Z/20080108T040000Z FREEBUSY:20080107T184500Z/20080107T193000Z FREEBUSY:20080107T220000Z/20080107T230000Z FREEBUSY:20080108T180000Z/20080109T040000Z FREEBUSY:20080108T220000Z/20080108T230000Z FREEBUSY:20080109T180000Z/20080110T040000Z FREEBUSY:20080109T184500Z/20080109T193000Z FREEBUSY:20080109T220000Z/20080109T230000Z FREEBUSY:20080110T180000Z/20080111T040000Z FREEBUSY:20080110T220000Z/20080110T230000Z FREEBUSY:20080111T220000Z/20080111T230000Z FREEBUSY:20080112T220000Z/20080112T230000Z FREEBUSY:20080113T180000Z/20080114T040000Z FREEBUSY:20080113T220000Z/20080113T230000Z FREEBUSY:20080114T180000Z/20080115T040000Z FREEBUSY:20080114T184500Z/20080114T193000Z FREEBUSY:20080114T220000Z/20080114T230000Z FREEBUSY:20080115T180000Z/20080116T040000Z FREEBUSY:20080115T220000Z/20080115T230000Z FREEBUSY:20080116T180000Z/20080117T040000Z FREEBUSY:20080116T184500Z/20080116T193000Z FREEBUSY:20080116T220000Z/20080116T230000Z FREEBUSY:20080117T180000Z/20080118T040000Z FREEBUSY:20080117T220000Z/20080117T230000Z FREEBUSY:20080118T220000Z/20080118T230000Z FREEBUSY:20080119T220000Z/20080119T230000Z FREEBUSY:20080120T180000Z/20080121T040000Z FREEBUSY:20080120T220000Z/20080120T230000Z FREEBUSY:20080121T180000Z/20080122T040000Z FREEBUSY:20080121T184500Z/20080121T193000Z FREEBUSY:20080121T220000Z/20080121T230000Z FREEBUSY:20080122T180000Z/20080123T040000Z FREEBUSY:20080122T220000Z/20080122T230000Z FREEBUSY:20080123T180000Z/20080124T040000Z FREEBUSY:20080123T184500Z/20080123T193000Z FREEBUSY:20080123T220000Z/20080123T230000Z FREEBUSY:20080124T180000Z/20080125T040000Z FREEBUSY:20080124T220000Z/20080124T230000Z FREEBUSY:20080125T220000Z/20080125T230000Z FREEBUSY:20080126T220000Z/20080126T230000Z FREEBUSY:20080127T180000Z/20080128T040000Z FREEBUSY:20080127T220000Z/20080127T230000Z FREEBUSY:20080128T180000Z/20080129T040000Z FREEBUSY:20080128T184500Z/20080128T193000Z FREEBUSY:20080128T220000Z/20080128T230000Z FREEBUSY:20080129T180000Z/20080130T040000Z FREEBUSY:20080129T220000Z/20080129T230000Z FREEBUSY:20080130T180000Z/20080131T040000Z FREEBUSY:20080130T184500Z/20080130T193000Z FREEBUSY:20080130T220000Z/20080130T230000Z FREEBUSY:20080131T180000Z/20080201T040000Z FREEBUSY:20080131T220000Z/20080131T230000Z FREEBUSY:20080201T220000Z/20080201T230000Z FREEBUSY:20080202T183000Z/20080202T203000Z FREEBUSY:20080202T220000Z/20080202T230000Z FREEBUSY:20080203T180000Z/20080204T040000Z FREEBUSY:20080203T220000Z/20080203T230000Z FREEBUSY:20080204T180000Z/20080205T040000Z FREEBUSY:20080204T184500Z/20080204T193000Z FREEBUSY:20080204T220000Z/20080204T230000Z FREEBUSY:20080205T180000Z/20080206T040000Z FREEBUSY:20080205T220000Z/20080205T230000Z FREEBUSY:20080206T180000Z/20080207T040000Z FREEBUSY:20080206T184500Z/20080206T193000Z FREEBUSY:20080206T220000Z/20080206T230000Z FREEBUSY:20080207T180000Z/20080208T040000Z FREEBUSY:20080207T220000Z/20080207T230000Z FREEBUSY:20080208T220000Z/20080208T230000Z FREEBUSY:20080209T220000Z/20080209T230000Z FREEBUSY:20080210T180000Z/20080211T040000Z FREEBUSY:20080210T220000Z/20080210T230000Z FREEBUSY:20080211T180000Z/20080212T040000Z FREEBUSY:20080211T184500Z/20080211T193000Z FREEBUSY:20080211T220000Z/20080211T230000Z FREEBUSY:20080212T180000Z/20080213T040000Z FREEBUSY:20080212T220000Z/20080212T230000Z FREEBUSY:20080213T180000Z/20080214T040000Z FREEBUSY:20080213T184500Z/20080213T193000Z FREEBUSY:20080213T220000Z/20080213T230000Z FREEBUSY:20080214T180000Z/20080215T040000Z FREEBUSY:20080214T220000Z/20080214T230000Z FREEBUSY:20080215T220000Z/20080215T230000Z FREEBUSY:20080216T220000Z/20080216T230000Z FREEBUSY:20080217T180000Z/20080218T040000Z FREEBUSY:20080217T220000Z/20080217T230000Z FREEBUSY:20080218T180000Z/20080219T040000Z FREEBUSY:20080218T184500Z/20080218T193000Z FREEBUSY:20080218T220000Z/20080218T230000Z FREEBUSY:20080219T180000Z/20080220T040000Z FREEBUSY:20080219T220000Z/20080219T230000Z FREEBUSY:20080220T180000Z/20080221T040000Z FREEBUSY:20080220T184500Z/20080220T193000Z FREEBUSY:20080220T220000Z/20080220T230000Z FREEBUSY:20080221T180000Z/20080222T040000Z FREEBUSY:20080221T220000Z/20080221T230000Z FREEBUSY:20080222T220000Z/20080222T230000Z FREEBUSY:20080223T220000Z/20080223T230000Z FREEBUSY:20080224T180000Z/20080225T040000Z FREEBUSY:20080224T220000Z/20080224T230000Z FREEBUSY:20080225T180000Z/20080226T040000Z FREEBUSY:20080225T184500Z/20080225T193000Z FREEBUSY:20080225T220000Z/20080225T230000Z FREEBUSY:20080226T180000Z/20080227T040000Z FREEBUSY:20080226T220000Z/20080226T230000Z FREEBUSY:20080227T180000Z/20080228T040000Z FREEBUSY:20080227T184500Z/20080227T193000Z FREEBUSY:20080227T220000Z/20080227T230000Z FREEBUSY:20080228T180000Z/20080229T040000Z FREEBUSY:20080228T220000Z/20080228T230000Z FREEBUSY:20080229T220000Z/20080229T230000Z FREEBUSY:20080301T220000Z/20080301T230000Z FREEBUSY:20080302T180000Z/20080303T040000Z FREEBUSY:20080302T183000Z/20080302T203000Z FREEBUSY:20080302T220000Z/20080302T230000Z FREEBUSY:20080303T180000Z/20080304T040000Z FREEBUSY:20080303T184500Z/20080303T193000Z FREEBUSY:20080303T220000Z/20080303T230000Z FREEBUSY:20080304T180000Z/20080305T040000Z FREEBUSY:20080304T220000Z/20080304T230000Z FREEBUSY:20080305T180000Z/20080306T040000Z FREEBUSY:20080305T184500Z/20080305T193000Z FREEBUSY:20080305T220000Z/20080305T230000Z FREEBUSY:20080306T180000Z/20080307T040000Z FREEBUSY:20080306T220000Z/20080306T230000Z FREEBUSY:20080307T220000Z/20080307T230000Z FREEBUSY:20080308T220000Z/20080308T230000Z FREEBUSY:20080309T180000Z/20080310T040000Z FREEBUSY:20080309T210000Z/20080309T220000Z FREEBUSY:20080310T180000Z/20080311T040000Z FREEBUSY:20080310T184500Z/20080310T193000Z FREEBUSY:20080310T210000Z/20080310T220000Z FREEBUSY:20080311T180000Z/20080312T040000Z FREEBUSY:20080311T210000Z/20080311T220000Z FREEBUSY:20080312T180000Z/20080313T040000Z FREEBUSY:20080312T184500Z/20080312T193000Z FREEBUSY:20080312T210000Z/20080312T220000Z FREEBUSY:20080313T180000Z/20080314T040000Z FREEBUSY:20080313T210000Z/20080313T220000Z FREEBUSY:20080314T210000Z/20080314T220000Z FREEBUSY:20080315T210000Z/20080315T220000Z FREEBUSY:20080316T180000Z/20080317T040000Z FREEBUSY:20080316T210000Z/20080316T220000Z FREEBUSY:20080317T180000Z/20080318T040000Z FREEBUSY:20080317T184500Z/20080317T193000Z FREEBUSY:20080317T210000Z/20080317T220000Z FREEBUSY:20080318T180000Z/20080319T040000Z FREEBUSY:20080318T210000Z/20080318T220000Z FREEBUSY:20080319T180000Z/20080320T040000Z FREEBUSY:20080319T184500Z/20080319T193000Z FREEBUSY:20080319T210000Z/20080319T220000Z FREEBUSY:20080320T180000Z/20080321T040000Z FREEBUSY:20080320T210000Z/20080320T220000Z FREEBUSY:20080321T210000Z/20080321T220000Z FREEBUSY:20080322T210000Z/20080322T220000Z FREEBUSY:20080323T180000Z/20080324T040000Z FREEBUSY:20080323T210000Z/20080323T220000Z FREEBUSY:20080324T180000Z/20080325T040000Z FREEBUSY:20080324T184500Z/20080324T193000Z FREEBUSY:20080324T210000Z/20080324T220000Z FREEBUSY:20080325T180000Z/20080326T040000Z FREEBUSY:20080325T210000Z/20080325T220000Z FREEBUSY:20080326T180000Z/20080327T040000Z FREEBUSY:20080326T184500Z/20080326T193000Z FREEBUSY:20080326T210000Z/20080326T220000Z FREEBUSY:20080327T180000Z/20080328T040000Z FREEBUSY:20080327T210000Z/20080327T220000Z FREEBUSY:20080328T210000Z/20080328T220000Z FREEBUSY:20080329T210000Z/20080329T220000Z FREEBUSY:20080330T180000Z/20080331T040000Z FREEBUSY:20080330T210000Z/20080330T220000Z FREEBUSY:20080331T180000Z/20080401T040000Z FREEBUSY:20080331T184500Z/20080331T193000Z FREEBUSY:20080331T210000Z/20080331T220000Z FREEBUSY:20080401T180000Z/20080402T040000Z FREEBUSY:20080401T210000Z/20080401T220000Z FREEBUSY:20080402T180000Z/20080403T040000Z FREEBUSY:20080402T183000Z/20080402T203000Z FREEBUSY:20080402T184500Z/20080402T193000Z FREEBUSY:20080402T210000Z/20080402T220000Z FREEBUSY:20080403T180000Z/20080404T040000Z FREEBUSY:20080403T210000Z/20080403T220000Z FREEBUSY:20080404T210000Z/20080404T220000Z FREEBUSY:20080405T210000Z/20080405T220000Z FREEBUSY:20080406T190000Z/20080407T050000Z FREEBUSY:20080406T210000Z/20080406T220000Z FREEBUSY:20080407T190000Z/20080408T050000Z FREEBUSY:20080407T194500Z/20080407T203000Z FREEBUSY:20080407T210000Z/20080407T220000Z FREEBUSY:20080408T190000Z/20080409T050000Z FREEBUSY:20080408T210000Z/20080408T220000Z FREEBUSY:20080409T190000Z/20080410T050000Z FREEBUSY:20080409T194500Z/20080409T203000Z FREEBUSY:20080409T210000Z/20080409T220000Z FREEBUSY:20080410T190000Z/20080411T050000Z FREEBUSY:20080410T210000Z/20080410T220000Z FREEBUSY:20080411T210000Z/20080411T220000Z FREEBUSY:20080412T210000Z/20080412T220000Z FREEBUSY:20080413T190000Z/20080414T050000Z FREEBUSY:20080413T210000Z/20080413T220000Z FREEBUSY:20080414T190000Z/20080415T050000Z FREEBUSY:20080414T194500Z/20080414T203000Z FREEBUSY:20080414T210000Z/20080414T220000Z FREEBUSY:20080415T190000Z/20080416T050000Z FREEBUSY:20080415T210000Z/20080415T220000Z FREEBUSY:20080416T190000Z/20080417T050000Z FREEBUSY:20080416T194500Z/20080416T203000Z FREEBUSY:20080416T210000Z/20080416T220000Z FREEBUSY:20080417T190000Z/20080418T050000Z FREEBUSY:20080417T210000Z/20080417T220000Z FREEBUSY:20080418T210000Z/20080418T220000Z FREEBUSY:20080419T210000Z/20080419T220000Z FREEBUSY:20080420T190000Z/20080421T050000Z FREEBUSY:20080420T210000Z/20080420T220000Z FREEBUSY:20080421T190000Z/20080422T050000Z FREEBUSY:20080421T194500Z/20080421T203000Z FREEBUSY:20080421T210000Z/20080421T220000Z FREEBUSY:20080422T190000Z/20080423T050000Z FREEBUSY:20080422T210000Z/20080422T220000Z FREEBUSY:20080423T190000Z/20080424T050000Z FREEBUSY:20080423T194500Z/20080423T203000Z FREEBUSY:20080423T210000Z/20080423T220000Z FREEBUSY:20080424T190000Z/20080425T050000Z FREEBUSY:20080424T210000Z/20080424T220000Z FREEBUSY:20080425T210000Z/20080425T220000Z FREEBUSY:20080426T210000Z/20080426T220000Z FREEBUSY:20080427T190000Z/20080428T050000Z FREEBUSY:20080427T210000Z/20080427T220000Z FREEBUSY:20080428T190000Z/20080429T050000Z FREEBUSY:20080428T194500Z/20080428T203000Z FREEBUSY:20080428T210000Z/20080428T220000Z FREEBUSY:20080429T190000Z/20080430T050000Z FREEBUSY:20080429T210000Z/20080429T220000Z FREEBUSY:20080430T190000Z/20080501T050000Z FREEBUSY:20080430T194500Z/20080430T203000Z FREEBUSY:20080430T210000Z/20080430T220000Z FREEBUSY:20080501T190000Z/20080502T050000Z FREEBUSY:20080501T210000Z/20080501T220000Z FREEBUSY:20080502T193000Z/20080502T213000Z FREEBUSY:20080502T210000Z/20080502T220000Z FREEBUSY:20080503T210000Z/20080503T220000Z FREEBUSY:20080504T190000Z/20080505T050000Z FREEBUSY:20080504T210000Z/20080504T220000Z FREEBUSY:20080505T190000Z/20080506T050000Z FREEBUSY:20080505T194500Z/20080505T203000Z FREEBUSY:20080505T210000Z/20080505T220000Z FREEBUSY:20080506T190000Z/20080507T050000Z FREEBUSY:20080506T210000Z/20080506T220000Z FREEBUSY:20080507T190000Z/20080508T050000Z FREEBUSY:20080507T194500Z/20080507T203000Z FREEBUSY:20080507T210000Z/20080507T220000Z FREEBUSY:20080508T190000Z/20080509T050000Z FREEBUSY:20080508T210000Z/20080508T220000Z FREEBUSY:20080509T210000Z/20080509T220000Z FREEBUSY:20080510T210000Z/20080510T220000Z FREEBUSY:20080511T190000Z/20080512T050000Z FREEBUSY:20080511T210000Z/20080511T220000Z FREEBUSY:20080512T190000Z/20080513T050000Z FREEBUSY:20080512T194500Z/20080512T203000Z FREEBUSY:20080512T210000Z/20080512T220000Z FREEBUSY:20080513T190000Z/20080514T050000Z FREEBUSY:20080513T210000Z/20080513T220000Z FREEBUSY:20080514T190000Z/20080515T050000Z FREEBUSY:20080514T194500Z/20080514T203000Z FREEBUSY:20080514T210000Z/20080514T220000Z FREEBUSY:20080515T190000Z/20080516T050000Z FREEBUSY:20080515T210000Z/20080515T220000Z FREEBUSY:20080516T210000Z/20080516T220000Z FREEBUSY:20080517T210000Z/20080517T220000Z FREEBUSY:20080518T190000Z/20080519T050000Z FREEBUSY:20080518T210000Z/20080518T220000Z FREEBUSY:20080519T190000Z/20080520T050000Z FREEBUSY:20080519T194500Z/20080519T203000Z FREEBUSY:20080519T210000Z/20080519T220000Z FREEBUSY:20080520T190000Z/20080521T050000Z FREEBUSY:20080520T210000Z/20080520T220000Z FREEBUSY:20080521T190000Z/20080522T050000Z FREEBUSY:20080521T194500Z/20080521T203000Z FREEBUSY:20080521T210000Z/20080521T220000Z FREEBUSY:20080522T190000Z/20080523T050000Z FREEBUSY:20080522T210000Z/20080522T220000Z FREEBUSY:20080523T210000Z/20080523T220000Z FREEBUSY:20080524T210000Z/20080524T220000Z FREEBUSY:20080525T190000Z/20080526T050000Z FREEBUSY:20080525T210000Z/20080525T220000Z FREEBUSY:20080526T190000Z/20080527T050000Z FREEBUSY:20080526T194500Z/20080526T203000Z FREEBUSY:20080526T210000Z/20080526T220000Z FREEBUSY:20080527T190000Z/20080528T050000Z FREEBUSY:20080527T210000Z/20080527T220000Z FREEBUSY:20080528T190000Z/20080529T050000Z FREEBUSY:20080528T194500Z/20080528T203000Z FREEBUSY:20080528T210000Z/20080528T220000Z FREEBUSY:20080529T190000Z/20080530T050000Z FREEBUSY:20080529T210000Z/20080529T220000Z FREEBUSY:20080530T210000Z/20080530T220000Z FREEBUSY:20080531T210000Z/20080531T220000Z FREEBUSY:20080601T190000Z/20080602T050000Z FREEBUSY:20080601T210000Z/20080601T220000Z FREEBUSY:20080602T190000Z/20080603T050000Z FREEBUSY:20080602T193000Z/20080602T213000Z FREEBUSY:20080602T194500Z/20080602T203000Z FREEBUSY:20080602T210000Z/20080602T220000Z FREEBUSY:20080603T190000Z/20080604T050000Z FREEBUSY:20080603T210000Z/20080603T220000Z FREEBUSY:20080604T190000Z/20080605T050000Z FREEBUSY:20080604T194500Z/20080604T203000Z FREEBUSY:20080604T210000Z/20080604T220000Z FREEBUSY:20080605T190000Z/20080606T050000Z FREEBUSY:20080605T210000Z/20080605T220000Z FREEBUSY:20080606T210000Z/20080606T220000Z FREEBUSY:20080607T210000Z/20080607T220000Z FREEBUSY:20080608T190000Z/20080609T050000Z FREEBUSY:20080608T210000Z/20080608T220000Z FREEBUSY:20080609T190000Z/20080610T050000Z FREEBUSY:20080609T194500Z/20080609T203000Z FREEBUSY:20080609T210000Z/20080609T220000Z FREEBUSY:20080610T190000Z/20080611T050000Z FREEBUSY:20080610T210000Z/20080610T220000Z FREEBUSY:20080611T190000Z/20080612T050000Z FREEBUSY:20080611T194500Z/20080611T203000Z FREEBUSY:20080611T210000Z/20080611T220000Z FREEBUSY:20080612T190000Z/20080613T050000Z FREEBUSY:20080612T210000Z/20080612T220000Z FREEBUSY:20080613T210000Z/20080613T220000Z FREEBUSY:20080614T210000Z/20080614T220000Z FREEBUSY:20080615T190000Z/20080616T050000Z FREEBUSY:20080615T210000Z/20080615T220000Z FREEBUSY:20080616T190000Z/20080617T050000Z FREEBUSY:20080616T194500Z/20080616T203000Z FREEBUSY:20080616T210000Z/20080616T220000Z FREEBUSY:20080617T190000Z/20080618T050000Z FREEBUSY:20080617T210000Z/20080617T220000Z FREEBUSY:20080618T190000Z/20080619T050000Z FREEBUSY:20080618T194500Z/20080618T203000Z FREEBUSY:20080618T210000Z/20080618T220000Z FREEBUSY:20080619T190000Z/20080620T050000Z FREEBUSY:20080619T210000Z/20080619T220000Z FREEBUSY:20080620T210000Z/20080620T220000Z FREEBUSY:20080621T210000Z/20080621T220000Z FREEBUSY:20080622T190000Z/20080623T050000Z FREEBUSY:20080622T210000Z/20080622T220000Z FREEBUSY:20080623T190000Z/20080624T050000Z FREEBUSY:20080623T194500Z/20080623T203000Z FREEBUSY:20080623T210000Z/20080623T220000Z FREEBUSY:20080624T190000Z/20080625T050000Z FREEBUSY:20080624T210000Z/20080624T220000Z FREEBUSY:20080625T190000Z/20080626T050000Z FREEBUSY:20080625T194500Z/20080625T203000Z FREEBUSY:20080625T210000Z/20080625T220000Z FREEBUSY:20080626T190000Z/20080627T050000Z FREEBUSY:20080626T210000Z/20080626T220000Z FREEBUSY:20080627T210000Z/20080627T220000Z FREEBUSY:20080628T210000Z/20080628T220000Z FREEBUSY:20080629T190000Z/20080630T050000Z FREEBUSY:20080629T210000Z/20080629T220000Z FREEBUSY:20080630T190000Z/20080701T050000Z FREEBUSY:20080630T194500Z/20080630T203000Z FREEBUSY:20080630T210000Z/20080630T220000Z FREEBUSY:20080701T190000Z/20080702T050000Z FREEBUSY:20080701T210000Z/20080701T220000Z FREEBUSY:20080702T190000Z/20080703T050000Z FREEBUSY:20080702T193000Z/20080702T213000Z FREEBUSY:20080702T194500Z/20080702T203000Z FREEBUSY:20080702T210000Z/20080702T220000Z FREEBUSY:20080703T190000Z/20080704T050000Z FREEBUSY:20080703T210000Z/20080703T220000Z FREEBUSY:20080704T210000Z/20080704T220000Z FREEBUSY:20080705T210000Z/20080705T220000Z FREEBUSY:20080706T190000Z/20080707T050000Z FREEBUSY:20080706T210000Z/20080706T220000Z FREEBUSY:20080707T190000Z/20080708T050000Z FREEBUSY:20080707T194500Z/20080707T203000Z FREEBUSY:20080707T210000Z/20080707T220000Z FREEBUSY:20080708T190000Z/20080709T050000Z FREEBUSY:20080708T210000Z/20080708T220000Z FREEBUSY:20080709T190000Z/20080710T050000Z FREEBUSY:20080709T194500Z/20080709T203000Z FREEBUSY:20080709T210000Z/20080709T220000Z FREEBUSY:20080710T190000Z/20080711T050000Z FREEBUSY:20080710T210000Z/20080710T220000Z FREEBUSY:20080711T210000Z/20080711T220000Z FREEBUSY:20080712T210000Z/20080712T220000Z FREEBUSY:20080713T190000Z/20080714T050000Z FREEBUSY:20080713T210000Z/20080713T220000Z FREEBUSY:20080714T190000Z/20080715T050000Z FREEBUSY:20080714T194500Z/20080714T203000Z FREEBUSY:20080714T210000Z/20080714T220000Z FREEBUSY:20080715T190000Z/20080716T050000Z FREEBUSY:20080715T210000Z/20080715T220000Z FREEBUSY:20080716T190000Z/20080717T050000Z FREEBUSY:20080716T194500Z/20080716T203000Z FREEBUSY:20080716T210000Z/20080716T220000Z FREEBUSY:20080717T190000Z/20080718T050000Z FREEBUSY:20080717T210000Z/20080717T220000Z FREEBUSY:20080718T210000Z/20080718T220000Z FREEBUSY:20080719T210000Z/20080719T220000Z FREEBUSY:20080720T190000Z/20080721T050000Z FREEBUSY:20080720T210000Z/20080720T220000Z FREEBUSY:20080721T190000Z/20080722T050000Z FREEBUSY:20080721T194500Z/20080721T203000Z FREEBUSY:20080721T210000Z/20080721T220000Z FREEBUSY:20080722T190000Z/20080723T050000Z FREEBUSY:20080722T210000Z/20080722T220000Z FREEBUSY:20080723T190000Z/20080724T050000Z FREEBUSY:20080723T194500Z/20080723T203000Z FREEBUSY:20080723T210000Z/20080723T220000Z FREEBUSY:20080724T190000Z/20080725T050000Z FREEBUSY:20080724T210000Z/20080724T220000Z FREEBUSY:20080725T210000Z/20080725T220000Z FREEBUSY:20080726T210000Z/20080726T220000Z FREEBUSY:20080727T190000Z/20080728T050000Z FREEBUSY:20080727T210000Z/20080727T220000Z FREEBUSY:20080728T190000Z/20080729T050000Z FREEBUSY:20080728T194500Z/20080728T203000Z FREEBUSY:20080728T210000Z/20080728T220000Z FREEBUSY:20080729T190000Z/20080730T050000Z FREEBUSY:20080729T210000Z/20080729T220000Z FREEBUSY:20080730T190000Z/20080731T050000Z FREEBUSY:20080730T194500Z/20080730T203000Z FREEBUSY:20080730T210000Z/20080730T220000Z FREEBUSY:20080731T190000Z/20080801T050000Z FREEBUSY:20080731T210000Z/20080731T220000Z FREEBUSY:20080801T210000Z/20080801T220000Z FREEBUSY:20080802T193000Z/20080802T213000Z FREEBUSY:20080802T210000Z/20080802T220000Z FREEBUSY:20080803T190000Z/20080804T050000Z FREEBUSY:20080803T210000Z/20080803T220000Z FREEBUSY:20080804T190000Z/20080805T050000Z FREEBUSY:20080804T194500Z/20080804T203000Z FREEBUSY:20080804T210000Z/20080804T220000Z FREEBUSY:20080805T190000Z/20080806T050000Z FREEBUSY:20080805T210000Z/20080805T220000Z FREEBUSY:20080806T190000Z/20080807T050000Z FREEBUSY:20080806T194500Z/20080806T203000Z FREEBUSY:20080806T210000Z/20080806T220000Z FREEBUSY:20080807T190000Z/20080808T050000Z FREEBUSY:20080807T210000Z/20080807T220000Z FREEBUSY:20080808T210000Z/20080808T220000Z FREEBUSY:20080809T210000Z/20080809T220000Z FREEBUSY:20080810T190000Z/20080811T050000Z FREEBUSY:20080810T210000Z/20080810T220000Z FREEBUSY:20080811T190000Z/20080812T050000Z FREEBUSY:20080811T194500Z/20080811T203000Z FREEBUSY:20080811T210000Z/20080811T220000Z FREEBUSY:20080812T190000Z/20080813T050000Z FREEBUSY:20080812T210000Z/20080812T220000Z FREEBUSY:20080813T190000Z/20080814T050000Z FREEBUSY:20080813T194500Z/20080813T203000Z FREEBUSY:20080813T210000Z/20080813T220000Z FREEBUSY:20080814T190000Z/20080815T050000Z FREEBUSY:20080814T210000Z/20080814T220000Z FREEBUSY:20080815T210000Z/20080815T220000Z FREEBUSY:20080816T210000Z/20080816T220000Z FREEBUSY:20080817T190000Z/20080818T050000Z FREEBUSY:20080817T210000Z/20080817T220000Z FREEBUSY:20080818T190000Z/20080819T050000Z FREEBUSY:20080818T194500Z/20080818T203000Z FREEBUSY:20080818T210000Z/20080818T220000Z FREEBUSY:20080819T190000Z/20080820T050000Z FREEBUSY:20080819T210000Z/20080819T220000Z FREEBUSY:20080820T190000Z/20080821T050000Z FREEBUSY:20080820T194500Z/20080820T203000Z FREEBUSY:20080820T210000Z/20080820T220000Z FREEBUSY:20080821T190000Z/20080822T050000Z FREEBUSY:20080821T210000Z/20080821T220000Z FREEBUSY:20080822T210000Z/20080822T220000Z FREEBUSY:20080823T210000Z/20080823T220000Z FREEBUSY:20080824T190000Z/20080825T050000Z FREEBUSY:20080824T210000Z/20080824T220000Z FREEBUSY:20080825T190000Z/20080826T050000Z FREEBUSY:20080825T194500Z/20080825T203000Z FREEBUSY:20080825T210000Z/20080825T220000Z FREEBUSY:20080826T190000Z/20080827T050000Z FREEBUSY:20080826T210000Z/20080826T220000Z FREEBUSY:20080827T190000Z/20080828T050000Z FREEBUSY:20080827T194500Z/20080827T203000Z FREEBUSY:20080827T210000Z/20080827T220000Z FREEBUSY:20080828T190000Z/20080829T050000Z FREEBUSY:20080828T210000Z/20080828T220000Z FREEBUSY:20080829T210000Z/20080829T220000Z FREEBUSY:20080830T210000Z/20080830T220000Z FREEBUSY:20080831T190000Z/20080901T050000Z FREEBUSY:20080831T210000Z/20080831T220000Z FREEBUSY:20080901T190000Z/20080902T050000Z FREEBUSY:20080901T194500Z/20080901T203000Z FREEBUSY:20080901T210000Z/20080901T220000Z FREEBUSY:20080902T190000Z/20080903T050000Z FREEBUSY:20080902T193000Z/20080902T213000Z FREEBUSY:20080902T210000Z/20080902T220000Z FREEBUSY:20080903T190000Z/20080904T050000Z FREEBUSY:20080903T194500Z/20080903T203000Z FREEBUSY:20080903T210000Z/20080903T220000Z FREEBUSY:20080904T190000Z/20080905T050000Z FREEBUSY:20080904T210000Z/20080904T220000Z FREEBUSY:20080905T210000Z/20080905T220000Z FREEBUSY:20080906T210000Z/20080906T220000Z FREEBUSY:20080907T190000Z/20080908T050000Z FREEBUSY:20080907T210000Z/20080907T220000Z FREEBUSY:20080908T190000Z/20080909T050000Z FREEBUSY:20080908T194500Z/20080908T203000Z FREEBUSY:20080908T210000Z/20080908T220000Z FREEBUSY:20080909T190000Z/20080910T050000Z FREEBUSY:20080909T210000Z/20080909T220000Z FREEBUSY:20080910T190000Z/20080911T050000Z FREEBUSY:20080910T194500Z/20080910T203000Z FREEBUSY:20080910T210000Z/20080910T220000Z FREEBUSY:20080911T190000Z/20080912T050000Z FREEBUSY:20080911T210000Z/20080911T220000Z FREEBUSY:20080912T210000Z/20080912T220000Z FREEBUSY:20080913T210000Z/20080913T220000Z FREEBUSY:20080914T190000Z/20080915T050000Z FREEBUSY:20080914T210000Z/20080914T220000Z FREEBUSY:20080915T190000Z/20080916T050000Z FREEBUSY:20080915T194500Z/20080915T203000Z FREEBUSY:20080915T210000Z/20080915T220000Z FREEBUSY:20080916T190000Z/20080917T050000Z FREEBUSY:20080916T210000Z/20080916T220000Z FREEBUSY:20080917T190000Z/20080918T050000Z FREEBUSY:20080917T194500Z/20080917T203000Z FREEBUSY:20080917T210000Z/20080917T220000Z FREEBUSY:20080918T190000Z/20080919T050000Z FREEBUSY:20080918T210000Z/20080918T220000Z FREEBUSY:20080919T210000Z/20080919T220000Z FREEBUSY:20080920T210000Z/20080920T220000Z FREEBUSY:20080921T190000Z/20080922T050000Z FREEBUSY:20080921T210000Z/20080921T220000Z FREEBUSY:20080922T190000Z/20080923T050000Z FREEBUSY:20080922T194500Z/20080922T203000Z FREEBUSY:20080922T210000Z/20080922T220000Z FREEBUSY:20080923T190000Z/20080924T050000Z FREEBUSY:20080923T210000Z/20080923T220000Z FREEBUSY:20080924T190000Z/20080925T050000Z FREEBUSY:20080924T194500Z/20080924T203000Z FREEBUSY:20080924T210000Z/20080924T220000Z FREEBUSY:20080925T190000Z/20080926T050000Z FREEBUSY:20080925T210000Z/20080925T220000Z FREEBUSY:20080926T210000Z/20080926T220000Z FREEBUSY:20080928T180000Z/20080929T040000Z FREEBUSY:20080929T180000Z/20080930T040000Z FREEBUSY:20080929T184500Z/20080929T193000Z FREEBUSY:20080930T180000Z/20081001T040000Z FREEBUSY:20081001T180000Z/20081002T040000Z FREEBUSY:20081001T184500Z/20081001T193000Z FREEBUSY:20081002T180000Z/20081003T040000Z FREEBUSY:20081002T183000Z/20081002T203000Z FREEBUSY:20081005T180000Z/20081006T040000Z FREEBUSY:20081006T180000Z/20081007T040000Z FREEBUSY:20081006T184500Z/20081006T193000Z FREEBUSY:20081007T180000Z/20081008T040000Z FREEBUSY:20081008T180000Z/20081009T040000Z FREEBUSY:20081008T184500Z/20081008T193000Z FREEBUSY:20081009T180000Z/20081010T040000Z FREEBUSY:20081012T180000Z/20081013T040000Z FREEBUSY:20081013T180000Z/20081014T040000Z FREEBUSY:20081013T184500Z/20081013T193000Z FREEBUSY:20081014T180000Z/20081015T040000Z FREEBUSY:20081015T180000Z/20081016T040000Z FREEBUSY:20081015T184500Z/20081015T193000Z FREEBUSY:20081016T180000Z/20081017T040000Z FREEBUSY:20081019T180000Z/20081020T040000Z FREEBUSY:20081020T180000Z/20081021T040000Z FREEBUSY:20081020T184500Z/20081020T193000Z FREEBUSY:20081021T180000Z/20081022T040000Z FREEBUSY:20081022T180000Z/20081023T040000Z FREEBUSY:20081022T184500Z/20081022T193000Z FREEBUSY:20081023T180000Z/20081024T040000Z FREEBUSY:20081026T180000Z/20081027T040000Z FREEBUSY:20081027T180000Z/20081028T040000Z FREEBUSY:20081027T184500Z/20081027T193000Z FREEBUSY:20081028T180000Z/20081029T040000Z FREEBUSY:20081029T180000Z/20081030T040000Z FREEBUSY:20081029T184500Z/20081029T193000Z FREEBUSY:20081030T180000Z/20081031T040000Z FREEBUSY:20081102T180000Z/20081103T040000Z FREEBUSY:20081102T183000Z/20081102T203000Z FREEBUSY:20081103T180000Z/20081104T040000Z FREEBUSY:20081103T184500Z/20081103T193000Z FREEBUSY:20081104T180000Z/20081105T040000Z FREEBUSY:20081105T180000Z/20081106T040000Z FREEBUSY:20081105T184500Z/20081105T193000Z FREEBUSY:20081106T180000Z/20081107T040000Z FREEBUSY:20081109T180000Z/20081110T040000Z FREEBUSY:20081110T180000Z/20081111T040000Z FREEBUSY:20081110T184500Z/20081110T193000Z FREEBUSY:20081111T180000Z/20081112T040000Z FREEBUSY:20081112T110000Z/20081113T110000Z FREEBUSY:20081112T180000Z/20081113T040000Z FREEBUSY:20081112T184500Z/20081112T193000Z FREEBUSY:20081113T180000Z/20081114T040000Z FREEBUSY:20081116T180000Z/20081117T040000Z FREEBUSY:20081117T180000Z/20081118T040000Z FREEBUSY:20081117T184500Z/20081117T193000Z FREEBUSY:20081118T180000Z/20081119T040000Z FREEBUSY:20081119T180000Z/20081120T040000Z FREEBUSY:20081119T184500Z/20081119T193000Z FREEBUSY:20081120T180000Z/20081121T040000Z FREEBUSY:20081121T030000Z/20081121T060000Z FREEBUSY:20081123T180000Z/20081124T040000Z FREEBUSY:20081124T180000Z/20081125T040000Z FREEBUSY:20081124T184500Z/20081124T193000Z FREEBUSY:20081125T180000Z/20081126T040000Z FREEBUSY:20081126T180000Z/20081127T040000Z FREEBUSY:20081126T184500Z/20081126T193000Z FREEBUSY:20081127T180000Z/20081128T040000Z FREEBUSY:20081130T180000Z/20081201T040000Z FREEBUSY:20081201T180000Z/20081202T040000Z FREEBUSY:20081201T184500Z/20081201T193000Z FREEBUSY:20081202T180000Z/20081203T040000Z FREEBUSY:20081202T183000Z/20081202T203000Z FREEBUSY:20081203T180000Z/20081204T040000Z FREEBUSY:20081203T184500Z/20081203T193000Z FREEBUSY:20081204T180000Z/20081205T040000Z FREEBUSY:20081207T180000Z/20081208T040000Z FREEBUSY:20081208T180000Z/20081209T040000Z FREEBUSY:20081208T184500Z/20081208T193000Z FREEBUSY:20081209T180000Z/20081210T040000Z FREEBUSY:20081210T110000Z/20081211T110000Z FREEBUSY:20081210T180000Z/20081211T040000Z FREEBUSY:20081210T184500Z/20081210T193000Z FREEBUSY:20081211T180000Z/20081212T040000Z FREEBUSY:20081214T180000Z/20081215T040000Z FREEBUSY:20081215T180000Z/20081216T040000Z FREEBUSY:20081215T184500Z/20081215T193000Z FREEBUSY:20081216T180000Z/20081217T040000Z FREEBUSY:20081217T180000Z/20081218T040000Z FREEBUSY:20081217T184500Z/20081217T193000Z FREEBUSY:20081218T180000Z/20081219T040000Z FREEBUSY:20081219T030000Z/20081219T060000Z FREEBUSY:20081221T180000Z/20081222T040000Z FREEBUSY:20081222T180000Z/20081223T040000Z FREEBUSY:20081222T184500Z/20081222T193000Z FREEBUSY:20081223T180000Z/20081224T040000Z FREEBUSY:20081224T180000Z/20081225T040000Z FREEBUSY:20081224T184500Z/20081224T193000Z FREEBUSY:20081225T180000Z/20081226T040000Z FREEBUSY:20081228T180000Z/20081229T040000Z FREEBUSY:20081229T180000Z/20081230T040000Z FREEBUSY:20081229T184500Z/20081229T193000Z FREEBUSY:20081230T180000Z/20081231T040000Z FREEBUSY:20081231T180000Z/20090101T040000Z FREEBUSY:20081231T184500Z/20081231T193000Z FREEBUSY:20090101T180000Z/20090102T040000Z FREEBUSY:20090102T183000Z/20090102T203000Z FREEBUSY:20090104T180000Z/20090105T040000Z FREEBUSY:20090105T180000Z/20090106T040000Z FREEBUSY:20090105T184500Z/20090105T193000Z FREEBUSY:20090106T180000Z/20090107T040000Z FREEBUSY:20090107T110000Z/20090108T110000Z FREEBUSY:20090107T180000Z/20090108T040000Z FREEBUSY:20090107T184500Z/20090107T193000Z FREEBUSY:20090108T180000Z/20090109T040000Z FREEBUSY:20090111T180000Z/20090112T040000Z FREEBUSY:20090112T180000Z/20090113T040000Z FREEBUSY:20090112T184500Z/20090112T193000Z FREEBUSY:20090113T180000Z/20090114T040000Z FREEBUSY:20090114T180000Z/20090115T040000Z FREEBUSY:20090114T184500Z/20090114T193000Z FREEBUSY:20090115T180000Z/20090116T040000Z FREEBUSY:20090116T030000Z/20090116T060000Z FREEBUSY:20090118T180000Z/20090119T040000Z FREEBUSY:20090119T180000Z/20090120T040000Z FREEBUSY:20090119T184500Z/20090119T193000Z FREEBUSY:20090120T180000Z/20090121T040000Z FREEBUSY:20090121T180000Z/20090122T040000Z FREEBUSY:20090121T184500Z/20090121T193000Z FREEBUSY:20090122T180000Z/20090123T040000Z FREEBUSY:20090125T180000Z/20090126T040000Z FREEBUSY:20090126T180000Z/20090127T040000Z FREEBUSY:20090126T184500Z/20090126T193000Z FREEBUSY:20090127T180000Z/20090128T040000Z FREEBUSY:20090128T180000Z/20090129T040000Z FREEBUSY:20090128T184500Z/20090128T193000Z FREEBUSY:20090129T180000Z/20090130T040000Z FREEBUSY:20090201T180000Z/20090202T040000Z FREEBUSY:20090202T180000Z/20090203T040000Z FREEBUSY:20090202T183000Z/20090202T203000Z FREEBUSY:20090202T184500Z/20090202T193000Z FREEBUSY:20090203T180000Z/20090204T040000Z FREEBUSY:20090204T180000Z/20090205T040000Z FREEBUSY:20090204T184500Z/20090204T193000Z FREEBUSY:20090205T180000Z/20090206T040000Z FREEBUSY:20090208T180000Z/20090209T040000Z FREEBUSY:20090209T180000Z/20090210T040000Z FREEBUSY:20090209T184500Z/20090209T193000Z FREEBUSY:20090210T180000Z/20090211T040000Z FREEBUSY:20090211T110000Z/20090212T110000Z FREEBUSY:20090211T180000Z/20090212T040000Z FREEBUSY:20090211T184500Z/20090211T193000Z FREEBUSY:20090212T180000Z/20090213T040000Z FREEBUSY:20090215T180000Z/20090216T040000Z FREEBUSY:20090216T180000Z/20090217T040000Z FREEBUSY:20090216T184500Z/20090216T193000Z FREEBUSY:20090217T180000Z/20090218T040000Z FREEBUSY:20090218T180000Z/20090219T040000Z FREEBUSY:20090218T184500Z/20090218T193000Z FREEBUSY:20090219T180000Z/20090220T040000Z FREEBUSY:20090220T030000Z/20090220T060000Z FREEBUSY:20090222T180000Z/20090223T040000Z FREEBUSY:20090223T180000Z/20090224T040000Z FREEBUSY:20090223T184500Z/20090223T193000Z FREEBUSY:20090224T180000Z/20090225T040000Z FREEBUSY:20090225T180000Z/20090226T040000Z FREEBUSY:20090225T184500Z/20090225T193000Z FREEBUSY:20090226T180000Z/20090227T040000Z FREEBUSY:20090301T180000Z/20090302T040000Z FREEBUSY:20090302T180000Z/20090303T040000Z FREEBUSY:20090302T183000Z/20090302T203000Z FREEBUSY:20090302T184500Z/20090302T193000Z FREEBUSY:20090303T180000Z/20090304T040000Z FREEBUSY:20090304T180000Z/20090305T040000Z FREEBUSY:20090304T184500Z/20090304T193000Z FREEBUSY:20090305T180000Z/20090306T040000Z FREEBUSY:20090308T180000Z/20090309T040000Z FREEBUSY:20090309T180000Z/20090310T040000Z FREEBUSY:20090309T184500Z/20090309T193000Z FREEBUSY:20090310T180000Z/20090311T040000Z FREEBUSY:20090311T110000Z/20090312T110000Z FREEBUSY:20090311T180000Z/20090312T040000Z FREEBUSY:20090311T184500Z/20090311T193000Z FREEBUSY:20090312T180000Z/20090313T040000Z FREEBUSY:20090315T180000Z/20090316T040000Z FREEBUSY:20090316T180000Z/20090317T040000Z FREEBUSY:20090316T184500Z/20090316T193000Z FREEBUSY:20090317T180000Z/20090318T040000Z FREEBUSY:20090318T180000Z/20090319T040000Z FREEBUSY:20090318T184500Z/20090318T193000Z FREEBUSY:20090319T180000Z/20090320T040000Z FREEBUSY:20090320T030000Z/20090320T060000Z FREEBUSY:20090322T180000Z/20090323T040000Z FREEBUSY:20090323T180000Z/20090324T040000Z FREEBUSY:20090323T184500Z/20090323T193000Z FREEBUSY:20090324T180000Z/20090325T040000Z FREEBUSY:20090325T180000Z/20090326T040000Z FREEBUSY:20090325T184500Z/20090325T193000Z FREEBUSY:20090326T180000Z/20090327T040000Z FREEBUSY:20090329T180000Z/20090330T040000Z FREEBUSY:20090330T180000Z/20090331T040000Z FREEBUSY:20090330T184500Z/20090330T193000Z FREEBUSY:20090331T180000Z/20090401T040000Z FREEBUSY:20090401T180000Z/20090402T040000Z FREEBUSY:20090401T184500Z/20090401T193000Z FREEBUSY:20090402T180000Z/20090403T040000Z FREEBUSY:20090402T183000Z/20090402T203000Z FREEBUSY:20090405T190000Z/20090406T050000Z FREEBUSY:20090406T190000Z/20090407T050000Z FREEBUSY:20090406T194500Z/20090406T203000Z FREEBUSY:20090407T190000Z/20090408T050000Z FREEBUSY:20090408T120000Z/20090409T120000Z FREEBUSY:20090408T190000Z/20090409T050000Z FREEBUSY:20090408T194500Z/20090408T203000Z FREEBUSY:20090409T190000Z/20090410T050000Z FREEBUSY:20090412T190000Z/20090413T050000Z FREEBUSY:20090413T190000Z/20090414T050000Z FREEBUSY:20090413T194500Z/20090413T203000Z FREEBUSY:20090414T190000Z/20090415T050000Z FREEBUSY:20090415T190000Z/20090416T050000Z FREEBUSY:20090415T194500Z/20090415T203000Z FREEBUSY:20090416T190000Z/20090417T050000Z FREEBUSY:20090417T040000Z/20090417T070000Z FREEBUSY:20090419T190000Z/20090420T050000Z FREEBUSY:20090420T190000Z/20090421T050000Z FREEBUSY:20090420T194500Z/20090420T203000Z FREEBUSY:20090421T190000Z/20090422T050000Z FREEBUSY:20090422T190000Z/20090423T050000Z FREEBUSY:20090422T194500Z/20090422T203000Z FREEBUSY:20090423T190000Z/20090424T050000Z FREEBUSY:20090426T190000Z/20090427T050000Z FREEBUSY:20090427T190000Z/20090428T050000Z FREEBUSY:20090427T194500Z/20090427T203000Z FREEBUSY:20090428T190000Z/20090429T050000Z FREEBUSY:20090429T190000Z/20090430T050000Z FREEBUSY:20090429T194500Z/20090429T203000Z FREEBUSY:20090430T190000Z/20090501T050000Z FREEBUSY:20090502T193000Z/20090502T213000Z FREEBUSY:20090503T190000Z/20090504T050000Z FREEBUSY:20090504T190000Z/20090505T050000Z FREEBUSY:20090504T194500Z/20090504T203000Z FREEBUSY:20090505T190000Z/20090506T050000Z FREEBUSY:20090506T120000Z/20090507T120000Z FREEBUSY:20090506T190000Z/20090507T050000Z FREEBUSY:20090506T194500Z/20090506T203000Z FREEBUSY:20090507T190000Z/20090508T050000Z FREEBUSY:20090510T190000Z/20090511T050000Z FREEBUSY:20090511T190000Z/20090512T050000Z FREEBUSY:20090511T194500Z/20090511T203000Z FREEBUSY:20090512T190000Z/20090513T050000Z FREEBUSY:20090513T190000Z/20090514T050000Z FREEBUSY:20090513T194500Z/20090513T203000Z FREEBUSY:20090514T190000Z/20090515T050000Z FREEBUSY:20090515T040000Z/20090515T070000Z FREEBUSY:20090517T190000Z/20090518T050000Z FREEBUSY:20090518T190000Z/20090519T050000Z FREEBUSY:20090518T194500Z/20090518T203000Z FREEBUSY:20090519T190000Z/20090520T050000Z FREEBUSY:20090520T190000Z/20090521T050000Z FREEBUSY:20090520T194500Z/20090520T203000Z FREEBUSY:20090521T190000Z/20090522T050000Z FREEBUSY:20090524T190000Z/20090525T050000Z FREEBUSY:20090525T190000Z/20090526T050000Z FREEBUSY:20090525T194500Z/20090525T203000Z FREEBUSY:20090526T190000Z/20090527T050000Z FREEBUSY:20090527T190000Z/20090528T050000Z FREEBUSY:20090527T194500Z/20090527T203000Z FREEBUSY:20090528T190000Z/20090529T050000Z FREEBUSY:20090531T190000Z/20090601T050000Z FREEBUSY:20090601T190000Z/20090602T050000Z FREEBUSY:20090601T194500Z/20090601T203000Z FREEBUSY:20090602T190000Z/20090603T050000Z FREEBUSY:20090602T193000Z/20090602T213000Z FREEBUSY:20090603T190000Z/20090604T050000Z FREEBUSY:20090603T194500Z/20090603T203000Z FREEBUSY:20090604T190000Z/20090605T050000Z FREEBUSY:20090607T190000Z/20090608T050000Z FREEBUSY:20090608T190000Z/20090609T050000Z FREEBUSY:20090608T194500Z/20090608T203000Z FREEBUSY:20090609T190000Z/20090610T050000Z FREEBUSY:20090610T120000Z/20090611T120000Z FREEBUSY:20090610T190000Z/20090611T050000Z FREEBUSY:20090610T194500Z/20090610T203000Z FREEBUSY:20090611T190000Z/20090612T050000Z FREEBUSY:20090614T190000Z/20090615T050000Z FREEBUSY:20090615T190000Z/20090616T050000Z FREEBUSY:20090615T194500Z/20090615T203000Z FREEBUSY:20090616T190000Z/20090617T050000Z FREEBUSY:20090617T190000Z/20090618T050000Z FREEBUSY:20090617T194500Z/20090617T203000Z FREEBUSY:20090618T190000Z/20090619T050000Z FREEBUSY:20090619T040000Z/20090619T070000Z FREEBUSY:20090621T190000Z/20090622T050000Z FREEBUSY:20090622T190000Z/20090623T050000Z FREEBUSY:20090622T194500Z/20090622T203000Z FREEBUSY:20090623T190000Z/20090624T050000Z FREEBUSY:20090624T190000Z/20090625T050000Z FREEBUSY:20090624T194500Z/20090624T203000Z FREEBUSY:20090625T190000Z/20090626T050000Z FREEBUSY:20090628T190000Z/20090629T050000Z FREEBUSY:20090629T190000Z/20090630T050000Z FREEBUSY:20090629T194500Z/20090629T203000Z FREEBUSY:20090630T190000Z/20090701T050000Z FREEBUSY:20090701T190000Z/20090702T050000Z FREEBUSY:20090701T194500Z/20090701T203000Z FREEBUSY:20090702T190000Z/20090703T050000Z FREEBUSY:20090702T193000Z/20090702T213000Z FREEBUSY:20090705T190000Z/20090706T050000Z FREEBUSY:20090706T190000Z/20090707T050000Z FREEBUSY:20090706T194500Z/20090706T203000Z FREEBUSY:20090707T190000Z/20090708T050000Z FREEBUSY:20090708T120000Z/20090709T120000Z FREEBUSY:20090708T190000Z/20090709T050000Z FREEBUSY:20090708T194500Z/20090708T203000Z FREEBUSY:20090709T190000Z/20090710T050000Z FREEBUSY:20090712T190000Z/20090713T050000Z FREEBUSY:20090713T190000Z/20090714T050000Z FREEBUSY:20090713T194500Z/20090713T203000Z FREEBUSY:20090714T190000Z/20090715T050000Z FREEBUSY:20090715T190000Z/20090716T050000Z FREEBUSY:20090715T194500Z/20090715T203000Z FREEBUSY:20090716T190000Z/20090717T050000Z FREEBUSY:20090717T040000Z/20090717T070000Z FREEBUSY:20090719T190000Z/20090720T050000Z FREEBUSY:20090720T190000Z/20090721T050000Z FREEBUSY:20090720T194500Z/20090720T203000Z FREEBUSY:20090721T190000Z/20090722T050000Z FREEBUSY:20090722T190000Z/20090723T050000Z FREEBUSY:20090722T194500Z/20090722T203000Z FREEBUSY:20090723T190000Z/20090724T050000Z FREEBUSY:20090726T190000Z/20090727T050000Z FREEBUSY:20090727T190000Z/20090728T050000Z FREEBUSY:20090727T194500Z/20090727T203000Z FREEBUSY:20090728T190000Z/20090729T050000Z FREEBUSY:20090729T190000Z/20090730T050000Z FREEBUSY:20090729T194500Z/20090729T203000Z FREEBUSY:20090730T190000Z/20090731T050000Z FREEBUSY:20090802T190000Z/20090803T050000Z FREEBUSY:20090802T193000Z/20090802T213000Z FREEBUSY:20090803T190000Z/20090804T050000Z FREEBUSY:20090803T194500Z/20090803T203000Z FREEBUSY:20090804T190000Z/20090805T050000Z FREEBUSY:20090805T190000Z/20090806T050000Z FREEBUSY:20090805T194500Z/20090805T203000Z FREEBUSY:20090806T190000Z/20090807T050000Z FREEBUSY:20090809T190000Z/20090810T050000Z FREEBUSY:20090810T190000Z/20090811T050000Z FREEBUSY:20090810T194500Z/20090810T203000Z FREEBUSY:20090811T190000Z/20090812T050000Z FREEBUSY:20090812T120000Z/20090813T120000Z FREEBUSY:20090812T190000Z/20090813T050000Z FREEBUSY:20090812T194500Z/20090812T203000Z FREEBUSY:20090813T190000Z/20090814T050000Z FREEBUSY:20090816T190000Z/20090817T050000Z FREEBUSY:20090817T190000Z/20090818T050000Z FREEBUSY:20090817T194500Z/20090817T203000Z FREEBUSY:20090818T190000Z/20090819T050000Z FREEBUSY:20090819T190000Z/20090820T050000Z FREEBUSY:20090819T194500Z/20090819T203000Z FREEBUSY:20090820T190000Z/20090821T050000Z FREEBUSY:20090821T040000Z/20090821T070000Z FREEBUSY:20090823T190000Z/20090824T050000Z FREEBUSY:20090824T190000Z/20090825T050000Z FREEBUSY:20090824T194500Z/20090824T203000Z FREEBUSY:20090825T190000Z/20090826T050000Z FREEBUSY:20090826T190000Z/20090827T050000Z FREEBUSY:20090826T194500Z/20090826T203000Z FREEBUSY:20090827T190000Z/20090828T050000Z FREEBUSY:20090830T190000Z/20090831T050000Z FREEBUSY:20090831T190000Z/20090901T050000Z FREEBUSY:20090831T194500Z/20090831T203000Z FREEBUSY:20090901T190000Z/20090902T050000Z FREEBUSY:20090902T190000Z/20090903T050000Z FREEBUSY:20090902T193000Z/20090902T213000Z FREEBUSY:20090902T194500Z/20090902T203000Z FREEBUSY:20090903T190000Z/20090904T050000Z FREEBUSY:20090906T190000Z/20090907T050000Z FREEBUSY:20090907T190000Z/20090908T050000Z FREEBUSY:20090907T194500Z/20090907T203000Z FREEBUSY:20090908T190000Z/20090909T050000Z FREEBUSY:20090909T120000Z/20090910T120000Z FREEBUSY:20090909T190000Z/20090910T050000Z FREEBUSY:20090909T194500Z/20090909T203000Z FREEBUSY:20090910T190000Z/20090911T050000Z FREEBUSY:20090913T190000Z/20090914T050000Z FREEBUSY:20090914T190000Z/20090915T050000Z FREEBUSY:20090914T194500Z/20090914T203000Z FREEBUSY:20090915T190000Z/20090916T050000Z FREEBUSY:20090916T190000Z/20090917T050000Z FREEBUSY:20090916T194500Z/20090916T203000Z FREEBUSY:20090917T190000Z/20090918T050000Z FREEBUSY:20090918T040000Z/20090918T070000Z FREEBUSY:20090920T190000Z/20090921T050000Z FREEBUSY:20090921T190000Z/20090922T050000Z FREEBUSY:20090921T194500Z/20090921T203000Z FREEBUSY:20090922T190000Z/20090923T050000Z FREEBUSY:20090923T190000Z/20090924T050000Z FREEBUSY:20090923T194500Z/20090923T203000Z FREEBUSY:20090924T190000Z/20090925T050000Z FREEBUSY:20090927T180000Z/20090928T040000Z FREEBUSY:20090928T180000Z/20090929T040000Z FREEBUSY:20090928T184500Z/20090928T193000Z FREEBUSY:20090929T180000Z/20090930T040000Z FREEBUSY:20090930T180000Z/20091001T040000Z FREEBUSY:20090930T184500Z/20090930T193000Z FREEBUSY:20091001T180000Z/20091002T040000Z FREEBUSY:20091002T183000Z/20091002T203000Z FREEBUSY:20091004T180000Z/20091005T040000Z FREEBUSY:20091005T120000Z/20091005T130000Z FREEBUSY:20091005T180000Z/20091006T040000Z FREEBUSY:20091005T184500Z/20091005T193000Z FREEBUSY:20091006T180000Z/20091007T040000Z FREEBUSY:20091007T110000Z/20091008T110000Z FREEBUSY:20091007T180000Z/20091008T040000Z FREEBUSY:20091007T184500Z/20091007T193000Z FREEBUSY:20091008T180000Z/20091009T040000Z FREEBUSY:20091011T180000Z/20091012T040000Z FREEBUSY:20091012T180000Z/20091013T040000Z FREEBUSY:20091012T184500Z/20091012T193000Z FREEBUSY:20091013T180000Z/20091014T040000Z FREEBUSY:20091014T180000Z/20091015T040000Z FREEBUSY:20091014T184500Z/20091014T193000Z FREEBUSY:20091015T180000Z/20091016T040000Z FREEBUSY:20091016T030000Z/20091016T060000Z FREEBUSY:20091018T180000Z/20091019T040000Z FREEBUSY:20091019T180000Z/20091020T040000Z FREEBUSY:20091019T184500Z/20091019T193000Z FREEBUSY:20091020T180000Z/20091021T040000Z FREEBUSY:20091021T180000Z/20091022T040000Z FREEBUSY:20091021T184500Z/20091021T193000Z FREEBUSY:20091022T180000Z/20091023T040000Z FREEBUSY:20091025T180000Z/20091026T040000Z FREEBUSY:20091026T180000Z/20091027T040000Z FREEBUSY:20091026T184500Z/20091026T193000Z FREEBUSY:20091027T180000Z/20091028T040000Z FREEBUSY:20091028T180000Z/20091029T040000Z FREEBUSY:20091028T184500Z/20091028T193000Z FREEBUSY:20091029T180000Z/20091030T040000Z FREEBUSY:20091101T180000Z/20091102T040000Z FREEBUSY:20091102T180000Z/20091103T040000Z FREEBUSY:20091102T183000Z/20091102T203000Z FREEBUSY:20091102T184500Z/20091102T193000Z FREEBUSY:20091103T180000Z/20091104T040000Z FREEBUSY:20091104T180000Z/20091105T040000Z FREEBUSY:20091104T184500Z/20091104T193000Z FREEBUSY:20091105T180000Z/20091106T040000Z FREEBUSY:20091108T180000Z/20091109T040000Z FREEBUSY:20091109T180000Z/20091110T040000Z FREEBUSY:20091109T184500Z/20091109T193000Z FREEBUSY:20091110T180000Z/20091111T040000Z FREEBUSY:20091111T110000Z/20091112T110000Z FREEBUSY:20091111T180000Z/20091112T040000Z FREEBUSY:20091111T184500Z/20091111T193000Z FREEBUSY:20091112T180000Z/20091113T040000Z FREEBUSY:20091115T180000Z/20091116T040000Z FREEBUSY:20091116T180000Z/20091117T040000Z FREEBUSY:20091116T184500Z/20091116T193000Z FREEBUSY:20091117T180000Z/20091118T040000Z FREEBUSY:20091118T180000Z/20091119T040000Z FREEBUSY:20091118T184500Z/20091118T193000Z FREEBUSY:20091119T180000Z/20091120T040000Z FREEBUSY:20091120T030000Z/20091120T060000Z FREEBUSY:20091122T180000Z/20091123T040000Z FREEBUSY:20091123T180000Z/20091124T040000Z FREEBUSY:20091123T184500Z/20091123T193000Z FREEBUSY:20091124T180000Z/20091125T040000Z FREEBUSY:20091125T180000Z/20091126T040000Z FREEBUSY:20091125T184500Z/20091125T193000Z FREEBUSY:20091126T180000Z/20091127T040000Z FREEBUSY:20091129T180000Z/20091130T040000Z FREEBUSY:20091130T180000Z/20091201T040000Z FREEBUSY:20091130T184500Z/20091130T193000Z FREEBUSY:20091201T180000Z/20091202T040000Z FREEBUSY:20091202T180000Z/20091203T040000Z FREEBUSY:20091202T183000Z/20091202T203000Z FREEBUSY:20091202T184500Z/20091202T193000Z FREEBUSY:20091203T180000Z/20091204T040000Z FREEBUSY:20091206T180000Z/20091207T040000Z FREEBUSY:20091207T180000Z/20091208T040000Z FREEBUSY:20091207T184500Z/20091207T193000Z FREEBUSY:20091208T180000Z/20091209T040000Z FREEBUSY:20091209T110000Z/20091210T110000Z FREEBUSY:20091209T180000Z/20091210T040000Z FREEBUSY:20091209T184500Z/20091209T193000Z FREEBUSY:20091210T180000Z/20091211T040000Z FREEBUSY:20091213T180000Z/20091214T040000Z FREEBUSY:20091214T180000Z/20091215T040000Z FREEBUSY:20091214T184500Z/20091214T193000Z FREEBUSY:20091215T180000Z/20091216T040000Z FREEBUSY:20091216T180000Z/20091217T040000Z FREEBUSY:20091216T184500Z/20091216T193000Z FREEBUSY:20091217T180000Z/20091218T040000Z FREEBUSY:20091218T030000Z/20091218T060000Z FREEBUSY:20091220T180000Z/20091221T040000Z FREEBUSY:20091221T180000Z/20091222T040000Z FREEBUSY:20091221T184500Z/20091221T193000Z FREEBUSY:20091222T180000Z/20091223T040000Z FREEBUSY:20091223T180000Z/20091224T040000Z FREEBUSY:20091223T184500Z/20091223T193000Z FREEBUSY:20091224T180000Z/20091225T040000Z FREEBUSY:20091227T180000Z/20091228T040000Z FREEBUSY:20091228T180000Z/20091229T040000Z FREEBUSY:20091228T184500Z/20091228T193000Z FREEBUSY:20091229T180000Z/20091230T040000Z FREEBUSY:20091230T180000Z/20091231T040000Z FREEBUSY:20091230T184500Z/20091230T193000Z FREEBUSY:20091231T180000Z/20100101T040000Z FREEBUSY:20100102T183000Z/20100102T203000Z FREEBUSY:20100103T180000Z/20100104T040000Z FREEBUSY:20100104T180000Z/20100105T040000Z FREEBUSY:20100104T184500Z/20100104T193000Z FREEBUSY:20100105T180000Z/20100106T040000Z FREEBUSY:20100106T110000Z/20100107T110000Z FREEBUSY:20100106T180000Z/20100107T040000Z FREEBUSY:20100106T184500Z/20100106T193000Z FREEBUSY:20100107T180000Z/20100108T040000Z FREEBUSY:20100110T180000Z/20100111T040000Z FREEBUSY:20100111T180000Z/20100112T040000Z FREEBUSY:20100111T184500Z/20100111T193000Z FREEBUSY:20100112T180000Z/20100113T040000Z FREEBUSY:20100113T180000Z/20100114T040000Z FREEBUSY:20100113T184500Z/20100113T193000Z FREEBUSY:20100114T180000Z/20100115T040000Z FREEBUSY:20100115T030000Z/20100115T060000Z FREEBUSY:20100117T180000Z/20100118T040000Z FREEBUSY:20100118T180000Z/20100119T040000Z FREEBUSY:20100118T184500Z/20100118T193000Z FREEBUSY:20100119T180000Z/20100120T040000Z FREEBUSY:20100120T180000Z/20100121T040000Z FREEBUSY:20100120T184500Z/20100120T193000Z FREEBUSY:20100121T180000Z/20100122T040000Z FREEBUSY:20100124T180000Z/20100125T040000Z FREEBUSY:20100125T180000Z/20100126T040000Z FREEBUSY:20100125T184500Z/20100125T193000Z FREEBUSY:20100126T180000Z/20100127T040000Z FREEBUSY:20100127T180000Z/20100128T040000Z FREEBUSY:20100127T184500Z/20100127T193000Z FREEBUSY:20100128T180000Z/20100129T040000Z FREEBUSY:20100131T180000Z/20100201T040000Z FREEBUSY:20100201T180000Z/20100202T040000Z FREEBUSY:20100201T184500Z/20100201T193000Z FREEBUSY:20100202T180000Z/20100203T040000Z FREEBUSY:20100202T183000Z/20100202T203000Z FREEBUSY:20100203T180000Z/20100204T040000Z FREEBUSY:20100203T184500Z/20100203T193000Z FREEBUSY:20100204T180000Z/20100205T040000Z FREEBUSY:20100207T180000Z/20100208T040000Z FREEBUSY:20100208T180000Z/20100209T040000Z FREEBUSY:20100208T184500Z/20100208T193000Z FREEBUSY:20100209T180000Z/20100210T040000Z FREEBUSY:20100210T110000Z/20100211T110000Z FREEBUSY:20100210T180000Z/20100211T040000Z FREEBUSY:20100210T184500Z/20100210T193000Z FREEBUSY:20100211T180000Z/20100212T040000Z FREEBUSY:20100214T180000Z/20100215T040000Z FREEBUSY:20100215T180000Z/20100216T040000Z FREEBUSY:20100215T184500Z/20100215T193000Z FREEBUSY:20100216T180000Z/20100217T040000Z FREEBUSY:20100217T180000Z/20100218T040000Z FREEBUSY:20100217T184500Z/20100217T193000Z FREEBUSY:20100218T180000Z/20100219T040000Z FREEBUSY:20100219T030000Z/20100219T060000Z FREEBUSY:20100221T180000Z/20100222T040000Z FREEBUSY:20100222T180000Z/20100223T040000Z FREEBUSY:20100222T184500Z/20100222T193000Z FREEBUSY:20100223T180000Z/20100224T040000Z FREEBUSY:20100224T180000Z/20100225T040000Z FREEBUSY:20100224T184500Z/20100224T193000Z FREEBUSY:20100225T180000Z/20100226T040000Z FREEBUSY:20100228T180000Z/20100301T040000Z FREEBUSY:20100301T180000Z/20100302T040000Z FREEBUSY:20100301T184500Z/20100301T193000Z FREEBUSY:20100302T180000Z/20100303T040000Z FREEBUSY:20100302T183000Z/20100302T203000Z FREEBUSY:20100303T180000Z/20100304T040000Z FREEBUSY:20100303T184500Z/20100303T193000Z FREEBUSY:20100304T180000Z/20100305T040000Z FREEBUSY:20100307T180000Z/20100308T040000Z FREEBUSY:20100308T180000Z/20100309T040000Z FREEBUSY:20100308T184500Z/20100308T193000Z FREEBUSY:20100309T180000Z/20100310T040000Z FREEBUSY:20100310T110000Z/20100311T110000Z FREEBUSY:20100310T180000Z/20100311T040000Z FREEBUSY:20100310T184500Z/20100310T193000Z FREEBUSY:20100311T180000Z/20100312T040000Z FREEBUSY:20100314T180000Z/20100315T040000Z FREEBUSY:20100315T180000Z/20100316T040000Z FREEBUSY:20100315T184500Z/20100315T193000Z FREEBUSY:20100316T180000Z/20100317T040000Z FREEBUSY:20100317T180000Z/20100318T040000Z FREEBUSY:20100317T184500Z/20100317T193000Z FREEBUSY:20100318T180000Z/20100319T040000Z FREEBUSY:20100319T030000Z/20100319T060000Z FREEBUSY:20100321T180000Z/20100322T040000Z FREEBUSY:20100322T180000Z/20100323T040000Z FREEBUSY:20100322T184500Z/20100322T193000Z FREEBUSY:20100323T180000Z/20100324T040000Z FREEBUSY:20100324T180000Z/20100325T040000Z FREEBUSY:20100324T184500Z/20100324T193000Z FREEBUSY:20100325T180000Z/20100326T040000Z FREEBUSY:20100328T180000Z/20100329T040000Z FREEBUSY:20100329T180000Z/20100330T040000Z FREEBUSY:20100329T184500Z/20100329T193000Z FREEBUSY:20100330T180000Z/20100331T040000Z FREEBUSY:20100331T180000Z/20100401T040000Z FREEBUSY:20100331T184500Z/20100331T193000Z FREEBUSY:20100401T180000Z/20100402T040000Z FREEBUSY:20100402T183000Z/20100402T203000Z FREEBUSY:20100404T190000Z/20100405T050000Z FREEBUSY:20100405T190000Z/20100406T050000Z FREEBUSY:20100405T194500Z/20100405T203000Z FREEBUSY:20100406T190000Z/20100407T050000Z FREEBUSY:20100407T120000Z/20100408T120000Z FREEBUSY:20100407T190000Z/20100408T050000Z FREEBUSY:20100407T194500Z/20100407T203000Z FREEBUSY:20100408T190000Z/20100409T050000Z FREEBUSY:20100411T190000Z/20100412T050000Z FREEBUSY:20100412T190000Z/20100413T050000Z FREEBUSY:20100412T194500Z/20100412T203000Z FREEBUSY:20100413T190000Z/20100414T050000Z FREEBUSY:20100414T190000Z/20100415T050000Z FREEBUSY:20100414T194500Z/20100414T203000Z FREEBUSY:20100415T190000Z/20100416T050000Z FREEBUSY:20100416T040000Z/20100416T070000Z FREEBUSY:20100418T190000Z/20100419T050000Z FREEBUSY:20100419T190000Z/20100420T050000Z FREEBUSY:20100419T194500Z/20100419T203000Z FREEBUSY:20100420T190000Z/20100421T050000Z FREEBUSY:20100421T190000Z/20100422T050000Z FREEBUSY:20100421T194500Z/20100421T203000Z FREEBUSY:20100422T190000Z/20100423T050000Z FREEBUSY:20100425T190000Z/20100426T050000Z FREEBUSY:20100426T190000Z/20100427T050000Z FREEBUSY:20100426T194500Z/20100426T203000Z FREEBUSY:20100427T190000Z/20100428T050000Z FREEBUSY:20100428T190000Z/20100429T050000Z FREEBUSY:20100428T194500Z/20100428T203000Z FREEBUSY:20100429T190000Z/20100430T050000Z FREEBUSY:20100502T190000Z/20100503T050000Z FREEBUSY:20100502T193000Z/20100502T213000Z FREEBUSY:20100503T190000Z/20100504T050000Z FREEBUSY:20100503T194500Z/20100503T203000Z FREEBUSY:20100504T190000Z/20100505T050000Z FREEBUSY:20100505T190000Z/20100506T050000Z FREEBUSY:20100505T194500Z/20100505T203000Z FREEBUSY:20100506T190000Z/20100507T050000Z FREEBUSY:20100509T190000Z/20100510T050000Z FREEBUSY:20100510T190000Z/20100511T050000Z FREEBUSY:20100510T194500Z/20100510T203000Z FREEBUSY:20100511T190000Z/20100512T050000Z FREEBUSY:20100512T120000Z/20100513T120000Z FREEBUSY:20100512T190000Z/20100513T050000Z FREEBUSY:20100512T194500Z/20100512T203000Z FREEBUSY:20100513T190000Z/20100514T050000Z FREEBUSY:20100516T190000Z/20100517T050000Z FREEBUSY:20100517T190000Z/20100518T050000Z FREEBUSY:20100517T194500Z/20100517T203000Z FREEBUSY:20100518T190000Z/20100519T050000Z FREEBUSY:20100519T190000Z/20100520T050000Z FREEBUSY:20100519T194500Z/20100519T203000Z FREEBUSY:20100520T190000Z/20100521T050000Z FREEBUSY:20100521T040000Z/20100521T070000Z FREEBUSY:20100523T190000Z/20100524T050000Z FREEBUSY:20100524T190000Z/20100525T050000Z FREEBUSY:20100524T194500Z/20100524T203000Z FREEBUSY:20100525T190000Z/20100526T050000Z FREEBUSY:20100526T190000Z/20100527T050000Z FREEBUSY:20100526T194500Z/20100526T203000Z FREEBUSY:20100527T190000Z/20100528T050000Z FREEBUSY:20100530T190000Z/20100531T050000Z FREEBUSY:20100531T190000Z/20100601T050000Z FREEBUSY:20100531T194500Z/20100531T203000Z FREEBUSY:20100601T190000Z/20100602T050000Z FREEBUSY:20100602T190000Z/20100603T050000Z FREEBUSY:20100602T193000Z/20100602T213000Z FREEBUSY:20100602T194500Z/20100602T203000Z FREEBUSY:20100603T190000Z/20100604T050000Z FREEBUSY:20100606T190000Z/20100607T050000Z FREEBUSY:20100607T190000Z/20100608T050000Z FREEBUSY:20100607T194500Z/20100607T203000Z FREEBUSY:20100608T190000Z/20100609T050000Z FREEBUSY:20100609T120000Z/20100610T120000Z FREEBUSY:20100609T190000Z/20100610T050000Z FREEBUSY:20100609T194500Z/20100609T203000Z FREEBUSY:20100610T190000Z/20100611T050000Z FREEBUSY:20100613T190000Z/20100614T050000Z FREEBUSY:20100614T190000Z/20100615T050000Z FREEBUSY:20100614T194500Z/20100614T203000Z FREEBUSY:20100615T190000Z/20100616T050000Z FREEBUSY:20100616T190000Z/20100617T050000Z FREEBUSY:20100616T194500Z/20100616T203000Z FREEBUSY:20100617T190000Z/20100618T050000Z FREEBUSY:20100618T040000Z/20100618T070000Z FREEBUSY:20100620T190000Z/20100621T050000Z FREEBUSY:20100621T190000Z/20100622T050000Z FREEBUSY:20100621T194500Z/20100621T203000Z FREEBUSY:20100622T190000Z/20100623T050000Z FREEBUSY:20100623T190000Z/20100624T050000Z FREEBUSY:20100623T194500Z/20100623T203000Z FREEBUSY:20100624T190000Z/20100625T050000Z FREEBUSY:20100627T190000Z/20100628T050000Z FREEBUSY:20100628T190000Z/20100629T050000Z FREEBUSY:20100628T194500Z/20100628T203000Z FREEBUSY:20100629T190000Z/20100630T050000Z FREEBUSY:20100630T190000Z/20100701T050000Z FREEBUSY:20100630T194500Z/20100630T203000Z FREEBUSY:20100701T190000Z/20100702T050000Z FREEBUSY:20100702T193000Z/20100702T213000Z FREEBUSY:20100704T190000Z/20100705T050000Z FREEBUSY:20100705T190000Z/20100706T050000Z FREEBUSY:20100705T194500Z/20100705T203000Z FREEBUSY:20100706T190000Z/20100707T050000Z FREEBUSY:20100707T120000Z/20100708T120000Z FREEBUSY:20100707T190000Z/20100708T050000Z FREEBUSY:20100707T194500Z/20100707T203000Z FREEBUSY:20100708T190000Z/20100709T050000Z FREEBUSY:20100711T190000Z/20100712T050000Z FREEBUSY:20100712T190000Z/20100713T050000Z FREEBUSY:20100712T194500Z/20100712T203000Z FREEBUSY:20100713T190000Z/20100714T050000Z FREEBUSY:20100714T190000Z/20100715T050000Z FREEBUSY:20100714T194500Z/20100714T203000Z FREEBUSY:20100715T190000Z/20100716T050000Z FREEBUSY:20100716T040000Z/20100716T070000Z FREEBUSY:20100718T190000Z/20100719T050000Z FREEBUSY:20100719T190000Z/20100720T050000Z FREEBUSY:20100719T194500Z/20100719T203000Z FREEBUSY:20100720T190000Z/20100721T050000Z FREEBUSY:20100721T190000Z/20100722T050000Z FREEBUSY:20100721T194500Z/20100721T203000Z FREEBUSY:20100722T190000Z/20100723T050000Z FREEBUSY:20100725T190000Z/20100726T050000Z FREEBUSY:20100726T190000Z/20100727T050000Z FREEBUSY:20100726T194500Z/20100726T203000Z FREEBUSY:20100727T190000Z/20100728T050000Z FREEBUSY:20100728T190000Z/20100729T050000Z FREEBUSY:20100728T194500Z/20100728T203000Z FREEBUSY:20100729T190000Z/20100730T050000Z FREEBUSY:20100801T190000Z/20100802T050000Z FREEBUSY:20100802T190000Z/20100803T050000Z FREEBUSY:20100802T193000Z/20100802T213000Z FREEBUSY:20100802T194500Z/20100802T203000Z FREEBUSY:20100803T190000Z/20100804T050000Z FREEBUSY:20100804T190000Z/20100805T050000Z FREEBUSY:20100804T194500Z/20100804T203000Z FREEBUSY:20100805T190000Z/20100806T050000Z FREEBUSY:20100808T190000Z/20100809T050000Z FREEBUSY:20100809T190000Z/20100810T050000Z FREEBUSY:20100809T194500Z/20100809T203000Z FREEBUSY:20100810T190000Z/20100811T050000Z FREEBUSY:20100811T120000Z/20100812T120000Z FREEBUSY:20100811T190000Z/20100812T050000Z FREEBUSY:20100811T194500Z/20100811T203000Z FREEBUSY:20100812T190000Z/20100813T050000Z FREEBUSY:20100815T190000Z/20100816T050000Z FREEBUSY:20100816T190000Z/20100817T050000Z FREEBUSY:20100816T194500Z/20100816T203000Z FREEBUSY:20100817T190000Z/20100818T050000Z FREEBUSY:20100818T190000Z/20100819T050000Z FREEBUSY:20100818T194500Z/20100818T203000Z FREEBUSY:20100819T190000Z/20100820T050000Z FREEBUSY:20100820T040000Z/20100820T070000Z FREEBUSY:20100822T190000Z/20100823T050000Z FREEBUSY:20100823T190000Z/20100824T050000Z FREEBUSY:20100823T194500Z/20100823T203000Z FREEBUSY:20100824T190000Z/20100825T050000Z FREEBUSY:20100825T190000Z/20100826T050000Z FREEBUSY:20100825T194500Z/20100825T203000Z FREEBUSY:20100826T190000Z/20100827T050000Z FREEBUSY:20100829T190000Z/20100830T050000Z FREEBUSY:20100830T190000Z/20100831T050000Z FREEBUSY:20100830T194500Z/20100830T203000Z FREEBUSY:20100831T190000Z/20100901T050000Z FREEBUSY:20100901T190000Z/20100902T050000Z FREEBUSY:20100901T194500Z/20100901T203000Z FREEBUSY:20100902T190000Z/20100903T050000Z FREEBUSY:20100902T193000Z/20100902T213000Z FREEBUSY:20100905T190000Z/20100906T050000Z FREEBUSY:20100906T190000Z/20100907T050000Z FREEBUSY:20100906T194500Z/20100906T203000Z FREEBUSY:20100907T190000Z/20100908T050000Z FREEBUSY:20100908T120000Z/20100909T120000Z FREEBUSY:20100908T190000Z/20100909T050000Z FREEBUSY:20100908T194500Z/20100908T203000Z FREEBUSY:20100909T190000Z/20100910T050000Z FREEBUSY:20100912T190000Z/20100913T050000Z FREEBUSY:20100913T190000Z/20100914T050000Z FREEBUSY:20100913T194500Z/20100913T203000Z FREEBUSY:20100914T190000Z/20100915T050000Z FREEBUSY:20100915T190000Z/20100916T050000Z FREEBUSY:20100915T194500Z/20100915T203000Z FREEBUSY:20100916T190000Z/20100917T050000Z FREEBUSY:20100917T040000Z/20100917T070000Z FREEBUSY:20100919T190000Z/20100920T050000Z FREEBUSY:20100920T190000Z/20100921T050000Z FREEBUSY:20100920T194500Z/20100920T203000Z FREEBUSY:20100921T190000Z/20100922T050000Z FREEBUSY:20100922T190000Z/20100923T050000Z FREEBUSY:20100922T194500Z/20100922T203000Z FREEBUSY:20100923T190000Z/20100924T050000Z FREEBUSY:20100926T180000Z/20100927T040000Z FREEBUSY:20100927T180000Z/20100928T040000Z FREEBUSY:20100927T184500Z/20100927T193000Z FREEBUSY:20100928T180000Z/20100929T040000Z FREEBUSY:20100929T180000Z/20100930T040000Z FREEBUSY:20100929T184500Z/20100929T193000Z FREEBUSY:20100930T180000Z/20101001T040000Z FREEBUSY:20101002T183000Z/20101002T203000Z FREEBUSY:20101003T180000Z/20101004T040000Z FREEBUSY:20101004T180000Z/20101005T040000Z FREEBUSY:20101004T184500Z/20101004T193000Z FREEBUSY:20101005T180000Z/20101006T040000Z FREEBUSY:20101006T110000Z/20101007T110000Z FREEBUSY:20101006T180000Z/20101007T040000Z FREEBUSY:20101006T184500Z/20101006T193000Z FREEBUSY:20101007T180000Z/20101008T040000Z FREEBUSY:20101010T180000Z/20101011T040000Z FREEBUSY:20101011T180000Z/20101012T040000Z FREEBUSY:20101011T184500Z/20101011T193000Z FREEBUSY:20101012T180000Z/20101013T040000Z FREEBUSY:20101013T180000Z/20101014T040000Z FREEBUSY:20101013T184500Z/20101013T193000Z FREEBUSY:20101014T180000Z/20101015T040000Z FREEBUSY:20101015T030000Z/20101015T060000Z FREEBUSY:20101017T180000Z/20101018T040000Z FREEBUSY:20101018T180000Z/20101019T040000Z FREEBUSY:20101018T184500Z/20101018T193000Z FREEBUSY:20101019T180000Z/20101020T040000Z FREEBUSY:20101020T180000Z/20101021T040000Z FREEBUSY:20101020T184500Z/20101020T193000Z FREEBUSY:20101021T180000Z/20101022T040000Z FREEBUSY:20101024T180000Z/20101025T040000Z FREEBUSY:20101025T180000Z/20101026T040000Z FREEBUSY:20101025T184500Z/20101025T193000Z FREEBUSY:20101026T180000Z/20101027T040000Z FREEBUSY:20101027T180000Z/20101028T040000Z FREEBUSY:20101027T184500Z/20101027T193000Z FREEBUSY:20101028T180000Z/20101029T040000Z FREEBUSY:20101031T180000Z/20101101T040000Z FREEBUSY:20101101T180000Z/20101102T040000Z FREEBUSY:20101101T184500Z/20101101T193000Z FREEBUSY:20101102T180000Z/20101103T040000Z FREEBUSY:20101102T183000Z/20101102T203000Z FREEBUSY:20101103T180000Z/20101104T040000Z FREEBUSY:20101103T184500Z/20101103T193000Z FREEBUSY:20101104T180000Z/20101105T040000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net END:VFREEBUSY END:VCALENDAR mailto:user2@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20001021T110000Z DTEND:20101106T110000Z FREEBUSY:20081006T070000Z/20081007T070000Z FREEBUSY:20081014T070000Z/20081015T070000Z FREEBUSY:20081016T070000Z/20081017T070000Z FREEBUSY:20081019T200000Z/20081019T210000Z FREEBUSY:20081019T220000Z/20081019T223000Z FREEBUSY:20081021T220000Z/20081021T223000Z FREEBUSY:20081023T220000Z/20081023T223000Z FREEBUSY:20081024T010000Z/20081024T020000Z FREEBUSY:20081026T200000Z/20081026T210000Z FREEBUSY:20081026T220000Z/20081026T223000Z FREEBUSY:20081028T220000Z/20081028T223000Z FREEBUSY:20081030T220000Z/20081030T223000Z FREEBUSY:20081031T010000Z/20081031T020000Z FREEBUSY:20081031T070000Z/20081101T070000Z FREEBUSY:20081102T200000Z/20081102T210000Z FREEBUSY:20081102T220000Z/20081102T223000Z FREEBUSY:20081103T080000Z/20081104T080000Z FREEBUSY:20081104T220000Z/20081104T223000Z FREEBUSY:20081106T220000Z/20081106T223000Z FREEBUSY:20081107T010000Z/20081107T020000Z FREEBUSY:20081109T200000Z/20081109T210000Z FREEBUSY:20081109T220000Z/20081109T223000Z FREEBUSY:20081111T080000Z/20081112T080000Z FREEBUSY:20081111T220000Z/20081111T223000Z FREEBUSY:20081113T220000Z/20081113T223000Z FREEBUSY:20081114T010000Z/20081114T020000Z FREEBUSY:20081116T200000Z/20081116T210000Z FREEBUSY:20081116T220000Z/20081116T223000Z FREEBUSY:20081118T220000Z/20081118T223000Z FREEBUSY:20081120T080000Z/20081121T080000Z FREEBUSY:20081120T220000Z/20081120T223000Z FREEBUSY:20081121T010000Z/20081121T020000Z FREEBUSY:20081123T200000Z/20081123T210000Z FREEBUSY:20081123T220000Z/20081123T223000Z FREEBUSY:20081123T230000Z/20081124T000000Z FREEBUSY:20081125T220000Z/20081125T223000Z FREEBUSY:20081127T220000Z/20081127T223000Z FREEBUSY:20081128T010000Z/20081128T020000Z FREEBUSY:20081128T080000Z/20081129T080000Z FREEBUSY:20081130T200000Z/20081130T210000Z FREEBUSY:20081130T220000Z/20081130T223000Z FREEBUSY:20081130T230000Z/20081201T000000Z FREEBUSY:20081201T080000Z/20081202T080000Z FREEBUSY:20081202T220000Z/20081202T223000Z FREEBUSY:20081204T220000Z/20081204T223000Z FREEBUSY:20081205T010000Z/20081205T020000Z FREEBUSY:20081207T200000Z/20081207T210000Z FREEBUSY:20081207T220000Z/20081207T223000Z FREEBUSY:20081207T230000Z/20081208T000000Z FREEBUSY:20081209T080000Z/20081210T080000Z FREEBUSY:20081209T220000Z/20081209T223000Z FREEBUSY:20081211T220000Z/20081211T223000Z FREEBUSY:20081212T010000Z/20081212T020000Z FREEBUSY:20081214T200000Z/20081214T210000Z FREEBUSY:20081214T220000Z/20081214T223000Z FREEBUSY:20081214T230000Z/20081215T000000Z FREEBUSY:20081216T220000Z/20081216T223000Z FREEBUSY:20081218T080000Z/20081219T080000Z FREEBUSY:20081218T220000Z/20081218T223000Z FREEBUSY:20081219T010000Z/20081219T020000Z FREEBUSY:20081221T200000Z/20081221T210000Z FREEBUSY:20081221T220000Z/20081221T223000Z FREEBUSY:20081221T230000Z/20081222T000000Z FREEBUSY:20081223T220000Z/20081223T223000Z FREEBUSY:20081225T220000Z/20081225T223000Z FREEBUSY:20081226T010000Z/20081226T020000Z FREEBUSY:20081226T080000Z/20081227T080000Z FREEBUSY:20081228T200000Z/20081228T210000Z FREEBUSY:20081228T220000Z/20081228T223000Z FREEBUSY:20081228T230000Z/20081229T000000Z FREEBUSY:20081230T220000Z/20081230T223000Z FREEBUSY:20090101T220000Z/20090101T223000Z FREEBUSY:20090102T010000Z/20090102T020000Z FREEBUSY:20090104T200000Z/20090104T210000Z FREEBUSY:20090104T220000Z/20090104T223000Z FREEBUSY:20090104T230000Z/20090105T000000Z FREEBUSY:20090105T080000Z/20090106T080000Z FREEBUSY:20090106T220000Z/20090106T223000Z FREEBUSY:20090108T220000Z/20090108T223000Z FREEBUSY:20090109T010000Z/20090109T020000Z FREEBUSY:20090111T200000Z/20090111T210000Z FREEBUSY:20090111T220000Z/20090111T223000Z FREEBUSY:20090111T230000Z/20090112T000000Z FREEBUSY:20090113T080000Z/20090114T080000Z FREEBUSY:20090113T220000Z/20090113T223000Z FREEBUSY:20090115T080000Z/20090116T080000Z FREEBUSY:20090115T220000Z/20090115T223000Z FREEBUSY:20090116T010000Z/20090116T020000Z FREEBUSY:20090118T200000Z/20090118T210000Z FREEBUSY:20090118T220000Z/20090118T223000Z FREEBUSY:20090118T230000Z/20090119T000000Z FREEBUSY:20090120T220000Z/20090120T223000Z FREEBUSY:20090122T220000Z/20090122T223000Z FREEBUSY:20090123T010000Z/20090123T020000Z FREEBUSY:20090125T200000Z/20090125T210000Z FREEBUSY:20090125T220000Z/20090125T223000Z FREEBUSY:20090125T230000Z/20090126T000000Z FREEBUSY:20090127T220000Z/20090127T223000Z FREEBUSY:20090129T220000Z/20090129T223000Z FREEBUSY:20090130T010000Z/20090130T020000Z FREEBUSY:20090130T080000Z/20090131T080000Z FREEBUSY:20090201T200000Z/20090201T210000Z FREEBUSY:20090201T220000Z/20090201T223000Z FREEBUSY:20090201T230000Z/20090202T000000Z FREEBUSY:20090202T080000Z/20090203T080000Z FREEBUSY:20090203T220000Z/20090203T223000Z FREEBUSY:20090205T220000Z/20090205T223000Z FREEBUSY:20090206T010000Z/20090206T020000Z FREEBUSY:20090208T200000Z/20090208T210000Z FREEBUSY:20090208T220000Z/20090208T223000Z FREEBUSY:20090208T230000Z/20090209T000000Z FREEBUSY:20090210T080000Z/20090211T080000Z FREEBUSY:20090210T220000Z/20090210T223000Z FREEBUSY:20090212T220000Z/20090212T223000Z FREEBUSY:20090213T010000Z/20090213T020000Z FREEBUSY:20090215T200000Z/20090215T210000Z FREEBUSY:20090215T220000Z/20090215T223000Z FREEBUSY:20090215T230000Z/20090216T000000Z FREEBUSY:20090217T220000Z/20090217T223000Z FREEBUSY:20090219T080000Z/20090220T080000Z FREEBUSY:20090219T220000Z/20090219T223000Z FREEBUSY:20090220T010000Z/20090220T020000Z FREEBUSY:20090222T200000Z/20090222T210000Z FREEBUSY:20090222T220000Z/20090222T223000Z FREEBUSY:20090222T230000Z/20090223T000000Z FREEBUSY:20090224T220000Z/20090224T223000Z FREEBUSY:20090226T220000Z/20090226T223000Z FREEBUSY:20090227T010000Z/20090227T020000Z FREEBUSY:20090227T080000Z/20090228T080000Z FREEBUSY:20090301T200000Z/20090301T210000Z FREEBUSY:20090301T220000Z/20090301T223000Z FREEBUSY:20090301T230000Z/20090302T000000Z FREEBUSY:20090302T080000Z/20090303T080000Z FREEBUSY:20090303T220000Z/20090303T223000Z FREEBUSY:20090305T220000Z/20090305T223000Z FREEBUSY:20090306T010000Z/20090306T020000Z FREEBUSY:20090308T200000Z/20090308T210000Z FREEBUSY:20090308T220000Z/20090308T223000Z FREEBUSY:20090308T220000Z/20090308T230000Z FREEBUSY:20090310T070000Z/20090311T070000Z FREEBUSY:20090310T220000Z/20090310T223000Z FREEBUSY:20090312T220000Z/20090312T223000Z FREEBUSY:20090313T010000Z/20090313T020000Z FREEBUSY:20090315T200000Z/20090315T210000Z FREEBUSY:20090315T220000Z/20090315T223000Z FREEBUSY:20090315T220000Z/20090315T230000Z FREEBUSY:20090317T220000Z/20090317T223000Z FREEBUSY:20090319T070000Z/20090320T070000Z FREEBUSY:20090319T220000Z/20090319T223000Z FREEBUSY:20090320T010000Z/20090320T020000Z FREEBUSY:20090322T200000Z/20090322T210000Z FREEBUSY:20090322T220000Z/20090322T223000Z FREEBUSY:20090322T220000Z/20090322T230000Z FREEBUSY:20090324T220000Z/20090324T223000Z FREEBUSY:20090326T220000Z/20090326T223000Z FREEBUSY:20090327T010000Z/20090327T020000Z FREEBUSY:20090327T070000Z/20090328T070000Z FREEBUSY:20090329T200000Z/20090329T210000Z FREEBUSY:20090329T220000Z/20090329T223000Z FREEBUSY:20090329T220000Z/20090329T230000Z FREEBUSY:20090331T220000Z/20090331T223000Z FREEBUSY:20090402T220000Z/20090402T223000Z FREEBUSY:20090403T010000Z/20090403T020000Z FREEBUSY:20090405T210000Z/20090405T220000Z FREEBUSY:20090405T220000Z/20090405T230000Z FREEBUSY:20090405T230000Z/20090405T233000Z FREEBUSY:20090406T070000Z/20090407T070000Z FREEBUSY:20090407T230000Z/20090407T233000Z FREEBUSY:20090409T230000Z/20090409T233000Z FREEBUSY:20090410T020000Z/20090410T030000Z FREEBUSY:20090412T210000Z/20090412T220000Z FREEBUSY:20090412T220000Z/20090412T230000Z FREEBUSY:20090412T230000Z/20090412T233000Z FREEBUSY:20090414T070000Z/20090415T070000Z FREEBUSY:20090414T230000Z/20090414T233000Z FREEBUSY:20090416T070000Z/20090417T070000Z FREEBUSY:20090416T230000Z/20090416T233000Z FREEBUSY:20090417T020000Z/20090417T030000Z FREEBUSY:20090419T210000Z/20090419T220000Z FREEBUSY:20090419T220000Z/20090419T230000Z FREEBUSY:20090419T230000Z/20090419T233000Z FREEBUSY:20090421T230000Z/20090421T233000Z FREEBUSY:20090423T230000Z/20090423T233000Z FREEBUSY:20090424T020000Z/20090424T030000Z FREEBUSY:20090424T070000Z/20090425T070000Z FREEBUSY:20090426T210000Z/20090426T220000Z FREEBUSY:20090426T220000Z/20090426T230000Z FREEBUSY:20090426T230000Z/20090426T233000Z FREEBUSY:20090428T230000Z/20090428T233000Z FREEBUSY:20090430T230000Z/20090430T233000Z FREEBUSY:20090501T020000Z/20090501T030000Z FREEBUSY:20090503T210000Z/20090503T220000Z FREEBUSY:20090503T220000Z/20090503T230000Z FREEBUSY:20090503T230000Z/20090503T233000Z FREEBUSY:20090504T070000Z/20090505T070000Z FREEBUSY:20090505T230000Z/20090505T233000Z FREEBUSY:20090507T230000Z/20090507T233000Z FREEBUSY:20090508T020000Z/20090508T030000Z FREEBUSY:20090510T210000Z/20090510T220000Z FREEBUSY:20090510T220000Z/20090510T230000Z FREEBUSY:20090510T230000Z/20090510T233000Z FREEBUSY:20090512T070000Z/20090513T070000Z FREEBUSY:20090512T230000Z/20090512T233000Z FREEBUSY:20090514T230000Z/20090514T233000Z FREEBUSY:20090515T020000Z/20090515T030000Z FREEBUSY:20090517T210000Z/20090517T220000Z FREEBUSY:20090517T220000Z/20090517T230000Z FREEBUSY:20090517T230000Z/20090517T233000Z FREEBUSY:20090519T230000Z/20090519T233000Z FREEBUSY:20090521T070000Z/20090522T070000Z FREEBUSY:20090521T230000Z/20090521T233000Z FREEBUSY:20090522T020000Z/20090522T030000Z FREEBUSY:20090524T210000Z/20090524T220000Z FREEBUSY:20090524T220000Z/20090524T230000Z FREEBUSY:20090524T230000Z/20090524T233000Z FREEBUSY:20090526T230000Z/20090526T233000Z FREEBUSY:20090528T230000Z/20090528T233000Z FREEBUSY:20090529T020000Z/20090529T030000Z FREEBUSY:20090529T070000Z/20090530T070000Z FREEBUSY:20090531T210000Z/20090531T220000Z FREEBUSY:20090531T220000Z/20090531T230000Z FREEBUSY:20090531T230000Z/20090531T233000Z FREEBUSY:20090601T070000Z/20090602T070000Z FREEBUSY:20090602T230000Z/20090602T233000Z FREEBUSY:20090604T230000Z/20090604T233000Z FREEBUSY:20090605T020000Z/20090605T030000Z FREEBUSY:20090607T210000Z/20090607T220000Z FREEBUSY:20090607T220000Z/20090607T230000Z FREEBUSY:20090607T230000Z/20090607T233000Z FREEBUSY:20090609T070000Z/20090610T070000Z FREEBUSY:20090609T230000Z/20090609T233000Z FREEBUSY:20090611T230000Z/20090611T233000Z FREEBUSY:20090612T020000Z/20090612T030000Z FREEBUSY:20090614T210000Z/20090614T220000Z FREEBUSY:20090614T220000Z/20090614T230000Z FREEBUSY:20090614T230000Z/20090614T233000Z FREEBUSY:20090616T230000Z/20090616T233000Z FREEBUSY:20090618T070000Z/20090619T070000Z FREEBUSY:20090618T230000Z/20090618T233000Z FREEBUSY:20090619T020000Z/20090619T030000Z FREEBUSY:20090621T210000Z/20090621T220000Z FREEBUSY:20090621T220000Z/20090621T230000Z FREEBUSY:20090621T230000Z/20090621T233000Z FREEBUSY:20090623T230000Z/20090623T233000Z FREEBUSY:20090625T230000Z/20090625T233000Z FREEBUSY:20090626T020000Z/20090626T030000Z FREEBUSY:20090626T070000Z/20090627T070000Z FREEBUSY:20090628T210000Z/20090628T220000Z FREEBUSY:20090628T220000Z/20090628T230000Z FREEBUSY:20090628T230000Z/20090628T233000Z FREEBUSY:20090630T230000Z/20090630T233000Z FREEBUSY:20090702T230000Z/20090702T233000Z FREEBUSY:20090703T020000Z/20090703T030000Z FREEBUSY:20090705T210000Z/20090705T220000Z FREEBUSY:20090705T220000Z/20090705T230000Z FREEBUSY:20090705T230000Z/20090705T233000Z FREEBUSY:20090706T070000Z/20090707T070000Z FREEBUSY:20090707T230000Z/20090707T233000Z FREEBUSY:20090709T230000Z/20090709T233000Z FREEBUSY:20090710T020000Z/20090710T030000Z FREEBUSY:20090712T210000Z/20090712T220000Z FREEBUSY:20090712T220000Z/20090712T230000Z FREEBUSY:20090712T230000Z/20090712T233000Z FREEBUSY:20090714T070000Z/20090715T070000Z FREEBUSY:20090714T230000Z/20090714T233000Z FREEBUSY:20090716T070000Z/20090717T070000Z FREEBUSY:20090716T230000Z/20090716T233000Z FREEBUSY:20090717T020000Z/20090717T030000Z FREEBUSY:20090719T210000Z/20090719T220000Z FREEBUSY:20090719T220000Z/20090719T230000Z FREEBUSY:20090719T230000Z/20090719T233000Z FREEBUSY:20090721T230000Z/20090721T233000Z FREEBUSY:20090723T230000Z/20090723T233000Z FREEBUSY:20090724T020000Z/20090724T030000Z FREEBUSY:20090726T210000Z/20090726T220000Z FREEBUSY:20090726T220000Z/20090726T230000Z FREEBUSY:20090726T230000Z/20090726T233000Z FREEBUSY:20090728T230000Z/20090728T233000Z FREEBUSY:20090730T230000Z/20090730T233000Z FREEBUSY:20090731T020000Z/20090731T030000Z FREEBUSY:20090731T070000Z/20090801T070000Z FREEBUSY:20090802T210000Z/20090802T220000Z FREEBUSY:20090802T220000Z/20090802T230000Z FREEBUSY:20090802T230000Z/20090802T233000Z FREEBUSY:20090803T070000Z/20090804T070000Z FREEBUSY:20090804T230000Z/20090804T233000Z FREEBUSY:20090806T230000Z/20090806T233000Z FREEBUSY:20090807T020000Z/20090807T030000Z FREEBUSY:20090809T210000Z/20090809T220000Z FREEBUSY:20090809T220000Z/20090809T230000Z FREEBUSY:20090809T230000Z/20090809T233000Z FREEBUSY:20090811T070000Z/20090812T070000Z FREEBUSY:20090811T230000Z/20090811T233000Z FREEBUSY:20090813T230000Z/20090813T233000Z FREEBUSY:20090814T020000Z/20090814T030000Z FREEBUSY:20090816T210000Z/20090816T220000Z FREEBUSY:20090816T220000Z/20090816T230000Z FREEBUSY:20090816T230000Z/20090816T233000Z FREEBUSY:20090818T230000Z/20090818T233000Z FREEBUSY:20090820T070000Z/20090821T070000Z FREEBUSY:20090820T230000Z/20090820T233000Z FREEBUSY:20090821T020000Z/20090821T030000Z FREEBUSY:20090823T210000Z/20090823T220000Z FREEBUSY:20090823T220000Z/20090823T230000Z FREEBUSY:20090823T230000Z/20090823T233000Z FREEBUSY:20090825T230000Z/20090825T233000Z FREEBUSY:20090827T230000Z/20090827T233000Z FREEBUSY:20090828T020000Z/20090828T030000Z FREEBUSY:20090828T070000Z/20090829T070000Z FREEBUSY:20090830T210000Z/20090830T220000Z FREEBUSY:20090830T220000Z/20090830T230000Z FREEBUSY:20090830T230000Z/20090830T233000Z FREEBUSY:20090901T230000Z/20090901T233000Z FREEBUSY:20090903T230000Z/20090903T233000Z FREEBUSY:20090904T020000Z/20090904T030000Z FREEBUSY:20090906T210000Z/20090906T220000Z FREEBUSY:20090906T220000Z/20090906T230000Z FREEBUSY:20090906T230000Z/20090906T233000Z FREEBUSY:20090907T070000Z/20090908T070000Z FREEBUSY:20090908T070000Z/20090909T070000Z FREEBUSY:20090908T230000Z/20090908T233000Z FREEBUSY:20090910T230000Z/20090910T233000Z FREEBUSY:20090911T020000Z/20090911T030000Z FREEBUSY:20090913T210000Z/20090913T220000Z FREEBUSY:20090913T220000Z/20090913T230000Z FREEBUSY:20090913T230000Z/20090913T233000Z FREEBUSY:20090915T230000Z/20090915T233000Z FREEBUSY:20090917T070000Z/20090918T070000Z FREEBUSY:20090917T230000Z/20090917T233000Z FREEBUSY:20090918T020000Z/20090918T030000Z FREEBUSY:20090920T210000Z/20090920T220000Z FREEBUSY:20090920T220000Z/20090920T230000Z FREEBUSY:20090920T230000Z/20090920T233000Z FREEBUSY:20090922T230000Z/20090922T233000Z FREEBUSY:20090924T230000Z/20090924T233000Z FREEBUSY:20090925T020000Z/20090925T030000Z FREEBUSY:20090925T070000Z/20090926T070000Z FREEBUSY:20090927T200000Z/20090927T210000Z FREEBUSY:20090927T220000Z/20090927T223000Z FREEBUSY:20090927T220000Z/20090927T230000Z FREEBUSY:20090929T220000Z/20090929T223000Z FREEBUSY:20091001T220000Z/20091001T223000Z FREEBUSY:20091002T010000Z/20091002T020000Z FREEBUSY:20091004T200000Z/20091004T210000Z FREEBUSY:20091004T220000Z/20091004T223000Z FREEBUSY:20091004T220000Z/20091004T230000Z FREEBUSY:20091005T070000Z/20091006T070000Z FREEBUSY:20091006T220000Z/20091006T223000Z FREEBUSY:20091008T220000Z/20091008T223000Z FREEBUSY:20091009T010000Z/20091009T020000Z FREEBUSY:20091011T200000Z/20091011T210000Z FREEBUSY:20091011T220000Z/20091011T223000Z FREEBUSY:20091011T220000Z/20091011T230000Z FREEBUSY:20091013T070000Z/20091014T070000Z FREEBUSY:20091013T220000Z/20091013T223000Z FREEBUSY:20091015T070000Z/20091016T070000Z FREEBUSY:20091015T220000Z/20091015T223000Z FREEBUSY:20091016T010000Z/20091016T020000Z FREEBUSY:20091018T200000Z/20091018T210000Z FREEBUSY:20091018T220000Z/20091018T223000Z FREEBUSY:20091018T220000Z/20091018T230000Z FREEBUSY:20091020T220000Z/20091020T223000Z FREEBUSY:20091022T220000Z/20091022T223000Z FREEBUSY:20091023T010000Z/20091023T020000Z FREEBUSY:20091025T200000Z/20091025T210000Z FREEBUSY:20091025T220000Z/20091025T223000Z FREEBUSY:20091025T220000Z/20091025T230000Z FREEBUSY:20091027T220000Z/20091027T223000Z FREEBUSY:20091029T220000Z/20091029T223000Z FREEBUSY:20091030T010000Z/20091030T020000Z FREEBUSY:20091030T070000Z/20091031T070000Z FREEBUSY:20091101T200000Z/20091101T210000Z FREEBUSY:20091101T220000Z/20091101T223000Z FREEBUSY:20091101T230000Z/20091102T000000Z FREEBUSY:20091102T080000Z/20091103T080000Z FREEBUSY:20091103T220000Z/20091103T223000Z FREEBUSY:20091105T220000Z/20091105T223000Z FREEBUSY:20091106T010000Z/20091106T020000Z FREEBUSY:20091108T200000Z/20091108T210000Z FREEBUSY:20091108T220000Z/20091108T223000Z FREEBUSY:20091108T230000Z/20091109T000000Z FREEBUSY:20091110T080000Z/20091111T080000Z FREEBUSY:20091110T220000Z/20091110T223000Z FREEBUSY:20091112T220000Z/20091112T223000Z FREEBUSY:20091113T010000Z/20091113T020000Z FREEBUSY:20091115T200000Z/20091115T210000Z FREEBUSY:20091115T220000Z/20091115T223000Z FREEBUSY:20091115T230000Z/20091116T000000Z FREEBUSY:20091117T220000Z/20091117T223000Z FREEBUSY:20091119T080000Z/20091120T080000Z FREEBUSY:20091119T220000Z/20091119T223000Z FREEBUSY:20091120T010000Z/20091120T020000Z FREEBUSY:20091122T200000Z/20091122T210000Z FREEBUSY:20091122T220000Z/20091122T223000Z FREEBUSY:20091122T230000Z/20091123T000000Z FREEBUSY:20091124T220000Z/20091124T223000Z FREEBUSY:20091126T220000Z/20091126T223000Z FREEBUSY:20091127T010000Z/20091127T020000Z FREEBUSY:20091127T080000Z/20091128T080000Z FREEBUSY:20091129T200000Z/20091129T210000Z FREEBUSY:20091129T220000Z/20091129T223000Z FREEBUSY:20091129T230000Z/20091130T000000Z FREEBUSY:20091201T220000Z/20091201T223000Z FREEBUSY:20091203T220000Z/20091203T223000Z FREEBUSY:20091204T010000Z/20091204T020000Z FREEBUSY:20091206T200000Z/20091206T210000Z FREEBUSY:20091206T220000Z/20091206T223000Z FREEBUSY:20091206T230000Z/20091207T000000Z FREEBUSY:20091207T080000Z/20091208T080000Z FREEBUSY:20091208T080000Z/20091209T080000Z FREEBUSY:20091208T220000Z/20091208T223000Z FREEBUSY:20091210T220000Z/20091210T223000Z FREEBUSY:20091211T010000Z/20091211T020000Z FREEBUSY:20091213T200000Z/20091213T210000Z FREEBUSY:20091213T220000Z/20091213T223000Z FREEBUSY:20091213T230000Z/20091214T000000Z FREEBUSY:20091215T220000Z/20091215T223000Z FREEBUSY:20091217T080000Z/20091218T080000Z FREEBUSY:20091217T220000Z/20091217T223000Z FREEBUSY:20091218T010000Z/20091218T020000Z FREEBUSY:20091220T200000Z/20091220T210000Z FREEBUSY:20091220T220000Z/20091220T223000Z FREEBUSY:20091220T230000Z/20091221T000000Z FREEBUSY:20091222T220000Z/20091222T223000Z FREEBUSY:20091224T220000Z/20091224T223000Z FREEBUSY:20091225T010000Z/20091225T020000Z FREEBUSY:20091225T080000Z/20091226T080000Z FREEBUSY:20091227T200000Z/20091227T210000Z FREEBUSY:20091227T220000Z/20091227T223000Z FREEBUSY:20091227T230000Z/20091228T000000Z FREEBUSY:20091229T220000Z/20091229T223000Z FREEBUSY:20091231T220000Z/20091231T223000Z FREEBUSY:20100101T010000Z/20100101T020000Z FREEBUSY:20100103T200000Z/20100103T210000Z FREEBUSY:20100103T220000Z/20100103T223000Z FREEBUSY:20100103T230000Z/20100104T000000Z FREEBUSY:20100104T080000Z/20100105T080000Z FREEBUSY:20100105T220000Z/20100105T223000Z FREEBUSY:20100107T220000Z/20100107T223000Z FREEBUSY:20100108T010000Z/20100108T020000Z FREEBUSY:20100110T200000Z/20100110T210000Z FREEBUSY:20100110T220000Z/20100110T223000Z FREEBUSY:20100110T230000Z/20100111T000000Z FREEBUSY:20100112T080000Z/20100113T080000Z FREEBUSY:20100112T220000Z/20100112T223000Z FREEBUSY:20100114T220000Z/20100114T223000Z FREEBUSY:20100115T010000Z/20100115T020000Z FREEBUSY:20100117T200000Z/20100117T210000Z FREEBUSY:20100117T220000Z/20100117T223000Z FREEBUSY:20100117T230000Z/20100118T000000Z FREEBUSY:20100119T220000Z/20100119T223000Z FREEBUSY:20100121T080000Z/20100122T080000Z FREEBUSY:20100121T220000Z/20100121T223000Z FREEBUSY:20100122T010000Z/20100122T020000Z FREEBUSY:20100124T200000Z/20100124T210000Z FREEBUSY:20100124T220000Z/20100124T223000Z FREEBUSY:20100124T230000Z/20100125T000000Z FREEBUSY:20100126T220000Z/20100126T223000Z FREEBUSY:20100128T220000Z/20100128T223000Z FREEBUSY:20100129T010000Z/20100129T020000Z FREEBUSY:20100129T080000Z/20100130T080000Z FREEBUSY:20100131T200000Z/20100131T210000Z FREEBUSY:20100131T220000Z/20100131T223000Z FREEBUSY:20100131T230000Z/20100201T000000Z FREEBUSY:20100201T080000Z/20100202T080000Z FREEBUSY:20100202T220000Z/20100202T223000Z FREEBUSY:20100204T220000Z/20100204T223000Z FREEBUSY:20100205T010000Z/20100205T020000Z FREEBUSY:20100207T200000Z/20100207T210000Z FREEBUSY:20100207T220000Z/20100207T223000Z FREEBUSY:20100207T230000Z/20100208T000000Z FREEBUSY:20100209T080000Z/20100210T080000Z FREEBUSY:20100209T220000Z/20100209T223000Z FREEBUSY:20100211T220000Z/20100211T223000Z FREEBUSY:20100212T010000Z/20100212T020000Z FREEBUSY:20100214T200000Z/20100214T210000Z FREEBUSY:20100214T220000Z/20100214T223000Z FREEBUSY:20100214T230000Z/20100215T000000Z FREEBUSY:20100216T220000Z/20100216T223000Z FREEBUSY:20100218T080000Z/20100219T080000Z FREEBUSY:20100218T220000Z/20100218T223000Z FREEBUSY:20100219T010000Z/20100219T020000Z FREEBUSY:20100221T200000Z/20100221T210000Z FREEBUSY:20100221T220000Z/20100221T223000Z FREEBUSY:20100221T230000Z/20100222T000000Z FREEBUSY:20100223T220000Z/20100223T223000Z FREEBUSY:20100225T220000Z/20100225T223000Z FREEBUSY:20100226T010000Z/20100226T020000Z FREEBUSY:20100226T080000Z/20100227T080000Z FREEBUSY:20100228T200000Z/20100228T210000Z FREEBUSY:20100228T220000Z/20100228T223000Z FREEBUSY:20100228T230000Z/20100301T000000Z FREEBUSY:20100301T080000Z/20100302T080000Z FREEBUSY:20100302T220000Z/20100302T223000Z FREEBUSY:20100304T220000Z/20100304T223000Z FREEBUSY:20100305T010000Z/20100305T020000Z FREEBUSY:20100307T200000Z/20100307T210000Z FREEBUSY:20100307T220000Z/20100307T223000Z FREEBUSY:20100307T230000Z/20100308T000000Z FREEBUSY:20100309T080000Z/20100310T080000Z FREEBUSY:20100309T220000Z/20100309T223000Z FREEBUSY:20100311T220000Z/20100311T223000Z FREEBUSY:20100312T010000Z/20100312T020000Z FREEBUSY:20100314T200000Z/20100314T210000Z FREEBUSY:20100314T220000Z/20100314T223000Z FREEBUSY:20100314T220000Z/20100314T230000Z FREEBUSY:20100316T220000Z/20100316T223000Z FREEBUSY:20100318T070000Z/20100319T070000Z FREEBUSY:20100318T220000Z/20100318T223000Z FREEBUSY:20100319T010000Z/20100319T020000Z FREEBUSY:20100321T200000Z/20100321T210000Z FREEBUSY:20100321T220000Z/20100321T223000Z FREEBUSY:20100321T220000Z/20100321T230000Z FREEBUSY:20100323T220000Z/20100323T223000Z FREEBUSY:20100325T220000Z/20100325T223000Z FREEBUSY:20100326T010000Z/20100326T020000Z FREEBUSY:20100326T070000Z/20100327T070000Z FREEBUSY:20100328T200000Z/20100328T210000Z FREEBUSY:20100328T220000Z/20100328T223000Z FREEBUSY:20100328T220000Z/20100328T230000Z FREEBUSY:20100330T220000Z/20100330T223000Z FREEBUSY:20100401T220000Z/20100401T223000Z FREEBUSY:20100402T010000Z/20100402T020000Z FREEBUSY:20100404T210000Z/20100404T220000Z FREEBUSY:20100404T220000Z/20100404T230000Z FREEBUSY:20100404T230000Z/20100404T233000Z FREEBUSY:20100405T070000Z/20100406T070000Z FREEBUSY:20100406T230000Z/20100406T233000Z FREEBUSY:20100408T230000Z/20100408T233000Z FREEBUSY:20100409T020000Z/20100409T030000Z FREEBUSY:20100411T210000Z/20100411T220000Z FREEBUSY:20100411T220000Z/20100411T230000Z FREEBUSY:20100411T230000Z/20100411T233000Z FREEBUSY:20100413T070000Z/20100414T070000Z FREEBUSY:20100413T230000Z/20100413T233000Z FREEBUSY:20100415T070000Z/20100416T070000Z FREEBUSY:20100415T230000Z/20100415T233000Z FREEBUSY:20100416T020000Z/20100416T030000Z FREEBUSY:20100418T210000Z/20100418T220000Z FREEBUSY:20100418T220000Z/20100418T230000Z FREEBUSY:20100418T230000Z/20100418T233000Z FREEBUSY:20100420T230000Z/20100420T233000Z FREEBUSY:20100422T230000Z/20100422T233000Z FREEBUSY:20100423T020000Z/20100423T030000Z FREEBUSY:20100425T210000Z/20100425T220000Z FREEBUSY:20100425T220000Z/20100425T230000Z FREEBUSY:20100425T230000Z/20100425T233000Z FREEBUSY:20100427T230000Z/20100427T233000Z FREEBUSY:20100429T230000Z/20100429T233000Z FREEBUSY:20100430T020000Z/20100430T030000Z FREEBUSY:20100430T070000Z/20100501T070000Z FREEBUSY:20100502T210000Z/20100502T220000Z FREEBUSY:20100502T220000Z/20100502T230000Z FREEBUSY:20100502T230000Z/20100502T233000Z FREEBUSY:20100503T070000Z/20100504T070000Z FREEBUSY:20100504T230000Z/20100504T233000Z FREEBUSY:20100506T230000Z/20100506T233000Z FREEBUSY:20100507T020000Z/20100507T030000Z FREEBUSY:20100509T210000Z/20100509T220000Z FREEBUSY:20100509T220000Z/20100509T230000Z FREEBUSY:20100509T230000Z/20100509T233000Z FREEBUSY:20100511T070000Z/20100512T070000Z FREEBUSY:20100511T230000Z/20100511T233000Z FREEBUSY:20100513T230000Z/20100513T233000Z FREEBUSY:20100514T020000Z/20100514T030000Z FREEBUSY:20100516T210000Z/20100516T220000Z FREEBUSY:20100516T220000Z/20100516T230000Z FREEBUSY:20100516T230000Z/20100516T233000Z FREEBUSY:20100518T230000Z/20100518T233000Z FREEBUSY:20100520T070000Z/20100521T070000Z FREEBUSY:20100520T230000Z/20100520T233000Z FREEBUSY:20100521T020000Z/20100521T030000Z FREEBUSY:20100523T210000Z/20100523T220000Z FREEBUSY:20100523T220000Z/20100523T230000Z FREEBUSY:20100523T230000Z/20100523T233000Z FREEBUSY:20100525T230000Z/20100525T233000Z FREEBUSY:20100527T230000Z/20100527T233000Z FREEBUSY:20100528T020000Z/20100528T030000Z FREEBUSY:20100528T070000Z/20100529T070000Z FREEBUSY:20100530T210000Z/20100530T220000Z FREEBUSY:20100530T220000Z/20100530T230000Z FREEBUSY:20100530T230000Z/20100530T233000Z FREEBUSY:20100601T230000Z/20100601T233000Z FREEBUSY:20100603T230000Z/20100603T233000Z FREEBUSY:20100604T020000Z/20100604T030000Z FREEBUSY:20100606T210000Z/20100606T220000Z FREEBUSY:20100606T220000Z/20100606T230000Z FREEBUSY:20100606T230000Z/20100606T233000Z FREEBUSY:20100607T070000Z/20100608T070000Z FREEBUSY:20100608T070000Z/20100609T070000Z FREEBUSY:20100608T230000Z/20100608T233000Z FREEBUSY:20100610T230000Z/20100610T233000Z FREEBUSY:20100611T020000Z/20100611T030000Z FREEBUSY:20100613T210000Z/20100613T220000Z FREEBUSY:20100613T220000Z/20100613T230000Z FREEBUSY:20100613T230000Z/20100613T233000Z FREEBUSY:20100615T230000Z/20100615T233000Z FREEBUSY:20100617T070000Z/20100618T070000Z FREEBUSY:20100617T230000Z/20100617T233000Z FREEBUSY:20100618T020000Z/20100618T030000Z FREEBUSY:20100620T210000Z/20100620T220000Z FREEBUSY:20100620T220000Z/20100620T230000Z FREEBUSY:20100620T230000Z/20100620T233000Z FREEBUSY:20100622T230000Z/20100622T233000Z FREEBUSY:20100624T230000Z/20100624T233000Z FREEBUSY:20100625T020000Z/20100625T030000Z FREEBUSY:20100625T070000Z/20100626T070000Z FREEBUSY:20100627T210000Z/20100627T220000Z FREEBUSY:20100627T220000Z/20100627T230000Z FREEBUSY:20100627T230000Z/20100627T233000Z FREEBUSY:20100629T230000Z/20100629T233000Z FREEBUSY:20100701T230000Z/20100701T233000Z FREEBUSY:20100702T020000Z/20100702T030000Z FREEBUSY:20100704T210000Z/20100704T220000Z FREEBUSY:20100704T220000Z/20100704T230000Z FREEBUSY:20100704T230000Z/20100704T233000Z FREEBUSY:20100705T070000Z/20100706T070000Z FREEBUSY:20100706T230000Z/20100706T233000Z FREEBUSY:20100708T230000Z/20100708T233000Z FREEBUSY:20100709T020000Z/20100709T030000Z FREEBUSY:20100711T210000Z/20100711T220000Z FREEBUSY:20100711T220000Z/20100711T230000Z FREEBUSY:20100711T230000Z/20100711T233000Z FREEBUSY:20100713T070000Z/20100714T070000Z FREEBUSY:20100713T230000Z/20100713T233000Z FREEBUSY:20100715T070000Z/20100716T070000Z FREEBUSY:20100715T230000Z/20100715T233000Z FREEBUSY:20100716T020000Z/20100716T030000Z FREEBUSY:20100718T210000Z/20100718T220000Z FREEBUSY:20100718T220000Z/20100718T230000Z FREEBUSY:20100718T230000Z/20100718T233000Z FREEBUSY:20100720T230000Z/20100720T233000Z FREEBUSY:20100722T230000Z/20100722T233000Z FREEBUSY:20100723T020000Z/20100723T030000Z FREEBUSY:20100725T210000Z/20100725T220000Z FREEBUSY:20100725T220000Z/20100725T230000Z FREEBUSY:20100725T230000Z/20100725T233000Z FREEBUSY:20100727T230000Z/20100727T233000Z FREEBUSY:20100729T230000Z/20100729T233000Z FREEBUSY:20100730T020000Z/20100730T030000Z FREEBUSY:20100730T070000Z/20100731T070000Z FREEBUSY:20100801T210000Z/20100801T220000Z FREEBUSY:20100801T220000Z/20100801T230000Z FREEBUSY:20100801T230000Z/20100801T233000Z FREEBUSY:20100802T070000Z/20100803T070000Z FREEBUSY:20100803T230000Z/20100803T233000Z FREEBUSY:20100805T230000Z/20100805T233000Z FREEBUSY:20100806T020000Z/20100806T030000Z FREEBUSY:20100808T210000Z/20100808T220000Z FREEBUSY:20100808T220000Z/20100808T230000Z FREEBUSY:20100808T230000Z/20100808T233000Z FREEBUSY:20100810T070000Z/20100811T070000Z FREEBUSY:20100810T230000Z/20100810T233000Z FREEBUSY:20100812T230000Z/20100812T233000Z FREEBUSY:20100813T020000Z/20100813T030000Z FREEBUSY:20100815T210000Z/20100815T220000Z FREEBUSY:20100815T220000Z/20100815T230000Z FREEBUSY:20100815T230000Z/20100815T233000Z FREEBUSY:20100817T230000Z/20100817T233000Z FREEBUSY:20100819T070000Z/20100820T070000Z FREEBUSY:20100819T230000Z/20100819T233000Z FREEBUSY:20100820T020000Z/20100820T030000Z FREEBUSY:20100822T210000Z/20100822T220000Z FREEBUSY:20100822T220000Z/20100822T230000Z FREEBUSY:20100822T230000Z/20100822T233000Z FREEBUSY:20100824T230000Z/20100824T233000Z FREEBUSY:20100826T230000Z/20100826T233000Z FREEBUSY:20100827T020000Z/20100827T030000Z FREEBUSY:20100827T070000Z/20100828T070000Z FREEBUSY:20100829T210000Z/20100829T220000Z FREEBUSY:20100829T220000Z/20100829T230000Z FREEBUSY:20100829T230000Z/20100829T233000Z FREEBUSY:20100831T230000Z/20100831T233000Z FREEBUSY:20100902T230000Z/20100902T233000Z FREEBUSY:20100903T020000Z/20100903T030000Z FREEBUSY:20100905T210000Z/20100905T220000Z FREEBUSY:20100905T220000Z/20100905T230000Z FREEBUSY:20100905T230000Z/20100905T233000Z FREEBUSY:20100906T070000Z/20100907T070000Z FREEBUSY:20100907T230000Z/20100907T233000Z FREEBUSY:20100909T230000Z/20100909T233000Z FREEBUSY:20100910T020000Z/20100910T030000Z FREEBUSY:20100912T210000Z/20100912T220000Z FREEBUSY:20100912T220000Z/20100912T230000Z FREEBUSY:20100912T230000Z/20100912T233000Z FREEBUSY:20100914T070000Z/20100915T070000Z FREEBUSY:20100914T230000Z/20100914T233000Z FREEBUSY:20100916T070000Z/20100917T070000Z FREEBUSY:20100916T230000Z/20100916T233000Z FREEBUSY:20100917T020000Z/20100917T030000Z FREEBUSY:20100919T210000Z/20100919T220000Z FREEBUSY:20100919T220000Z/20100919T230000Z FREEBUSY:20100919T230000Z/20100919T233000Z FREEBUSY:20100921T230000Z/20100921T233000Z FREEBUSY:20100923T230000Z/20100923T233000Z FREEBUSY:20100924T020000Z/20100924T030000Z FREEBUSY:20100924T070000Z/20100925T070000Z FREEBUSY:20100926T200000Z/20100926T210000Z FREEBUSY:20100926T220000Z/20100926T223000Z FREEBUSY:20100926T220000Z/20100926T230000Z FREEBUSY:20100928T220000Z/20100928T223000Z FREEBUSY:20100930T220000Z/20100930T223000Z FREEBUSY:20101001T010000Z/20101001T020000Z FREEBUSY:20101003T200000Z/20101003T210000Z FREEBUSY:20101003T220000Z/20101003T223000Z FREEBUSY:20101003T220000Z/20101003T230000Z FREEBUSY:20101004T070000Z/20101005T070000Z FREEBUSY:20101005T220000Z/20101005T223000Z FREEBUSY:20101007T220000Z/20101007T223000Z FREEBUSY:20101008T010000Z/20101008T020000Z FREEBUSY:20101010T200000Z/20101010T210000Z FREEBUSY:20101010T220000Z/20101010T223000Z FREEBUSY:20101010T220000Z/20101010T230000Z FREEBUSY:20101012T070000Z/20101013T070000Z FREEBUSY:20101012T220000Z/20101012T223000Z FREEBUSY:20101014T220000Z/20101014T223000Z FREEBUSY:20101015T010000Z/20101015T020000Z FREEBUSY:20101017T200000Z/20101017T210000Z FREEBUSY:20101017T220000Z/20101017T223000Z FREEBUSY:20101017T220000Z/20101017T230000Z FREEBUSY:20101019T220000Z/20101019T223000Z FREEBUSY:20101021T070000Z/20101022T070000Z FREEBUSY:20101021T220000Z/20101021T223000Z FREEBUSY:20101022T010000Z/20101022T020000Z FREEBUSY:20101024T200000Z/20101024T210000Z FREEBUSY:20101024T220000Z/20101024T223000Z FREEBUSY:20101024T220000Z/20101024T230000Z FREEBUSY:20101026T220000Z/20101026T223000Z FREEBUSY:20101028T220000Z/20101028T223000Z FREEBUSY:20101029T010000Z/20101029T020000Z FREEBUSY:20101029T070000Z/20101030T070000Z FREEBUSY:20101031T200000Z/20101031T210000Z FREEBUSY:20101031T220000Z/20101031T223000Z FREEBUSY:20101031T220000Z/20101031T230000Z FREEBUSY:20101101T070000Z/20101102T070000Z FREEBUSY:20101102T220000Z/20101102T223000Z FREEBUSY:20101104T220000Z/20101104T223000Z FREEBUSY:20101105T010000Z/20101105T020000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user2@example.net END:VFREEBUSY END:VCALENDAR mailto:user3@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20001021T110000Z DTEND:20101106T110000Z FREEBUSY:20070611T011500Z/20070611T014500Z FREEBUSY:20070611T020000Z/20070611T060000Z FREEBUSY:20070611T040000Z/20070611T060000Z FREEBUSY:20070611T060000Z/20070611T061500Z FREEBUSY:20070611T230000Z/20070611T235000Z FREEBUSY:20070612T040000Z/20070612T052000Z FREEBUSY:20070612T060000Z/20070612T063000Z FREEBUSY:20070612T060000Z/20070612T080000Z FREEBUSY:20070612T060000Z/20070612T090000Z FREEBUSY:20070612T220000Z/20070612T231000Z FREEBUSY:20070613T060000Z/20070613T083000Z FREEBUSY:20070613T120000Z/20070621T120000Z FREEBUSY:20070613T220000Z/20070613T230000Z FREEBUSY:20070614T120000Z/20070617T120000Z FREEBUSY:20070615T120000Z/20070616T120000Z FREEBUSY:20070627T034500Z/20070627T114500Z FREEBUSY:20070627T120000Z/20070628T120000Z FREEBUSY:20070628T073000Z/20070628T103000Z FREEBUSY:20070628T120000Z/20070629T120000Z FREEBUSY:20070629T120000Z/20070630T120000Z FREEBUSY:20070709T213000Z/20070710T000000Z FREEBUSY:20070712T120000Z/20070713T120000Z FREEBUSY:20070819T210000Z/20070820T031500Z FREEBUSY:20070823T120000Z/20070824T120000Z FREEBUSY:20070914T120000Z/20070915T120000Z FREEBUSY:20071110T110000Z/20071111T110000Z FREEBUSY:20081024T054500Z/20081024T083000Z FREEBUSY:20081025T103000Z/20081025T113000Z FREEBUSY:20081028T064500Z/20081028T093000Z FREEBUSY:20081031T064500Z/20081031T093000Z FREEBUSY:20081104T064500Z/20081104T093000Z FREEBUSY:20081107T064500Z/20081107T093000Z FREEBUSY:20081111T064500Z/20081111T093000Z FREEBUSY:20081114T064500Z/20081114T093000Z FREEBUSY:20081118T064500Z/20081118T093000Z FREEBUSY:20081121T064500Z/20081121T093000Z FREEBUSY:20081125T064500Z/20081125T093000Z FREEBUSY:20081128T064500Z/20081128T093000Z FREEBUSY:20081202T064500Z/20081202T093000Z FREEBUSY:20081202T113000Z/20081202T123000Z FREEBUSY:20081205T064500Z/20081205T093000Z FREEBUSY:20081209T064500Z/20081209T093000Z FREEBUSY:20081210T113000Z/20081210T123000Z FREEBUSY:20081212T064500Z/20081212T093000Z FREEBUSY:20081216T064500Z/20081216T093000Z FREEBUSY:20081218T113000Z/20081218T123000Z FREEBUSY:20081219T064500Z/20081219T093000Z FREEBUSY:20081223T064500Z/20081223T093000Z FREEBUSY:20081226T064500Z/20081226T093000Z FREEBUSY:20081226T113000Z/20081226T123000Z FREEBUSY:20081230T064500Z/20081230T093000Z FREEBUSY:20090102T064500Z/20090102T093000Z FREEBUSY:20090106T064500Z/20090106T093000Z FREEBUSY:20090109T064500Z/20090109T093000Z FREEBUSY:20090113T064500Z/20090113T093000Z FREEBUSY:20090116T064500Z/20090116T093000Z FREEBUSY:20090120T064500Z/20090120T093000Z FREEBUSY:20090123T064500Z/20090123T093000Z FREEBUSY:20090127T064500Z/20090127T093000Z FREEBUSY:20090130T064500Z/20090130T093000Z FREEBUSY:20090203T064500Z/20090203T093000Z FREEBUSY:20090206T064500Z/20090206T093000Z FREEBUSY:20090210T064500Z/20090210T093000Z FREEBUSY:20090213T064500Z/20090213T093000Z FREEBUSY:20090217T064500Z/20090217T093000Z FREEBUSY:20090220T064500Z/20090220T093000Z FREEBUSY:20090224T064500Z/20090224T093000Z FREEBUSY:20090227T064500Z/20090227T093000Z FREEBUSY:20090303T064500Z/20090303T093000Z FREEBUSY:20090303T113000Z/20090303T123000Z FREEBUSY:20090306T064500Z/20090306T093000Z FREEBUSY:20090310T064500Z/20090310T093000Z FREEBUSY:20090311T113000Z/20090311T123000Z FREEBUSY:20090313T064500Z/20090313T093000Z FREEBUSY:20090317T064500Z/20090317T093000Z FREEBUSY:20090319T113000Z/20090319T123000Z FREEBUSY:20090320T064500Z/20090320T093000Z FREEBUSY:20090324T064500Z/20090324T093000Z FREEBUSY:20090327T064500Z/20090327T093000Z FREEBUSY:20090327T113000Z/20090327T123000Z FREEBUSY:20090331T054500Z/20090331T083000Z FREEBUSY:20090403T054500Z/20090403T083000Z FREEBUSY:20090407T054500Z/20090407T083000Z FREEBUSY:20090410T054500Z/20090410T083000Z FREEBUSY:20090414T054500Z/20090414T083000Z FREEBUSY:20090417T054500Z/20090417T083000Z FREEBUSY:20090421T054500Z/20090421T083000Z FREEBUSY:20090424T054500Z/20090424T083000Z FREEBUSY:20090428T054500Z/20090428T083000Z FREEBUSY:20090501T054500Z/20090501T083000Z FREEBUSY:20090505T054500Z/20090505T083000Z FREEBUSY:20090508T054500Z/20090508T083000Z FREEBUSY:20090512T054500Z/20090512T083000Z FREEBUSY:20090515T054500Z/20090515T083000Z FREEBUSY:20090519T054500Z/20090519T083000Z FREEBUSY:20090522T054500Z/20090522T083000Z FREEBUSY:20090526T054500Z/20090526T083000Z FREEBUSY:20090529T054500Z/20090529T083000Z FREEBUSY:20090602T054500Z/20090602T083000Z FREEBUSY:20090602T103000Z/20090602T113000Z FREEBUSY:20090605T054500Z/20090605T083000Z FREEBUSY:20090609T054500Z/20090609T083000Z FREEBUSY:20090610T103000Z/20090610T113000Z FREEBUSY:20090612T054500Z/20090612T083000Z FREEBUSY:20090616T054500Z/20090616T083000Z FREEBUSY:20090618T103000Z/20090618T113000Z FREEBUSY:20090619T054500Z/20090619T083000Z FREEBUSY:20090623T054500Z/20090623T083000Z FREEBUSY:20090626T054500Z/20090626T083000Z FREEBUSY:20090626T103000Z/20090626T113000Z FREEBUSY:20090630T054500Z/20090630T083000Z FREEBUSY:20090703T054500Z/20090703T083000Z FREEBUSY:20090707T054500Z/20090707T083000Z FREEBUSY:20090710T054500Z/20090710T083000Z FREEBUSY:20090714T054500Z/20090714T083000Z FREEBUSY:20090717T054500Z/20090717T083000Z FREEBUSY:20090721T054500Z/20090721T083000Z FREEBUSY:20090724T054500Z/20090724T083000Z FREEBUSY:20090728T054500Z/20090728T083000Z FREEBUSY:20090731T054500Z/20090731T083000Z FREEBUSY:20090804T054500Z/20090804T083000Z FREEBUSY:20090807T054500Z/20090807T083000Z FREEBUSY:20090811T054500Z/20090811T083000Z FREEBUSY:20090814T054500Z/20090814T083000Z FREEBUSY:20090818T054500Z/20090818T083000Z FREEBUSY:20090821T054500Z/20090821T083000Z FREEBUSY:20090825T054500Z/20090825T083000Z FREEBUSY:20090828T054500Z/20090828T083000Z FREEBUSY:20090901T054500Z/20090901T083000Z FREEBUSY:20090901T103000Z/20090901T113000Z FREEBUSY:20090904T054500Z/20090904T083000Z FREEBUSY:20090908T054500Z/20090908T083000Z FREEBUSY:20090909T103000Z/20090909T113000Z FREEBUSY:20090911T054500Z/20090911T083000Z FREEBUSY:20090915T054500Z/20090915T083000Z FREEBUSY:20090917T103000Z/20090917T113000Z FREEBUSY:20090918T054500Z/20090918T083000Z FREEBUSY:20090922T054500Z/20090922T083000Z FREEBUSY:20090925T054500Z/20090925T083000Z FREEBUSY:20090925T103000Z/20090925T113000Z FREEBUSY:20090929T054500Z/20090929T083000Z FREEBUSY:20091002T054500Z/20091002T083000Z FREEBUSY:20091006T054500Z/20091006T083000Z FREEBUSY:20091006T103000Z/20091006T113000Z FREEBUSY:20091009T054500Z/20091009T083000Z FREEBUSY:20091013T054500Z/20091013T083000Z FREEBUSY:20091014T103000Z/20091014T113000Z FREEBUSY:20091015T103000Z/20091015T113000Z FREEBUSY:20091016T054500Z/20091016T083000Z FREEBUSY:20091020T054500Z/20091020T083000Z FREEBUSY:20091023T054500Z/20091023T083000Z FREEBUSY:20091023T103000Z/20091023T113000Z FREEBUSY:20091027T064500Z/20091027T093000Z FREEBUSY:20091030T064500Z/20091030T093000Z FREEBUSY:20091103T064500Z/20091103T093000Z FREEBUSY:20091106T064500Z/20091106T093000Z FREEBUSY:20091110T064500Z/20091110T093000Z FREEBUSY:20091113T064500Z/20091113T093000Z FREEBUSY:20091117T064500Z/20091117T093000Z FREEBUSY:20091120T064500Z/20091120T093000Z FREEBUSY:20091124T064500Z/20091124T093000Z FREEBUSY:20091127T064500Z/20091127T093000Z FREEBUSY:20091201T064500Z/20091201T093000Z FREEBUSY:20091201T113000Z/20091201T123000Z FREEBUSY:20091204T064500Z/20091204T093000Z FREEBUSY:20091208T064500Z/20091208T093000Z FREEBUSY:20091209T113000Z/20091209T123000Z FREEBUSY:20091211T064500Z/20091211T093000Z FREEBUSY:20091215T064500Z/20091215T093000Z FREEBUSY:20091217T113000Z/20091217T123000Z FREEBUSY:20091218T064500Z/20091218T093000Z FREEBUSY:20091222T064500Z/20091222T093000Z FREEBUSY:20091225T064500Z/20091225T093000Z FREEBUSY:20091225T113000Z/20091225T123000Z FREEBUSY:20091229T064500Z/20091229T093000Z FREEBUSY:20100101T064500Z/20100101T093000Z FREEBUSY:20100105T064500Z/20100105T093000Z FREEBUSY:20100108T064500Z/20100108T093000Z FREEBUSY:20100112T064500Z/20100112T093000Z FREEBUSY:20100115T064500Z/20100115T093000Z FREEBUSY:20100119T064500Z/20100119T093000Z FREEBUSY:20100122T064500Z/20100122T093000Z FREEBUSY:20100126T064500Z/20100126T093000Z FREEBUSY:20100129T064500Z/20100129T093000Z FREEBUSY:20100202T064500Z/20100202T093000Z FREEBUSY:20100205T064500Z/20100205T093000Z FREEBUSY:20100209T064500Z/20100209T093000Z FREEBUSY:20100212T064500Z/20100212T093000Z FREEBUSY:20100216T064500Z/20100216T093000Z FREEBUSY:20100219T064500Z/20100219T093000Z FREEBUSY:20100223T064500Z/20100223T093000Z FREEBUSY:20100226T064500Z/20100226T093000Z FREEBUSY:20100302T064500Z/20100302T093000Z FREEBUSY:20100302T113000Z/20100302T123000Z FREEBUSY:20100305T064500Z/20100305T093000Z FREEBUSY:20100309T064500Z/20100309T093000Z FREEBUSY:20100310T113000Z/20100310T123000Z FREEBUSY:20100312T064500Z/20100312T093000Z FREEBUSY:20100316T064500Z/20100316T093000Z FREEBUSY:20100318T113000Z/20100318T123000Z FREEBUSY:20100319T064500Z/20100319T093000Z FREEBUSY:20100323T064500Z/20100323T093000Z FREEBUSY:20100326T064500Z/20100326T093000Z FREEBUSY:20100326T113000Z/20100326T123000Z FREEBUSY:20100330T054500Z/20100330T083000Z FREEBUSY:20100402T054500Z/20100402T083000Z FREEBUSY:20100406T054500Z/20100406T083000Z FREEBUSY:20100409T054500Z/20100409T083000Z FREEBUSY:20100413T054500Z/20100413T083000Z FREEBUSY:20100416T054500Z/20100416T083000Z FREEBUSY:20100420T054500Z/20100420T083000Z FREEBUSY:20100423T054500Z/20100423T083000Z FREEBUSY:20100427T054500Z/20100427T083000Z FREEBUSY:20100430T054500Z/20100430T083000Z FREEBUSY:20100504T054500Z/20100504T083000Z FREEBUSY:20100507T054500Z/20100507T083000Z FREEBUSY:20100511T054500Z/20100511T083000Z FREEBUSY:20100514T054500Z/20100514T083000Z FREEBUSY:20100518T054500Z/20100518T083000Z FREEBUSY:20100521T054500Z/20100521T083000Z FREEBUSY:20100525T054500Z/20100525T083000Z FREEBUSY:20100528T054500Z/20100528T083000Z FREEBUSY:20100601T054500Z/20100601T083000Z FREEBUSY:20100601T103000Z/20100601T113000Z FREEBUSY:20100604T054500Z/20100604T083000Z FREEBUSY:20100608T054500Z/20100608T083000Z FREEBUSY:20100609T103000Z/20100609T113000Z FREEBUSY:20100611T054500Z/20100611T083000Z FREEBUSY:20100615T054500Z/20100615T083000Z FREEBUSY:20100617T103000Z/20100617T113000Z FREEBUSY:20100618T054500Z/20100618T083000Z FREEBUSY:20100622T054500Z/20100622T083000Z FREEBUSY:20100625T054500Z/20100625T083000Z FREEBUSY:20100625T103000Z/20100625T113000Z FREEBUSY:20100629T054500Z/20100629T083000Z FREEBUSY:20100702T054500Z/20100702T083000Z FREEBUSY:20100706T054500Z/20100706T083000Z FREEBUSY:20100709T054500Z/20100709T083000Z FREEBUSY:20100713T054500Z/20100713T083000Z FREEBUSY:20100716T054500Z/20100716T083000Z FREEBUSY:20100720T054500Z/20100720T083000Z FREEBUSY:20100723T054500Z/20100723T083000Z FREEBUSY:20100727T054500Z/20100727T083000Z FREEBUSY:20100730T054500Z/20100730T083000Z FREEBUSY:20100803T054500Z/20100803T083000Z FREEBUSY:20100806T054500Z/20100806T083000Z FREEBUSY:20100810T054500Z/20100810T083000Z FREEBUSY:20100813T054500Z/20100813T083000Z FREEBUSY:20100817T054500Z/20100817T083000Z FREEBUSY:20100820T054500Z/20100820T083000Z FREEBUSY:20100824T054500Z/20100824T083000Z FREEBUSY:20100827T054500Z/20100827T083000Z FREEBUSY:20100831T054500Z/20100831T083000Z FREEBUSY:20100903T054500Z/20100903T083000Z FREEBUSY:20100907T054500Z/20100907T083000Z FREEBUSY:20100907T103000Z/20100907T113000Z FREEBUSY:20100908T103000Z/20100908T113000Z FREEBUSY:20100910T054500Z/20100910T083000Z FREEBUSY:20100914T054500Z/20100914T083000Z FREEBUSY:20100916T103000Z/20100916T113000Z FREEBUSY:20100917T054500Z/20100917T083000Z FREEBUSY:20100921T054500Z/20100921T083000Z FREEBUSY:20100924T054500Z/20100924T083000Z FREEBUSY:20100924T103000Z/20100924T113000Z FREEBUSY:20100928T054500Z/20100928T083000Z FREEBUSY:20101001T054500Z/20101001T083000Z FREEBUSY:20101005T054500Z/20101005T083000Z FREEBUSY:20101005T103000Z/20101005T113000Z FREEBUSY:20101008T054500Z/20101008T083000Z FREEBUSY:20101012T054500Z/20101012T083000Z FREEBUSY:20101013T103000Z/20101013T113000Z FREEBUSY:20101015T054500Z/20101015T083000Z FREEBUSY:20101019T054500Z/20101019T083000Z FREEBUSY:20101021T103000Z/20101021T113000Z FREEBUSY:20101022T054500Z/20101022T083000Z FREEBUSY:20101022T103000Z/20101022T113000Z FREEBUSY:20101026T054500Z/20101026T083000Z FREEBUSY:20101029T054500Z/20101029T083000Z FREEBUSY:20101102T064500Z/20101102T093000Z FREEBUSY:20101105T064500Z/20101105T093000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user3@example.net END:VFREEBUSY END:VCALENDAR mailto:user4@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20001021T110000Z DTEND:20101106T110000Z FREEBUSY:20020211T100000Z/20020211T113000Z FREEBUSY:20020219T163000Z/20020219T180000Z FREEBUSY:20020220T113000Z/20020220T150000Z FREEBUSY:20020221T120000Z/20020221T133000Z FREEBUSY:20020225T130000Z/20020225T140000Z FREEBUSY:20020225T143000Z/20020225T153000Z FREEBUSY:20020301T110000Z/20020302T110000Z FREEBUSY:20020301T160000Z/20020301T210000Z FREEBUSY:20020305T163000Z/20020305T180000Z FREEBUSY:20020306T090000Z/20020306T100000Z FREEBUSY:20020311T130000Z/20020311T140000Z FREEBUSY:20020319T163000Z/20020319T180000Z FREEBUSY:20020402T163000Z/20020402T180000Z FREEBUSY:20020403T110000Z/20020403T123000Z FREEBUSY:20020404T120000Z/20020404T140000Z FREEBUSY:20020408T110000Z/20020408T120000Z FREEBUSY:20020410T120000Z/20020410T123000Z FREEBUSY:20020416T163000Z/20020416T180000Z FREEBUSY:20020422T110000Z/20020422T133000Z FREEBUSY:20020423T120000Z/20020423T123000Z FREEBUSY:20020425T120000Z/20020425T123000Z FREEBUSY:20020430T163000Z/20020430T180000Z FREEBUSY:20020502T120000Z/20020502T140000Z FREEBUSY:20020514T163000Z/20020514T180000Z FREEBUSY:20020807T120000Z/20020808T120000Z FREEBUSY:20020821T070000Z/20020821T080000Z FREEBUSY:20020821T073000Z/20020821T083000Z FREEBUSY:20020822T070000Z/20020822T120000Z FREEBUSY:20020826T120000Z/20020826T133000Z FREEBUSY:20020827T120000Z/20020827T150000Z FREEBUSY:20020827T160000Z/20020827T173000Z FREEBUSY:20020828T063000Z/20020828T114500Z FREEBUSY:20020828T120000Z/20020828T150000Z FREEBUSY:20020829T063000Z/20020829T114500Z FREEBUSY:20020829T120000Z/20020829T150000Z FREEBUSY:20020830T063000Z/20020830T114500Z FREEBUSY:20020830T120000Z/20020830T150000Z FREEBUSY:20020830T150000Z/20020830T160000Z FREEBUSY:20020904T063000Z/20020904T114500Z FREEBUSY:20020904T143000Z/20020904T153000Z FREEBUSY:20020905T063000Z/20020905T114500Z FREEBUSY:20020906T063000Z/20020906T114500Z FREEBUSY:20020906T120000Z/20020907T120000Z FREEBUSY:20020907T070000Z/20020907T150000Z FREEBUSY:20020910T063000Z/20020910T114500Z FREEBUSY:20020910T160000Z/20020910T170000Z FREEBUSY:20020911T063000Z/20020911T114500Z FREEBUSY:20020911T143000Z/20020911T153000Z FREEBUSY:20020912T063000Z/20020912T114500Z FREEBUSY:20020912T160000Z/20020912T170000Z FREEBUSY:20020913T063000Z/20020913T114500Z FREEBUSY:20020916T063000Z/20020916T114500Z FREEBUSY:20020917T063000Z/20020917T114500Z FREEBUSY:20020917T143000Z/20020917T153000Z FREEBUSY:20020918T063000Z/20020918T114500Z FREEBUSY:20020919T060000Z/20020919T220000Z FREEBUSY:20020919T063000Z/20020919T114500Z FREEBUSY:20020920T063000Z/20020920T114500Z FREEBUSY:20020923T063000Z/20020923T114500Z FREEBUSY:20020923T120000Z/20020923T133000Z FREEBUSY:20020923T160000Z/20020923T170000Z FREEBUSY:20020925T063000Z/20020925T114500Z FREEBUSY:20020926T063000Z/20020926T114500Z FREEBUSY:20020927T063000Z/20020927T114500Z FREEBUSY:20020930T063000Z/20020930T114500Z FREEBUSY:20020930T120000Z/20020930T133000Z FREEBUSY:20020930T120000Z/20021001T120000Z FREEBUSY:20020930T160000Z/20020930T170000Z FREEBUSY:20021001T063000Z/20021001T114500Z FREEBUSY:20021001T120000Z/20021001T140000Z FREEBUSY:20021002T063000Z/20021002T114500Z FREEBUSY:20021002T143000Z/20021002T160000Z FREEBUSY:20021004T063000Z/20021004T114500Z FREEBUSY:20021004T150000Z/20021004T160000Z FREEBUSY:20021007T063000Z/20021007T114500Z FREEBUSY:20021007T120000Z/20021007T133000Z FREEBUSY:20021008T110000Z/20021008T113000Z FREEBUSY:20021008T120000Z/20021008T130000Z FREEBUSY:20021009T070000Z/20021009T080000Z FREEBUSY:20021010T063000Z/20021010T114500Z FREEBUSY:20021010T120000Z/20021010T140000Z FREEBUSY:20021010T153000Z/20021010T163000Z FREEBUSY:20021011T063000Z/20021011T114500Z FREEBUSY:20021014T080000Z/20021014T090000Z FREEBUSY:20021021T063000Z/20021021T114500Z FREEBUSY:20021021T120000Z/20021021T130000Z FREEBUSY:20021021T150000Z/20021021T160000Z FREEBUSY:20021022T063000Z/20021024T220000Z FREEBUSY:20021022T160000Z/20021022T173000Z FREEBUSY:20021023T063000Z/20021023T114500Z FREEBUSY:20021023T063000Z/20021025T220000Z FREEBUSY:20021023T120000Z/20021023T133000Z FREEBUSY:20021023T143000Z/20021023T160000Z FREEBUSY:20021024T063000Z/20021026T220000Z FREEBUSY:20021024T151500Z/20021024T161500Z FREEBUSY:20021024T160000Z/20021024T170000Z FREEBUSY:20021025T120000Z/20021025T130000Z FREEBUSY:20021026T170000Z/20021026T173000Z FREEBUSY:20021028T073000Z/20021028T131500Z FREEBUSY:20021029T073000Z/20021029T124500Z FREEBUSY:20021029T073000Z/20021029T124500Z FREEBUSY:20021030T073000Z/20021030T131500Z FREEBUSY:20021031T073000Z/20021031T124500Z FREEBUSY:20021031T073000Z/20021031T124500Z FREEBUSY:20021101T073000Z/20021101T124500Z FREEBUSY:20021101T073000Z/20021101T124500Z FREEBUSY:20021101T130000Z/20021101T140000Z FREEBUSY:20021104T073000Z/20021104T131500Z FREEBUSY:20021104T130000Z/20021104T190000Z FREEBUSY:20021105T073000Z/20021105T124500Z FREEBUSY:20021105T073000Z/20021105T124500Z FREEBUSY:20021105T153000Z/20021105T163000Z FREEBUSY:20021106T073000Z/20021106T131500Z FREEBUSY:20021106T140000Z/20021106T150000Z FREEBUSY:20021106T160000Z/20021106T170000Z FREEBUSY:20021106T170000Z/20021106T180000Z FREEBUSY:20021107T073000Z/20021107T124500Z FREEBUSY:20021107T073000Z/20021107T124500Z FREEBUSY:20021111T073000Z/20021111T131500Z FREEBUSY:20021111T131500Z/20021111T141500Z FREEBUSY:20021111T163000Z/20021111T173000Z FREEBUSY:20021113T073000Z/20021113T131500Z FREEBUSY:20021113T140000Z/20021113T150000Z FREEBUSY:20021113T160000Z/20021113T170000Z FREEBUSY:20021115T073000Z/20021115T124500Z FREEBUSY:20021115T073000Z/20021115T124500Z FREEBUSY:20021118T073000Z/20021118T131500Z FREEBUSY:20021118T143000Z/20021118T163000Z FREEBUSY:20021118T143000Z/20021118T163000Z FREEBUSY:20021119T073000Z/20021119T124500Z FREEBUSY:20021120T073000Z/20021120T131500Z FREEBUSY:20021120T160000Z/20021120T170000Z FREEBUSY:20021122T073000Z/20021122T124500Z FREEBUSY:20021122T141500Z/20021122T151500Z FREEBUSY:20021125T073000Z/20021125T131500Z FREEBUSY:20021126T073000Z/20021128T230000Z FREEBUSY:20021126T130000Z/20021126T150000Z FREEBUSY:20021127T073000Z/20021127T131500Z FREEBUSY:20021127T073000Z/20021129T230000Z FREEBUSY:20021127T173000Z/20021127T200000Z FREEBUSY:20021128T073000Z/20021130T230000Z FREEBUSY:20021128T160000Z/20021128T170000Z FREEBUSY:20021129T150000Z/20021129T160000Z FREEBUSY:20021202T073000Z/20021202T124500Z FREEBUSY:20021202T073000Z/20021202T131500Z FREEBUSY:20021202T134500Z/20021202T140000Z FREEBUSY:20021202T151000Z/20021202T160000Z FREEBUSY:20021202T163000Z/20021202T173000Z FREEBUSY:20021203T073000Z/20021203T124500Z FREEBUSY:20021203T073000Z/20021203T230000Z FREEBUSY:20021203T140000Z/20021203T150000Z FREEBUSY:20021204T073000Z/20021204T131500Z FREEBUSY:20021204T073000Z/20021204T133000Z FREEBUSY:20021205T073000Z/20021205T230000Z FREEBUSY:20021205T150000Z/20021205T160000Z FREEBUSY:20021209T070000Z/20021209T170000Z FREEBUSY:20021210T073000Z/20021210T110000Z FREEBUSY:20021210T150000Z/20021210T160000Z FREEBUSY:20021211T130000Z/20021211T150000Z FREEBUSY:20021212T073000Z/20021212T230000Z FREEBUSY:20021212T160000Z/20021212T170000Z FREEBUSY:20021217T150000Z/20021217T163000Z FREEBUSY:20021217T163000Z/20021217T173000Z FREEBUSY:20030106T090000Z/20030106T100000Z FREEBUSY:20030125T160000Z/20030125T220000Z FREEBUSY:20030127T100000Z/20030127T110000Z FREEBUSY:20030128T080000Z/20030128T090000Z FREEBUSY:20030128T090000Z/20030128T100000Z FREEBUSY:20030205T080000Z/20030205T090000Z FREEBUSY:20030210T073000Z/20030210T124500Z FREEBUSY:20030212T073000Z/20030212T124500Z FREEBUSY:20030217T073000Z/20030217T124500Z FREEBUSY:20030219T073000Z/20030219T124500Z FREEBUSY:20030224T073000Z/20030224T124500Z FREEBUSY:20030226T073000Z/20030226T124500Z FREEBUSY:20030227T150000Z/20030227T160000Z FREEBUSY:20030228T160000Z/20030228T230000Z FREEBUSY:20030301T070000Z/20030301T170000Z FREEBUSY:20030303T073000Z/20030303T124500Z FREEBUSY:20030305T073000Z/20030305T124500Z FREEBUSY:20030310T073000Z/20030310T124500Z FREEBUSY:20030312T073000Z/20030312T124500Z FREEBUSY:20030317T073000Z/20030317T124500Z FREEBUSY:20030318T080000Z/20030318T120000Z FREEBUSY:20030319T073000Z/20030319T124500Z FREEBUSY:20030320T160000Z/20030320T220000Z FREEBUSY:20030323T070000Z/20030323T170000Z FREEBUSY:20030324T073000Z/20030324T124500Z FREEBUSY:20030326T073000Z/20030326T124500Z FREEBUSY:20030331T073000Z/20030331T124500Z FREEBUSY:20030402T073000Z/20030402T124500Z FREEBUSY:20030407T073000Z/20030407T124500Z FREEBUSY:20030409T073000Z/20030409T124500Z FREEBUSY:20030414T060000Z/20030420T220000Z FREEBUSY:20030414T073000Z/20030414T124500Z FREEBUSY:20030415T060000Z/20030421T220000Z FREEBUSY:20030416T060000Z/20030422T220000Z FREEBUSY:20030416T073000Z/20030416T124500Z FREEBUSY:20030417T060000Z/20030423T220000Z FREEBUSY:20030418T060000Z/20030424T220000Z FREEBUSY:20030419T060000Z/20030425T220000Z FREEBUSY:20030420T060000Z/20030426T220000Z FREEBUSY:20030421T073000Z/20030421T124500Z FREEBUSY:20030423T073000Z/20030423T124500Z FREEBUSY:20030424T173000Z/20030424T193000Z FREEBUSY:20030426T060000Z/20030426T160000Z FREEBUSY:20030428T073000Z/20030428T124500Z FREEBUSY:20030428T170000Z/20030428T210000Z FREEBUSY:20030430T073000Z/20030430T124500Z FREEBUSY:20030430T121500Z/20030430T131500Z FREEBUSY:20030502T090000Z/20030502T100000Z FREEBUSY:20030502T180000Z/20030502T210000Z FREEBUSY:20030505T073000Z/20030505T124500Z FREEBUSY:20030506T160000Z/20030506T200000Z FREEBUSY:20030507T140000Z/20030507T144500Z FREEBUSY:20030507T150000Z/20030507T190000Z FREEBUSY:20030509T063000Z/20030509T110000Z FREEBUSY:20030513T120000Z/20030513T140000Z FREEBUSY:20030514T080000Z/20030514T083000Z FREEBUSY:20030515T070000Z/20030515T140000Z FREEBUSY:20030515T160000Z/20030515T210000Z FREEBUSY:20030516T060000Z/20030516T160000Z FREEBUSY:20030520T120000Z/20030520T140000Z FREEBUSY:20030521T070000Z/20030521T080000Z FREEBUSY:20030522T120000Z/20030522T140000Z FREEBUSY:20030528T070000Z/20030528T080000Z FREEBUSY:20030529T100000Z/20030529T200000Z FREEBUSY:20030530T080000Z/20030530T220000Z FREEBUSY:20030603T160000Z/20030603T200000Z FREEBUSY:20030610T050000Z/20030610T160000Z FREEBUSY:20030617T080000Z/20030618T220000Z FREEBUSY:20030618T080000Z/20030619T220000Z FREEBUSY:20030620T120000Z/20030621T120000Z FREEBUSY:20030620T123000Z/20030620T130000Z FREEBUSY:20030705T160000Z/20030705T213000Z FREEBUSY:20030707T100000Z/20030707T130000Z FREEBUSY:20030711T060000Z/20030712T220000Z FREEBUSY:20030712T060000Z/20030713T220000Z FREEBUSY:20030726T060000Z/20030726T160000Z FREEBUSY:20030806T130000Z/20030806T140000Z FREEBUSY:20030811T070000Z/20030811T090000Z FREEBUSY:20030818T090000Z/20030818T100000Z FREEBUSY:20030819T070000Z/20030819T090000Z FREEBUSY:20030819T090000Z/20030819T100000Z FREEBUSY:20030825T063000Z/20030825T113000Z FREEBUSY:20030825T120000Z/20030825T123000Z FREEBUSY:20030826T070000Z/20030826T080000Z FREEBUSY:20030826T133000Z/20030826T143000Z FREEBUSY:20030827T063000Z/20030827T113000Z FREEBUSY:20030831T170000Z/20030831T173000Z FREEBUSY:20030901T063000Z/20030901T113000Z FREEBUSY:20030901T095500Z/20030901T100000Z FREEBUSY:20030901T120000Z/20030901T123000Z FREEBUSY:20030902T100000Z/20030902T110000Z FREEBUSY:20030902T143000Z/20030902T153000Z FREEBUSY:20030903T063000Z/20030903T113000Z FREEBUSY:20030903T123000Z/20030903T130000Z FREEBUSY:20030907T180000Z/20030907T200000Z FREEBUSY:20030908T063000Z/20030908T113000Z FREEBUSY:20030908T120000Z/20030908T130000Z FREEBUSY:20030910T063000Z/20030910T113000Z FREEBUSY:20030911T110000Z/20030911T213000Z FREEBUSY:20030915T063000Z/20030915T113000Z FREEBUSY:20030917T063000Z/20030917T113000Z FREEBUSY:20030917T123000Z/20030917T133000Z FREEBUSY:20030918T060000Z/20030918T220000Z FREEBUSY:20030922T063000Z/20030922T113000Z FREEBUSY:20030922T120000Z/20030922T123000Z FREEBUSY:20030922T120000Z/20030922T130000Z FREEBUSY:20030922T130000Z/20030922T140000Z FREEBUSY:20030924T063000Z/20030924T113000Z FREEBUSY:20030924T180000Z/20030924T200000Z FREEBUSY:20030925T120000Z/20030925T140000Z FREEBUSY:20030929T063000Z/20030929T113000Z FREEBUSY:20031001T063000Z/20031001T113000Z FREEBUSY:20031006T063000Z/20031006T113000Z FREEBUSY:20031006T160000Z/20031006T200000Z FREEBUSY:20031008T063000Z/20031008T113000Z FREEBUSY:20031009T140000Z/20031009T153000Z FREEBUSY:20031013T063000Z/20031013T113000Z FREEBUSY:20031013T070000Z/20031016T220000Z FREEBUSY:20031014T070000Z/20031017T220000Z FREEBUSY:20031015T063000Z/20031015T113000Z FREEBUSY:20031015T070000Z/20031018T220000Z FREEBUSY:20031016T070000Z/20031019T220000Z FREEBUSY:20031016T180000Z/20031016T210000Z FREEBUSY:20031020T063000Z/20031020T113000Z FREEBUSY:20031020T120000Z/20031020T140000Z FREEBUSY:20031021T130000Z/20031021T140000Z FREEBUSY:20031021T140000Z/20031021T150000Z FREEBUSY:20031021T150000Z/20031021T183000Z FREEBUSY:20031022T063000Z/20031022T113000Z FREEBUSY:20031027T063000Z/20031027T113000Z FREEBUSY:20031027T140000Z/20031027T160000Z FREEBUSY:20031028T150000Z/20031028T183000Z FREEBUSY:20031029T063000Z/20031029T113000Z FREEBUSY:20031029T123000Z/20031029T130000Z FREEBUSY:20031029T130000Z/20031029T140000Z FREEBUSY:20031031T080000Z/20031031T083000Z FREEBUSY:20031103T063000Z/20031103T113000Z FREEBUSY:20031103T130000Z/20031103T140000Z FREEBUSY:20031104T110000Z/20031104T113000Z FREEBUSY:20031104T150000Z/20031104T183000Z FREEBUSY:20031105T063000Z/20031105T113000Z FREEBUSY:20031105T130000Z/20031105T133000Z FREEBUSY:20031110T080000Z/20031110T170000Z FREEBUSY:20031111T150000Z/20031111T183000Z FREEBUSY:20031112T170000Z/20031112T203000Z FREEBUSY:20031118T150000Z/20031118T183000Z FREEBUSY:20031125T150000Z/20031125T183000Z FREEBUSY:20031128T130000Z/20031128T143000Z FREEBUSY:20031202T130000Z/20031202T140000Z FREEBUSY:20031202T150000Z/20031202T183000Z FREEBUSY:20031209T150000Z/20031209T183000Z FREEBUSY:20031212T110000Z/20031212T210000Z FREEBUSY:20031216T150000Z/20031216T183000Z FREEBUSY:20031216T160000Z/20031216T163000Z FREEBUSY:20031219T080000Z/20031219T083000Z FREEBUSY:20040126T080000Z/20040126T083000Z FREEBUSY:20040205T130000Z/20040205T140000Z FREEBUSY:20040220T130000Z/20040220T133000Z FREEBUSY:20040224T130000Z/20040224T150000Z FREEBUSY:20040602T060000Z/20040602T220000Z FREEBUSY:20040610T073000Z/20040610T100000Z FREEBUSY:20040616T060000Z/20040616T220000Z FREEBUSY:20040618T160000Z/20040618T210000Z FREEBUSY:20040628T063000Z/20040628T110000Z FREEBUSY:20040802T100000Z/20040802T130000Z FREEBUSY:20040802T120000Z/20040803T120000Z FREEBUSY:20040803T120000Z/20040804T120000Z FREEBUSY:20040806T070000Z/20040806T100000Z FREEBUSY:20040819T070000Z/20040819T100000Z FREEBUSY:20040823T060000Z/20040823T070000Z FREEBUSY:20040904T080000Z/20040904T170000Z FREEBUSY:20040909T170000Z/20040909T200000Z FREEBUSY:20040915T120000Z/20040915T140000Z FREEBUSY:20040915T120000Z/20040916T120000Z FREEBUSY:20040916T120000Z/20040917T120000Z FREEBUSY:20040921T093000Z/20040921T100000Z FREEBUSY:20041001T140000Z/20041001T150000Z FREEBUSY:20041111T130000Z/20041111T150000Z FREEBUSY:20050105T090000Z/20050106T230000Z FREEBUSY:20050106T090000Z/20050107T230000Z FREEBUSY:20050110T103000Z/20050110T110000Z FREEBUSY:20050113T083000Z/20050113T153000Z FREEBUSY:20050117T090000Z/20050117T160000Z FREEBUSY:20050119T083000Z/20050119T090000Z FREEBUSY:20050128T070000Z/20050129T230000Z FREEBUSY:20050129T070000Z/20050130T230000Z FREEBUSY:20050131T073000Z/20050131T123000Z FREEBUSY:20050201T160000Z/20050201T190000Z FREEBUSY:20050207T073000Z/20050207T123000Z FREEBUSY:20050208T160000Z/20050208T190000Z FREEBUSY:20050214T073000Z/20050214T123000Z FREEBUSY:20050215T160000Z/20050215T190000Z FREEBUSY:20050221T073000Z/20050221T123000Z FREEBUSY:20050222T160000Z/20050222T190000Z FREEBUSY:20050224T090000Z/20050224T230000Z FREEBUSY:20050228T073000Z/20050228T123000Z FREEBUSY:20050301T160000Z/20050301T190000Z FREEBUSY:20050307T073000Z/20050307T123000Z FREEBUSY:20050308T160000Z/20050308T190000Z FREEBUSY:20050314T073000Z/20050314T123000Z FREEBUSY:20050315T160000Z/20050315T190000Z FREEBUSY:20050322T160000Z/20050322T190000Z FREEBUSY:20050415T063000Z/20050415T113000Z FREEBUSY:20050422T063000Z/20050422T113000Z FREEBUSY:20050429T063000Z/20050429T113000Z FREEBUSY:20050506T063000Z/20050506T113000Z FREEBUSY:20050513T063000Z/20050513T113000Z FREEBUSY:20050729T193000Z/20050729T194500Z FREEBUSY:20050729T194500Z/20050729T214500Z FREEBUSY:20050809T063000Z/20050809T220000Z FREEBUSY:20050810T063000Z/20050810T220000Z FREEBUSY:20050811T110000Z/20050811T120000Z FREEBUSY:20050815T090000Z/20050815T110000Z FREEBUSY:20050825T140000Z/20050825T160000Z FREEBUSY:20050831T060000Z/20050831T100000Z FREEBUSY:20050901T060000Z/20050901T140000Z FREEBUSY:20050902T060000Z/20050902T140000Z FREEBUSY:20050905T080000Z/20050905T090000Z FREEBUSY:20050906T073000Z/20050906T090000Z FREEBUSY:20050907T060000Z/20050907T100000Z FREEBUSY:20050914T060000Z/20050914T100000Z FREEBUSY:20050920T060000Z/20050920T120000Z FREEBUSY:20050921T060000Z/20050921T100000Z FREEBUSY:20050922T060000Z/20050922T120000Z FREEBUSY:20050923T060000Z/20050923T120000Z FREEBUSY:20050926T060000Z/20050926T140000Z FREEBUSY:20050927T060000Z/20050927T140000Z FREEBUSY:20050928T060000Z/20050928T100000Z FREEBUSY:20050929T060000Z/20050929T140000Z FREEBUSY:20050930T060000Z/20050930T140000Z FREEBUSY:20051003T060000Z/20051003T140000Z FREEBUSY:20051005T060000Z/20051005T100000Z FREEBUSY:20051010T060000Z/20051010T140000Z FREEBUSY:20051011T060000Z/20051011T120000Z FREEBUSY:20051012T060000Z/20051012T100000Z FREEBUSY:20051013T060000Z/20051013T120000Z FREEBUSY:20051019T060000Z/20051019T100000Z FREEBUSY:20051024T060000Z/20051024T140000Z FREEBUSY:20051026T060000Z/20051026T100000Z FREEBUSY:20051028T060000Z/20051028T120000Z FREEBUSY:20051031T070000Z/20051031T150000Z FREEBUSY:20051102T060000Z/20051102T100000Z FREEBUSY:20051103T070000Z/20051103T150000Z FREEBUSY:20051104T110000Z/20051104T150000Z FREEBUSY:20051109T060000Z/20051109T100000Z FREEBUSY:20051110T070000Z/20051110T130000Z FREEBUSY:20051111T070000Z/20051111T150000Z FREEBUSY:20051122T070000Z/20051122T230000Z FREEBUSY:20051123T070000Z/20051123T230000Z FREEBUSY:20051124T070000Z/20051124T230000Z FREEBUSY:20051125T070000Z/20051125T230000Z FREEBUSY:20051128T070000Z/20051128T130000Z FREEBUSY:20051129T070000Z/20051129T130000Z FREEBUSY:20051130T070000Z/20051130T130000Z FREEBUSY:20051201T070000Z/20051201T130000Z FREEBUSY:20051202T070000Z/20051202T130000Z FREEBUSY:20051205T070000Z/20051205T130000Z FREEBUSY:20051206T070000Z/20051206T130000Z FREEBUSY:20051207T070000Z/20051207T130000Z FREEBUSY:20051208T070000Z/20051208T130000Z FREEBUSY:20051209T070000Z/20051209T130000Z FREEBUSY:20051212T070000Z/20051212T130000Z FREEBUSY:20060322T104500Z/20060321T230000Z FREEBUSY:20060324T110000Z/20060324T140000Z FREEBUSY:20060405T070000Z/20060405T220000Z FREEBUSY:20060406T070000Z/20060406T220000Z FREEBUSY:20060511T060000Z/20060513T220000Z FREEBUSY:20060512T060000Z/20060514T220000Z FREEBUSY:20060513T060000Z/20060515T220000Z FREEBUSY:20060514T060000Z/20060516T220000Z FREEBUSY:20060608T140000Z/20060608T210000Z FREEBUSY:20060616T100000Z/20060616T190000Z FREEBUSY:20060920T140000Z/20060920T180000Z FREEBUSY:20060927T140000Z/20060927T180000Z FREEBUSY:20061004T140000Z/20061004T180000Z FREEBUSY:20070115T080000Z/20070115T230000Z FREEBUSY:20070118T090000Z/20070118T120000Z FREEBUSY:20070119T080000Z/20070119T140000Z FREEBUSY:20070122T073000Z/20070122T100000Z FREEBUSY:20070122T123000Z/20070122T133000Z FREEBUSY:20070126T080000Z/20070126T090000Z FREEBUSY:20070130T073000Z/20070130T130000Z FREEBUSY:20070201T073000Z/20070201T130000Z FREEBUSY:20070206T073000Z/20070206T130000Z FREEBUSY:20070220T073000Z/20070220T130000Z FREEBUSY:20070222T090000Z/20070222T110000Z FREEBUSY:20070227T080000Z/20070227T130000Z FREEBUSY:20070301T073000Z/20070301T130000Z FREEBUSY:20070305T130000Z/20070305T150000Z FREEBUSY:20070306T073000Z/20070306T130000Z FREEBUSY:20070306T130000Z/20070306T150000Z FREEBUSY:20070307T073000Z/20070307T130000Z FREEBUSY:20070308T130000Z/20070308T150000Z FREEBUSY:20070313T073000Z/20070313T130000Z FREEBUSY:20070314T073000Z/20070314T130000Z FREEBUSY:20070315T073000Z/20070315T130000Z FREEBUSY:20070320T073000Z/20070320T130000Z FREEBUSY:20070321T071500Z/20070321T130000Z FREEBUSY:20070322T073000Z/20070322T130000Z FREEBUSY:20070327T063000Z/20070327T120000Z FREEBUSY:20070329T063000Z/20070329T120000Z FREEBUSY:20070410T063000Z/20070410T120000Z FREEBUSY:20070411T120000Z/20070411T140000Z FREEBUSY:20070412T063000Z/20070412T120000Z FREEBUSY:20070419T120000Z/20070419T140000Z FREEBUSY:20070501T063000Z/20070501T120000Z FREEBUSY:20070503T063000Z/20070503T120000Z FREEBUSY:20070510T120000Z/20070510T140000Z FREEBUSY:20070516T120000Z/20070516T140000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user4@example.net END:VFREEBUSY END:VCALENDAR mailto:user6@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20001021T110000Z DTEND:20101106T110000Z FREEBUSY:20081024T054500Z/20081024T083000Z FREEBUSY:20081025T103000Z/20081025T113000Z FREEBUSY:20081028T064500Z/20081028T093000Z FREEBUSY:20081031T064500Z/20081031T093000Z FREEBUSY:20081104T064500Z/20081104T093000Z FREEBUSY:20081107T064500Z/20081107T093000Z FREEBUSY:20081111T064500Z/20081111T093000Z FREEBUSY:20081114T064500Z/20081114T093000Z FREEBUSY:20081118T064500Z/20081118T093000Z FREEBUSY:20081121T064500Z/20081121T093000Z FREEBUSY:20081125T064500Z/20081125T093000Z FREEBUSY:20081128T064500Z/20081128T093000Z FREEBUSY:20081202T064500Z/20081202T093000Z FREEBUSY:20081202T113000Z/20081202T123000Z FREEBUSY:20081205T064500Z/20081205T093000Z FREEBUSY:20081209T064500Z/20081209T093000Z FREEBUSY:20081210T113000Z/20081210T123000Z FREEBUSY:20081212T064500Z/20081212T093000Z FREEBUSY:20081216T064500Z/20081216T093000Z FREEBUSY:20081218T113000Z/20081218T123000Z FREEBUSY:20081219T064500Z/20081219T093000Z FREEBUSY:20081223T064500Z/20081223T093000Z FREEBUSY:20081226T064500Z/20081226T093000Z FREEBUSY:20081226T113000Z/20081226T123000Z FREEBUSY:20081230T064500Z/20081230T093000Z FREEBUSY:20090102T064500Z/20090102T093000Z FREEBUSY:20090106T064500Z/20090106T093000Z FREEBUSY:20090109T064500Z/20090109T093000Z FREEBUSY:20090113T064500Z/20090113T093000Z FREEBUSY:20090116T064500Z/20090116T093000Z FREEBUSY:20090120T064500Z/20090120T093000Z FREEBUSY:20090123T064500Z/20090123T093000Z FREEBUSY:20090127T064500Z/20090127T093000Z FREEBUSY:20090130T064500Z/20090130T093000Z FREEBUSY:20090203T064500Z/20090203T093000Z FREEBUSY:20090206T064500Z/20090206T093000Z FREEBUSY:20090210T064500Z/20090210T093000Z FREEBUSY:20090213T064500Z/20090213T093000Z FREEBUSY:20090217T064500Z/20090217T093000Z FREEBUSY:20090220T064500Z/20090220T093000Z FREEBUSY:20090224T064500Z/20090224T093000Z FREEBUSY:20090227T064500Z/20090227T093000Z FREEBUSY:20090303T064500Z/20090303T093000Z FREEBUSY:20090303T113000Z/20090303T123000Z FREEBUSY:20090306T064500Z/20090306T093000Z FREEBUSY:20090310T064500Z/20090310T093000Z FREEBUSY:20090311T113000Z/20090311T123000Z FREEBUSY:20090313T064500Z/20090313T093000Z FREEBUSY:20090317T064500Z/20090317T093000Z FREEBUSY:20090319T113000Z/20090319T123000Z FREEBUSY:20090320T064500Z/20090320T093000Z FREEBUSY:20090324T064500Z/20090324T093000Z FREEBUSY:20090327T064500Z/20090327T093000Z FREEBUSY:20090327T113000Z/20090327T123000Z FREEBUSY:20090331T054500Z/20090331T083000Z FREEBUSY:20090403T054500Z/20090403T083000Z FREEBUSY:20090407T054500Z/20090407T083000Z FREEBUSY:20090410T054500Z/20090410T083000Z FREEBUSY:20090414T054500Z/20090414T083000Z FREEBUSY:20090417T054500Z/20090417T083000Z FREEBUSY:20090421T054500Z/20090421T083000Z FREEBUSY:20090424T054500Z/20090424T083000Z FREEBUSY:20090428T054500Z/20090428T083000Z FREEBUSY:20090501T054500Z/20090501T083000Z FREEBUSY:20090505T054500Z/20090505T083000Z FREEBUSY:20090508T054500Z/20090508T083000Z FREEBUSY:20090512T054500Z/20090512T083000Z FREEBUSY:20090515T054500Z/20090515T083000Z FREEBUSY:20090519T054500Z/20090519T083000Z FREEBUSY:20090522T054500Z/20090522T083000Z FREEBUSY:20090526T054500Z/20090526T083000Z FREEBUSY:20090529T054500Z/20090529T083000Z FREEBUSY:20090602T054500Z/20090602T083000Z FREEBUSY:20090602T103000Z/20090602T113000Z FREEBUSY:20090605T054500Z/20090605T083000Z FREEBUSY:20090609T054500Z/20090609T083000Z FREEBUSY:20090610T103000Z/20090610T113000Z FREEBUSY:20090612T054500Z/20090612T083000Z FREEBUSY:20090616T054500Z/20090616T083000Z FREEBUSY:20090618T103000Z/20090618T113000Z FREEBUSY:20090619T054500Z/20090619T083000Z FREEBUSY:20090623T054500Z/20090623T083000Z FREEBUSY:20090626T054500Z/20090626T083000Z FREEBUSY:20090626T103000Z/20090626T113000Z FREEBUSY:20090630T054500Z/20090630T083000Z FREEBUSY:20090703T054500Z/20090703T083000Z FREEBUSY:20090707T054500Z/20090707T083000Z FREEBUSY:20090710T054500Z/20090710T083000Z FREEBUSY:20090714T054500Z/20090714T083000Z FREEBUSY:20090717T054500Z/20090717T083000Z FREEBUSY:20090721T054500Z/20090721T083000Z FREEBUSY:20090724T054500Z/20090724T083000Z FREEBUSY:20090728T054500Z/20090728T083000Z FREEBUSY:20090731T054500Z/20090731T083000Z FREEBUSY:20090804T054500Z/20090804T083000Z FREEBUSY:20090807T054500Z/20090807T083000Z FREEBUSY:20090811T054500Z/20090811T083000Z FREEBUSY:20090814T054500Z/20090814T083000Z FREEBUSY:20090818T054500Z/20090818T083000Z FREEBUSY:20090821T054500Z/20090821T083000Z FREEBUSY:20090825T054500Z/20090825T083000Z FREEBUSY:20090828T054500Z/20090828T083000Z FREEBUSY:20090901T054500Z/20090901T083000Z FREEBUSY:20090901T103000Z/20090901T113000Z FREEBUSY:20090904T054500Z/20090904T083000Z FREEBUSY:20090908T054500Z/20090908T083000Z FREEBUSY:20090909T103000Z/20090909T113000Z FREEBUSY:20090911T054500Z/20090911T083000Z FREEBUSY:20090915T054500Z/20090915T083000Z FREEBUSY:20090917T103000Z/20090917T113000Z FREEBUSY:20090918T054500Z/20090918T083000Z FREEBUSY:20090922T054500Z/20090922T083000Z FREEBUSY:20090925T054500Z/20090925T083000Z FREEBUSY:20090925T103000Z/20090925T113000Z FREEBUSY:20090929T054500Z/20090929T083000Z FREEBUSY:20091002T054500Z/20091002T083000Z FREEBUSY:20091006T054500Z/20091006T083000Z FREEBUSY:20091006T103000Z/20091006T113000Z FREEBUSY:20091009T054500Z/20091009T083000Z FREEBUSY:20091013T054500Z/20091013T083000Z FREEBUSY:20091014T103000Z/20091014T113000Z FREEBUSY:20091015T103000Z/20091015T113000Z FREEBUSY:20091016T054500Z/20091016T083000Z FREEBUSY:20091020T054500Z/20091020T083000Z FREEBUSY:20091023T054500Z/20091023T083000Z FREEBUSY:20091023T103000Z/20091023T113000Z FREEBUSY:20091027T064500Z/20091027T093000Z FREEBUSY:20091030T064500Z/20091030T093000Z FREEBUSY:20091103T064500Z/20091103T093000Z FREEBUSY:20091106T064500Z/20091106T093000Z FREEBUSY:20091110T064500Z/20091110T093000Z FREEBUSY:20091113T064500Z/20091113T093000Z FREEBUSY:20091117T064500Z/20091117T093000Z FREEBUSY:20091120T064500Z/20091120T093000Z FREEBUSY:20091124T064500Z/20091124T093000Z FREEBUSY:20091127T064500Z/20091127T093000Z FREEBUSY:20091201T064500Z/20091201T093000Z FREEBUSY:20091201T113000Z/20091201T123000Z FREEBUSY:20091204T064500Z/20091204T093000Z FREEBUSY:20091208T064500Z/20091208T093000Z FREEBUSY:20091209T113000Z/20091209T123000Z FREEBUSY:20091211T064500Z/20091211T093000Z FREEBUSY:20091215T064500Z/20091215T093000Z FREEBUSY:20091217T113000Z/20091217T123000Z FREEBUSY:20091218T064500Z/20091218T093000Z FREEBUSY:20091222T064500Z/20091222T093000Z FREEBUSY:20091225T064500Z/20091225T093000Z FREEBUSY:20091225T113000Z/20091225T123000Z FREEBUSY:20091229T064500Z/20091229T093000Z FREEBUSY:20100101T064500Z/20100101T093000Z FREEBUSY:20100105T064500Z/20100105T093000Z FREEBUSY:20100108T064500Z/20100108T093000Z FREEBUSY:20100112T064500Z/20100112T093000Z FREEBUSY:20100115T064500Z/20100115T093000Z FREEBUSY:20100119T064500Z/20100119T093000Z FREEBUSY:20100122T064500Z/20100122T093000Z FREEBUSY:20100126T064500Z/20100126T093000Z FREEBUSY:20100129T064500Z/20100129T093000Z FREEBUSY:20100202T064500Z/20100202T093000Z FREEBUSY:20100205T064500Z/20100205T093000Z FREEBUSY:20100209T064500Z/20100209T093000Z FREEBUSY:20100212T064500Z/20100212T093000Z FREEBUSY:20100216T064500Z/20100216T093000Z FREEBUSY:20100219T064500Z/20100219T093000Z FREEBUSY:20100223T064500Z/20100223T093000Z FREEBUSY:20100226T064500Z/20100226T093000Z FREEBUSY:20100302T064500Z/20100302T093000Z FREEBUSY:20100302T113000Z/20100302T123000Z FREEBUSY:20100305T064500Z/20100305T093000Z FREEBUSY:20100309T064500Z/20100309T093000Z FREEBUSY:20100310T113000Z/20100310T123000Z FREEBUSY:20100312T064500Z/20100312T093000Z FREEBUSY:20100316T064500Z/20100316T093000Z FREEBUSY:20100318T113000Z/20100318T123000Z FREEBUSY:20100319T064500Z/20100319T093000Z FREEBUSY:20100323T064500Z/20100323T093000Z FREEBUSY:20100326T064500Z/20100326T093000Z FREEBUSY:20100326T113000Z/20100326T123000Z FREEBUSY:20100330T054500Z/20100330T083000Z FREEBUSY:20100402T054500Z/20100402T083000Z FREEBUSY:20100406T054500Z/20100406T083000Z FREEBUSY:20100409T054500Z/20100409T083000Z FREEBUSY:20100413T054500Z/20100413T083000Z FREEBUSY:20100416T054500Z/20100416T083000Z FREEBUSY:20100420T054500Z/20100420T083000Z FREEBUSY:20100423T054500Z/20100423T083000Z FREEBUSY:20100427T054500Z/20100427T083000Z FREEBUSY:20100430T054500Z/20100430T083000Z FREEBUSY:20100504T054500Z/20100504T083000Z FREEBUSY:20100507T054500Z/20100507T083000Z FREEBUSY:20100511T054500Z/20100511T083000Z FREEBUSY:20100514T054500Z/20100514T083000Z FREEBUSY:20100518T054500Z/20100518T083000Z FREEBUSY:20100521T054500Z/20100521T083000Z FREEBUSY:20100525T054500Z/20100525T083000Z FREEBUSY:20100528T054500Z/20100528T083000Z FREEBUSY:20100601T054500Z/20100601T083000Z FREEBUSY:20100601T103000Z/20100601T113000Z FREEBUSY:20100604T054500Z/20100604T083000Z FREEBUSY:20100608T054500Z/20100608T083000Z FREEBUSY:20100609T103000Z/20100609T113000Z FREEBUSY:20100611T054500Z/20100611T083000Z FREEBUSY:20100615T054500Z/20100615T083000Z FREEBUSY:20100617T103000Z/20100617T113000Z FREEBUSY:20100618T054500Z/20100618T083000Z FREEBUSY:20100622T054500Z/20100622T083000Z FREEBUSY:20100625T054500Z/20100625T083000Z FREEBUSY:20100625T103000Z/20100625T113000Z FREEBUSY:20100629T054500Z/20100629T083000Z FREEBUSY:20100702T054500Z/20100702T083000Z FREEBUSY:20100706T054500Z/20100706T083000Z FREEBUSY:20100709T054500Z/20100709T083000Z FREEBUSY:20100713T054500Z/20100713T083000Z FREEBUSY:20100716T054500Z/20100716T083000Z FREEBUSY:20100720T054500Z/20100720T083000Z FREEBUSY:20100723T054500Z/20100723T083000Z FREEBUSY:20100727T054500Z/20100727T083000Z FREEBUSY:20100730T054500Z/20100730T083000Z FREEBUSY:20100803T054500Z/20100803T083000Z FREEBUSY:20100806T054500Z/20100806T083000Z FREEBUSY:20100810T054500Z/20100810T083000Z FREEBUSY:20100813T054500Z/20100813T083000Z FREEBUSY:20100817T054500Z/20100817T083000Z FREEBUSY:20100820T054500Z/20100820T083000Z FREEBUSY:20100824T054500Z/20100824T083000Z FREEBUSY:20100827T054500Z/20100827T083000Z FREEBUSY:20100831T054500Z/20100831T083000Z FREEBUSY:20100903T054500Z/20100903T083000Z FREEBUSY:20100907T054500Z/20100907T083000Z FREEBUSY:20100907T103000Z/20100907T113000Z FREEBUSY:20100908T103000Z/20100908T113000Z FREEBUSY:20100910T054500Z/20100910T083000Z FREEBUSY:20100914T054500Z/20100914T083000Z FREEBUSY:20100916T103000Z/20100916T113000Z FREEBUSY:20100917T054500Z/20100917T083000Z FREEBUSY:20100921T054500Z/20100921T083000Z FREEBUSY:20100924T054500Z/20100924T083000Z FREEBUSY:20100924T103000Z/20100924T113000Z FREEBUSY:20100928T054500Z/20100928T083000Z FREEBUSY:20101001T054500Z/20101001T083000Z FREEBUSY:20101005T054500Z/20101005T083000Z FREEBUSY:20101005T103000Z/20101005T113000Z FREEBUSY:20101008T054500Z/20101008T083000Z FREEBUSY:20101012T054500Z/20101012T083000Z FREEBUSY:20101013T103000Z/20101013T113000Z FREEBUSY:20101015T054500Z/20101015T083000Z FREEBUSY:20101019T054500Z/20101019T083000Z FREEBUSY:20101021T103000Z/20101021T113000Z FREEBUSY:20101022T054500Z/20101022T083000Z FREEBUSY:20101022T103000Z/20101022T113000Z FREEBUSY:20101026T054500Z/20101026T083000Z FREEBUSY:20101029T054500Z/20101029T083000Z FREEBUSY:20101102T064500Z/20101102T093000Z FREEBUSY:20101105T064500Z/20101105T093000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user6@example.net END:VFREEBUSY END:VCALENDAR mailto:resource2@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20001021T110000Z DTEND:20101106T110000Z FREEBUSY:20061029T210000Z/20061029T220000Z FREEBUSY:20071122T230000Z/20071123T010000Z FREEBUSY:20071227T230000Z/20071228T010000Z FREEBUSY:20080124T230000Z/20080125T010000Z FREEBUSY:20080221T230000Z/20080222T010000Z FREEBUSY:20080327T230000Z/20080328T010000Z FREEBUSY:20080425T000000Z/20080425T020000Z FREEBUSY:20080523T000000Z/20080523T020000Z FREEBUSY:20080627T000000Z/20080627T020000Z FREEBUSY:20080725T000000Z/20080725T020000Z FREEBUSY:20080822T000000Z/20080822T020000Z FREEBUSY:20080926T000000Z/20080926T020000Z FREEBUSY:20081023T230000Z/20081024T010000Z FREEBUSY:20081127T230000Z/20081128T010000Z FREEBUSY:20081225T230000Z/20081226T010000Z FREEBUSY:20090122T230000Z/20090123T010000Z FREEBUSY:20090226T230000Z/20090227T010000Z FREEBUSY:20090326T230000Z/20090327T010000Z FREEBUSY:20090424T000000Z/20090424T020000Z FREEBUSY:20090522T000000Z/20090522T020000Z FREEBUSY:20090626T000000Z/20090626T020000Z FREEBUSY:20090724T000000Z/20090724T020000Z FREEBUSY:20090828T000000Z/20090828T020000Z FREEBUSY:20090925T000000Z/20090925T020000Z FREEBUSY:20091022T230000Z/20091023T010000Z FREEBUSY:20091126T230000Z/20091127T010000Z FREEBUSY:20091224T230000Z/20091225T010000Z FREEBUSY:20100121T230000Z/20100122T010000Z FREEBUSY:20100225T230000Z/20100226T010000Z FREEBUSY:20100325T230000Z/20100326T010000Z FREEBUSY:20100423T000000Z/20100423T020000Z FREEBUSY:20100528T000000Z/20100528T020000Z FREEBUSY:20100625T000000Z/20100625T020000Z FREEBUSY:20100723T000000Z/20100723T020000Z FREEBUSY:20100827T000000Z/20100827T020000Z FREEBUSY:20100924T000000Z/20100924T020000Z FREEBUSY:20101021T230000Z/20101022T010000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:resource2@example.net END:VFREEBUSY END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0217-Moz-PUT-Cancelled-Task.test0000644000000000000000000000275711446006434023421 0ustar # # PUT a new task in the calendar # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.7pre) Gecko/20070805 Calendar/0.7pre HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO CREATED:20070806T223244Z LAST-MODIFIED:20070806T223411Z DTSTAMP:20070806T223244Z UID:b1679f77-673d-4f46-b3eb-2420e1bba301 SUMMARY:A Cancelled Task\, with a start and due date STATUS:CANCELLED DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500 DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500 X-MOZ-LOCATIONPATH:b1679f77-673d-4f46-b3eb-2420e1bba301.ics DESCRIPTION:This is a task with a Start and a Due date\, but it has been cancelled. END:VTODO END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0863-Spec-REPORT-principal.result0000644000000000000000000000232711732223603023654 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "a6dbbd586976d9978572b451ef5d39a3" Content-Length: 923 Content-Type: text/xml; charset="utf-8" /caldav.php/resmgr1/ /caldav.php/resmgr1/ Resource Managers /caldav.php/resmgr1/ /caldav.php/user1/ /caldav.php/user2/ /caldav.php/assistant1/ /caldav.php/resource1/calendar-proxy-write/ /caldav.php/resource2/calendar-proxy-write/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0509-iCal-PROPPATCH.result0000644000000000000000000000122411747467502022206 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 326 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ All requested changes were made. HTTP/1.1 200 OK dav_displayname: >iCal Calendar< is_calendar: >1< davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-us_holidays.test0000644000000000000000000000047511633117640025637 0ustar # # PUT a calendar collection to user4 so we have some starting events # # There is no CalDAV defined behaviour for this. # TYPE=PUT URL=http://mycaldav/caldav.php/user4/us_holidays/ HEADER=User-Agent: RSCDS Testing/0.9.x HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user4:user4 HEAD DATA=us_holidays.ics davical-1.1.1/testing/tests/regression-suite/0836-freebusy.test0000644000000000000000000000256111651212132021252 0ustar # # Request a freebusy report by URL, from a different user # who has been granted freebusy privilege to this calendar. # TYPE=GET AUTH=user2:user2 URL=http://mycaldav/freebusy.php/user1@example.net?start=20061001T000000&finish=20070630T235959 HEAD REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ REPLACE=/^DTSTART:20061001T000000Z$/DTSTART:correct/ REPLACE=/^DTEND:20070630T235959Z$/DTEND:correct/ QUERY SELECT calendar_item.rrule, calendar_item.status, dtstart AT TIME ZONE olson_name AS "a) Start", olson_name AS "b) Location", to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "c)UTC Start", to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "d) UTC End" FROM usr INNER JOIN collection USING (user_no) INNER JOIN caldav_data USING (collection_id) INNER JOIN calendar_item USING(dav_id) LEFT JOIN timezones ON (tz_id=tzid) WHERE usr.email = 'user1@example.net' AND collection.is_calendar AND collection.schedule_transp = 'opaque' AND rrule_event_overlaps( dtstart, dtend, rrule, '20061001T000000Z', '20070630T235959Z' ) AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ORDER BY 3 ENDQUERY davical-1.1.1/testing/tests/regression-suite/0101-Evo-OPTIONS-1.result0000644000000000000000000000056011732222750021772 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT, DELETE, LOCK, UNLOCK, MOVE, GET, PUT, HEAD, MKTICKET, DELTICKET, ACL Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/1100-REPORT-sync-changed.result0000644000000000000000000000271211743151715023333 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "b74a74d1756d0fbbe7f839b73581dace" Content-Length: 1165 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics "165746adbab8bc0c8336a63cc5332ff2" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/i1278618276.ics HTTP/1.1 404 Not Found /caldav.php/user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics "2a09ef8c6a9e0b6bc16228359b99d8e7" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/PUT-eastern-time.ics "0b17d5f4102e63037d2ae732e4ca563d" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK data:,36 davical-1.1.1/testing/tests/regression-suite/0528-iCal-PROPFIND.result0000644000000000000000000000255411732223053022060 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "1f0e016ecbd8566bc60b88a167178059" Content-Length: 1071 Content-Type: text/xml; charset="utf-8" /caldav.php/resmgr1/ /caldav.php/resource1/calendar-proxy-write/ /caldav.php/resource2/calendar-proxy-write/ HTTP/1.1 200 OK /caldav.php/resmgr1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-write/ /caldav.php/resource2/calendar-proxy-write/ HTTP/1.1 200 OK /caldav.php/resmgr1/calendar-proxy-write/ /caldav.php/resource1/calendar-proxy-write/ /caldav.php/resource2/calendar-proxy-write/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0558-iPhone-PROPFIND.test0000644000000000000000000000114511651212132022065 0ustar # # Testing with a process similar to iPhone 3.1 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEAD AUTH=user1:user1 HEADER=User-Agent: DAVKit/4.0 (728.3); iCalendar/1 (34); iPhone/3.0 7A341 HEADER=Content-Type: text/xml HEADER=Depth: 1 # # This query from the iPhone goes to the calendar-home-set and checks # what is available under that collection. # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0817-Spec-PUT.result0000644000000000000000000000354611732223553021341 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "165746adbab8bc0c8336a63cc5332ff2" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//davical.org//NONSGML AWL Calendar//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:19901007T020000 RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU TZNAME:NZDT END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DESCRIPTION:Have a party. All the best parties are monthly! UID:DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74 DTSTAMP:20081024T220925Z SUMMARY:Party all day! CREATED:20081024T220749Z DTSTART;TZID=Pacific/Auckland;VALUE=DATE:20081114 RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< dav_etag: >165746adbab8bc0c8336a63cc5332ff2< description: >Have a party. All the best parties are monthly!< dtend: >2008-11-15 00:00:00< dtstamp: >2008-10-24 22:09:25< dtstart: >2008-11-14 00:00:00< due: >NULL< last_modified: >2008-10-24 22:09:25< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR< status: >NULL< summary: >Party all day!< transp: >NULL< tz_id: >Pacific/Auckland< uid: >DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74< url: >NULL< user_no: >10< ~Duration: >1 day< davical-1.1.1/testing/tests/regression-suite/0020-Mulberry-DELETE-1.test0000644000000000000000000000053011446006434022310 0ustar # # Do a DELETE with a bogus etag so it will fail. TYPE=DELETE URL=http://mycaldav/caldav.php/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics HEADER=If-Match: "bogus-etag-b000d7defa19ccb7cd21e546b54155ee" HEAD QUERY SELECT dav_name, dav_etag FROM caldav_data WHERE dav_name = '/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0222-Moz-OPTIONS-allowed.result0000644000000000000000000000057211732223003023274 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT, DELETE, LOCK, UNLOCK, MOVE, GET, HEAD, MKCOL, MKCALENDAR, PROPPATCH, BIND, ACL Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0532-iCal4-PROPFIND.test0000644000000000000000000000171411446006434021601 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml HEADER=Depth: 1 # # Looking for interesting stuff like xmpp-uri # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0404-Cadaver-PUT-1.test0000644000000000000000000000232211651212132021561 0ustar # # Doing a PUT with cadaver # TYPE=PUT URL=http://regression.host/caldav.php/user1/home/20061101T073004Z.ics GETSQL=locktoken SELECT opaquelocktoken FROM locks WHERE dav_name = '/user1/home/20061101T073004Z.ics' ENDSQL HEADER=User-Agent: cadaver/0.22.3 neon/0.25.5 HEADER=If: () BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VEVENT UID:20061101T073000Z-10468-1000-1-7@ubu DTSTAMP:20061101T073000Z DTSTART;TZID=Pacific/Auckland:20061101T100000 DTEND;TZID=Pacific/Auckland:20061101T110000 SUMMARY:A Changed Meeting BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:A Meeting END:VALARM END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0207-Moz-REPORT-4.result0000644000000000000000000000320211732222771021677 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "cb43f2c3842d4c779d06f3790a43a067" Content-Length: 1349 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061120T041336Z LAST-MODIFIED:20061120T041709Z DTSTAMP:20061120T041709Z UID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 SUMMARY:Weekly Project Meeting PRIORITY:0 CLASS:PUBLIC RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000 CATEGORIES:Projects X-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0516-iCal-POST.result0000644000000000000000000000272311631652677021437 0ustar mailto:user2@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20081022T054500Z DTEND:20081024T083000Z FREEBUSY:20081023T220000Z/20081023T223000Z FREEBUSY:20081024T010000Z/20081024T020000Z UID:89E43E7F-911D-4052-9FE3-4782268649E0 ORGANIZER:mailto:user1@example.net X-WR-ATTENDEE:mailto:user2@example.net END:VFREEBUSY END:VCALENDAR a) Start: >2008-10-06 00:00:00< b) Location: >America/Los_Angeles< c)UTC Start: >20081006T070000Z< d) UTC End: >20081007T070000Z< rrule: >FREQ=MONTHLY;BYDAY=1MO,2TU,3TH,-1FR;INTERVAL=1< status: >NULL< a) Start: >2008-10-20 11:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20081019T220000Z< d) UTC End: >20081019T223000Z< rrule: >FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR< status: >NULL< a) Start: >2008-10-24 14:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20081024T010000Z< d) UTC End: >20081024T020000Z< rrule: >FREQ=WEEKLY;INTERVAL=1< status: >NULL< davical-1.1.1/testing/tests/regression-suite/0931-REPORT-expand-property.result0000644000000000000000000000775411732223653024156 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "0d81b1b934eb738f04a8d9aee626b2f4" Content-Length: 3759 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/assistant1/ Assistant 1 /caldav.php/assistant1/ HTTP/1.1 200 OK /caldav.php/manager1/ Manager 1 /caldav.php/manager1/ HTTP/1.1 200 OK /caldav.php/resmgr1/ Resource Managers /caldav.php/resmgr1/ HTTP/1.1 200 OK /caldav.php/resource1/ Resource 1 /caldav.php/resource1/ HTTP/1.1 200 OK /caldav.php/resource2/ Resource 2 /caldav.php/resource2/ HTTP/1.1 200 OK /caldav.php/teamclient1/ Team for Client1 /caldav.php/teamclient1/ HTTP/1.1 200 OK /caldav.php/manager1/calendar-proxy-read/ manager1 proxy read /caldav.php/manager1/ HTTP/1.1 200 OK /caldav.php/assistant1/calendar-proxy-read/ assistant1 proxy read /caldav.php/assistant1/ HTTP/1.1 200 OK /caldav.php/resource1/calendar-proxy-write/ resource1 proxy write /caldav.php/resource1/ HTTP/1.1 200 OK /caldav.php/resource2/calendar-proxy-write/ resource2 proxy write /caldav.php/resource2/ HTTP/1.1 200 OK HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0600-Soho-OPTIONS.test0000644000000000000000000000032211446006434021455 0ustar # # Do an initial OPTIONS request (unauthenticated) TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/ NOAUTH HEADER=User-Agent: SOHO Organizer/6.5.2 libcurl/7.17.0 OpenSSL/0.9.7l zlib/1.2.3 libssh2/0.17 HEAD davical-1.1.1/testing/tests/regression-suite/0606-Soho-PROPPATCH.test0000644000000000000000000000164111446006434021675 0ustar # # SOHO Organizer works best looking at the person # # Make some changes to the calendar properties # TYPE=PROPPATCH # Note the URL doesn't have a trailling '/' URL=http://mycaldav/caldav.php/user1/SOHO%20collection HEADER=User-Agent: SOHO Organizer/6.5.2 libcurl/7.17.0 OpenSSL/0.9.7l zlib/1.2.3 libssh2/0.17 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Accept: */* HEADER=Content-Type: application/xml; charset="utf-8" HEAD BEGINDATA homeCalendar description#FF8000FF ENDDATA QUERY SELECT * FROM collection JOIN property USING (dav_name) WHERE collection.dav_name = '/user1/SOHO collection'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0917-PROPFIND-supported-stuff.result0000644000000000000000000000361011732223641024361 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "3447a04184df5d673f50e8c7a0952a68" Content-Length: 1611 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ User 1 HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0851-Spec-REPORT-1.test0000644000000000000000000000114211446006434021466 0ustar # # Check for support of REPORT calendar-multiget # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-agent: SpecTest REPORT HEADER=Content-type: text/xml HEAD BEGINDATA 1906b3ca-4890-468a-9b58-1de74bf2c716.ics 20061101T073004Z.ics 3F4CF6227300FD062D9EF3CDFB30D32D-0.ics 4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics ENDDATA davical-1.1.1/testing/tests/regression-suite/0823-Spec-PROPFIND-4.result0000644000000000000000000000503511633117640022242 0ustar /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics /caldav.php/assistant1/ /caldav.php/teamclient1/ 20061024T115217Z Morning Mgmt Mtg 313 text/calendar "6f16959eee5c920b45548840b1e9ea19" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0903-GET-Collection.test0000644000000000000000000000021211446006434022130 0ustar # # Doing a GET on an entire collection that we # just added with a PUT. # TYPE=GET URL=http://mycaldav/caldav.php/user1/anotherone/ HEAD davical-1.1.1/testing/tests/regression-suite/0804-Mulberry-PUT-1.result0000644000000000000000000000511611732223546022377 0ustar HTTP/1.1 100 Continue HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ad17bc2c8f60cf87de4a9eaa82312dea" Content-Length: 0 Content-Type: text/plain; charset="utf-8" A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//Facebook//NONSGML Facebook Events V0.9//EN X-ORIGINAL-URL:http://www.facebook.com/event.php?eid=33142748183 VERSION:2.0 CALSCALE:GREGORIAN METHOD:PUBLISH BEGIN:VEVENT DTSTAMP:20081030T194443 LAST-MODIFIED:20081030T194443 CREATED:20081030T194401 SEQUENCE:42 ORGANIZER:MAILTO:sigurd@sliverstripe.com DTSTART:20081117T180000 DTEND:20081117T210000 UID:e33142748183@facebook.com SUMMARY:Wellington Meetup and v2.3 pre-release party LOCATION:Southern Cross Bar/Restaurant\, Cub a St/Able Smith St intersection URL:http://www.facebook.com/event.php?eid=33142748183 DESCRIPTION:Food\, alcohol\, code\, and websites. What more do you want in life?\n\nW e're interesting in meeting up wit h the local web community and thos e who use SilverStripe\, so that we can listen to your ideas and answ er your questions\, technical or ot herwise.\n\nWe'll also be demonstrat ing what's coming in SilverStripe v2.3\, and you get to meet the peop le behind the code!\n\n\nhttp://www.f acebook.com/event.php?eid=33142748 183 CLASS:PUBLIC CATEGORIES: STATUS:CONFIRMED PARTSTAT:ACCEPTED END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >Food, alcohol, code, and websites. What more do you want in life? We're interesting in meeting up with the local web community and those who use SilverStripe, so that we can listen to your ideas and answer your questions, technical or otherwise. We'll also be demonstrating what's coming in SilverStripe v2.3, and you get to meet the people behind the code! http://www.facebook.com/event.php?eid=33142748183< dtend: >2008-11-17 21:00:00+13< dtstamp: >2008-10-30 19:44:43< dtstart: >2008-11-17 18:00:00+13< due: >NULL< location: >Southern Cross Bar/Restaurant, Cuba St/Able Smith St intersection< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >NULL< status: >CONFIRMED< summary: >Wellington Meetup and v2.3 pre-release party< transp: >NULL< tz_id: >NULL< uid: >e33142748183@facebook.com< url: >http://www.facebook.com/event.php?eid=33142748183< user_no: >10< ~ Modified Now: >0< davical-1.1.1/testing/tests/regression-suite/0823-Spec-PROPFIND-4.test0000644000000000000000000000135711446006434021706 0ustar # # PROPFIND based on RFC2518 Spec against an iCalendar resource # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0309-Chandler-PROPFIND-3.result0000644000000000000000000000062011732223026023055 0ustar HTTP/1.1 404 Not Found Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 129 Content-Type: text/xml; charset="utf-8" That resource is not present on this server. davical-1.1.1/testing/tests/regression-suite/0938-PROPFIND-inherited-acl-set.test0000644000000000000000000000057611446006434024165 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0843-Spec-PROPFIND.test0000644000000000000000000000066111446006434021544 0ustar # # PROPFIND based on RFC2518 Spec against an iCalendar resource # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0914-extended-MKCOL.result0000644000000000000000000000102311732223637022431 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >Extended MKCOL Address Book< dav_name: >/User Six/addressbook "Extended MKCOL"/< is_addressbook: >1< is_calendar: >0< parent_container: >/User Six/< public_events_onl: >0< user_no: >15< davical-1.1.1/testing/tests/regression-suite/0003-Mulberry-1.result0000644000000000000000000000501311732222733021711 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "6224e345c323da0dfc00689c21171119" Content-Length: 2254 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0957-MKTICKET.test0000644000000000000000000000157711446006434020663 0ustar # # MKTICKET request for a read/write ticket on a collection # - ticket should have no expiry # TYPE=MKTICKET URL=http://regression.host/caldav.php/user2/home/ HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD AUTH=user2:user2 BEGINDATA infinity ENDDATA QUERY SELECT dav_owner_id, date_trunc( 'minute', ('55 seconds' + expires - current_timestamp)::interval(0)) AS timeout, privileges, target_collection_id, target_resource_id FROM access_ticket ENDQUERY REPLACE=!ETag: "\S+"!ETag: "Some good etag"! REPLACE=!\S{8}!Good Ticket ID! REPLACE=!Ticket: \S{8}!Ticket:Good Ticket ID! davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-nz_holidays.result0000644000000000000000000000044111732222714026166 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0806-Mulberry-DELETE-1.test0000644000000000000000000000106111446006434022324 0ustar # # Attempt to DELETE an event from a location that is locked. # - but this time supply the token so it succeeds # TYPE=DELETE URL=http://mycaldav/caldav.php/user1/home/i1278618276.ics # Get the lock token from the earlier lock GETSQL=locktoken SELECT opaquelocktoken FROM locks WHERE dav_name = '/user1/home/i1278618276.ics' ENDSQL HEADER=Content-Type: text/calendar; charset=utf-8 HEADER=Lock-Token: HEAD QUERY SELECT dav_id, dav_name, dav_etag FROM caldav_data WHERE dav_name = '/user1/home/i1278618276.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/1102-REPORT-sync-changed.result0000644000000000000000000000066111743156524023341 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "dd8de466d4ad8e7acb47b6302ab04ef9" Content-Length: 117 Content-Type: text/xml; charset="utf-8" data:,36 davical-1.1.1/testing/tests/regression-suite/0606-Soho-PROPPATCH.result0000644000000000000000000000136311747467531022252 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Location: /caldav.php/user1/SOHO%20collection/ Content-Length: 424 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/SOHO%20collection/ All requested changes were made. HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0555-iPhone-REPORT.test0000644000000000000000000000156311446006434021670 0ustar # # Testing with a process similar to iPhone 3.1 # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEAD AUTH=user1:user1 HEADER=User-Agent: DAVKit/4.0 (728.4); iCalendar/1 (42.1); iPhone/3.1 7C144 HEADER=Content-Type: text/xml HEADER=Depth: 1 # # This query from the iPhone seems to discover several things. Firstly they # get the calendar-home-set URL for this path. Secondly, they ascertain # whether the calendar supports scheduling, and finally, whether it # handles some Apple-specific extensions. # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0209-Moz-PUT-CONFIDENTIAL.result0000644000000000000000000000046711732222773023046 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "08a435c2abaf38f4a50a997343c098a7" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0308-Chandler-OPTIONS-3.result0000644000000000000000000000046511732223025022774 0ustar HTTP/1.1 404 Not Found Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 37 Content-Type: text/plain; charset="utf-8" No collection found at that location.davical-1.1.1/testing/tests/regression-suite/0001-Mulberry-1.result0000644000000000000000000000045211732222732021710 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/2004-REPORT-expanded-nz-holidays-2008.test0000644000000000000000000000176511633117640025057 0ustar # # Test expanded report for NZ public holidays for 2008 # Test REPORT access to a non-public calendar using a ticket. # TYPE=REPORT URL=http://regression.host/caldav.php/user4/nz_holidays/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dtstart, rrule, summary FROM calendar_item WHERE dav_name ~ '^/user4/nz_holidays/' AND (rrule IS NOT NULL OR (dtstart >= '20071231T110000Z' AND dtstart < '20081231T110000Z') ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/0219-Moz-REPORT.result0000644000000000000000000000764711747416354021572 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "bdfeddd69b3ba9e47d51a82fff8801cc" Content-Length: 3690 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061120T041336Z LAST-MODIFIED:20061120T041709Z DTSTAMP:20061120T041709Z UID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 SUMMARY:Weekly Project Meeting PRIORITY:0 CLASS:PUBLIC RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000 CATEGORIES:Projects X-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T032350Z LAST-MODIFIED:20061223T033144Z DTSTAMP:20061223T033144Z UID:9d050be7-8a02-4355-8ed3-02a9fc5f473f SUMMARY:Confidential Event PRIORITY:0 STATUS:CONFIRMED CLASS:CONFIDENTIAL DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T160000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T180000 X-MOZ-LOCATIONPATH:9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics LOCATION:In a confidential place END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T051646Z LAST-MODIFIED:20061223T051713Z DTSTAMP:20061223T051713Z UID:fbd57454-d966-4a14-8341-abe1edb1ae66 SUMMARY:Tentative Event STATUS:TENTATIVE CLASS:PUBLIC DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T190000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T210000 X-MOZ-LOCATIONPATH:fbd57454-d966-4a14-8341-abe1edb1ae66.ics LOCATION:Never never land END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0940-PROPFIND-acl.test0000644000000000000000000000066411446006434021412 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD AUTH=user5:user5 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0555-iPhone-REPORT.result0000644000000000000000000000322611732223532022223 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "64bfdf4e95a5799a86f1c79e0f3faf1d" Content-Length: 1369 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" HTTP/1.1 200 OK /caldav.php/user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics "257b9df4aaf573a578af4aadd033abf4" HTTP/1.1 200 OK /caldav.php/user1/home/0544-gzip-PUT.ics "6ddd18264a9d40c1c9d37a005eeb7e4f" HTTP/1.1 200 OK /caldav.php/user1/home/0545-deflate-PUT.ics "4a3aa58a3e11487e87d87024465d4182" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0913-extended-MKCOL.result0000644000000000000000000000101111732223637022425 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >Extended MKCOL Calendar< dav_name: >/User Six/basic "Extended MKCOL"/< is_addressbook: >0< is_calendar: >1< parent_container: >/User Six/< public_events_onl: >0< user_no: >15< davical-1.1.1/testing/tests/regression-suite/0952-PROPFIND.test0000644000000000000000000000161011751110745020650 0ustar # # PROPFIND on a collection which we can only access via a ticket # also retrieving the tickets on that resource. # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/ AUTH=user5:user5 # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 160 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEADER=Depth: 0 BEGINDATA ENDDATA REPLACE=!\S{8}!Good Ticket ID! REPLACE=!Seconds-3\d+!Seconds-3600! davical-1.1.1/testing/tests/regression-suite/0953-PROPFIND.result0000644000000000000000000000033311446006434021211 0ustar /caldav.php/user1/home/ davical-1.1.1/testing/tests/regression-suite/0842-Spec-PROPPATCH-3.test0000644000000000000000000000125011446006434022015 0ustar # # Check for support of PROPPATCH method # # An attempt to remove the collection resourcetype should fail. # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEADER=User-agent: SpecTest PROPPATCH HEADER=Content-type: text/xml HEAD BEGINDATA ENDDATA QUERY SELECT dav_displayname, is_calendar, resourcetypes, modified > (current_timestamp - '60 seconds'::interval) AS changed_last_60secs FROM collection WHERE dav_name = '/user1/home/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0806-Mulberry-DELETE-1.result0000644000000000000000000000042111732223547022666 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0833-freebusy.result0000644000000000000000000000537611642343301021620 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 2708 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20061001T000000Z DTEND:20070630T235959Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070629T040000Z/20070629T054500Z END:VFREEBUSY END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0939-PROPFIND-inherited-acl-set.test0000644000000000000000000000062211446006434024156 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/20061101T073004Z.ics HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user5.test0000644000000000000000000000567211651212132024353 0ustar # # PUT a calendar collection to user5 so we have some starting events # # There is no CalDAV defined behaviour for this. # TYPE=PUT URL=http://mycaldav/caldav.php/user5/home/ HEADER=User-Agent: RSCDS Testing/0.9.x HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user5:user5 HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN PRODID:-//neutralspace inc.//dotcal.com//EN BEGIN:VTIMEZONE TZID:America/Los_Angeles X-LIC-LOCATION:America/Los_Angeles BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE BEGIN:VEVENT LAST-MODIFIED:20100812T161339Z SEQUENCE:5 UID:naltpirh2vfjfmplmsivuo30t8@google.com SUMMARY:Tango Night DESCRIPTION:Never will you see a space glow like a night of Tango at Tease. \nAll dancers welcome!\n$5 suggested donation DTSTART;TZID=America/Los_Angeles:20100815T200000 CREATED:20091221T033228Z DTSTAMP:20100812T161339Z DURATION:PT3H LOCATION: X-VENUE:Tease Restaurant & Bar, corner of 2nd & Main X-EMAIL-RSVP-UPDATES:true RRULE:FREQ=MONTHLY;WKST=MO;BYDAY=3SU END:VEVENT BEGIN:VEVENT SEQUENCE:4 DTSTART;TZID=America/Los_Angeles:20090707T170000 STATUS:CONFIRMED DTSTAMP:20090828T083735Z SUMMARY:Sketch Salone DTEND;TZID=America/Los_Angeles:20090707T200000 LOCATION:Tease Restaurant & Bar\, corner of 2nd & Main RRULE:FREQ=WEEKLY;WKST=SU;INTERVAL=2;UNTIL=20090921T065959Z;BYDAY=MO DESCRIPTION:Sketch Salone\, where the artist in you can come to the surface. Live model Hosted by Kevin Christman\n per bench seat by RSVP or welcome to use a table UID:v3f2otajsto18em4rom3jd4238@google.com TRANSP:TRANSPARENT CREATED:20091221T033228Z END:VEVENT BEGIN:VEVENT SEQUENCE:4 DTSTART;TZID=America/Los_Angeles:20090907T170000 STATUS:CONFIRMED DTSTAMP:20090828T083735Z SUMMARY:Sketch Salone DTEND;TZID=America/Los_Angeles:20090907T200000 LOCATION:Tease Restaurant & Bar\, corner of 2nd & Main DESCRIPTION:Sketch Salone\, where the artist in you can come to the surface. Live model Hosted by Kevin Christman\n per bench seat by RSVP or welcome to use a table UID:v3f2otajsto18em4rom3jd4238@google.com TRANSP:TRANSPARENT CREATED:20091221T033228Z RECURRENCE-ID;TZID=America/Los_Angeles:20090914T170000 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS "A1 CalDAV DATA" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user5/home/' ENDQUERY QUERY SELECT count(*) FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '^/user5/home/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0831-Spec-RRULE-1.result0000644000000000000000000001633511732223561021713 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 7623 Content-Type: text/plain #!/usr/bin/php Testing the RRule v2 Library =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20061103T073000 - RRULE:FREQ=DAILY;COUNT=7 Daily for 7 days PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20061102T100000 - RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH Weekly for 26 weeks PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20061103T160000 - RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4 Fortnightly for 4 events PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20061103T160000 - RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20071122T235900 Fortnightly for 28 events PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20081101T160000 - RRULE:FREQ=WEEKLY;COUNT=15;INTERVAL=1;BYDAY=MO,WE,FR 3/wk for 5 weeks PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20061104T073000 - RRULE:FREQ=MONTHLY Monthly forever PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20061117T073000 - RRULE:FREQ=MONTHLY;BYDAY=1MO,2WE,3FR,-1SU Monthly, on the 1st monday, 2nd wednesday, 3rd friday and last sunday, forever PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20061107T113000 - RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;UNTIL=20070101T000000 The working days of each month PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20061107T113000 - RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1;COUNT=30 The last working day of each month PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20081020T103000 - RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;COUNT=30 Every working day PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20081020T110000 - RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;COUNT=30 Every working day PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20110831 - RRULE:FREQ=MONTHLY;BYMONTHDAY=-1 The last day of each month PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20081001T133000 - RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12 1st Tuesday, 2nd Wednesday, 3rd Thursday & 4th Friday, every March, June, September, October and December (SQL is wrong) PHP & SQL results differ :-( PHP Result: 2008-10-07 13:30:00 2008-10-08 13:30:00 2008-10-16 13:30:00 2008-10-24 13:30:00 2008-12-02 13:30:00 2008-12-10 13:30:00 2008-12-18 13:30:00 2008-12-26 13:30:00 2009-03-03 13:30:00 2009-03-11 13:30:00 2009-03-19 13:30:00 2009-03-27 13:30:00 2009-06-02 13:30:00 2009-06-10 13:30:00 2009-06-18 13:30:00 2009-06-26 13:30:00 2009-09-01 13:30:00 2009-09-09 13:30:00 2009-09-17 13:30:00 2009-09-25 13:30:00 2009-10-06 13:30:00 2009-10-14 13:30:00 2009-10-15 13:30:00 2009-10-23 13:30:00 2009-12-01 13:30:00 2009-12-09 13:30:00 2009-12-17 13:30:00 2009-12-25 13:30:00 2010-03-02 13:30:00 2010-03-10 13:30:00 SQL Result: 2008-10-07 13:30:00 2008-10-08 13:30:00 2008-10-16 13:30:00 2008-10-24 13:30:00 2008-11-04 13:30:00 2008-11-12 13:30:00 2008-11-20 13:30:00 2008-11-28 13:30:00 2008-12-02 13:30:00 2008-12-10 13:30:00 2008-12-18 13:30:00 2008-12-26 13:30:00 2009-01-06 13:30:00 2009-01-14 13:30:00 2009-01-15 13:30:00 2009-01-23 13:30:00 2009-02-03 13:30:00 2009-02-11 13:30:00 2009-02-19 13:30:00 2009-02-27 13:30:00 2009-03-03 13:30:00 2009-03-11 13:30:00 2009-03-19 13:30:00 2009-03-27 13:30:00 2009-04-07 13:30:00 2009-04-08 13:30:00 2009-04-16 13:30:00 2009-04-24 13:30:00 2009-05-05 13:30:00 2009-05-13 13:30:00 =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20081017T084500 - RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR;COUNT=30 Every tuesday and friday PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20081017T084500 - RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,FR;COUNT=30 Every tuesday and friday PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20081017T084500 - RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=TU,FR;COUNT=30 Every tuesday and friday PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 19700315T030000 - FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 Time zone 1 PHP & SQL results differ :-( PHP Result: 1970-03-15 03:00:00 1971-03-21 03:00:00 1972-03-19 03:00:00 1973-03-18 03:00:00 1974-03-17 03:00:00 1975-03-16 03:00:00 1976-03-21 03:00:00 1977-03-20 03:00:00 1978-03-19 03:00:00 1979-03-18 03:00:00 1980-03-16 03:00:00 1981-03-15 03:00:00 1982-03-21 03:00:00 1983-03-20 03:00:00 1984-03-18 03:00:00 1985-03-17 03:00:00 1986-03-16 03:00:00 1987-03-15 03:00:00 1988-03-20 03:00:00 1989-03-19 03:00:00 1990-03-18 03:00:00 1991-03-17 03:00:00 1992-03-15 03:00:00 1993-03-21 03:00:00 1994-03-20 03:00:00 1995-03-19 03:00:00 1996-03-17 03:00:00 1997-03-16 03:00:00 1998-03-15 03:00:00 1999-03-21 03:00:00 SQL Result: 1970-03-15 03:00:00 1971-03-21 03:00:00 1972-03-19 03:00:00 1973-03-18 03:00:00 1974-03-17 03:00:00 1975-03-16 03:00:00 1976-03-21 03:00:00 1977-03-20 03:00:00 1978-03-19 03:00:00 1979-03-18 03:00:00 1980-03-16 03:00:00 1981-03-15 03:00:00 1982-03-21 03:00:00 1983-03-20 03:00:00 1984-03-18 03:00:00 1985-03-17 03:00:00 1986-03-16 03:00:00 1987-03-15 03:00:00 1988-03-20 03:00:00 1989-03-19 03:00:00 1990-03-18 02:00:00 1991-03-17 02:00:00 1992-03-15 02:00:00 1993-03-21 02:00:00 1994-03-20 02:00:00 1995-03-19 02:00:00 1996-03-17 02:00:00 1997-03-16 02:00:00 1998-03-15 02:00:00 1999-03-21 02:00:00 =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 19700927T020000 - FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 Time zone 2 PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 19810329T030000 - FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU Time zone 3 PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20000404T010000 - FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;COUNT=15 Time zone 4 PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20110905 - FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=6 Six Working Days PHP & SQL results are identical (-: =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= 20110905 - FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;COUNT=6 Six Working Days PHP & SQL results are identical (-: davical-1.1.1/testing/tests/regression-suite/0845-Spec-PROPPATCH-both-fail.result0000644000000000000000000000165611755662230024101 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 452 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ Some properties were not able to be changed. HTTP/1.1 409 Conflict A collection may not be both a calendar and an addressbook. changed_last_5m: >1< dav_displayname: >User One's addressbook< is_addressbook: >1< is_calendar: >0< resourcetypes: >< davical-1.1.1/testing/tests/regression-suite/0605-Soho-MKCALENDAR.test0000644000000000000000000000176011446006434021737 0ustar # # SOHO Organizer works best looking at the person # # Make a new calendar for the user # TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/user1/ HEADER=User-Agent: SOHO Organizer/6.5.2 libcurl/7.17.0 OpenSSL/0.9.7l zlib/1.2.3 libssh2/0.17 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Accept: */* HEADER=Content-Type: application/xml; charset="utf-8" HEAD # Reformatted for readability BEGINDATA SOHO collection #0000FFFF ENDDATA QUERY SELECT * FROM collection WHERE dav_name = '/user1/SOHO collection'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0808-Spec-UNLOCK-1.test0000644000000000000000000000077611446006434021464 0ustar # # Test specification compliance for LOCK/UNLOCK request # - This should succeed because the actual lock was deleted # when the resource was deleted, regardless that the # token we supply here is bogus. # # The response to this should really be 409 precondition # failed 'lock-token-matches-request-uri' # TYPE=UNLOCK URL=http://mycaldav/caldav.php/user1/home/i1278618276.ics HEADER=Lock-Token: HEAD # # There is no data for an UNLOCK request # davical-1.1.1/testing/tests/regression-suite/0835-freebusy.result0000644000000000000000000000051011642343301021603 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 222 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20060930T110000Z DTEND:20061028T230000Z END:VFREEBUSY END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0871-PROPFIND.test0000644000000000000000000000112411446006434020650 0ustar # # Testing for Spec compliance. PROPFIND on a calendar, # Depth: 0, looking for the getctag, resourcetype and displayname # TYPE=PROPFIND AUTH=user2:user2 URL=http://mycaldav/caldav.php/user2/home/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml HEAD REPLACE=#\d{8}T\d{6}#YYYYMMDDThhmmss# BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0600-Soho-OPTIONS.result0000644000000000000000000000034211446006434022016 0ustar HTTP/1.1 401 Unauthorized Date: Dow, 01 Jan 2000 00:00:00 GMT WWW-Authenticate: Basic realm="DAViCal CalDAV Server" Content-Length: 40 Content-Type: text/plain; ; charset="utf-8" Please log in for access to this system.davical-1.1.1/testing/tests/regression-suite/0207-Moz-REPORT-4.test0000644000000000000000000000163711446006434021350 0ustar # # Request a REPORT which should only include an instance of the repeating event we just added # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20101108 Calendar/0.4a1 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Keep-Alive: 300 HEADER=Content-Type: text/xml HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0534-iCal4-PROPPATCH.result0000644000000000000000000000114111747467514022271 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 335 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ All requested changes were made. HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0800-Spec-LOCK-1.test0000644000000000000000000000102611446006434021176 0ustar # # Test specification compliance for LOCK request # TYPE=LOCK URL=http://mycaldav/caldav.php/user1/home/i1278618276.ics HEADER=Depth: 0 HEADER=Timeout: Infinite,Second-4100000000 HEADER=Content-type: text/xml; charset="utf-8" HEAD # # Include the data in-line # BEGINDATA http://andrew.mcmillan.net.nz/node/5/ ENDDATA davical-1.1.1/testing/tests/regression-suite/0848-Spec-PROPPATCH-calendar.result0000644000000000000000000000160311755670573024011 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 386 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ All requested changes were made. HTTP/1.1 200 OK changed_last_5m: >1< dav_displayname: >User 1's Calendaranza< is_addressbook: >0< is_calendar: >1< resourcetypes: >< schedule_transp: >opaque< davical-1.1.1/testing/tests/regression-suite/0888-GET-freebusy.result0000644000000000000000000003717011633117640022251 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 14720 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20060930T110000Z DTEND:20070630T115959Z FREEBUSY:20061001T210000Z/20061001T220000Z FREEBUSY:20061002T210000Z/20061002T220000Z FREEBUSY:20061003T210000Z/20061003T220000Z FREEBUSY:20061004T210000Z/20061004T220000Z FREEBUSY:20061005T210000Z/20061005T220000Z FREEBUSY:20061006T210000Z/20061006T220000Z FREEBUSY:20061007T210000Z/20061007T220000Z FREEBUSY:20061008T210000Z/20061008T220000Z FREEBUSY:20061009T210000Z/20061009T220000Z FREEBUSY:20061010T210000Z/20061010T220000Z FREEBUSY:20061011T210000Z/20061011T220000Z FREEBUSY:20061012T210000Z/20061012T220000Z FREEBUSY:20061013T210000Z/20061013T220000Z FREEBUSY:20061014T210000Z/20061014T220000Z FREEBUSY:20061015T210000Z/20061015T220000Z FREEBUSY:20061016T210000Z/20061016T220000Z FREEBUSY:20061017T210000Z/20061017T220000Z FREEBUSY:20061018T210000Z/20061018T220000Z FREEBUSY:20061019T210000Z/20061019T220000Z FREEBUSY:20061020T210000Z/20061020T220000Z FREEBUSY:20061021T210000Z/20061021T220000Z FREEBUSY:20061022T210000Z/20061022T220000Z FREEBUSY:20061023T210000Z/20061023T220000Z FREEBUSY:20061024T210000Z/20061024T220000Z FREEBUSY:20061025T210000Z/20061025T220000Z FREEBUSY:20061026T210000Z/20061026T220000Z FREEBUSY:20061027T210000Z/20061027T220000Z FREEBUSY:20061028T210000Z/20061028T220000Z FREEBUSY:20061029T220000Z/20061029T230000Z FREEBUSY:20061030T220000Z/20061030T230000Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061031T220000Z/20061031T230000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T220000Z/20061101T230000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061102T220000Z/20061102T230000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061103T220000Z/20061103T230000Z FREEBUSY:20061104T220000Z/20061104T230000Z FREEBUSY:20061105T220000Z/20061105T230000Z FREEBUSY:20061106T220000Z/20061106T230000Z FREEBUSY:20061107T220000Z/20061107T230000Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061108T220000Z/20061108T230000Z FREEBUSY:20061109T220000Z/20061109T230000Z FREEBUSY:20061110T220000Z/20061110T230000Z FREEBUSY:20061111T220000Z/20061111T230000Z FREEBUSY:20061112T220000Z/20061112T230000Z FREEBUSY:20061113T220000Z/20061113T230000Z FREEBUSY:20061114T220000Z/20061114T230000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061115T220000Z/20061115T230000Z FREEBUSY:20061116T220000Z/20061116T230000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061117T220000Z/20061117T230000Z FREEBUSY:20061118T220000Z/20061118T230000Z FREEBUSY:20061119T220000Z/20061119T230000Z FREEBUSY:20061120T220000Z/20061120T230000Z FREEBUSY:20061121T220000Z/20061121T230000Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061122T220000Z/20061122T230000Z FREEBUSY:20061123T220000Z/20061123T230000Z FREEBUSY:20061124T220000Z/20061124T230000Z FREEBUSY:20061125T220000Z/20061125T230000Z FREEBUSY:20061126T220000Z/20061126T230000Z FREEBUSY:20061127T220000Z/20061127T230000Z FREEBUSY:20061128T220000Z/20061128T230000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061129T220000Z/20061129T230000Z FREEBUSY:20061130T220000Z/20061130T230000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061201T220000Z/20061201T230000Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061202T220000Z/20061202T230000Z FREEBUSY:20061203T220000Z/20061203T230000Z FREEBUSY:20061204T220000Z/20061204T230000Z FREEBUSY:20061205T220000Z/20061205T230000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061206T220000Z/20061206T230000Z FREEBUSY:20061207T220000Z/20061207T230000Z FREEBUSY:20061208T220000Z/20061208T230000Z FREEBUSY:20061209T220000Z/20061209T230000Z FREEBUSY:20061210T220000Z/20061210T230000Z FREEBUSY:20061211T220000Z/20061211T230000Z FREEBUSY:20061212T220000Z/20061212T230000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061213T220000Z/20061213T230000Z FREEBUSY:20061214T220000Z/20061214T230000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061215T220000Z/20061215T230000Z FREEBUSY:20061216T220000Z/20061216T230000Z FREEBUSY:20061217T220000Z/20061217T230000Z FREEBUSY:20061218T220000Z/20061218T230000Z FREEBUSY:20061219T220000Z/20061219T230000Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061220T220000Z/20061220T230000Z FREEBUSY:20061221T220000Z/20061221T230000Z FREEBUSY:20061222T220000Z/20061222T230000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061223T220000Z/20061223T230000Z FREEBUSY:20061224T220000Z/20061224T230000Z FREEBUSY:20061225T220000Z/20061225T230000Z FREEBUSY:20061226T220000Z/20061226T230000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061227T220000Z/20061227T230000Z FREEBUSY:20061228T220000Z/20061228T230000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20061229T220000Z/20061229T230000Z FREEBUSY:20061230T220000Z/20061230T230000Z FREEBUSY:20061231T220000Z/20061231T230000Z FREEBUSY:20070101T220000Z/20070101T230000Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070102T220000Z/20070102T230000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070103T220000Z/20070103T230000Z FREEBUSY:20070104T220000Z/20070104T230000Z FREEBUSY:20070105T220000Z/20070105T230000Z FREEBUSY:20070106T220000Z/20070106T230000Z FREEBUSY:20070107T220000Z/20070107T230000Z FREEBUSY:20070108T220000Z/20070108T230000Z FREEBUSY:20070109T220000Z/20070109T230000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070110T220000Z/20070110T230000Z FREEBUSY:20070111T220000Z/20070111T230000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070112T220000Z/20070112T230000Z FREEBUSY:20070113T220000Z/20070113T230000Z FREEBUSY:20070114T220000Z/20070114T230000Z FREEBUSY:20070115T220000Z/20070115T230000Z FREEBUSY:20070116T220000Z/20070116T230000Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070117T220000Z/20070117T230000Z FREEBUSY:20070118T220000Z/20070118T230000Z FREEBUSY:20070119T220000Z/20070119T230000Z FREEBUSY:20070120T220000Z/20070120T230000Z FREEBUSY:20070121T220000Z/20070121T230000Z FREEBUSY:20070122T220000Z/20070122T230000Z FREEBUSY:20070123T220000Z/20070123T230000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070124T220000Z/20070124T230000Z FREEBUSY:20070125T220000Z/20070125T230000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070126T220000Z/20070126T230000Z FREEBUSY:20070127T220000Z/20070127T230000Z FREEBUSY:20070128T220000Z/20070128T230000Z FREEBUSY:20070129T220000Z/20070129T230000Z FREEBUSY:20070130T220000Z/20070130T230000Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070131T220000Z/20070131T230000Z FREEBUSY:20070201T220000Z/20070201T230000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070202T220000Z/20070202T230000Z FREEBUSY:20070203T220000Z/20070203T230000Z FREEBUSY:20070204T220000Z/20070204T230000Z FREEBUSY:20070205T220000Z/20070205T230000Z FREEBUSY:20070206T220000Z/20070206T230000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070207T220000Z/20070207T230000Z FREEBUSY:20070208T220000Z/20070208T230000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070209T220000Z/20070209T230000Z FREEBUSY:20070210T220000Z/20070210T230000Z FREEBUSY:20070211T220000Z/20070211T230000Z FREEBUSY:20070212T220000Z/20070212T230000Z FREEBUSY:20070213T220000Z/20070213T230000Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070214T220000Z/20070214T230000Z FREEBUSY:20070215T220000Z/20070215T230000Z FREEBUSY:20070216T220000Z/20070216T230000Z FREEBUSY:20070217T220000Z/20070217T230000Z FREEBUSY:20070218T220000Z/20070218T230000Z FREEBUSY:20070219T220000Z/20070219T230000Z FREEBUSY:20070220T220000Z/20070220T230000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070221T220000Z/20070221T230000Z FREEBUSY:20070222T220000Z/20070222T230000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070223T220000Z/20070223T230000Z FREEBUSY:20070224T220000Z/20070224T230000Z FREEBUSY:20070225T220000Z/20070225T230000Z FREEBUSY:20070226T220000Z/20070226T230000Z FREEBUSY:20070227T220000Z/20070227T230000Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070228T220000Z/20070228T230000Z FREEBUSY:20070301T220000Z/20070301T230000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070302T220000Z/20070302T230000Z FREEBUSY:20070303T220000Z/20070303T230000Z FREEBUSY:20070304T220000Z/20070304T230000Z FREEBUSY:20070305T220000Z/20070305T230000Z FREEBUSY:20070306T220000Z/20070306T230000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070307T220000Z/20070307T230000Z FREEBUSY:20070308T220000Z/20070308T230000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070309T220000Z/20070309T230000Z FREEBUSY:20070310T220000Z/20070310T230000Z FREEBUSY:20070311T210000Z/20070311T220000Z FREEBUSY:20070312T210000Z/20070312T220000Z FREEBUSY:20070313T210000Z/20070313T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070315T210000Z/20070315T220000Z FREEBUSY:20070316T210000Z/20070316T220000Z FREEBUSY:20070317T210000Z/20070317T220000Z FREEBUSY:20070318T210000Z/20070318T220000Z FREEBUSY:20070319T210000Z/20070319T220000Z FREEBUSY:20070320T210000Z/20070320T220000Z FREEBUSY:20070321T210000Z/20070321T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070322T210000Z/20070322T220000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070323T210000Z/20070323T220000Z FREEBUSY:20070324T210000Z/20070324T220000Z FREEBUSY:20070325T210000Z/20070325T220000Z FREEBUSY:20070326T210000Z/20070326T220000Z FREEBUSY:20070327T210000Z/20070327T220000Z FREEBUSY:20070328T210000Z/20070328T220000Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070329T210000Z/20070329T220000Z FREEBUSY:20070330T210000Z/20070330T220000Z FREEBUSY:20070331T210000Z/20070331T220000Z FREEBUSY:20070401T210000Z/20070401T220000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070402T210000Z/20070402T220000Z FREEBUSY:20070403T210000Z/20070403T220000Z FREEBUSY:20070404T210000Z/20070404T220000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070405T210000Z/20070405T220000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070406T210000Z/20070406T220000Z FREEBUSY:20070407T210000Z/20070407T220000Z FREEBUSY:20070408T210000Z/20070408T220000Z FREEBUSY:20070409T210000Z/20070409T220000Z FREEBUSY:20070410T210000Z/20070410T220000Z FREEBUSY:20070411T210000Z/20070411T220000Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070412T210000Z/20070412T220000Z FREEBUSY:20070413T210000Z/20070413T220000Z FREEBUSY:20070414T210000Z/20070414T220000Z FREEBUSY:20070415T210000Z/20070415T220000Z FREEBUSY:20070416T210000Z/20070416T220000Z FREEBUSY:20070417T210000Z/20070417T220000Z FREEBUSY:20070418T210000Z/20070418T220000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070419T210000Z/20070419T220000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070420T210000Z/20070420T220000Z FREEBUSY:20070421T210000Z/20070421T220000Z FREEBUSY:20070422T210000Z/20070422T220000Z FREEBUSY:20070423T210000Z/20070423T220000Z FREEBUSY:20070424T210000Z/20070424T220000Z FREEBUSY:20070425T210000Z/20070425T220000Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070426T210000Z/20070426T220000Z FREEBUSY:20070427T210000Z/20070427T220000Z FREEBUSY:20070428T210000Z/20070428T220000Z FREEBUSY:20070429T210000Z/20070429T220000Z FREEBUSY:20070430T210000Z/20070430T220000Z FREEBUSY:20070501T210000Z/20070501T220000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070502T210000Z/20070502T220000Z FREEBUSY:20070503T210000Z/20070503T220000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070504T210000Z/20070504T220000Z FREEBUSY:20070505T210000Z/20070505T220000Z FREEBUSY:20070506T210000Z/20070506T220000Z FREEBUSY:20070507T210000Z/20070507T220000Z FREEBUSY:20070508T210000Z/20070508T220000Z FREEBUSY:20070509T210000Z/20070509T220000Z FREEBUSY:20070510T210000Z/20070510T220000Z FREEBUSY:20070511T210000Z/20070511T220000Z FREEBUSY:20070512T210000Z/20070512T220000Z FREEBUSY:20070513T210000Z/20070513T220000Z FREEBUSY:20070514T210000Z/20070514T220000Z FREEBUSY:20070515T210000Z/20070515T220000Z FREEBUSY:20070516T210000Z/20070516T220000Z FREEBUSY:20070517T210000Z/20070517T220000Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070518T210000Z/20070518T220000Z FREEBUSY:20070519T210000Z/20070519T220000Z FREEBUSY:20070520T210000Z/20070520T220000Z FREEBUSY:20070521T210000Z/20070521T220000Z FREEBUSY:20070522T210000Z/20070522T220000Z FREEBUSY:20070523T210000Z/20070523T220000Z FREEBUSY:20070524T210000Z/20070524T220000Z FREEBUSY:20070525T210000Z/20070525T220000Z FREEBUSY:20070526T210000Z/20070526T220000Z FREEBUSY:20070527T210000Z/20070527T220000Z FREEBUSY:20070528T210000Z/20070528T220000Z FREEBUSY:20070529T210000Z/20070529T220000Z FREEBUSY:20070530T210000Z/20070530T220000Z FREEBUSY:20070531T210000Z/20070531T220000Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070601T210000Z/20070601T220000Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070602T210000Z/20070602T220000Z FREEBUSY:20070603T210000Z/20070603T220000Z FREEBUSY:20070604T210000Z/20070604T220000Z FREEBUSY:20070605T210000Z/20070605T220000Z FREEBUSY:20070606T210000Z/20070606T220000Z FREEBUSY:20070607T210000Z/20070607T220000Z FREEBUSY:20070608T210000Z/20070608T220000Z FREEBUSY:20070609T210000Z/20070609T220000Z FREEBUSY:20070610T210000Z/20070610T220000Z FREEBUSY:20070611T210000Z/20070611T220000Z FREEBUSY:20070612T210000Z/20070612T220000Z FREEBUSY:20070613T210000Z/20070613T220000Z FREEBUSY:20070614T210000Z/20070614T220000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070615T210000Z/20070615T220000Z FREEBUSY:20070616T210000Z/20070616T220000Z FREEBUSY:20070617T210000Z/20070617T220000Z FREEBUSY:20070618T210000Z/20070618T220000Z FREEBUSY:20070619T210000Z/20070619T220000Z FREEBUSY:20070620T210000Z/20070620T220000Z FREEBUSY:20070621T210000Z/20070621T220000Z FREEBUSY:20070622T210000Z/20070622T220000Z FREEBUSY:20070623T210000Z/20070623T220000Z FREEBUSY:20070624T210000Z/20070624T220000Z FREEBUSY:20070625T210000Z/20070625T220000Z FREEBUSY:20070626T210000Z/20070626T220000Z FREEBUSY:20070627T210000Z/20070627T220000Z FREEBUSY:20070628T210000Z/20070628T220000Z FREEBUSY:20070629T040000Z/20070629T054500Z FREEBUSY:20070629T210000Z/20070629T220000Z FREEBUSY:20070630T210000Z/20070630T220000Z END:VFREEBUSY END:VCALENDAR finish: >20061102T203000Z< rrule: >FREQ=MONTHLY< start: >20061102T183000Z< status: >CONFIRMED< finish: >20061103T044500Z< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< start: >20061103T030000Z< status: >CONFIRMED< finish: >20061223T050000Z< rrule: >NULL< start: >20061223T030000Z< status: >CONFIRMED< finish: >20061223T080000Z< rrule: >NULL< start: >20061223T060000Z< status: >TENTATIVE< finish: >20060101T230000Z< rrule: >FREQ=DAILY;INTERVAL=1;COUNT=1000< start: >20060101T220000Z< status: >NULL< finish: >20061031T220000Z< rrule: >NULL< start: >20061031T210000Z< status: >NULL< finish: >20061101T220000Z< rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH< start: >20061101T210000Z< status: >NULL< finish: >20061102T003000Z< rrule: >NULL< start: >20061101T233000Z< status: >NULL< davical-1.1.1/testing/tests/regression-suite/0221-Moz-PROPFIND.result0000644000000000000000000000147611732223002021737 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "Looks like a good ETAG to me :-)" Content-Length: 514 Content-Type: text/xml; charset="utf-8" /caldav.php/user5/home/ /caldav.php/user5/ "Looks like a good CTAG to me :-)" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0542-iCal4-REPORT.test0000644000000000000000000000164511446006434021377 0ustar # # Testing with a process similar to iCal4 # TYPE=REPORT URL=http://regression.host/caldav.php/user1/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml HEADER=Depth: 0 # # Looking for proxied delegations with expand-property report # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/Create-Database.result0000644000000000000000000000056211643270616022307 0ustar Supported locales updated. Updated view: dav_principal.sql applied. CalDAV functions updated. RRULE functions updated. Database permissions updated. NOTE ==== * The password for the 'admin' user has been set to 'nimda' Thanks for trying DAViCal! Check in /usr/share/doc/davical/examples/ for some configuration examples. For help, visit #davical on irc.oftc.net. davical-1.1.1/testing/tests/regression-suite/0214-Moz-PUT-New-Task.test0000644000000000000000000000164511446006434022270 0ustar # # PUT a new task in the calendar # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.7pre) Gecko/20070805 Calendar/0.7pre HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTODO CREATED:20070805T200215Z LAST-MODIFIED:20070805T201531Z DTSTAMP:20070805T200215Z UID:2178279a-aec2-471f-832d-1f6df6203f2f SUMMARY:Incomplete\, uncancelled X-MOZ-LOCATIONPATH:2178279a-aec2-471f-832d-1f6df6203f2f.ics DESCRIPTION:This task is incomplete and has not been cancelled (has no status at all) END:VTODO END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0997-PUT-many-overrides.result0000644000000000000000000003006311672053214023414 0ustar Event Data: >BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:Europe/Zagreb X-LIC-LOCATION:Europe/Zagreb BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20101126T133639Z LAST-MODIFIED:20101126T133639Z DTSTAMP:20101126T133640Z UID:KOrganizer-1348288421.174 SUMMARY:Kosarkaska utakmica DTSTART;TZID=Europe/Zagreb:20101128T110000 DTEND;TZID=Europe/Zagreb:20101128T130000 LOCATION:Zagrebacki velesajam TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110402T095510Z LAST-MODIFIED:20110402T095533Z DTSTAMP:20110402T095533Z UID:9fc3d340-fd02-4198-9b7f-bd9b339fdf01 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110329T193000 DTEND;TZID=Europe/Zagreb:20110329T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110406T222101Z LAST-MODIFIED:20110406T222129Z DTSTAMP:20110406T222129Z UID:b5185f5f-c60d-43e2-8727-d73b05f0b403 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110408T180000 DTEND;TZID=Europe/Zagreb:20110408T210000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110405T141057Z LAST-MODIFIED:20110410T105121Z DTSTAMP:20110410T105121Z UID:ad2e3d46-338c-4123-bfed-edf0d06a3f5d SUMMARY:Vaterpolo PMF DTSTART;TZID=Europe/Zagreb:20110411T120000 DTEND;TZID=Europe/Zagreb:20110411T130000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110406T222101Z LAST-MODIFIED:20110412T145952Z DTSTAMP:20110412T145952Z UID:97f37cf2-a89a-4eb9-aff7-024e21d4ac63 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110413T200000 DTEND;TZID=Europe/Zagreb:20110413T230000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110417T133012Z LAST-MODIFIED:20110417T133033Z DTSTAMP:20110417T133033Z UID:d98993b2-3fc1-4f40-a3b7-1744f2eff118 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110419T193000 DTEND;TZID=Europe/Zagreb:20110419T223000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110509T075204Z DTSTAMP:20110509T075204Z UID:d9600248-ff59-45aa-a08b-d16d09f7443c SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110509T150000 DTEND;TZID=Europe/Zagreb:20110509T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103420Z LAST-MODIFIED:20110320T103436Z DTSTAMP:20110320T103436Z UID:bf913c7d-8e42-4d30-989b-3f86c3e7f130 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110322T200000 DTEND;TZID=Europe/Zagreb:20110322T230000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110414T134428Z LAST-MODIFIED:20110414T134446Z DTSTAMP:20110414T134446Z UID:6d870107-9251-4eb1-baff-9cc9c9d995a0 SUMMARY:Vaterpolo DTSTART;TZID=Europe/Zagreb:20110415T120000 DTEND;TZID=Europe/Zagreb:20110415T130000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110320T103513Z DTSTAMP:20110320T103513Z UID:b79f6edf-3b11-439f-85af-7eca5d5e7d6e SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110321T150000 DTEND;TZID=Europe/Zagreb:20110321T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110405T141057Z LAST-MODIFIED:20110405T141143Z DTSTAMP:20110405T141143Z UID:3bc03dfc-c7e1-4500-ae67-a17c309025e8 SUMMARY:Vaterpolo PMF DTSTART;TZID=Europe/Zagreb:20110406T133000 DTEND;TZID=Europe/Zagreb:20110406T143000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110430T093717Z LAST-MODIFIED:20110430T093741Z DTSTAMP:20110430T093741Z UID:d0fe1e24-25c9-4f1a-a1a5-7e4c38b2a4bd SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110427T193000 DTEND;TZID=Europe/Zagreb:20110427T223000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110430T093903Z LAST-MODIFIED:20110503T141014Z DTSTAMP:20110503T141014Z UID:e8835dcb-9c58-446c-8020-1d14e299994b SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110506T190000 DTEND;TZID=Europe/Zagreb:20110506T220000 DESCRIPTION:protiv VIDRE\; dvorana u podsusedu TRANSP:OPAQUE SEQUENCE:2 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110503T141104Z DTSTAMP:20110503T141104Z UID:631e6b38-c41c-49c6-8902-357650d1332c SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110502T150000 DTEND;TZID=Europe/Zagreb:20110502T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110412T145824Z DTSTAMP:20110412T145824Z UID:2f32a2e1-f739-4c1a-920b-a605cc969e25 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110411T150000 DTEND;TZID=Europe/Zagreb:20110411T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110414T134428Z LAST-MODIFIED:20110416T203013Z DTSTAMP:20110416T203013Z UID:63d93f32-aa1d-4aaf-b0c6-f332689c395b SUMMARY:Vaterpolo DTSTART;TZID=Europe/Zagreb:20110415T140000 DTEND;TZID=Europe/Zagreb:20110415T150000 TRANSP:OPAQUE SEQUENCE:1 X-MOZ-GENERATION:1 END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110417T195943Z DTSTAMP:20110417T195943Z UID:96d9a904-21da-44cf-a818-ace2e24117f3 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110418T150000 DTEND;TZID=Europe/Zagreb:20110418T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110513T180125Z LAST-MODIFIED:20110513T180150Z DTSTAMP:20110513T180150Z UID:6541bbc5-5054-4482-9656-781fccb1c9c0 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110513T160000 DTEND;TZID=Europe/Zagreb:20110513T170000 DESCRIPTION:s filom u dvorani Precko TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110520T201034Z LAST-MODIFIED:20110520T201057Z DTSTAMP:20110520T201057Z UID:585e23cf-ef43-459a-9ad7-f05ceadc369e SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110524T190000 DTEND;TZID=Europe/Zagreb:20110524T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110311T213444Z LAST-MODIFIED:20110311T213526Z DTSTAMP:20110311T213526Z UID:abe35ff2-22ca-4abc-84ed-75cd594f152a SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110311T190000 DTEND;TZID=Europe/Zagreb:20110311T220000 LOCATION:Rugvica DESCRIPTION:igramo protiv STK Rugvice TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110314T195438Z LAST-MODIFIED:20110314T195500Z DTSTAMP:20110314T195500Z UID:f1a6d3ca-6070-453f-ae7d-10e204569461 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110317T200000 DTEND;TZID=Europe/Zagreb:20110317T210000 DESCRIPTION:protiv Mladih purgera TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110328T181956Z DTSTAMP:20110328T181956Z UID:db31907b-1b8a-4f70-aa8e-e2c86ffc125a SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110328T150000 DTEND;TZID=Europe/Zagreb:20110328T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110602T091841Z LAST-MODIFIED:20110602T091933Z DTSTAMP:20110602T091933Z UID:158bce95-0f67-4cfc-9cc0-df42603a7497 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110606T193000 DTEND;TZID=Europe/Zagreb:20110606T230000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110603T144349Z LAST-MODIFIED:20110603T144405Z DTSTAMP:20110603T144405Z UID:e0b1fbe6-885e-447b-8811-0d0dafc7cc9a SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110603T100000 DTEND;TZID=Europe/Zagreb:20110603T130000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110605T191628Z LAST-MODIFIED:20110605T191643Z DTSTAMP:20110605T191643Z UID:d59ca055-4396-442c-af99-5c45cfd8e75d SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110604T180000 DTEND;TZID=Europe/Zagreb:20110604T210000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110607T222032Z LAST-MODIFIED:20110607T222045Z DTSTAMP:20110607T222045Z UID:6ec29b6e-c8f3-40b3-87d3-d7ebe742a8cc SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110606T150000 DTEND;TZID=Europe/Zagreb:20110606T160000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111007T155910Z LAST-MODIFIED:20111007T155930Z DTSTAMP:20111007T155930Z UID:807b2e3b-6bc1-4fd4-8002-6a4a3d6ab210 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111010T200000 DTEND;TZID=Europe/Zagreb:20111010T230000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111009T102456Z LAST-MODIFIED:20111009T102524Z DTSTAMP:20111009T102524Z UID:17848910-224e-4b2e-82a1-880e7579fc09 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20111009T190000 DTEND;TZID=Europe/Zagreb:20111009T210000 LOCATION:faks DESCRIPTION:trening s najmanom na faksu TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111010T141132Z LAST-MODIFIED:20111010T141158Z DTSTAMP:20111010T141158Z UID:1dc66abb-d265-4115-bed1-8647076b6a6e SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111014T203000 DTEND;TZID=Europe/Zagreb:20111014T230000 DESCRIPTION:Odra Vex dizajn TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111014T073351Z LAST-MODIFIED:20111014T073406Z DTSTAMP:20111014T073406Z UID:40881d4c-03b1-4bd6-9486-47c88e42d4a9 SUMMARY:Girje DTSTART;TZID=Europe/Zagreb:20111011T190000 DTEND;TZID=Europe/Zagreb:20111011T200000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111015T174624Z LAST-MODIFIED:20111015T174705Z DTSTAMP:20111015T174705Z UID:9d8b6e90-6ba9-4bec-8000-e1f9609b84a7 SUMMARY:Stolni DTSTART;TZID=Europe/Zagreb:20111015T170000 DTEND;TZID=Europe/Zagreb:20111015T190000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111016T111311Z LAST-MODIFIED:20111016T111339Z DTSTAMP:20111016T111339Z UID:8f2601db-6537-40aa-91b5-3bff62c6aaeb SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111018T193000 DTEND;TZID=Europe/Zagreb:20111018T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111022T125946Z LAST-MODIFIED:20111022T130003Z DTSTAMP:20111022T130003Z UID:c606f5b2-4519-4b4c-9010-96ca6d301e70 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20111022T100000 DTEND;TZID=Europe/Zagreb:20111022T120000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111022T125946Z LAST-MODIFIED:20111022T130030Z DTSTAMP:20111022T130030Z UID:178d87de-d399-422f-955c-3d8867a7f384 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20111023T100000 DTEND;TZID=Europe/Zagreb:20111023T120000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111007T155910Z LAST-MODIFIED:20111026T212929Z DTSTAMP:20111026T212929Z UID:104e403e-9639-4316-813f-e843520901a5 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111028T203000 DTEND;TZID=Europe/Zagreb:20111028T233000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111111T094915Z LAST-MODIFIED:20111111T094932Z DTSTAMP:20111111T094932Z UID:64804e8e-fef5-46e3-b2a2-b494d9120dc1 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111111T190000 DTEND;TZID=Europe/Zagreb:20111111T213000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111113T175921Z LAST-MODIFIED:20111113T175937Z DTSTAMP:20111113T175937Z UID:72181664-03b7-4789-90a0-8bbec9300b5c SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111116T193000 DTEND;TZID=Europe/Zagreb:20111116T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111126T133916Z LAST-MODIFIED:20111126T133937Z DTSTAMP:20111126T133937Z UID:f3f56428-d648-4d8a-9174-57927d74e346 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111124T193000 DTEND;TZID=Europe/Zagreb:20111124T223000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111126T133916Z LAST-MODIFIED:20111126T134122Z DTSTAMP:20111126T134122Z UID:548df49b-2451-4224-bd7b-5780dd93a19e SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111201T193000 DTEND;TZID=Europe/Zagreb:20111201T223000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111014T073351Z LAST-MODIFIED:20111127T154401Z DTSTAMP:20111127T154401Z UID:154529bd-dcd2-43ad-900e-050a4d22f3a1 SUMMARY:Girje RRULE:FREQ=WEEKLY;UNTIL=20111220T180000Z;BYDAY=MO,TH DTSTART;TZID=Europe/Zagreb:20111013T190000 DTEND;TZID=Europe/Zagreb:20111013T200000 TRANSP:OPAQUE SEQUENCE:1 X-MOZ-GENERATION:3 END:VEVENT BEGIN:VEVENT CREATED:20111126T134122Z LAST-MODIFIED:20111126T134129Z DTSTAMP:20111126T134129Z UID:154529bd-dcd2-43ad-900e-050a4d22f3a1 SUMMARY:Girje RECURRENCE-ID;TZID=Europe/Zagreb:20111201T190000 DTSTART;TZID=Europe/Zagreb:20111130T190000 DTEND;TZID=Europe/Zagreb:20111130T200000 SEQUENCE:2 TRANSP:OPAQUE X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT CREATED:20111127T154352Z LAST-MODIFIED:20111127T154401Z DTSTAMP:20111127T154401Z UID:154529bd-dcd2-43ad-900e-050a4d22f3a1 SUMMARY:Girje RECURRENCE-ID;TZID=Europe/Zagreb:20111205T190000 DTSTART;TZID=Europe/Zagreb:20111206T190000 DTEND;TZID=Europe/Zagreb:20111206T200000 SEQUENCE:2 TRANSP:OPAQUE X-MOZ-GENERATION:3 END:VEVENT END:VCALENDAR < dav_etag: >76e05bffe4f06d622b02cc0095b5eb25< dav_name: >/User Six/home/c0f7c860-1345-012d-125f-002421a2359e.ics< description: >NULL< dtstart: >2010-11-28 23:00:00+13< summary: >Kosarkaska utakmica< davical-1.1.1/testing/tests/regression-suite/0922-PROPFIND-supported-stuff.test0000644000000000000000000000102011446006434024010 0ustar # # PROPFIND looking for supported-methods supported-reports etc # # Bogus collection name # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/boguscollection/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0015-Mulberry-PROPFIND-6.test0000644000000000000000000000063411446006434022605 0ustar # # Before creating a calendar in Mulberry, we should be able # to do a PROPFIND and it should not be there. TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=Depth: 1 HEADER=Content-Type: text/xml; charset=utf-8 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user5.result0000644000000000000000000001076711732222727024726 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT LAST-MODIFIED:20100812T161339Z SEQUENCE:5 UID:naltpirh2vfjfmplmsivuo30t8@google.com SUMMARY:Tango Night DESCRIPTION:Never will you see a space glow like a night of Tango at Tea se.\nAll dancers welcome!\n$5 suggested donation DTSTART;TZID=America/Los_Angeles:20100815T200000 CREATED:20091221T033228Z DTSTAMP:20100812T161339Z DURATION:PT3H LOCATION: X-VENUE:Tease Restaurant & Bar, corner of 2nd & Main X-EMAIL-RSVP-UPDATES:true RRULE:FREQ=MONTHLY;WKST=MO;BYDAY=3SU END:VEVENT BEGIN:VTIMEZONE TZID:America/Los_Angeles X-LIC-LOCATION:America/Los_Angeles BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >Never will you see a space glow like a night of Tango at Tease. All dancers welcome! $5 suggested donation< dtend: >2010-08-15 23:00:00< dtstamp: >2010-08-12 16:13:39< dtstart: >2010-08-15 20:00:00< due: >NULL< location: >< logged_user: >14< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY;WKST=MO;BYDAY=3SU< status: >NULL< summary: >Tango Night< transp: >NULL< tz_id: >America/Los_Angeles< uid: >naltpirh2vfjfmplmsivuo30t8@google.com< url: >NULL< user_no: >14< A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT SEQUENCE:4 DTSTART;TZID=America/Los_Angeles:20090707T170000 STATUS:CONFIRMED DTSTAMP:20090828T083735Z SUMMARY:Sketch Salone DTEND;TZID=America/Los_Angeles:20090707T200000 LOCATION:Tease Restaurant & Bar\, corner of 2nd & Main RRULE:FREQ=WEEKLY;WKST=SU;INTERVAL=2;UNTIL=20090921T065959Z;BYDAY=MO DESCRIPTION:Sketch Salone\, where the artist in you can come to the surf ace. Live model Hosted by Kevin Christman\n per bench seat by RSVP or w elcome to use a table UID:v3f2otajsto18em4rom3jd4238@google.com TRANSP:TRANSPARENT CREATED:20091221T033228Z END:VEVENT BEGIN:VTIMEZONE TZID:America/Los_Angeles X-LIC-LOCATION:America/Los_Angeles BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:4 DTSTART;TZID=America/Los_Angeles:20090907T170000 STATUS:CONFIRMED DTSTAMP:20090828T083735Z SUMMARY:Sketch Salone DTEND;TZID=America/Los_Angeles:20090907T200000 LOCATION:Tease Restaurant & Bar\, corner of 2nd & Main DESCRIPTION:Sketch Salone\, where the artist in you can come to the surf ace. Live model Hosted by Kevin Christman\n per bench seat by RSVP or w elcome to use a table UID:v3f2otajsto18em4rom3jd4238@google.com TRANSP:TRANSPARENT CREATED:20091221T033228Z RECURRENCE-ID;TZID=America/Los_Angeles:20090914T170000 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >Sketch Salone, where the artist in you can come to the surface. Live model Hosted by Kevin Christman per bench seat by RSVP or welcome to use a table< dtend: >2009-07-07 20:00:00< dtstamp: >2009-08-28 08:37:35< dtstart: >2009-07-07 17:00:00< due: >NULL< location: >Tease Restaurant & Bar, corner of 2nd & Main< logged_user: >14< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=WEEKLY;WKST=SU;INTERVAL=2;UNTIL=20090921T065959Z;BYDAY=MO< status: >CONFIRMED< summary: >Sketch Salone< transp: >TRANSPARENT< tz_id: >America/Los_Angeles< uid: >v3f2otajsto18em4rom3jd4238@google.com< url: >NULL< user_no: >14< count: >2< davical-1.1.1/testing/tests/regression-suite/0880-Freebusy-POST.result0000644000000000000000000000522611633117640022344 0ustar mailto:user1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20081021T110000Z DTEND:20081106T110000Z FREEBUSY:20081021T180000Z/20081022T040000Z FREEBUSY:20081022T180000Z/20081023T040000Z FREEBUSY:20081022T184500Z/20081022T193000Z FREEBUSY:20081023T180000Z/20081024T040000Z FREEBUSY:20081026T180000Z/20081027T040000Z FREEBUSY:20081027T180000Z/20081028T040000Z FREEBUSY:20081027T184500Z/20081027T193000Z FREEBUSY:20081028T180000Z/20081029T040000Z FREEBUSY:20081029T180000Z/20081030T040000Z FREEBUSY:20081029T184500Z/20081029T193000Z FREEBUSY:20081030T180000Z/20081031T040000Z FREEBUSY:20081102T180000Z/20081103T040000Z FREEBUSY:20081102T183000Z/20081102T203000Z FREEBUSY:20081103T180000Z/20081104T040000Z FREEBUSY:20081103T184500Z/20081103T193000Z FREEBUSY:20081104T180000Z/20081105T040000Z FREEBUSY:20081105T180000Z/20081106T040000Z FREEBUSY:20081105T184500Z/20081105T193000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net END:VFREEBUSY END:VCALENDAR mailto:user2@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20081021T110000Z DTEND:20081106T110000Z FREEBUSY:20081021T220000Z/20081021T223000Z FREEBUSY:20081023T220000Z/20081023T223000Z FREEBUSY:20081024T010000Z/20081024T020000Z FREEBUSY:20081026T200000Z/20081026T210000Z FREEBUSY:20081026T220000Z/20081026T223000Z FREEBUSY:20081028T220000Z/20081028T223000Z FREEBUSY:20081030T220000Z/20081030T223000Z FREEBUSY:20081031T010000Z/20081031T020000Z FREEBUSY:20081031T070000Z/20081101T070000Z FREEBUSY:20081102T200000Z/20081102T210000Z FREEBUSY:20081102T220000Z/20081102T223000Z FREEBUSY:20081103T080000Z/20081104T080000Z FREEBUSY:20081104T220000Z/20081104T223000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user2@example.net END:VFREEBUSY END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0503-iCal-PROPFIND.result0000644000000000000000000000173711750137463022064 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "2ff648e39018b51d9a547dd7560afa7c" Content-Length: 675 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ user1 home "86d97f6156e59bbf1b1514e804a6cc1c" HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0214-Moz-PUT-New-Task.result0000644000000000000000000000046711732222776022637 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "509b0f0d8a3363379f9f5727f5dd74a0" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0834-Spec-FREEBUSY-1.result0000644000000000000000000000562011732223564022247 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 2708 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20061001T000000Z DTEND:20070630T235959Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070629T040000Z/20070629T054500Z END:VFREEBUSY END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0246-Moz-POST-FB.test0000644000000000000000000000171711446006434021250 0ustar # # POST to scheduling outbox for freebusy query on user2 # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/calendar; charset=utf-8 HEADER=Originator: mailto:user1@example.net HEADER=Recipient: mailto:ultrabogosity@example.net HEAD REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 METHOD:REQUEST BEGIN:VFREEBUSY DTSTAMP:20081022T062945Z ORGANIZER:mailto:user1@example.net DTSTART:20081020T110000Z DTEND:20081105T110000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:ultrabogosity@example.net END:VFREEBUSY END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0598-REPORT-sync-initial.test0000644000000000000000000000057711446006434023064 0ustar # # Check for support of REPORT sync-collection with no sync-token # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-agent: sync-collection initial REPORT HEADER=Content-type: text/xml HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0234-Moz-PUT.test0000644000000000000000000000425311651212132020631 0ustar # # PUT a Mozilla style event into the database # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8pre) Gecko/20071023 Sunbird/0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO CREATED:20071203T202915Z LAST-MODIFIED:20071203T203021Z DTSTAMP:20071203T202915Z UID:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08 SUMMARY:Release 0.9.3 STATUS:IN-PROCESS DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 PERCENT-COMPLETE:95 X-MOZ-LOCATIONPATH:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics BEGIN:VALARM TRIGGER;VALUE=DURATION:-P2D DESCRIPTION:Mozilla Alarm: Release 0.9.3 ACTION:DISPLAY END:VALARM END:VTODO END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due at time zone olson_name as due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", ((current_timestamp AT TIME ZONE 'GMT' - calendar_item.last_modified) < '2 seconds'::interval) AS "~ Modified Now" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0809-Spec-UNLOCK-1.result0000644000000000000000000000042011732223550022004 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0954-PROPFIND.test0000644000000000000000000000115311446006434020654 0ustar # # PROPFIND as owner retrieving the tickets on that resource. # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/ HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 BEGINDATA ENDDATA REPLACE=!\S{8}!Good Ticket ID! REPLACE=!Seconds-3\d+!Seconds-3600! davical-1.1.1/testing/tests/regression-suite/0224-Moz-OPTIONS-principal.test0000644000000000000000000000023111633117640023272 0ustar # # Do an OPTIONS request against our own principal-URL # TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/ HEADER=User-Agent: DAViCalTester/1.0 HEAD davical-1.1.1/testing/tests/regression-suite/0099-REPORT-sync-initial.test0000644000000000000000000000057711446006434023060 0ustar # # Check for support of REPORT sync-collection with no sync-token # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-agent: sync-collection initial REPORT HEADER=Content-type: text/xml HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0526-iCal-PROPFIND.result0000644000000000000000000000207011732223052022046 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "fc0f5539296edf051d8a53d6a2bfe8cc" Content-Length: 764 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/assistant1/ /caldav.php/manager1/ /caldav.php/resmgr1/ /caldav.php/resource1/ /caldav.php/resource2/ /caldav.php/teamclient1/ /caldav.php/manager1/calendar-proxy-read/ /caldav.php/assistant1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-write/ /caldav.php/resource2/calendar-proxy-write/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0233-Moz-PUT.result0000644000000000000000000000431011732223010021156 0ustar HTTP/1.1 100 Continue HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "e8060931f30c1798ac58ffbe4ec0bffc" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT CREATED:20071203T202630Z LAST-MODIFIED:20071203T202834Z DTSTAMP:20071203T202630Z UID:e70576e9-c1e0-431e-a507-0386fd82f223 SUMMARY:Morning Meeting RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T074500 DTEND;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T083000 X-MOZ-LOCATIONPATH:e70576e9-c1e0-431e-a507-0386fd82f223.ics LOCATION:Suzies Coffee Lounge DESCRIPTION:Twice-weekly breakfast meeting CATEGORIES:Business BEGIN:VALARM TRIGGER;VALUE=DURATION:-PT10M DESCRIPTION:Mozilla Alarm: Morning Meeting ACTION:DISPLAY END:VALARM END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< dav_etag: >e8060931f30c1798ac58ffbe4ec0bffc< description: >Twice-weekly breakfast meeting< dtend: >2007-12-11 08:30:00< dtstamp: >2007-12-03 20:26:30< dtstart: >2007-12-11 07:45:00< due: >NULL< location: >Suzies Coffee Lounge< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH< status: >NULL< summary: >Morning Meeting< transp: >NULL< tz_id: >/mozilla.org/20070129_1/Antarctica/McMurdo< uid: >e70576e9-c1e0-431e-a507-0386fd82f223< url: >NULL< user_no: >10< ~ Modified Now: >0< davical-1.1.1/testing/tests/regression-suite/0554-iPhone-PROPFIND.test0000644000000000000000000000165311446006434022075 0ustar # # Testing with a process similar to iPhone 3 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEAD AUTH=user1:user1 HEADER=User-Agent: DAVKit/4.0 (728.3); iCalendar/1 (34); iPhone/3.0 7A341 HEADER=Content-Type: text/xml HEADER=Depth: 1 # # This query from the iPhone seems to discover several things. Firstly they # get the calendar-home-set URL for this path. Secondly, they ascertain # whether the calendar supports scheduling, and finally, whether it # handles some Apple-specific extensions. # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/2006-REPORT-expanded-nz-holidays-2010.result0000644000000000000000000005201711732223743025407 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "a7c4922382f07b79b4f116aee591f15e" Content-Length: 17045 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/nz_holidays/20081226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225121Z LAST-MODIFIED:20081117T225144Z DTSTAMP:20081117T225121Z UID:20081226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20101226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225212Z LAST-MODIFIED:20081117T230337Z DTSTAMP:20081117T225212Z UID:20090101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20100101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081225-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T224951Z LAST-MODIFIED:20081117T235108Z DTSTAMP:20081117T224951Z UID:20081225-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20101225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090206-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235224Z LAST-MODIFIED:20081120T002639Z DTSTAMP:20081117T235224Z UID:20090206-1-all-publicholidays-dol.govt.nz SUMMARY:Waitangi Day TRANSP:TRANSPARENT X-MOZ-GENERATION:4 DTSTART;VALUE=DATE:20100206 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100206 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090425-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011910Z LAST-MODIFIED:20081120T001537Z DTSTAMP:20081118T011910Z UID:20090425-1-all-publicholidays-dol.govt.nz SUMMARY:ANZAC Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20100425 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100425 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011947Z LAST-MODIFIED:20081118T012009Z DTSTAMP:20081118T011947Z UID:20090601-1-all-publicholidays-dol.govt.nz SUMMARY:Queen's Birthday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100607 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100607 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091026-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012125Z LAST-MODIFIED:20081118T012150Z DTSTAMP:20081118T012125Z UID:20091026-1-all-publicholidays-dol.govt.nz SUMMARY:Labour Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20101025 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101025 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235121Z LAST-MODIFIED:20081118T012314Z DTSTAMP:20081117T235121Z UID:20090102-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012344Z LAST-MODIFIED:20081118T012529Z DTSTAMP:20081118T012344Z UID:20091226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day Holiday TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20101228 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101228 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091228-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012537Z LAST-MODIFIED:20081118T012606Z DTSTAMP:20081118T012537Z UID:20091228-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20101227 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101227 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012634Z LAST-MODIFIED:20081118T012657Z DTSTAMP:20081118T012634Z UID:20100101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100607-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T013050Z LAST-MODIFIED:20081118T013102Z DTSTAMP:20081118T013050Z UID:20100607-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100104 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100104 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100402-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012802Z LAST-MODIFIED:20081118T012811Z DTSTAMP:20081118T012802Z UID:20100402-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100402 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100405-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012817Z LAST-MODIFIED:20081118T012854Z DTSTAMP:20081118T012817Z UID:20100405-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100405 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200154Z LAST-MODIFIED:20081119T200227Z DTSTAMP:20081119T200154Z UID:20081201-1-all-publicholidays-dol.govt.nz SUMMARY:Westland Anniversary Day (Monday nearest 1st December) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20101129 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101129 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200252Z LAST-MODIFIED:20081119T200304Z DTSTAMP:20081119T200252Z UID:20081201-2-all-publicholidays-dol.govt.nz SUMMARY:Chatham Islands Anniversary Day (Monday nearest 30th November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20101129 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101129 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090126-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200321Z LAST-MODIFIED:20081119T200334Z DTSTAMP:20081119T200321Z UID:20090126-1-all-publicholidays-dol.govt.nz SUMMARY:Auckland Anniversary Day (Monday nearest 29th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100201 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100201 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200350Z LAST-MODIFIED:20081119T200406Z DTSTAMP:20081119T200350Z UID:20090119-1-all-publicholidays-dol.govt.nz SUMMARY:Wellington Anniversary Day (Monday nearest 22nd January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100125 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100125 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200431Z LAST-MODIFIED:20081119T200443Z DTSTAMP:20081119T200431Z UID:20090119-2-all-publicholidays-dol.govt.nz SUMMARY:Southland Anniversary Day (Monday nearest 17th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100118 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100118 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090202-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200519Z LAST-MODIFIED:20081119T200530Z DTSTAMP:20081119T200519Z UID:20090202-1-all-publicholidays-dol.govt.nz SUMMARY:Nelson Anniversary Day (Monday nearest 1st Feb) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100201 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100201 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091023-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200759Z LAST-MODIFIED:20081119T200809Z DTSTAMP:20081119T200759Z UID:20091023-1-all-publicholidays-dol.govt.nz SUMMARY: Hawkes' Bay Anniversary Day (Friday before 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20101022 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101022 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200840Z LAST-MODIFIED:20081119T200928Z DTSTAMP:20081119T200840Z UID:20091102-1-all-publicholidays-dol.govt.nz SUMMARY:Marlborough Anniversary Day (Monday after 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20101101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091113-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201008Z LAST-MODIFIED:20081119T201040Z DTSTAMP:20081119T201008Z UID:20091113-1-all-publicholidays-dol.govt.nz SUMMARY:Canterbury Anniversary Day (Second Friday after the first Tuesda y in November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20101112 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20101112 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090928-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201140Z LAST-MODIFIED:20081119T201153Z DTSTAMP:20081119T201140Z UID:20090928-1-all-publicholidays-dol.govt.nz SUMMARY:South Canterbury Anniversary Day (4th Monday in September) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100927 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20100927 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100308-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T202108Z LAST-MODIFIED:20081119T202117Z DTSTAMP:20081119T202108Z UID:20100308-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100308 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100322-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T202119Z LAST-MODIFIED:20081119T202125Z DTSTAMP:20081119T202119Z UID:20100322-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100322 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Boxing Day< dtstart: >2005-01-01 00:00:00+13< rrule: >FREQ=YEARLY< summary: >New Year's Day< dtstart: >2005-12-25 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Christmas Day< dtstart: >2005-02-06 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Waitangi Day< dtstart: >2005-04-25 00:00:00+12< rrule: >FREQ=YEARLY< summary: >ANZAC Day< dtstart: >2005-06-06 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=6;BYDAY=1MO< summary: >Queen's Birthday< dtstart: >2005-10-24 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYDAY=4MO< summary: >Labour Day< dtstart: >2005-01-02 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Day after New Year's Day< dtstart: >2005-12-27 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=2< summary: >Boxing Day Holiday< dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=1< summary: >Christmas Day Holiday< dtstart: >2005-01-03 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=1< summary: >New Year's Day Holiday< dtstart: >2005-01-04 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=2< summary: >Day after New Year's Day Holiday< dtstart: >2010-04-02 00:00:00+13< rrule: >NULL< summary: >Good Friday< dtstart: >2010-04-05 00:00:00+12< rrule: >NULL< summary: >Easter Monday< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28< summary: >Westland Anniversary Day (Monday nearest 1st December)< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29< summary: >Chatham Islands Anniversary Day (Monday nearest 30th November)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO< summary: >Auckland Anniversary Day (Monday nearest 29th January)< dtstart: >2005-01-24 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO< summary: >Wellington Anniversary Day (Monday nearest 22nd January)< dtstart: >2005-01-17 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO< summary: >Southland Anniversary Day (Monday nearest 17th January)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO< summary: >Nelson Anniversary Day (Monday nearest 1st Feb)< dtstart: >2005-10-21 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR< summary: >Hawkes' Bay Anniversary Day (Friday before 4th Monday of October)< dtstart: >2005-10-31 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58< summary: >Marlborough Anniversary Day (Monday after 4th Monday of October)< dtstart: >2005-11-11 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR< summary: >Canterbury Anniversary Day (Second Friday after the first Tuesday in November)< dtstart: >2005-09-26 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=9;BYDAY=4MO< summary: >South Canterbury Anniversary Day (4th Monday in September)< dtstart: >2010-03-08 00:00:00+13< rrule: >NULL< summary: >Taranaki Anniversary Day< dtstart: >2010-03-22 00:00:00+13< rrule: >NULL< summary: >Otago Anniversary Day< davical-1.1.1/testing/tests/regression-suite/0310-Chandler-PUT-1.result0000644000000000000000000000336411732223027022303 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "55f02f66966ee150320383803d1e0d34" Content-Length: 0 Content-Type: text/plain; charset="utf-8" A1 CalDAV DATA: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//PYVOBJECT//NONSGML Version 1//EN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD DTSTART:20000319T030000 RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=3 TZNAME:Pacific/Auckland TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD BEGIN:DAYLIGHT DTSTART:20001001T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:Pacific/Auckland TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT UID:71e2ae82-7870-11db-c6d6-f6927c144649 DTSTAMP:20060511T043751Z DTSTART;TZID=Pacific/Auckland:20061103T160000 DTEND;TZID=Pacific/Auckland:20061103T174500 DESCRIPTION: LOCATION:Level 3 RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900 STATUS:CONFIRMED SUMMARY:Beer O'Clock END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >< dtend: >2006-11-03 17:45:00< dtstamp: >2006-05-11 04:37:51< dtstart: >2006-11-03 16:00:00< due: >NULL< last_modified: >2006-05-11 04:37:51< location: >Level 3< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< status: >CONFIRMED< summary: >Beer O'Clock< transp: >NULL< tz_id: >Pacific/Auckland< uid: >71e2ae82-7870-11db-c6d6-f6927c144649< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0509-iCal-PROPPATCH.test0000644000000000000000000000116011446006434021633 0ustar # # iCal does a PROPPATCH to change the name of a calendar # TYPE=PROPPATCH URL=http://mycaldav/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ HEADER=Content-Type: text/xml HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEAD # Reformatted for readability BEGINDATA iCal Calendar ENDDATA QUERY SELECT dav_displayname, is_calendar FROM collection WHERE dav_name = '/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0925-MOVE.test0000644000000000000000000000126311633117640020201 0ustar # # MOVE an event from one location to another # TYPE=MOVE URL=http://regression.host/caldav.php/user1/anotherone/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEADER=User-Agent: RFC4918 Spec Tests HEADER=Destination: /caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEAD QUERY SELECT caldav_data.dav_name AS data_name, calendar_item.dav_name AS item_name, caldav_data.user_no AS cd_user_no, calendar_item.user_no AS ci_user_no, caldav_data.collection_id AS cd_collection, calendar_item.collection_id AS ci_collection FROM caldav_data JOIN calendar_item USING(dav_id) WHERE caldav_data.dav_name ~ 'DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0960-GET.result0000644000000000000000000000200311446006434020401 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, calendar-access Etag: "13249ced6c7527191a003f54f7e3cd25" Content-Length: 834 Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081024T140000 DTEND;TZID=Pacific/Auckland:20081024T150000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0850-Spec-REPORT-1.test0000644000000000000000000000125411446006434021471 0ustar # # Check for support of REPORT calendar-query with text-match on UID # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-agent: SpecTest REPORT HEADER=Content-type: text/xml HEAD BEGINDATA 20061101T073000Z-10468-1000-1-7@ubu ENDDATA davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user6.result0000644000000000000000000000753411732222727024725 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT SEQUENCE:3 TRANSP:OPAQUE UID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB DTSTART;TZID=Europe/Helsinki:20081025T133000 DTSTAMP:20081024T200745Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12 SUMMARY:Irregular meeting for User 3 CREATED:20081024T200734Z DTEND;TZID=Europe/Helsinki:20081025T143000 END:VEVENT BEGIN:VTIMEZONE TZID:Europe/Helsinki BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 DTSTART:19810329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:EEST END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 DTSTART:19961027T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:EET END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2008-10-25 14:30:00< dtstamp: >2008-10-24 20:07:45< dtstart: >2008-10-25 13:30:00< due: >NULL< location: >NULL< logged_user: >15< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12< status: >NULL< summary: >Irregular meeting for User 3< transp: >OPAQUE< tz_id: >Europe/Helsinki< uid: >55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB< url: >NULL< user_no: >15< A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT SEQUENCE:2 TRANSP:OPAQUE UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491 DTSTART;TZID=Europe/Helsinki:20081024T084500 DTSTAMP:20081025T112653Z SUMMARY:Dentist\'s Council meeting RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR CREATED:20081025T112648Z DTEND;TZID=Europe/Helsinki:20081024T113000 END:VEVENT BEGIN:VTIMEZONE TZID:Europe/Helsinki BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 DTSTART:19810329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:EEST END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 DTSTART:19961027T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:EET END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:1 TRANSP:OPAQUE UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491 DTSTART;TZID=Bogus Nonstandard Time:20091017T084500 DTSTAMP:20081025T112653Z SUMMARY:Bogus Nonstandard Meeting RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR CREATED:20081025T112648Z DTEND;TZID=Bogus Nonstandard Time:20091017T113000 END:VEVENT BEGIN:VTIMEZONE TZID:Bogus Nonstandard Time BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 DTSTART:19810329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:EEST END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 DTSTART:19961027T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:EET END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2008-10-24 11:30:00< dtstamp: >2008-10-25 11:26:53< dtstart: >2008-10-24 08:45:00< due: >NULL< location: >NULL< logged_user: >15< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR< status: >NULL< summary: >Dentist\'s Council meeting< transp: >OPAQUE< tz_id: >Europe/Helsinki< uid: >174F9C2A-1223-40C4-9E06-6E91F2EA9491< url: >NULL< user_no: >15< count: >2< davical-1.1.1/testing/tests/regression-suite/0942-REPORT-principal-property-search.result0000644000000000000000000001015311750162376026114 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "85e4975129afbf7f39b54da55ef16eb4" Content-Length: 3886 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ User 1 /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/ mailto:user2@example.net /caldav.php/user2/ User 2 /caldav.php/user2/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user3/ mailto:user3@example.net /caldav.php/user3/ User 3 /caldav.php/user3/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user4/ mailto:user4@example.net /caldav.php/user4/ User 4 /caldav.php/user4/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user5/ mailto:user5@example.net /caldav.php/user5/ User 5 /caldav.php/user5/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/User%20Six/ mailto:user6@example.net /caldav.php/User%20Six/ User 6 /caldav.php/User%20Six/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0902-PUT-collection.result0000644000000000000000000000154711732223631022571 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caldav_data: >29< calendar_item: >29< alarms: >28< attendees: >40< collection_id: >1566< dav_displayname: >anotherone< dav_etag: >f9a8ee6b41d9b02aa5176e6da349121a< dav_name: >/user1/anotherone/< default_privilege: >NULL< description: >< is_addressbook: >0< is_calendar: >1< parent_container: >/user1/< public_events_onl: >0< publicly_readable: >0< resourcetypes: >< schedule_transp: >opaque< timezone: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0002-Mulberry-1.result0000644000000000000000000000526711732222733021723 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "6d1a022aa3449d59d60899df5ad10c7d" Content-Length: 2426 Content-Type: text/xml; charset="utf-8" /caldav.php/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/manager1/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/assistant1/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/resource1/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/resource2/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0234-Moz-PUT.result0000644000000000000000000000400111732223010021154 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "8f581a053df6d833254756dfd7553d37" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO CREATED:20071203T202915Z LAST-MODIFIED:20071203T203021Z DTSTAMP:20071203T202915Z UID:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08 SUMMARY:Release 0.9.3 STATUS:IN-PROCESS DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 PERCENT-COMPLETE:95 X-MOZ-LOCATIONPATH:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics BEGIN:VALARM TRIGGER;VALUE=DURATION:-P2D DESCRIPTION:Mozilla Alarm: Release 0.9.3 ACTION:DISPLAY END:VALARM END:VTODO END:VCALENDAR < caldav_type: >VTODO< class: >PUBLIC< dav_etag: >8f581a053df6d833254756dfd7553d37< description: >NULL< dtend: >NULL< dtstamp: >2007-12-03 20:29:15< dtstart: >2007-12-09 13:30:00< due: >2007-12-09 13:30:00< location: >NULL< logged_user: >10< percent_complete: >95.00< priority: >NULL< rrule: >NULL< status: >IN-PROCESS< summary: >Release 0.9.3< transp: >NULL< tz_id: >/mozilla.org/20070129_1/Antarctica/McMurdo< uid: >e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08< url: >NULL< user_no: >10< ~ Modified Now: >0< davical-1.1.1/testing/tests/regression-suite/0562-iOS-PROPFIND.test0000644000000000000000000000135011756033020021331 0ustar # # Testing retrieval of the wierd properties we just set # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEAD AUTH=user1:user1 HEADER=User-Agent: DAVKit/4.0 (728.3); iCalendar/1 (34); iPhone/3.0 7A341 HEADER=Content-Type: text/xml HEADER=Depth: 0 # # This query from the iPhone goes to the calendar-home-set and checks # what is available under that collection. # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0303-Chandler-PROPFIND-1.result0000644000000000000000000000145311732223022023046 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "61420f7d691185526594a0de01390d2f" Content-Length: 495 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ user1 home HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0100-Evo-OPTIONS-1.test0000644000000000000000000000014611446006434021433 0ustar # # Do an initial OPTIONS request TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/home/ NOAUTH HEAD davical-1.1.1/testing/tests/regression-suite/0811-Spec-LOCK-1.test0000644000000000000000000000132111446006434021176 0ustar # # Test specification compliance for LOCK request # - Refresh the lock # No data is needed for a refresh # TYPE=LOCK URL=http://mycaldav/caldav.php/user1/home/ # Save the original lock time for later use GETSQL=oldlocktime SELECT start FROM locks WHERE dav_name = '/user1/home/' ENDSQL # Get the lock token from the earlier lock GETSQL=locktoken SELECT opaquelocktoken FROM locks WHERE dav_name = '/user1/home/' ENDSQL HEADER=Depth: 0 HEADER=Timeout: Infinite,Second-4100000000 HEADER=Lock-Token: HEAD # # Do a query after the request QUERY SELECT 'Refreshed (should be 1)', start != '##oldlocktime##'::timestamp AS refresh_success FROM locks WHERE dav_name = '/user1/home/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0816-Spec-UNLOCK-1.test0000644000000000000000000000053611446006434021455 0ustar # # Test specification compliance for LOCK/UNLOCK request # TYPE=UNLOCK URL=http://mycaldav/caldav.php/user1/home/ # Get the lock token from the earlier lock GETSQL=locktoken SELECT opaquelocktoken FROM locks WHERE dav_name = '/user1/home/' ENDSQL HEADER=Lock-Token: HEAD # There is no data for an UNLOCK request # davical-1.1.1/testing/tests/regression-suite/0013-Mulberry-PROPFIND-5.result0000644000000000000000000000264111732222741023140 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "0e8180a5a3677b7b3e2156a8053882fe" Content-Length: 1124 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics 731 text/calendar HTTP/1.1 200 OK /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics 705 text/calendar HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0212-Moz-PROPFIND.result0000644000000000000000000000130211732222775021743 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Location: /caldav.php/user1/home/ ETag: "334c8abc0ac73261cdbf963fc7269d76" Content-Length: 347 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0887-POST-freebusy.test0000644000000000000000000000303511446006434022050 0ustar # # POST to scheduling outbox for freebusy query on user1 # matching query on 0885 and 0886 # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=User-Agent: DAViCal Regression Testing HEADER=Accept: text/xml HEADER=Content-Type: text/calendar; charset=utf-8 REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ REPLACE=/^DTSTART:20060930T120000Z\r?$/DTSTART:correct/ REPLACE=/^DTEND:20070630T115959Z\r?$/DTEND:correct/ BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 METHOD:REQUEST BEGIN:VFREEBUSY DTSTAMP:20081022T062945Z ORGANIZER:mailto:user1@example.net DTSTART:20060930T120000Z DTEND:20070630T115959Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net END:VFREEBUSY END:VCALENDAR ENDDATA QUERY SELECT dav_name AS "Dav Name", calendar_item.rrule, status, to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "a) start", to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "b)finish" FROM caldav_data INNER JOIN calendar_item USING(dav_id,user_no,dav_name) WHERE caldav_data.user_no = 10 AND rrule_event_overlaps( dtstart, dtend, rrule, '20061001T000000', '20070630T235959') AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) ORDER BY 2, 3, 4 ENDQUERY davical-1.1.1/testing/tests/regression-suite/0201-Moz-OPTIONS-2.result0000644000000000000000000000056011732222764022015 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT, DELETE, LOCK, UNLOCK, MOVE, GET, PUT, HEAD, MKTICKET, DELTICKET, ACL Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0403-Cadaver-LOCK-1.test0000644000000000000000000000052611651212132021644 0ustar # # Basic testing with Cadaver DAV client # TYPE=LOCK URL=http://mycaldav/caldav.php/user1/home/20061101T073004Z.ics HEADER=User-Agent: cadaver/0.23.3 neon/0.29.6 HEADER=Depth: 0 HEADER=Content-Type: application/xml HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0801-Spec-LOCK-1.test0000644000000000000000000000141511446006434021201 0ustar # # Test specification compliance for LOCK request # - Refresh the lock # No data is needed for a refresh # TYPE=LOCK URL=http://mycaldav/caldav.php/user1/home/i1278618276.ics # Save the original lock time for later use GETSQL=oldlocktime SELECT start FROM locks WHERE dav_name = '/user1/home/i1278618276.ics' ENDSQL # Get the lock token from the earlier lock GETSQL=locktoken SELECT opaquelocktoken FROM locks WHERE dav_name = '/user1/home/i1278618276.ics' ENDSQL HEADER=Depth: 0 HEADER=Timeout: Infinite,Second-4100000000 HEADER=Lock-Token: HEAD # # Do a query after the request QUERY SELECT 'Refreshed (should be 1)', start != '##oldlocktime##'::timestamp AS refresh_success FROM locks WHERE dav_name = '/user1/home/i1278618276.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0603-Soho-PROPFIND.result0000644000000000000000000001340111732223540022104 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "cb882ded16756e36bbd614591982f2e7" Content-Length: 5572 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.in/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.out/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0558-iPhone-PROPFIND.result0000644000000000000000000001220211732223534022430 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "23d5188e972ee46de551b1dd2cf1073a" Content-Length: 4933 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ User 1 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ user1 home HTTP/1.1 200 OK /caldav.php/user1/addresses/ user1 addresses HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ created HTTP/1.1 200 OK /caldav.php/user1/.in/ User 1 Inbox HTTP/1.1 200 OK /caldav.php/user1/.out/ User 1 Outbox HTTP/1.1 200 OK /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ iCal Calendar HTTP/1.1 200 OK /caldav.php/user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/ Untitled HTTP/1.1 200 OK /caldav.php/user1/calendar-proxy-read/ /user1/calendar-proxy-read/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ /user1/calendar-proxy-write/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0926-MOVE.result0000644000000000000000000000101211751110643020526 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" cd_collection: >250< cd_user_no: >100< ci_collection: >250< ci_user_no: >100< data_name: >/resource1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< item_name: >/resource1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< davical-1.1.1/testing/tests/regression-suite/0815-Spec-UNLOCK-1.result0000644000000000000000000000071111732223552022006 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 183 Content-Type: text/xml; charset="utf-8" /user1/home/ HTTP/1.1 423 Resource Locked davical-1.1.1/testing/tests/regression-suite/0950-MKTICKET.test0000644000000000000000000000161611446006434020646 0ustar # # MKTICKET request for a ticket on a collection resource # TYPE=MKTICKET URL=http://regression.host/caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA Second-86400 ENDDATA QUERY SELECT dav_owner_id, date_trunc( 'minute', ('55 seconds' + expires - current_timestamp)::interval(0)) AS timeout, privileges, target_collection_id, target_resource_id FROM access_ticket ENDQUERY REPLACE=!\S{8}!Good Ticket ID! REPLACE=!Ticket: \S{8}!Ticket:Good Ticket ID! REPLACE=!ETag: "\S+"!ETag: "Some good ETag"! REPLACE=!Seconds-3\d+!Seconds-3600! davical-1.1.1/testing/tests/regression-suite/0824-Spec-PROPFIND-5.result0000644000000000000000000000164611633117640022250 0ustar /caldav.php/user1/home/ httpd/unix-directory user1 home Dow, 01 Jan 2000 00:00:00 GMT 20090602T120000Z /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0840-Spec-PROPPATCH-1.result0000644000000000000000000000373511756134452022370 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 709 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ Some properties were not able to be changed. HTTP/1.1 409 Conflict DAV::resourcetype may only be set to a new value, it may not be removed. HTTP/1.1 424 Failed Dependency changed_recently: >1< dav_displayname: >user1 home< is_calendar: >1< resourcetypes: >< changed_by: >10< changed_recently: >1< dav_name: >/user1/home/< property_name: >http://apple.com/ns/ical/:calendar-color< property_value: >#0252D4FF< changed_by: >10< changed_recently: >1< dav_name: >/user1/home/< property_name: >http://apple.com/ns/ical/:calendar-order< property_value: >1< changed_by: >10< changed_recently: >1< dav_name: >/user1/home/< property_name: >urn:ietf:params:xml:ns:caldav:schedule-default-calendar-URL< property_value: > /caldav.php/user1/home/ < changed_by: >10< changed_recently: >1< dav_name: >/user1/home/< property_name: >urn:org:davical:outer< property_value: > inside inside2 < davical-1.1.1/testing/tests/regression-suite/0958-PROPFIND.test0000644000000000000000000000151111751114074020655 0ustar # # PROPFIND on a collection which we can only access via a ticket # also retrieving the tickets on that resource. # using the /public.php/ URL with no authentication # TYPE=PROPFIND URL=http://regression.host/public.php/user2/home/ NOAUTH # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 161 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEADER=Depth: 1 BEGINDATA ENDDATA REPLACE=!\S{8}!Good Ticket ID! REPLACE=!Seconds-3\d+!Seconds-3600! davical-1.1.1/testing/tests/regression-suite/0802-Spec-LOCK-1.test0000644000000000000000000000115111446006434021177 0ustar # # Test specification compliance for LOCK request # - This is a request for something which is already locked # and should fail. # TYPE=LOCK URL=http://mycaldav/caldav.php/user1/home/i1278618276.ics HEADER=Depth: 0 HEADER=Timeout: Infinite,Second-4100000000 HEADER=Content-type: text/xml; charset="utf-8" HEAD # # Include the data in-line # BEGINDATA http://andrew.mcmillan.net.nz/node/5/ ENDDATA davical-1.1.1/testing/tests/regression-suite/0208-Moz-REPORT-5.result0000644000000000000000000000320211732222772021702 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "cb43f2c3842d4c779d06f3790a43a067" Content-Length: 1349 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061120T041336Z LAST-MODIFIED:20061120T041709Z DTSTAMP:20061120T041709Z UID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 SUMMARY:Weekly Project Meeting PRIORITY:0 CLASS:PUBLIC RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000 CATEGORIES:Projects X-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/2004-REPORT-expanded-nz-holidays-2008.result0000644000000000000000000004436111732223741025415 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "f3f81dfdbbd7b52423f73f153b922eab" Content-Length: 14640 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/nz_holidays/20081226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225121Z LAST-MODIFIED:20081117T225144Z DTSTAMP:20081117T225121Z UID:20081226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20081226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225212Z LAST-MODIFIED:20081117T230337Z DTSTAMP:20081117T225212Z UID:20090101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20080101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081225-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T224951Z LAST-MODIFIED:20081117T235108Z DTSTAMP:20081117T224951Z UID:20081225-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20081225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090206-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235224Z LAST-MODIFIED:20081120T002639Z DTSTAMP:20081117T235224Z UID:20090206-1-all-publicholidays-dol.govt.nz SUMMARY:Waitangi Day TRANSP:TRANSPARENT X-MOZ-GENERATION:4 DTSTART;VALUE=DATE:20080206 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080206 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090425-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011910Z LAST-MODIFIED:20081120T001537Z DTSTAMP:20081118T011910Z UID:20090425-1-all-publicholidays-dol.govt.nz SUMMARY:ANZAC Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20080425 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080425 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011947Z LAST-MODIFIED:20081118T012009Z DTSTAMP:20081118T011947Z UID:20090601-1-all-publicholidays-dol.govt.nz SUMMARY:Queen's Birthday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080602 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080602 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091026-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012125Z LAST-MODIFIED:20081118T012150Z DTSTAMP:20081118T012125Z UID:20091026-1-all-publicholidays-dol.govt.nz SUMMARY:Labour Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20081027 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081027 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235121Z LAST-MODIFIED:20081118T012314Z DTSTAMP:20081117T235121Z UID:20090102-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012344Z LAST-MODIFIED:20081118T012529Z DTSTAMP:20081118T012344Z UID:20091226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day Holiday TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20081226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091228-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012537Z LAST-MODIFIED:20081118T012606Z DTSTAMP:20081118T012537Z UID:20091228-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20081225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012634Z LAST-MODIFIED:20081118T012657Z DTSTAMP:20081118T012634Z UID:20100101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100607-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T013050Z LAST-MODIFIED:20081118T013102Z DTSTAMP:20081118T013050Z UID:20100607-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200154Z LAST-MODIFIED:20081119T200227Z DTSTAMP:20081119T200154Z UID:20081201-1-all-publicholidays-dol.govt.nz SUMMARY:Westland Anniversary Day (Monday nearest 1st December) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20081201 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081201 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200252Z LAST-MODIFIED:20081119T200304Z DTSTAMP:20081119T200252Z UID:20081201-2-all-publicholidays-dol.govt.nz SUMMARY:Chatham Islands Anniversary Day (Monday nearest 30th November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20081201 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081201 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090126-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200321Z LAST-MODIFIED:20081119T200334Z DTSTAMP:20081119T200321Z UID:20090126-1-all-publicholidays-dol.govt.nz SUMMARY:Auckland Anniversary Day (Monday nearest 29th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080128 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080128 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200350Z LAST-MODIFIED:20081119T200406Z DTSTAMP:20081119T200350Z UID:20090119-1-all-publicholidays-dol.govt.nz SUMMARY:Wellington Anniversary Day (Monday nearest 22nd January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080121 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080121 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200431Z LAST-MODIFIED:20081119T200443Z DTSTAMP:20081119T200431Z UID:20090119-2-all-publicholidays-dol.govt.nz SUMMARY:Southland Anniversary Day (Monday nearest 17th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080114 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080114 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090202-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200519Z LAST-MODIFIED:20081119T200530Z DTSTAMP:20081119T200519Z UID:20090202-1-all-publicholidays-dol.govt.nz SUMMARY:Nelson Anniversary Day (Monday nearest 1st Feb) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080204 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080204 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091023-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200759Z LAST-MODIFIED:20081119T200809Z DTSTAMP:20081119T200759Z UID:20091023-1-all-publicholidays-dol.govt.nz SUMMARY: Hawkes' Bay Anniversary Day (Friday before 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20081024 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081024 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200840Z LAST-MODIFIED:20081119T200928Z DTSTAMP:20081119T200840Z UID:20091102-1-all-publicholidays-dol.govt.nz SUMMARY:Marlborough Anniversary Day (Monday after 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20081103 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081103 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091113-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201008Z LAST-MODIFIED:20081119T201040Z DTSTAMP:20081119T201008Z UID:20091113-1-all-publicholidays-dol.govt.nz SUMMARY:Canterbury Anniversary Day (Second Friday after the first Tuesda y in November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20081114 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20081114 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090928-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201140Z LAST-MODIFIED:20081119T201153Z DTSTAMP:20081119T201140Z UID:20090928-1-all-publicholidays-dol.govt.nz SUMMARY:South Canterbury Anniversary Day (4th Monday in September) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080922 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20080922 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Boxing Day< dtstart: >2005-01-01 00:00:00+13< rrule: >FREQ=YEARLY< summary: >New Year's Day< dtstart: >2005-12-25 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Christmas Day< dtstart: >2005-02-06 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Waitangi Day< dtstart: >2005-04-25 00:00:00+12< rrule: >FREQ=YEARLY< summary: >ANZAC Day< dtstart: >2005-06-06 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=6;BYDAY=1MO< summary: >Queen's Birthday< dtstart: >2005-10-24 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYDAY=4MO< summary: >Labour Day< dtstart: >2005-01-02 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Day after New Year's Day< dtstart: >2005-12-27 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=2< summary: >Boxing Day Holiday< dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=1< summary: >Christmas Day Holiday< dtstart: >2005-01-03 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=1< summary: >New Year's Day Holiday< dtstart: >2005-01-04 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=2< summary: >Day after New Year's Day Holiday< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28< summary: >Westland Anniversary Day (Monday nearest 1st December)< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29< summary: >Chatham Islands Anniversary Day (Monday nearest 30th November)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO< summary: >Auckland Anniversary Day (Monday nearest 29th January)< dtstart: >2005-01-24 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO< summary: >Wellington Anniversary Day (Monday nearest 22nd January)< dtstart: >2005-01-17 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO< summary: >Southland Anniversary Day (Monday nearest 17th January)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO< summary: >Nelson Anniversary Day (Monday nearest 1st Feb)< dtstart: >2005-10-21 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR< summary: >Hawkes' Bay Anniversary Day (Friday before 4th Monday of October)< dtstart: >2005-10-31 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58< summary: >Marlborough Anniversary Day (Monday after 4th Monday of October)< dtstart: >2005-11-11 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR< summary: >Canterbury Anniversary Day (Second Friday after the first Tuesday in November)< dtstart: >2005-09-26 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=9;BYDAY=4MO< summary: >South Canterbury Anniversary Day (4th Monday in September)< davical-1.1.1/testing/tests/regression-suite/0545-deflate-PUT.data0000644000000000000000000000062711651212132021430 0ustar }Ao0!vQ\q0:/"6hpطCh+m99{^ʕ2l4;.SְhDPPaXTe:Fa(>WdDP YOa+'W)nr`rgD-xթk< =Zf6 6\!Zg$$$jvG(!ȹܗM|ZM,5^\4ˑ F9 ^[ec(gOK`>.O_J.4FI427B*i|e|\n;A J xJf;ht2 ^4:nٔ?eL0{LICg]_S\7~d b\пz`5^Ēѡաdavical-1.1.1/testing/tests/regression-suite/0914-extended-MKCOL.test0000644000000000000000000000126511446006434022076 0ustar # # Extended MKCOL test - create an addressbook # TYPE=MKCOL URL=http://mycaldav/caldav.php/User%20Six/addressbook%20%22Extended%20MKCOL%22/ HEADER=Content-Type: text/xml AUTH=User Six:user6 HEAD BEGINDATA Extended MKCOL Address Book ENDDATA QUERY SELECT dav_name, user_no, parent_container, dav_displayname, is_calendar, public_events_only, is_addressbook FROM collection WHERE dav_name ~ '/User Six/addressbook'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0880-Freebusy-POST.test0000644000000000000000000000161511446006434022003 0ustar # # Testing for Spec compliance. POST on outbox for # free/busy information # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=User-Agent: draft-schedule-05 Spec Tests HEADER=Content-Type: text/calendar REPLACE=#\d{8}T\d{6}#YYYYMMDDThhmmss# BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 METHOD:REQUEST BEGIN:VFREEBUSY DTSTAMP:20081019T202752Z ORGANIZER:mailto:user1@example.net DTSTART:20081021T110000Z DTEND:20081106T110000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user2@example.net END:VFREEBUSY END:VCALENDAR ENDDATA REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ davical-1.1.1/testing/tests/regression-suite/0301-Chandler-HEAD-1.result0000644000000000000000000000024611446006434022333 0ustar HTTP/1.1 401 Unauthorized Date: Dow, 01 Jan 2000 00:00:00 GMT WWW-Authenticate: Basic realm="DAViCal CalDAV Server" Content-Type: text/plain; ; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0527-iCal-PROPFIND.test0000644000000000000000000000064011446006434021516 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/resmgr1/ HEAD HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0961-REPORT-public-expanded.result0000644000000000000000000001352211633117640024050 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, calendar-access ETag: "78b61e0c261c8c2b1a8152584d73f76a" Content-Length: 5771 Content-Type: text/xml; charset="utf-8" /public.php/user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081019T220000Z DURATION:PT30M END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081021T220000Z DURATION:PT30M RECURRENCE-ID:20081021T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081023T220000Z DURATION:PT30M RECURRENCE-ID:20081023T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081026T220000Z DURATION:PT30M RECURRENCE-ID:20081026T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081028T220000Z DURATION:PT30M RECURRENCE-ID:20081028T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081030T220000Z DURATION:PT30M RECURRENCE-ID:20081030T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081102T220000Z DURATION:PT30M RECURRENCE-ID:20081102T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081104T220000Z DURATION:PT30M RECURRENCE-ID:20081104T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081106T220000Z DURATION:PT30M RECURRENCE-ID:20081106T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081109T220000Z DURATION:PT30M RECURRENCE-ID:20081109T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081111T220000Z DURATION:PT30M RECURRENCE-ID:20081111T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081113T220000Z DURATION:PT30M RECURRENCE-ID:20081113T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081116T220000Z DURATION:PT30M RECURRENCE-ID:20081116T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081118T220000Z DURATION:PT30M RECURRENCE-ID:20081118T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081120T220000Z DURATION:PT30M RECURRENCE-ID:20081120T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081123T220000Z DURATION:PT30M RECURRENCE-ID:20081123T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081125T220000Z DURATION:PT30M RECURRENCE-ID:20081125T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081127T220000Z DURATION:PT30M RECURRENCE-ID:20081127T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081130T220000Z DURATION:PT30M RECURRENCE-ID:20081130T220000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0953-PROPFIND.test0000644000000000000000000000145411446006434020657 0ustar # # PROPFIND on a collection which we can only access via a ticket # this should fail, because we don't supply the ticket # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/ AUTH=user5:user5 # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 10 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" # HEADER=Ticket: ##ticket## HEADER=Depth: 0 BEGINDATA ENDDATA REPLACE=!\S{8}!Good Ticket ID! davical-1.1.1/testing/tests/regression-suite/0805-Mulberry-DELETE-1.test0000644000000000000000000000027711446006434022333 0ustar # # Attempt to DELETE an event from a location that is locked. # TYPE=DELETE URL=http://mycaldav/caldav.php/user1/home/i1278618276.ics HEADER=Content-Type: text/calendar; charset=utf-8 HEAD davical-1.1.1/testing/tests/regression-suite/0023-Mulberry-DELETE-3.result0000644000000000000000000000042111732222747022660 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0101-Evo-OPTIONS-1.test0000644000000000000000000000021111446006434021425 0ustar # # Do another OPTIONS request, this time with credentials TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/home/ AUTH=user1:user1 HEAD davical-1.1.1/testing/tests/regression-suite/0918-PROPFIND-supported-stuff.test0000644000000000000000000000101711446006434024023 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0818-Spec-PUT.result0000644000000000000000000000362711732223554021343 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "2a09ef8c6a9e0b6bc16228359b99d8e7" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//davical.org//NONSGML AWL Calendar//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:19901007T020000 RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU TZNAME:NZDT END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DESCRIPTION:Have a microparty. All the best parties are monthly! UID:MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74 DTSTAMP:20081027T074326Z SUMMARY:Woohoo! Time to Par-tay! CREATED:20081024T220749Z DTSTART;TZID=Pacific/Auckland:20081121T160000 DURATION:PT3H RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=3FR END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< dav_etag: >2a09ef8c6a9e0b6bc16228359b99d8e7< description: >Have a microparty. All the best parties are monthly!< dtend: >2008-11-21 19:00:00< dtstamp: >2008-10-27 07:43:26< dtstart: >2008-11-21 16:00:00< due: >NULL< last_modified: >2008-10-27 07:43:26< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=3FR< status: >NULL< summary: >Woohoo! Time to Par-tay!< transp: >NULL< tz_id: >Pacific/Auckland< uid: >MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74< url: >NULL< user_no: >10< ~Duration: >03:00:00< davical-1.1.1/testing/tests/regression-suite/0930-REPORT-expand-property.result0000644000000000000000000000751611732223652024150 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "3fc7af8b9dcea1aa7ead9fa8cfeb7efd" Content-Length: 3601 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ /caldav.php/assistant1/ httpd/unix-directory HTTP/1.1 200 OK /caldav.php/manager1/ httpd/unix-directory HTTP/1.1 200 OK /caldav.php/resmgr1/ httpd/unix-directory HTTP/1.1 200 OK /caldav.php/resource1/ httpd/unix-directory HTTP/1.1 200 OK /caldav.php/resource2/ httpd/unix-directory HTTP/1.1 200 OK /caldav.php/teamclient1/ httpd/unix-directory HTTP/1.1 200 OK /caldav.php/manager1/calendar-proxy-read/ httpd/unix-directory HTTP/1.1 200 OK /caldav.php/assistant1/calendar-proxy-read/ httpd/unix-directory HTTP/1.1 200 OK /caldav.php/resource1/calendar-proxy-write/ httpd/unix-directory HTTP/1.1 200 OK /caldav.php/resource2/calendar-proxy-write/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/2001-REPORT-expanded-queens-birthday-2005.test0000644000000000000000000000173011633117640025704 0ustar # # Test REPORT access to a non-public calendar using a ticket. # TYPE=REPORT URL=http://regression.host/caldav.php/user4/nz_holidays/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dtstart, rrule, summary FROM calendar_item WHERE dav_name ~ '^/user4/nz_holidays/' AND summary ~* 'queen' AND (rrule IS NOT NULL OR (dtstart >= '20050531T120000Z' AND dtstart < '20050608T120000Z') ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/0870-Principal-PROPFIND.test0000644000000000000000000000144011446006434022567 0ustar # # Testing for Spec compliance. PROPFIND on the root # TYPE=PROPFIND URL=http://mycaldav/~user1/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# # Older versions of PHP urlencoded the ~ incorrectly. Ignore it. # REPLACE=/%7Euser1/=/~user1/= REPLACE=#%7E#~# BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0512-iCal-PUT.result0000644000000000000000000000367411732223043021303 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "b7cfb403232dc83f936c15a179901d50" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:1 TRANSP:OPAQUE UID:6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA DTSTART;TZID=Pacific/Auckland:20071126T220000 DTSTAMP:20071124T083709Z SUMMARY:New Event CREATED:20071124T083709Z DTEND;TZID=Pacific/Auckland:20071126T230000 BEGIN:VALARM X-WR-ALARMUID:F33877C6-563B-4F20-B129-77A5B6C6944E ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< dav_etag: >b7cfb403232dc83f936c15a179901d50< description: >NULL< dtend: >2007-11-26 23:00:00< dtstamp: >2007-11-24 08:37:09< dtstart: >2007-11-26 22:00:00< due: >NULL< last_modified: >2007-11-24 08:37:09< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >NULL< status: >NULL< summary: >New Event< transp: >OPAQUE< tz_id: >Pacific/Auckland< uid: >6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0970-REPORT-principal-match-self.result0000644000000000000000000000125111750214721025000 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "32708ff7fcccea1b9719ff092405c0a0" Content-Length: 365 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0901-GET-Collection.result0000644000000000000000000002621611754162764022514 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Etag: "855cbfab1940e342d7986c207bf3f973" Content-Length: 11093 Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN X-WR-CALNAME:User 1's Calendaranza BEGIN:VEVENT CREATED:20111004T153507Z UID:0544-gzip-PUT TRANSP:OPAQUE SUMMARY:In Central Europe, 2pm, Oct 5th for 1 hour DTSTART;TZID=Somewhere_in_Central_Europe:20111005T140000 DTEND;TZID=Somewhere_in_Central_Europe:20111005T150000 DTSTAMP:20111004T153507Z SEQUENCE:1 END:VEVENT BEGIN:VEVENT CREATED:20111004T153507Z UID:0545-deflate-PUT TRANSP:OPAQUE SUMMARY:In Prague, 10am, Oct 7th for 1 hour DTSTART;TZID=Prague_in_Central_Europe:20111007T100000 DURATION:PT1H DTSTAMP:20111004T153507Z SEQUENCE:1 END:VEVENT BEGIN:VTODO CREATED:20070805T201647Z LAST-MODIFIED:20070805T201834Z DTSTAMP:20070805T201647Z UID:0575d895-a006-4ed8-9be6-0d1b6b6b1f96 SUMMARY:Due 7/8/7 16:30\, completed STATUS:COMPLETED DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070807T163000 COMPLETED:20070805T201737Z PERCENT-COMPLETE:100 X-MOZ-LOCATIONPATH:0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics DESCRIPTION:Due on 7/8/7 at 4:30pm\, but completed alread on 6/8/7 CATEGORIES:Projects END:VTODO BEGIN:VEVENT CREATED:20061223T031415Z LAST-MODIFIED:20061223T032305Z DTSTAMP:20061223T032305Z UID:1906b3ca-4890-468a-9b58-1de74bf2c716 SUMMARY:Private Event PRIORITY:0 STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T130000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T150000 X-MOZ-LOCATIONPATH:1906b3ca-4890-468a-9b58-1de74bf2c716.ics LOCATION:At a private location DESCRIPTION:Private and Confirmed END:VEVENT BEGIN:VEVENT UID:20061101T073000Z-10468-1000-1-7@ubu DTSTAMP:20061101T073000Z DTSTART;TZID=Pacific/Auckland:20061101T100000 DTEND;TZID=Pacific/Auckland:20061101T110000 SUMMARY:A Changed Meeting BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:A Meeting END:VALARM END:VEVENT BEGIN:VTODO CREATED:20070805T200215Z LAST-MODIFIED:20070805T201531Z DTSTAMP:20070805T200215Z UID:2178279a-aec2-471f-832d-1f6df6203f2f SUMMARY:Incomplete\, uncancelled X-MOZ-LOCATIONPATH:2178279a-aec2-471f-832d-1f6df6203f2f.ics DESCRIPTION:This task is incomplete and has not been cancelled (has no s tatus at all) END:VTODO BEGIN:VEVENT CREATED:20061120T041336Z LAST-MODIFIED:20061120T041709Z DTSTAMP:20061120T041709Z UID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 SUMMARY:Weekly Project Meeting PRIORITY:0 CLASS:PUBLIC RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000 CATEGORIES:Projects X-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics END:VEVENT BEGIN:VEVENT DTSTAMP:20061102T090217Z DTSTART;TZID=New Zealand Standard Time:20061102T123000 DURATION:PT1H LAST-MODIFIED:20061104T002921Z SEQUENCE:1 SUMMARY:Lunch with David UID:5A55230C8866CA8D3D325F3A@CA1CBED546AAE36FF3BC722E END:VEVENT BEGIN:VEVENT CREATED:20091006T225807Z UID:70D23799-4A68-4905-AB9F-4D47BA693CFD DTEND;TZID=Europe/Prague:20091005T150000 TRANSP:OPAQUE SUMMARY:New Event DTSTART;TZID=Europe/Prague:20091005T140000 DTSTAMP:20091006T225808Z SEQUENCE:1 END:VEVENT BEGIN:VEVENT UID:71e2ae82-7870-11db-c6d6-f6927c144649 DTSTAMP:20060511T043751Z DTSTART;TZID=Pacific/Auckland:20061103T160000 DTEND;TZID=Pacific/Auckland:20061103T174500 DESCRIPTION: LOCATION:Level 3 RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900 STATUS:CONFIRMED SUMMARY:Beer O'Clock END:VEVENT BEGIN:VTODO CREATED:20070805T201557Z LAST-MODIFIED:20070805T201643Z DTSTAMP:20070805T201557Z UID:917b9e47-b748-4550-a566-657fbe672447 SUMMARY:50% Complete\, uncancelled STATUS:IN-PROCESS PERCENT-COMPLETE:50 X-MOZ-LOCATIONPATH:917b9e47-b748-4550-a566-657fbe672447.ics DESCRIPTION:This task is in progress (50% complete) and has not been can celled. END:VTODO BEGIN:VEVENT CREATED:20061223T032350Z LAST-MODIFIED:20061223T033144Z DTSTAMP:20061223T033144Z UID:9d050be7-8a02-4355-8ed3-02a9fc5f473f SUMMARY:Confidential Event PRIORITY:0 STATUS:CONFIRMED CLASS:CONFIDENTIAL DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T160000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T180000 X-MOZ-LOCATIONPATH:9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics LOCATION:In a confidential place END:VEVENT BEGIN:VEVENT SEQUENCE:6 TRANSP:OPAQUE UID:AAA9318E-37D9-4319-8626-95ECD3D3B243 DTSTART;TZID=Pacific/Auckland:20071125T130000 DTSTAMP:20071124T224850Z SUMMARY:BBQ @ ML's CREATED:20071123T093048Z DTEND;TZID=Pacific/Auckland:20071125T190000 LOCATION:ML's House BEGIN:VALARM X-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT BEGIN:VTODO CREATED:20070806T223244Z LAST-MODIFIED:20070806T223411Z DTSTAMP:20070806T223244Z UID:b1679f77-673d-4f46-b3eb-2420e1bba301 SUMMARY:A Cancelled Task\, with a start and due date STATUS:CANCELLED DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500 DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500 X-MOZ-LOCATIONPATH:b1679f77-673d-4f46-b3eb-2420e1bba301.ics DESCRIPTION:This is a task with a Start and a Due date\, but it has been cancelled. END:VTODO BEGIN:VEVENT UID:da81c0ee-7871-11db-c6d6-f6927c144649 DTSTAMP:20061024T115217Z DTSTART:20061103T073000 DTEND:20061103T093000 DESCRIPTION: LOCATION:Olivia's RRULE:FREQ=MONTHLY STATUS:CONFIRMED SUMMARY:Morning Mgmt Mtg END:VEVENT BEGIN:VEVENT DESCRIPTION:Have a party. All the best parties are monthly! UID:DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74 DTSTAMP:20081024T220925Z SUMMARY:Party all day! CREATED:20081024T220749Z DTSTART;TZID=Pacific/Auckland;VALUE=DATE:20081114 RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR END:VEVENT BEGIN:VTODO CREATED:20071203T202915Z LAST-MODIFIED:20071203T203021Z DTSTAMP:20071203T202915Z UID:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08 SUMMARY:Release 0.9.3 STATUS:IN-PROCESS DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 PERCENT-COMPLETE:95 X-MOZ-LOCATIONPATH:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics BEGIN:VALARM TRIGGER;VALUE=DURATION:-P2D DESCRIPTION:Mozilla Alarm: Release 0.9.3 ACTION:DISPLAY END:VALARM END:VTODO BEGIN:VEVENT CREATED:20071203T202630Z LAST-MODIFIED:20071203T202834Z DTSTAMP:20071203T202630Z UID:e70576e9-c1e0-431e-a507-0386fd82f223 SUMMARY:Morning Meeting RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T074500 DTEND;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T083000 X-MOZ-LOCATIONPATH:e70576e9-c1e0-431e-a507-0386fd82f223.ics LOCATION:Suzies Coffee Lounge DESCRIPTION:Twice-weekly breakfast meeting CATEGORIES:Business BEGIN:VALARM TRIGGER;VALUE=DURATION:-PT10M DESCRIPTION:Mozilla Alarm: Morning Meeting ACTION:DISPLAY END:VALARM END:VEVENT BEGIN:VEVENT CREATED:20061223T051646Z LAST-MODIFIED:20061223T051713Z DTSTAMP:20061223T051713Z UID:fbd57454-d966-4a14-8341-abe1edb1ae66 SUMMARY:Tentative Event STATUS:TENTATIVE CLASS:PUBLIC DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T190000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T210000 X-MOZ-LOCATIONPATH:fbd57454-d966-4a14-8341-abe1edb1ae66.ics LOCATION:Never never land END:VEVENT BEGIN:VEVENT DESCRIPTION:Have a microparty. All the best parties are monthly! UID:MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74 DTSTAMP:20081027T074326Z SUMMARY:Woohoo! Time to Par-tay! CREATED:20081024T220749Z DTSTART;TZID=Pacific/Auckland:20081121T160000 DURATION:PT3H RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=3FR END:VEVENT BEGIN:VTIMEZONE TZID:Somewhere_in_Central_Europe X-MICROSOFT-CDO-TZID:4 BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:Prague_in_Central_Europe X-MICROSOFT-CDO-TZID:4 BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Prague BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/sample-data.sql0000644000000000000000000002006711751103501021041 0ustar -- Some sample data to prime the database... -- base-data.sql should be processed before this INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 2, TRUE, current_date, current_date, 'andrew', '**x', 'Andrew McMillan', 'andrew@catalyst.net.nz' ); INSERT INTO role_member (user_no, role_no) VALUES( 2, 1); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 10, TRUE, current_date, current_date, 'user1', '**user1', 'User 1', 'user1@example.net' ); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 11, TRUE, current_date, current_date, 'user2', '**user2', 'User 2', 'user2@example.net' ); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 12, TRUE, current_date, current_date, 'user3', '**user3', 'User 3', 'user3@example.net' ); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 13, TRUE, current_date, current_date, 'user4', '**user4', 'User 4', 'user4@example.net' ); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 14, TRUE, current_date, current_date, 'user5', '**user5', 'User 5', 'user5@example.net' ); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 15, TRUE, current_date, current_date, 'User Six', '**user6', 'User 6', 'user6@example.net' ); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 20, TRUE, current_date, current_date, 'manager1', '**manager1', 'Manager 1', 'manager1@example.net' ); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 30, TRUE, current_date, current_date, 'assistant1', '**assistant1', 'Assistant 1', 'assistant1@example.net' ); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 100, TRUE, current_date, current_date, 'resource1', '*salt*unpossible', 'Resource 1', 'resource1@example.net' ); INSERT INTO role_member (user_no, role_no) VALUES( 100, 4); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 101, TRUE, current_date, current_date, 'resource2', '*salt*unpossible', 'Resource 2', 'resource2@example.net' ); INSERT INTO role_member (user_no, role_no) VALUES( 101, 4); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 200, TRUE, current_date, current_date, 'resmgr1', '*salt*unpossible', 'Resource Managers', 'resource-managers@example.net' ); INSERT INTO role_member (user_no, role_no) VALUES( 200, 2); INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email ) VALUES( 300, TRUE, current_date, current_date, 'teamclient1', '*salt*unpossible', 'Team for Client1', 'team-client1@example.net' ); INSERT INTO role_member (user_no, role_no) VALUES( 300, 2); SELECT setval('usr_user_no_seq', 1000); SELECT setval('dav_id_seq', 1000); UPDATE usr SET joined = '2009-06-01', updated = '2009-06-02'; INSERT INTO collection (user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, created, modified, public_events_only, publicly_readable, collection_id, resourcetypes ) SELECT user_no, '/' || username || '/', '/' || username || '/home/', md5(username), username || ' home', TRUE, '2009-06-03', '2009-06-04', FALSE, FALSE, user_no + 150, '' FROM usr; INSERT INTO collection (user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, is_addressbook, created, modified, public_events_only, publicly_readable, collection_id, resourcetypes ) SELECT user_no, '/' || username || '/', '/' || username || '/addresses/', md5(username), username || ' addresses', FALSE, TRUE, '1957-07-26', '1998-03-16', FALSE, FALSE, user_no + 450, '' FROM usr; INSERT INTO principal (type_id, user_no, displayname, default_privileges) SELECT 1, user_no, fullname, privilege_to_bits(ARRAY['read-free-busy','schedule-send','schedule-deliver']) FROM usr WHERE NOT EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Group' AND role_member.user_no = usr.user_no) AND NOT EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Resource' AND role_member.user_no = usr.user_no) AND NOT EXISTS(SELECT 1 FROM principal WHERE principal.user_no = usr.user_no); INSERT INTO principal (type_id, user_no, displayname, default_privileges) SELECT 2, user_no, fullname, privilege_to_bits(ARRAY['read','schedule-send','schedule-deliver']) FROM usr WHERE EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Resource' AND role_member.user_no = usr.user_no) AND NOT EXISTS(SELECT 1 FROM principal WHERE principal.user_no = usr.user_no); INSERT INTO principal (type_id, user_no, displayname, default_privileges) SELECT 3, user_no, fullname, privilege_to_bits(ARRAY['read-free-busy','schedule-send','schedule-deliver']) FROM usr WHERE EXISTS(SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_name = 'Group' AND role_member.user_no = usr.user_no) AND NOT EXISTS(SELECT 1 FROM principal WHERE principal.user_no = usr.user_no); -- Set the insert sequence to the next number, with a minimum of 1000 SELECT setval('relationship_type_rt_id_seq', (SELECT 10 UNION SELECT rt_id FROM relationship_type ORDER BY 1 DESC LIMIT 1) ); -- The resources for meetings INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 200, 100, 1 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 200, 101, 1 ); -- The people who administer meetings INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 10, 200, 1 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 11, 200, 1 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 30, 200, 1 ); -- Between a PA and their Manager INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 30, 20, 2 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 30, 10, 2 ); -- Between a team INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 20, 300, 3 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 10, 300, 3 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 30, 300, 3 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 300, 20, 3 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 300, 10, 3 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 300, 30, 3 ); -- Granting explicit free/busy permission INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 11, 10, 4 ); INSERT INTO relationship ( from_user, to_user, rt_id ) VALUES( 10, 11, 4 ); UPDATE relationship r SET confers = (SELECT bit_confers FROM relationship_type rt WHERE rt.rt_id=r.rt_id); INSERT INTO group_member ( group_id, member_id) SELECT g.principal_id, m.principal_id FROM relationship JOIN principal g ON(to_user=g.user_no AND g.type_id = 3) -- Group JOIN principal m ON(from_user=m.user_no AND m.type_id IN (1,2)); -- Person | Resource INSERT INTO grants ( by_principal, to_principal, privileges, is_group ) SELECT pby.principal_id AS by_principal, pto.principal_id AS to_principal, confers AS privileges, pto.type_id > 2 AS is_group FROM relationship r JOIN usr f ON(f.user_no=r.from_user) JOIN usr t ON(t.user_no=r.to_user) JOIN principal pby ON(t.user_no=pby.user_no) JOIN principal pto ON(pto.user_no=f.user_no) WHERE rt_id < 4 AND pby.type_id < 3; davical-1.1.1/testing/tests/regression-suite/0204-Moz-REPORT-3.test0000644000000000000000000000154511446006434021342 0ustar # # Do a REPORT request for another user's calendar TYPE=REPORT URL=http://mycaldav/caldav.php/resource2/home/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0809-Spec-UNLOCK-1.test0000644000000000000000000000057411446006434021461 0ustar # # Test specification compliance for LOCK/UNLOCK request # TYPE=UNLOCK URL=http://mycaldav/caldav.php/user1/home/i1278618276.ics # Get the lock token from the earlier lock GETSQL=locktoken SELECT opaquelocktoken FROM locks WHERE dav_name = '/user1/home/i1278618276.ics' ENDSQL HEADER=Lock-Token: HEAD # There is no data for an UNLOCK request # davical-1.1.1/testing/tests/regression-suite/0240-Moz-PROPFIND-sub.test0000644000000000000000000000116511446006434022175 0ustar # # Check for PROPFIND for scheduing inbox/outbox # TYPE=PROPFIND URL=http://alternate.host/davical/caldav.php/user1/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0942-REPORT-principal-property-search.test0000644000000000000000000000261711446006434025555 0ustar # # Do a principal-property-search REPORT request TYPE=REPORT URL=http://regression.host/caldav.php/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20101013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA user user user user ENDDATA davical-1.1.1/testing/tests/regression-suite/0934-PROPFIND-acl.test0000644000000000000000000000063411446006434021412 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0837-freebusy.result0000644000000000000000000004065611642343301021624 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 14720 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20060930T110000Z DTEND:20070630T115959Z FREEBUSY:20061001T210000Z/20061001T220000Z FREEBUSY:20061002T210000Z/20061002T220000Z FREEBUSY:20061003T210000Z/20061003T220000Z FREEBUSY:20061004T210000Z/20061004T220000Z FREEBUSY:20061005T210000Z/20061005T220000Z FREEBUSY:20061006T210000Z/20061006T220000Z FREEBUSY:20061007T210000Z/20061007T220000Z FREEBUSY:20061008T210000Z/20061008T220000Z FREEBUSY:20061009T210000Z/20061009T220000Z FREEBUSY:20061010T210000Z/20061010T220000Z FREEBUSY:20061011T210000Z/20061011T220000Z FREEBUSY:20061012T210000Z/20061012T220000Z FREEBUSY:20061013T210000Z/20061013T220000Z FREEBUSY:20061014T210000Z/20061014T220000Z FREEBUSY:20061015T210000Z/20061015T220000Z FREEBUSY:20061016T210000Z/20061016T220000Z FREEBUSY:20061017T210000Z/20061017T220000Z FREEBUSY:20061018T210000Z/20061018T220000Z FREEBUSY:20061019T210000Z/20061019T220000Z FREEBUSY:20061020T210000Z/20061020T220000Z FREEBUSY:20061021T210000Z/20061021T220000Z FREEBUSY:20061022T210000Z/20061022T220000Z FREEBUSY:20061023T210000Z/20061023T220000Z FREEBUSY:20061024T210000Z/20061024T220000Z FREEBUSY:20061025T210000Z/20061025T220000Z FREEBUSY:20061026T210000Z/20061026T220000Z FREEBUSY:20061027T210000Z/20061027T220000Z FREEBUSY:20061028T210000Z/20061028T220000Z FREEBUSY:20061029T220000Z/20061029T230000Z FREEBUSY:20061030T220000Z/20061030T230000Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061031T220000Z/20061031T230000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T220000Z/20061101T230000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061102T220000Z/20061102T230000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061103T220000Z/20061103T230000Z FREEBUSY:20061104T220000Z/20061104T230000Z FREEBUSY:20061105T220000Z/20061105T230000Z FREEBUSY:20061106T220000Z/20061106T230000Z FREEBUSY:20061107T220000Z/20061107T230000Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061108T220000Z/20061108T230000Z FREEBUSY:20061109T220000Z/20061109T230000Z FREEBUSY:20061110T220000Z/20061110T230000Z FREEBUSY:20061111T220000Z/20061111T230000Z FREEBUSY:20061112T220000Z/20061112T230000Z FREEBUSY:20061113T220000Z/20061113T230000Z FREEBUSY:20061114T220000Z/20061114T230000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061115T220000Z/20061115T230000Z FREEBUSY:20061116T220000Z/20061116T230000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061117T220000Z/20061117T230000Z FREEBUSY:20061118T220000Z/20061118T230000Z FREEBUSY:20061119T220000Z/20061119T230000Z FREEBUSY:20061120T220000Z/20061120T230000Z FREEBUSY:20061121T220000Z/20061121T230000Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061122T220000Z/20061122T230000Z FREEBUSY:20061123T220000Z/20061123T230000Z FREEBUSY:20061124T220000Z/20061124T230000Z FREEBUSY:20061125T220000Z/20061125T230000Z FREEBUSY:20061126T220000Z/20061126T230000Z FREEBUSY:20061127T220000Z/20061127T230000Z FREEBUSY:20061128T220000Z/20061128T230000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061129T220000Z/20061129T230000Z FREEBUSY:20061130T220000Z/20061130T230000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061201T220000Z/20061201T230000Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061202T220000Z/20061202T230000Z FREEBUSY:20061203T220000Z/20061203T230000Z FREEBUSY:20061204T220000Z/20061204T230000Z FREEBUSY:20061205T220000Z/20061205T230000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061206T220000Z/20061206T230000Z FREEBUSY:20061207T220000Z/20061207T230000Z FREEBUSY:20061208T220000Z/20061208T230000Z FREEBUSY:20061209T220000Z/20061209T230000Z FREEBUSY:20061210T220000Z/20061210T230000Z FREEBUSY:20061211T220000Z/20061211T230000Z FREEBUSY:20061212T220000Z/20061212T230000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061213T220000Z/20061213T230000Z FREEBUSY:20061214T220000Z/20061214T230000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061215T220000Z/20061215T230000Z FREEBUSY:20061216T220000Z/20061216T230000Z FREEBUSY:20061217T220000Z/20061217T230000Z FREEBUSY:20061218T220000Z/20061218T230000Z FREEBUSY:20061219T220000Z/20061219T230000Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061220T220000Z/20061220T230000Z FREEBUSY:20061221T220000Z/20061221T230000Z FREEBUSY:20061222T220000Z/20061222T230000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061223T220000Z/20061223T230000Z FREEBUSY:20061224T220000Z/20061224T230000Z FREEBUSY:20061225T220000Z/20061225T230000Z FREEBUSY:20061226T220000Z/20061226T230000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061227T220000Z/20061227T230000Z FREEBUSY:20061228T220000Z/20061228T230000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20061229T220000Z/20061229T230000Z FREEBUSY:20061230T220000Z/20061230T230000Z FREEBUSY:20061231T220000Z/20061231T230000Z FREEBUSY:20070101T220000Z/20070101T230000Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070102T220000Z/20070102T230000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070103T220000Z/20070103T230000Z FREEBUSY:20070104T220000Z/20070104T230000Z FREEBUSY:20070105T220000Z/20070105T230000Z FREEBUSY:20070106T220000Z/20070106T230000Z FREEBUSY:20070107T220000Z/20070107T230000Z FREEBUSY:20070108T220000Z/20070108T230000Z FREEBUSY:20070109T220000Z/20070109T230000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070110T220000Z/20070110T230000Z FREEBUSY:20070111T220000Z/20070111T230000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070112T220000Z/20070112T230000Z FREEBUSY:20070113T220000Z/20070113T230000Z FREEBUSY:20070114T220000Z/20070114T230000Z FREEBUSY:20070115T220000Z/20070115T230000Z FREEBUSY:20070116T220000Z/20070116T230000Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070117T220000Z/20070117T230000Z FREEBUSY:20070118T220000Z/20070118T230000Z FREEBUSY:20070119T220000Z/20070119T230000Z FREEBUSY:20070120T220000Z/20070120T230000Z FREEBUSY:20070121T220000Z/20070121T230000Z FREEBUSY:20070122T220000Z/20070122T230000Z FREEBUSY:20070123T220000Z/20070123T230000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070124T220000Z/20070124T230000Z FREEBUSY:20070125T220000Z/20070125T230000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070126T220000Z/20070126T230000Z FREEBUSY:20070127T220000Z/20070127T230000Z FREEBUSY:20070128T220000Z/20070128T230000Z FREEBUSY:20070129T220000Z/20070129T230000Z FREEBUSY:20070130T220000Z/20070130T230000Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070131T220000Z/20070131T230000Z FREEBUSY:20070201T220000Z/20070201T230000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070202T220000Z/20070202T230000Z FREEBUSY:20070203T220000Z/20070203T230000Z FREEBUSY:20070204T220000Z/20070204T230000Z FREEBUSY:20070205T220000Z/20070205T230000Z FREEBUSY:20070206T220000Z/20070206T230000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070207T220000Z/20070207T230000Z FREEBUSY:20070208T220000Z/20070208T230000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070209T220000Z/20070209T230000Z FREEBUSY:20070210T220000Z/20070210T230000Z FREEBUSY:20070211T220000Z/20070211T230000Z FREEBUSY:20070212T220000Z/20070212T230000Z FREEBUSY:20070213T220000Z/20070213T230000Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070214T220000Z/20070214T230000Z FREEBUSY:20070215T220000Z/20070215T230000Z FREEBUSY:20070216T220000Z/20070216T230000Z FREEBUSY:20070217T220000Z/20070217T230000Z FREEBUSY:20070218T220000Z/20070218T230000Z FREEBUSY:20070219T220000Z/20070219T230000Z FREEBUSY:20070220T220000Z/20070220T230000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070221T220000Z/20070221T230000Z FREEBUSY:20070222T220000Z/20070222T230000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070223T220000Z/20070223T230000Z FREEBUSY:20070224T220000Z/20070224T230000Z FREEBUSY:20070225T220000Z/20070225T230000Z FREEBUSY:20070226T220000Z/20070226T230000Z FREEBUSY:20070227T220000Z/20070227T230000Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070228T220000Z/20070228T230000Z FREEBUSY:20070301T220000Z/20070301T230000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070302T220000Z/20070302T230000Z FREEBUSY:20070303T220000Z/20070303T230000Z FREEBUSY:20070304T220000Z/20070304T230000Z FREEBUSY:20070305T220000Z/20070305T230000Z FREEBUSY:20070306T220000Z/20070306T230000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070307T220000Z/20070307T230000Z FREEBUSY:20070308T220000Z/20070308T230000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070309T220000Z/20070309T230000Z FREEBUSY:20070310T220000Z/20070310T230000Z FREEBUSY:20070311T210000Z/20070311T220000Z FREEBUSY:20070312T210000Z/20070312T220000Z FREEBUSY:20070313T210000Z/20070313T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070315T210000Z/20070315T220000Z FREEBUSY:20070316T210000Z/20070316T220000Z FREEBUSY:20070317T210000Z/20070317T220000Z FREEBUSY:20070318T210000Z/20070318T220000Z FREEBUSY:20070319T210000Z/20070319T220000Z FREEBUSY:20070320T210000Z/20070320T220000Z FREEBUSY:20070321T210000Z/20070321T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070322T210000Z/20070322T220000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070323T210000Z/20070323T220000Z FREEBUSY:20070324T210000Z/20070324T220000Z FREEBUSY:20070325T210000Z/20070325T220000Z FREEBUSY:20070326T210000Z/20070326T220000Z FREEBUSY:20070327T210000Z/20070327T220000Z FREEBUSY:20070328T210000Z/20070328T220000Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070329T210000Z/20070329T220000Z FREEBUSY:20070330T210000Z/20070330T220000Z FREEBUSY:20070331T210000Z/20070331T220000Z FREEBUSY:20070401T210000Z/20070401T220000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070402T210000Z/20070402T220000Z FREEBUSY:20070403T210000Z/20070403T220000Z FREEBUSY:20070404T210000Z/20070404T220000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070405T210000Z/20070405T220000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070406T210000Z/20070406T220000Z FREEBUSY:20070407T210000Z/20070407T220000Z FREEBUSY:20070408T210000Z/20070408T220000Z FREEBUSY:20070409T210000Z/20070409T220000Z FREEBUSY:20070410T210000Z/20070410T220000Z FREEBUSY:20070411T210000Z/20070411T220000Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070412T210000Z/20070412T220000Z FREEBUSY:20070413T210000Z/20070413T220000Z FREEBUSY:20070414T210000Z/20070414T220000Z FREEBUSY:20070415T210000Z/20070415T220000Z FREEBUSY:20070416T210000Z/20070416T220000Z FREEBUSY:20070417T210000Z/20070417T220000Z FREEBUSY:20070418T210000Z/20070418T220000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070419T210000Z/20070419T220000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070420T210000Z/20070420T220000Z FREEBUSY:20070421T210000Z/20070421T220000Z FREEBUSY:20070422T210000Z/20070422T220000Z FREEBUSY:20070423T210000Z/20070423T220000Z FREEBUSY:20070424T210000Z/20070424T220000Z FREEBUSY:20070425T210000Z/20070425T220000Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070426T210000Z/20070426T220000Z FREEBUSY:20070427T210000Z/20070427T220000Z FREEBUSY:20070428T210000Z/20070428T220000Z FREEBUSY:20070429T210000Z/20070429T220000Z FREEBUSY:20070430T210000Z/20070430T220000Z FREEBUSY:20070501T210000Z/20070501T220000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070502T210000Z/20070502T220000Z FREEBUSY:20070503T210000Z/20070503T220000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070504T210000Z/20070504T220000Z FREEBUSY:20070505T210000Z/20070505T220000Z FREEBUSY:20070506T210000Z/20070506T220000Z FREEBUSY:20070507T210000Z/20070507T220000Z FREEBUSY:20070508T210000Z/20070508T220000Z FREEBUSY:20070509T210000Z/20070509T220000Z FREEBUSY:20070510T210000Z/20070510T220000Z FREEBUSY:20070511T210000Z/20070511T220000Z FREEBUSY:20070512T210000Z/20070512T220000Z FREEBUSY:20070513T210000Z/20070513T220000Z FREEBUSY:20070514T210000Z/20070514T220000Z FREEBUSY:20070515T210000Z/20070515T220000Z FREEBUSY:20070516T210000Z/20070516T220000Z FREEBUSY:20070517T210000Z/20070517T220000Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070518T210000Z/20070518T220000Z FREEBUSY:20070519T210000Z/20070519T220000Z FREEBUSY:20070520T210000Z/20070520T220000Z FREEBUSY:20070521T210000Z/20070521T220000Z FREEBUSY:20070522T210000Z/20070522T220000Z FREEBUSY:20070523T210000Z/20070523T220000Z FREEBUSY:20070524T210000Z/20070524T220000Z FREEBUSY:20070525T210000Z/20070525T220000Z FREEBUSY:20070526T210000Z/20070526T220000Z FREEBUSY:20070527T210000Z/20070527T220000Z FREEBUSY:20070528T210000Z/20070528T220000Z FREEBUSY:20070529T210000Z/20070529T220000Z FREEBUSY:20070530T210000Z/20070530T220000Z FREEBUSY:20070531T210000Z/20070531T220000Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070601T210000Z/20070601T220000Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070602T210000Z/20070602T220000Z FREEBUSY:20070603T210000Z/20070603T220000Z FREEBUSY:20070604T210000Z/20070604T220000Z FREEBUSY:20070605T210000Z/20070605T220000Z FREEBUSY:20070606T210000Z/20070606T220000Z FREEBUSY:20070607T210000Z/20070607T220000Z FREEBUSY:20070608T210000Z/20070608T220000Z FREEBUSY:20070609T210000Z/20070609T220000Z FREEBUSY:20070610T210000Z/20070610T220000Z FREEBUSY:20070611T210000Z/20070611T220000Z FREEBUSY:20070612T210000Z/20070612T220000Z FREEBUSY:20070613T210000Z/20070613T220000Z FREEBUSY:20070614T210000Z/20070614T220000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070615T210000Z/20070615T220000Z FREEBUSY:20070616T210000Z/20070616T220000Z FREEBUSY:20070617T210000Z/20070617T220000Z FREEBUSY:20070618T210000Z/20070618T220000Z FREEBUSY:20070619T210000Z/20070619T220000Z FREEBUSY:20070620T210000Z/20070620T220000Z FREEBUSY:20070621T210000Z/20070621T220000Z FREEBUSY:20070622T210000Z/20070622T220000Z FREEBUSY:20070623T210000Z/20070623T220000Z FREEBUSY:20070624T210000Z/20070624T220000Z FREEBUSY:20070625T210000Z/20070625T220000Z FREEBUSY:20070626T210000Z/20070626T220000Z FREEBUSY:20070627T210000Z/20070627T220000Z FREEBUSY:20070628T210000Z/20070628T220000Z FREEBUSY:20070629T040000Z/20070629T054500Z FREEBUSY:20070629T210000Z/20070629T220000Z FREEBUSY:20070630T210000Z/20070630T220000Z END:VFREEBUSY END:VCALENDAR a) Start: >2006-01-01 17:00:00< b) Location: >America/New_York< c)UTC Start: >20060101T220000Z< d) UTC End: >20060101T230000Z< rrule: >FREQ=DAILY;INTERVAL=1;COUNT=1000< status: >NULL< a) Start: >2006-11-01 10:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061031T210000Z< d) UTC End: >20061031T220000Z< rrule: >NULL< status: >NULL< a) Start: >2006-11-02 10:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061101T210000Z< d) UTC End: >20061101T220000Z< rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH< status: >NULL< a) Start: >2006-11-02 12:30:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061101T233000Z< d) UTC End: >20061102T003000Z< rrule: >NULL< status: >NULL< a) Start: >2006-11-03 16:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061103T030000Z< d) UTC End: >20061103T044500Z< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< status: >CONFIRMED< a) Start: >2006-12-23 13:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061223T000000Z< d) UTC End: >20061223T020000Z< rrule: >NULL< status: >CONFIRMED< a) Start: >2006-12-23 16:00:00< b) Location: >Antarctica/McMurdo< c)UTC Start: >20061223T030000Z< d) UTC End: >20061223T050000Z< rrule: >NULL< status: >CONFIRMED< a) Start: >2006-12-23 19:00:00< b) Location: >Antarctica/McMurdo< c)UTC Start: >20061223T060000Z< d) UTC End: >20061223T080000Z< rrule: >NULL< status: >TENTATIVE< a) Start: >NULL< b) Location: >NULL< c)UTC Start: >20061102T183000Z< d) UTC End: >20061102T203000Z< rrule: >FREQ=MONTHLY< status: >CONFIRMED< davical-1.1.1/testing/tests/regression-suite/0910-Space-OPTIONS.test0000644000000000000000000000020611446006434021605 0ustar # # Do an OPTIONS request on a URL with a space TYPE=OPTIONS URL=http://mycaldav/caldav.php/User%20Six/home/ AUTH=User Six:user6 HEAD davical-1.1.1/testing/tests/regression-suite/0247-Moz-PROPFIND.test0000644000000000000000000000104311446006434021410 0ustar # # Check for PROPFIND for scheduing inbox/outbox # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0014-Mulberry-PUT-3.test0000644000000000000000000000171411446006434022030 0ustar # # We now have a calendar so we can PUT an event into it... TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061102T090217Z DTSTART;TZID=New Zealand Standard Time:20061102T123000 DURATION:PT1H LAST-MODIFIED:20061104T002921Z SEQUENCE:1 SUMMARY:Lunch with David UID:5A55230C8866CA8D3D325F3A@CA1CBED546AAE36FF3BC722E END:VEVENT END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0556-iPhone-REPORT.result0000644000000000000000000000353411732223533022227 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "f8dadc8317ee98556653219683035b90" Content-Length: 1567 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics text/calendar "509b0f0d8a3363379f9f5727f5dd74a0" HTTP/1.1 200 OK /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics text/calendar "cb3d9dc3e8c157f53eba3ea0e1e0f146" HTTP/1.1 200 OK /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics text/calendar "00ad5eb1eb5507884710b0b66aa5d5c4" HTTP/1.1 200 OK /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics text/calendar "a2990674708634a311bb98a59865ca50" HTTP/1.1 200 OK /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics text/calendar "8f581a053df6d833254756dfd7553d37" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0871-PROPFIND.result0000644000000000000000000000150611732223605021212 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "d3dbd013e5ed484aa137ab06522c37bf" Content-Length: 522 Content-Type: text/xml; charset="utf-8" /caldav.php/user2/home/ User 2's Calendar, as uploaded by Admin "2b0f71bb9f856c9bb9a2b43bc777a3c9" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0203-Moz-REPORT-2.result0000644000000000000000000000516711732222765021710 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "29e2f219a0c62c391b207758292e7aef" Content-Length: 2362 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061102T090217Z DTSTART;TZID=New Zealand Standard Time:20061102T123000 DURATION:PT1H LAST-MODIFIED:20061104T002921Z SEQUENCE:1 SUMMARY:Lunch with David UID:5A55230C8866CA8D3D325F3A@CA1CBED546AAE36FF3BC722E END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VEVENT UID:20061101T073000Z-10468-1000-1-7@ubu DTSTAMP:20061101T073000Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T100000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T110000 SUMMARY:A Meeting X-EVOLUTION-CALDAV-HREF:http: //user1@mycaldav/caldav.php/user1/home/20061101T073004Z.ics BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:A Meeting END:VALARM END:VEVENT BEGIN:VTIMEZONE TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0400-Cadaver-OPTIONS-1.result0000644000000000000000000000056011732223030022600 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT, DELETE, LOCK, UNLOCK, MOVE, GET, PUT, HEAD, MKTICKET, DELTICKET, ACL Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0104-Evo-PUT-1.test0000644000000000000000000000241211651212132020742 0ustar # # We PUT an appointment with Evolution TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/20061101T073004Z.ics HEADER=If-None-Match: * HEADER=User-Agent: Evolution/1.8.1 HEADER=Content-Type: text/calendar HEAD BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VEVENT UID:20061101T073000Z-10468-1000-1-7@ubu DTSTAMP:20061101T073000Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T100000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T110000 SUMMARY:A Meeting X-EVOLUTION-CALDAV-HREF:http: //user1@mycaldav/caldav.php/user1/home/20061101T073004Z.ics BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:A Meeting END:VALARM END:VEVENT BEGIN:VTIMEZONE TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0220-Moz-REPORT.test0000644000000000000000000000075411446006434021201 0ustar # # Request a REPORT but don't send any actual valid XML data(!) # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20061108 Calendar/0.4a1 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Keep-Alive: 300 HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0213-Moz-MKCALENDAR.test0000644000000000000000000000136311446006434021566 0ustar # # Make a calendar, with XML attached, for someone who we are allowed to write to TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/resource1/mozilla/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml BEGINDATA A Pretty Name ENDDATA davical-1.1.1/testing/tests/regression-suite/0874-PROPFIND.result0000644000000000000000000001056311732223610021214 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "db14e561f31da3f7787f47ce081c2537" Content-Length: 4150 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ Read the content of a resource or collection Create a resource or collection Delete a resource or collection Write content Write properties Read the free/busy information for a calendar collection Read ACLs for a resource or collection Read the details of the current user's access control to this resource. Write ACLs for a resource or collection Remove a lock Deliver scheduling invitations from an organiser to this scheduling inbox Deliver scheduling replies from an attendee to this scheduling inbox Allow free/busy enquiries targeted at the owner of this scheduling inbox Send scheduling invitations as an organiser from the owner of this scheduling outbox. Send scheduling replies as an attendee from the owner of this scheduling outbox. Send free/busy enquiries HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/2002-REPORT-expanded-nz-holidays-2006.test0000644000000000000000000000166711633117640025054 0ustar # # Test expanded report for NZ public holidays for 2006 # TYPE=REPORT URL=http://regression.host/caldav.php/user4/nz_holidays/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dtstart, rrule, summary FROM calendar_item WHERE dav_name ~ '^/user4/nz_holidays/' AND (rrule IS NOT NULL OR (dtstart >= '20051231T110000Z' AND dtstart < '20061231T110000Z') ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/1101-REPORT-sync-changed.result0000644000000000000000000000066111743156516023341 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "dd8de466d4ad8e7acb47b6302ab04ef9" Content-Length: 117 Content-Type: text/xml; charset="utf-8" data:,36 davical-1.1.1/testing/tests/regression-suite/0851-Spec-REPORT-1.result0000644000000000000000000001176211732223600022030 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "474324273ec7b8c0d7e8b090e7ddcb42" Content-Length: 4789 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061102T090217Z DTSTART;TZID=New Zealand Standard Time:20061102T123000 DURATION:PT1H LAST-MODIFIED:20061104T002921Z SEQUENCE:1 SUMMARY:Lunch with David UID:5A55230C8866CA8D3D325F3A@CA1CBED546AAE36FF3BC722E END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics "bcc402382688cb3e8e57379c757dbcb0" BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VEVENT UID:20061101T073000Z-10468-1000-1-7@ubu DTSTAMP:20061101T073000Z DTSTART;TZID=Pacific/Auckland:20061101T100000 DTEND;TZID=Pacific/Auckland:20061101T110000 SUMMARY:A Changed Meeting BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:A Meeting END:VALARM END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics "a1c6404d61190f9574e2bfd69383f144" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061120T041336Z LAST-MODIFIED:20061120T041709Z DTSTAMP:20061120T041709Z UID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 SUMMARY:Weekly Project Meeting PRIORITY:0 CLASS:PUBLIC RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000 CATEGORIES:Projects X-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics "5def8ae2b20893a1c7f4dbaeb008f2f1" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T031415Z LAST-MODIFIED:20061223T032305Z DTSTAMP:20061223T032305Z UID:1906b3ca-4890-468a-9b58-1de74bf2c716 SUMMARY:Private Event PRIORITY:0 STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T130000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T150000 X-MOZ-LOCATIONPATH:1906b3ca-4890-468a-9b58-1de74bf2c716.ics LOCATION:At a private location DESCRIPTION:Private and Confirmed END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0545-iCLoud-PUT-encoded.test0000644000000000000000000000047611651212132022652 0ustar # # Testing with a process similar to iCal4 # TYPE=PUT URL=http://regression.host/caldav.php/user1/home/0545-deflate-PUT.ics HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/calendar HEADER=Content-Encoding: deflate # # DATA=0545-deflate-PUT davical-1.1.1/testing/tests/regression-suite/1103-REPORT-sync-changed.test0000644000000000000000000000103311742663757023007 0ustar # # Check for support of REPORT sync-collection with no sync-token # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-agent: sync-collection changes REPORT HEADER=Content-type: text/xml HEAD # Should be everything changes - this tag does not exist, after all. # BEGINDATA data:,59 ENDDATA davical-1.1.1/testing/tests/regression-suite/0841-Spec-PROPPATCH-2.result0000644000000000000000000000172011755662200022356 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 448 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ All requested changes were made. HTTP/1.1 200 OK changed_last_5m: >1< dav_displayname: >User One's Transparent Calendar< is_addressbook: >0< is_calendar: >1< resourcetypes: >< schedule_transp: >transparent< davical-1.1.1/testing/tests/regression-suite/0947-ACL.test0000644000000000000000000000227711446006434020044 0ustar # # ACL setting default privileges on a collection to nothing, and # specific privileges to include read-acl. # TYPE=ACL URL=http://regression.host/caldav.php/user1/ HEADER=User-Agent: RFC3744 Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA /caldav.php/user4/ ENDDATA QUERY SELECT by_principal, by_collection, privileges, p_to.displayname, to_principal FROM grants JOIN dav_principal p_to ON (to_principal=principal_id) LEFT JOIN collection ON (by_collection=collection.collection_id) LEFT JOIN dav_principal p_by ON (by_principal=p_by.principal_id) WHERE p_by.dav_name = '/user1/' ORDER BY by_principal, to_principal ENDQUERY davical-1.1.1/testing/tests/regression-suite/0943-REPORT-principal-search-property-set.result0000644000000000000000000000142211732223663026702 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "2fd111eb3507f4af36d65e9516255fa9" Content-Length: 470 Content-Type: text/xml; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0946-ACL.test0000644000000000000000000000211011446006434020025 0ustar # # ACL setting default privileges on a collection to nothing, and # specific privileges to include read-acl. # TYPE=ACL URL=http://regression.host/caldav.php/user1/home/ HEADER=User-Agent: RFC3744 Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA /caldav.php/user4/ ENDDATA QUERY SELECT by_principal, by_collection, privileges, p_to.displayname, to_principal FROM grants JOIN dav_principal p_to ON (to_principal=principal_id) LEFT JOIN collection ON (by_collection=collection.collection_id) WHERE collection.dav_name = '/user1/home/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics.data0000644000000000000000000000174710705234304024560 0ustar BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061120T041336Z LAST-MODIFIED:20061120T041709Z DTSTAMP:20061120T041709Z UID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 SUMMARY:Weekly Project Meeting PRIORITY:0 CLASS:PUBLIC RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000 CATEGORIES:Projects X-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0218-Moz-REPORT.result0000644000000000000000000000764711747416335021570 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "bdfeddd69b3ba9e47d51a82fff8801cc" Content-Length: 3690 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061120T041336Z LAST-MODIFIED:20061120T041709Z DTSTAMP:20061120T041709Z UID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 SUMMARY:Weekly Project Meeting PRIORITY:0 CLASS:PUBLIC RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000 CATEGORIES:Projects X-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T032350Z LAST-MODIFIED:20061223T033144Z DTSTAMP:20061223T033144Z UID:9d050be7-8a02-4355-8ed3-02a9fc5f473f SUMMARY:Confidential Event PRIORITY:0 STATUS:CONFIRMED CLASS:CONFIDENTIAL DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T160000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T180000 X-MOZ-LOCATIONPATH:9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics LOCATION:In a confidential place END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T051646Z LAST-MODIFIED:20061223T051713Z DTSTAMP:20061223T051713Z UID:fbd57454-d966-4a14-8341-abe1edb1ae66 SUMMARY:Tentative Event STATUS:TENTATIVE CLASS:PUBLIC DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T190000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T210000 X-MOZ-LOCATIONPATH:fbd57454-d966-4a14-8341-abe1edb1ae66.ics LOCATION:Never never land END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0873-GroupDAV-PROPFIND.result0000644000000000000000000001553111750435304022645 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "some valid etag" Content-Length: 6796 Content-Type: text/xml; charset="utf-8" /caldav.php/ DAViCal CalDAV Server httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/ User 1 httpd/unix-directory some valid etag HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/manager1/ Manager 1 httpd/unix-directory some valid etag HTTP/1.1 200 OK HTTP/1.1 403 Forbidden HTTP/1.1 404 Not Found /caldav.php/assistant1/ Assistant 1 httpd/unix-directory some valid etag HTTP/1.1 200 OK HTTP/1.1 403 Forbidden HTTP/1.1 404 Not Found /caldav.php/resource1/ Resource 1 httpd/unix-directory some valid etag HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/resource2/ Resource 2 httpd/unix-directory some valid etag HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0522-iCal-PROPFIND.result0000644000000000000000000001145711732223047022057 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "8ae10873cb1929fd0e66571128cf01ea" Content-Length: 4594 Content-Type: text/xml; charset="utf-8" /caldav.php/user2/ "f3a754d098fc688900631c6293d40fa5" User 2 /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/home/ "2b0f71bb9f856c9bb9a2b43bc777a3c9" User 2's Calendar, as uploaded by Admin /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/addresses/ "7e58d63b60197ceb55a1c487989a3720" user2 addresses /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/.in/ "0389feae460444b4b5db3b16c94b1e43" User 2 Inbox /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/.out/ "1" User 2 Outbox /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/calendar-proxy-read/ "19a2e9eecca4a20bb93c23c0ab653d77" /user2/calendar-proxy-read/ /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/calendar-proxy-write/ "f9ade6a8d81cbc6a7a7b932981955bb4" /user2/calendar-proxy-write/ /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0521-iCal-PROPFIND.result0000644000000000000000000000211511732223047022045 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ccb220eb6558890eb17d5e1da8b45269" Content-Length: 785 Content-Type: text/xml; charset="utf-8" /caldav.php/user2/.out/ "1" User 2 Outbox /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0843-Spec-PROPFIND.result0000644000000000000000000000077511446006434022111 0ustar /caldav.php/user1/home/ /caldav.php/user1/ User One's Transparent Calendar HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0904-PUT-bad-timezone.result0000644000000000000000000000352211732223634023014 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "0b17d5f4102e63037d2ae732e4ca563d" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:(UTC-05:00) Eastern Time (US & Canada) BEGIN:STANDARD DTSTART:16010101T020000 TZOFFSETFROM:-0400 TZOFFSETTO:-0500 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11 END:STANDARD BEGIN:DAYLIGHT DTSTART:16010101T020000 TZOFFSETFROM:-0500 TZOFFSETTO:-0400 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT UID:PUT-eastern-time DTSTAMP:20101009T214524Z SUMMARY;LANGUAGE=en-US:Psychic's Anonymous Meeting DTSTART;TZID="(UTC-05:00) Eastern Time (US & Canada)":20110912T110000 DTEND;TZID="(UTC-05:00) Eastern Time (US & Canada)":20110912T113000 LOCATION:You will know when you arrive CREATED:20101010T014639 LAST-MODIFIED:20101010T014639 END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< dav_etag: >0b17d5f4102e63037d2ae732e4ca563d< description: >NULL< dtend: >2011-09-12 11:30:00< dtstamp: >2010-10-09 21:45:24< dtstart: >2011-09-12 11:00:00< due: >NULL< last_modified: >2010-10-10 01:46:39< location: >You will know when you arrive< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >NULL< status: >NULL< summary: >Psychic's Anonymous Meeting< transp: >NULL< tz_id: >(UTC-05:00) Eastern Time (US & Canada)< uid: >PUT-eastern-time< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0805-Mulberry-DELETE-1.result0000644000000000000000000000073011732223547022670 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 198 Content-Type: text/xml; charset="utf-8" /user1/home/i1278618276.ics HTTP/1.1 423 Resource Locked davical-1.1.1/testing/tests/regression-suite/0845-Spec-PROPPATCH-both-fail.test0000644000000000000000000000146511446006434023533 0ustar # # Check for support of PROPPATCH method # # Try (and fail) to set the collection to be both an addressbook and a calendar. # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEADER=User-agent: SpecTest PROPPATCH HEADER=Content-type: text/xml HEAD BEGINDATA ENDDATA QUERY SELECT dav_displayname, is_calendar, is_addressbook, resourcetypes, modified > (current_timestamp - '5 minutes'::interval) AS changed_last_5m FROM collection WHERE dav_name = '/user1/home/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0242-Moz-REPORT.test0000644000000000000000000000125311446006434021200 0ustar # # REPORT on scheduling inbox for pending VEVENT on startup # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/.in/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0517-iCal-POST.test0000644000000000000000000000267311446006434021071 0ustar # # Testing for how iCal does a POST for free/busy # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Recipient: mailto:user2@example.net HEADER=Content-Type: text/calendar HEADER=Originator: mailto:user1@example.net BEGINDATA BEGIN:VCALENDAR PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN VERSION:2.0 METHOD:REQUEST BEGIN:VTIMEZONE TZID:Europe/Helsinki BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 DTSTART:19810329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:EEST END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 DTSTART:19961027T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:EET END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:3 TRANSP:OPAQUE UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491 DTSTART;TZID=Europe/Helsinki:20081022T084500 ORGANIZER;CN="User 1":mailto:user1@example.net DTSTAMP:20081025T112707Z SUMMARY:test meeting ATTENDEE;CN="User 1";PARTSTAT=ACCEPTED:mailto:user1@example.net X-WR-ATTENDEE;CN="user2";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=RE Q-PARTICIPANT;RSVP=TRUE:mailto:user2@example.net CREATED:20081025T112648Z DTEND;TZID=Europe/Helsinki:20081024T113000 END:VEVENT END:VCALENDAR ENDDATA REPLACE=#\d{8}T\d{6}#YYYYMMDDThhmmss# REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ davical-1.1.1/testing/tests/regression-suite/0206-Moz-PUT-1.result0000644000000000000000000000046711732222767021347 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "a1c6404d61190f9574e2bfd69383f144" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0702-caldav4j-PUT.test0000644000000000000000000000267611651212132021563 0ustar # # PUT an caldav4j regression testing event into the database # # Note that although this event appears to refer to the NY time # zone it does not reference it, since DTSTART/DTEND are VALLUE=DATE # which may not reference a timezone. # TYPE=PUT URL=http://mycaldav/caldav.php/user1/collection/All_Day_NY_JAN1.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: Jakarta Commons-HttpClient/3.0 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//OSAF//NONSGML Scoooby Server//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:America/New_York LAST-MODIFIED:20051220T211408Z BEGIN:STANDARD DTSTART:20051030T060000 TZOFFSETTO:-0500 TZOFFSETFROM:+0000 TZNAME:EST END:STANDARD BEGIN:DAYLIGHT DTSTART:20060402T010000 TZOFFSETTO:-0400 TZOFFSETFROM:-0500 TZNAME:EDT END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DTSTART;VALUE=DATE:20060101 DTEND;VALUE=DATE:20060102 SUMMARY:All_Day_NY_JAN1 UID:C68DADAD-37CE-44F7-8A37-52E1D02E29CA SEQUENCE:4 DTSTAMP:20090515T095326Z END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart, dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified FROM caldav_data LEFT JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/collection/All_Day_NY_JAN1.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0949-MKTICKET.test0000644000000000000000000000104311446006434020650 0ustar # # MKTICKET request for a ticket on a collection # TYPE=MKTICKET URL=http://regression.host/caldav.php/user1/home/ HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD # Test error response on no XML BEGINDATA ENDDATA QUERY SELECT dav_owner_id, date_trunc( 'minute', (expires - current_timestamp + '30 seconds')::interval(0)) AS timeout, privileges, target_collection_id, target_resource_id FROM access_ticket ENDQUERY REPLACE=!\S{8}!Good Ticket ID! davical-1.1.1/testing/tests/regression-suite/0836-freebusy.result0000644000000000000000000004065611642343301021623 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 14720 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20060930T110000Z DTEND:20070630T115959Z FREEBUSY:20061001T210000Z/20061001T220000Z FREEBUSY:20061002T210000Z/20061002T220000Z FREEBUSY:20061003T210000Z/20061003T220000Z FREEBUSY:20061004T210000Z/20061004T220000Z FREEBUSY:20061005T210000Z/20061005T220000Z FREEBUSY:20061006T210000Z/20061006T220000Z FREEBUSY:20061007T210000Z/20061007T220000Z FREEBUSY:20061008T210000Z/20061008T220000Z FREEBUSY:20061009T210000Z/20061009T220000Z FREEBUSY:20061010T210000Z/20061010T220000Z FREEBUSY:20061011T210000Z/20061011T220000Z FREEBUSY:20061012T210000Z/20061012T220000Z FREEBUSY:20061013T210000Z/20061013T220000Z FREEBUSY:20061014T210000Z/20061014T220000Z FREEBUSY:20061015T210000Z/20061015T220000Z FREEBUSY:20061016T210000Z/20061016T220000Z FREEBUSY:20061017T210000Z/20061017T220000Z FREEBUSY:20061018T210000Z/20061018T220000Z FREEBUSY:20061019T210000Z/20061019T220000Z FREEBUSY:20061020T210000Z/20061020T220000Z FREEBUSY:20061021T210000Z/20061021T220000Z FREEBUSY:20061022T210000Z/20061022T220000Z FREEBUSY:20061023T210000Z/20061023T220000Z FREEBUSY:20061024T210000Z/20061024T220000Z FREEBUSY:20061025T210000Z/20061025T220000Z FREEBUSY:20061026T210000Z/20061026T220000Z FREEBUSY:20061027T210000Z/20061027T220000Z FREEBUSY:20061028T210000Z/20061028T220000Z FREEBUSY:20061029T220000Z/20061029T230000Z FREEBUSY:20061030T220000Z/20061030T230000Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061031T220000Z/20061031T230000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T220000Z/20061101T230000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061102T220000Z/20061102T230000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061103T220000Z/20061103T230000Z FREEBUSY:20061104T220000Z/20061104T230000Z FREEBUSY:20061105T220000Z/20061105T230000Z FREEBUSY:20061106T220000Z/20061106T230000Z FREEBUSY:20061107T220000Z/20061107T230000Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061108T220000Z/20061108T230000Z FREEBUSY:20061109T220000Z/20061109T230000Z FREEBUSY:20061110T220000Z/20061110T230000Z FREEBUSY:20061111T220000Z/20061111T230000Z FREEBUSY:20061112T220000Z/20061112T230000Z FREEBUSY:20061113T220000Z/20061113T230000Z FREEBUSY:20061114T220000Z/20061114T230000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061115T220000Z/20061115T230000Z FREEBUSY:20061116T220000Z/20061116T230000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061117T220000Z/20061117T230000Z FREEBUSY:20061118T220000Z/20061118T230000Z FREEBUSY:20061119T220000Z/20061119T230000Z FREEBUSY:20061120T220000Z/20061120T230000Z FREEBUSY:20061121T220000Z/20061121T230000Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061122T220000Z/20061122T230000Z FREEBUSY:20061123T220000Z/20061123T230000Z FREEBUSY:20061124T220000Z/20061124T230000Z FREEBUSY:20061125T220000Z/20061125T230000Z FREEBUSY:20061126T220000Z/20061126T230000Z FREEBUSY:20061127T220000Z/20061127T230000Z FREEBUSY:20061128T220000Z/20061128T230000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061129T220000Z/20061129T230000Z FREEBUSY:20061130T220000Z/20061130T230000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061201T220000Z/20061201T230000Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061202T220000Z/20061202T230000Z FREEBUSY:20061203T220000Z/20061203T230000Z FREEBUSY:20061204T220000Z/20061204T230000Z FREEBUSY:20061205T220000Z/20061205T230000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061206T220000Z/20061206T230000Z FREEBUSY:20061207T220000Z/20061207T230000Z FREEBUSY:20061208T220000Z/20061208T230000Z FREEBUSY:20061209T220000Z/20061209T230000Z FREEBUSY:20061210T220000Z/20061210T230000Z FREEBUSY:20061211T220000Z/20061211T230000Z FREEBUSY:20061212T220000Z/20061212T230000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061213T220000Z/20061213T230000Z FREEBUSY:20061214T220000Z/20061214T230000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061215T220000Z/20061215T230000Z FREEBUSY:20061216T220000Z/20061216T230000Z FREEBUSY:20061217T220000Z/20061217T230000Z FREEBUSY:20061218T220000Z/20061218T230000Z FREEBUSY:20061219T220000Z/20061219T230000Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061220T220000Z/20061220T230000Z FREEBUSY:20061221T220000Z/20061221T230000Z FREEBUSY:20061222T220000Z/20061222T230000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061223T220000Z/20061223T230000Z FREEBUSY:20061224T220000Z/20061224T230000Z FREEBUSY:20061225T220000Z/20061225T230000Z FREEBUSY:20061226T220000Z/20061226T230000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061227T220000Z/20061227T230000Z FREEBUSY:20061228T220000Z/20061228T230000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20061229T220000Z/20061229T230000Z FREEBUSY:20061230T220000Z/20061230T230000Z FREEBUSY:20061231T220000Z/20061231T230000Z FREEBUSY:20070101T220000Z/20070101T230000Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070102T220000Z/20070102T230000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070103T220000Z/20070103T230000Z FREEBUSY:20070104T220000Z/20070104T230000Z FREEBUSY:20070105T220000Z/20070105T230000Z FREEBUSY:20070106T220000Z/20070106T230000Z FREEBUSY:20070107T220000Z/20070107T230000Z FREEBUSY:20070108T220000Z/20070108T230000Z FREEBUSY:20070109T220000Z/20070109T230000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070110T220000Z/20070110T230000Z FREEBUSY:20070111T220000Z/20070111T230000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070112T220000Z/20070112T230000Z FREEBUSY:20070113T220000Z/20070113T230000Z FREEBUSY:20070114T220000Z/20070114T230000Z FREEBUSY:20070115T220000Z/20070115T230000Z FREEBUSY:20070116T220000Z/20070116T230000Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070117T220000Z/20070117T230000Z FREEBUSY:20070118T220000Z/20070118T230000Z FREEBUSY:20070119T220000Z/20070119T230000Z FREEBUSY:20070120T220000Z/20070120T230000Z FREEBUSY:20070121T220000Z/20070121T230000Z FREEBUSY:20070122T220000Z/20070122T230000Z FREEBUSY:20070123T220000Z/20070123T230000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070124T220000Z/20070124T230000Z FREEBUSY:20070125T220000Z/20070125T230000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070126T220000Z/20070126T230000Z FREEBUSY:20070127T220000Z/20070127T230000Z FREEBUSY:20070128T220000Z/20070128T230000Z FREEBUSY:20070129T220000Z/20070129T230000Z FREEBUSY:20070130T220000Z/20070130T230000Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070131T220000Z/20070131T230000Z FREEBUSY:20070201T220000Z/20070201T230000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070202T220000Z/20070202T230000Z FREEBUSY:20070203T220000Z/20070203T230000Z FREEBUSY:20070204T220000Z/20070204T230000Z FREEBUSY:20070205T220000Z/20070205T230000Z FREEBUSY:20070206T220000Z/20070206T230000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070207T220000Z/20070207T230000Z FREEBUSY:20070208T220000Z/20070208T230000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070209T220000Z/20070209T230000Z FREEBUSY:20070210T220000Z/20070210T230000Z FREEBUSY:20070211T220000Z/20070211T230000Z FREEBUSY:20070212T220000Z/20070212T230000Z FREEBUSY:20070213T220000Z/20070213T230000Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070214T220000Z/20070214T230000Z FREEBUSY:20070215T220000Z/20070215T230000Z FREEBUSY:20070216T220000Z/20070216T230000Z FREEBUSY:20070217T220000Z/20070217T230000Z FREEBUSY:20070218T220000Z/20070218T230000Z FREEBUSY:20070219T220000Z/20070219T230000Z FREEBUSY:20070220T220000Z/20070220T230000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070221T220000Z/20070221T230000Z FREEBUSY:20070222T220000Z/20070222T230000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070223T220000Z/20070223T230000Z FREEBUSY:20070224T220000Z/20070224T230000Z FREEBUSY:20070225T220000Z/20070225T230000Z FREEBUSY:20070226T220000Z/20070226T230000Z FREEBUSY:20070227T220000Z/20070227T230000Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070228T220000Z/20070228T230000Z FREEBUSY:20070301T220000Z/20070301T230000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070302T220000Z/20070302T230000Z FREEBUSY:20070303T220000Z/20070303T230000Z FREEBUSY:20070304T220000Z/20070304T230000Z FREEBUSY:20070305T220000Z/20070305T230000Z FREEBUSY:20070306T220000Z/20070306T230000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070307T220000Z/20070307T230000Z FREEBUSY:20070308T220000Z/20070308T230000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070309T220000Z/20070309T230000Z FREEBUSY:20070310T220000Z/20070310T230000Z FREEBUSY:20070311T210000Z/20070311T220000Z FREEBUSY:20070312T210000Z/20070312T220000Z FREEBUSY:20070313T210000Z/20070313T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070315T210000Z/20070315T220000Z FREEBUSY:20070316T210000Z/20070316T220000Z FREEBUSY:20070317T210000Z/20070317T220000Z FREEBUSY:20070318T210000Z/20070318T220000Z FREEBUSY:20070319T210000Z/20070319T220000Z FREEBUSY:20070320T210000Z/20070320T220000Z FREEBUSY:20070321T210000Z/20070321T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070322T210000Z/20070322T220000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070323T210000Z/20070323T220000Z FREEBUSY:20070324T210000Z/20070324T220000Z FREEBUSY:20070325T210000Z/20070325T220000Z FREEBUSY:20070326T210000Z/20070326T220000Z FREEBUSY:20070327T210000Z/20070327T220000Z FREEBUSY:20070328T210000Z/20070328T220000Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070329T210000Z/20070329T220000Z FREEBUSY:20070330T210000Z/20070330T220000Z FREEBUSY:20070331T210000Z/20070331T220000Z FREEBUSY:20070401T210000Z/20070401T220000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070402T210000Z/20070402T220000Z FREEBUSY:20070403T210000Z/20070403T220000Z FREEBUSY:20070404T210000Z/20070404T220000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070405T210000Z/20070405T220000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070406T210000Z/20070406T220000Z FREEBUSY:20070407T210000Z/20070407T220000Z FREEBUSY:20070408T210000Z/20070408T220000Z FREEBUSY:20070409T210000Z/20070409T220000Z FREEBUSY:20070410T210000Z/20070410T220000Z FREEBUSY:20070411T210000Z/20070411T220000Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070412T210000Z/20070412T220000Z FREEBUSY:20070413T210000Z/20070413T220000Z FREEBUSY:20070414T210000Z/20070414T220000Z FREEBUSY:20070415T210000Z/20070415T220000Z FREEBUSY:20070416T210000Z/20070416T220000Z FREEBUSY:20070417T210000Z/20070417T220000Z FREEBUSY:20070418T210000Z/20070418T220000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070419T210000Z/20070419T220000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070420T210000Z/20070420T220000Z FREEBUSY:20070421T210000Z/20070421T220000Z FREEBUSY:20070422T210000Z/20070422T220000Z FREEBUSY:20070423T210000Z/20070423T220000Z FREEBUSY:20070424T210000Z/20070424T220000Z FREEBUSY:20070425T210000Z/20070425T220000Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070426T210000Z/20070426T220000Z FREEBUSY:20070427T210000Z/20070427T220000Z FREEBUSY:20070428T210000Z/20070428T220000Z FREEBUSY:20070429T210000Z/20070429T220000Z FREEBUSY:20070430T210000Z/20070430T220000Z FREEBUSY:20070501T210000Z/20070501T220000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070502T210000Z/20070502T220000Z FREEBUSY:20070503T210000Z/20070503T220000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070504T210000Z/20070504T220000Z FREEBUSY:20070505T210000Z/20070505T220000Z FREEBUSY:20070506T210000Z/20070506T220000Z FREEBUSY:20070507T210000Z/20070507T220000Z FREEBUSY:20070508T210000Z/20070508T220000Z FREEBUSY:20070509T210000Z/20070509T220000Z FREEBUSY:20070510T210000Z/20070510T220000Z FREEBUSY:20070511T210000Z/20070511T220000Z FREEBUSY:20070512T210000Z/20070512T220000Z FREEBUSY:20070513T210000Z/20070513T220000Z FREEBUSY:20070514T210000Z/20070514T220000Z FREEBUSY:20070515T210000Z/20070515T220000Z FREEBUSY:20070516T210000Z/20070516T220000Z FREEBUSY:20070517T210000Z/20070517T220000Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070518T210000Z/20070518T220000Z FREEBUSY:20070519T210000Z/20070519T220000Z FREEBUSY:20070520T210000Z/20070520T220000Z FREEBUSY:20070521T210000Z/20070521T220000Z FREEBUSY:20070522T210000Z/20070522T220000Z FREEBUSY:20070523T210000Z/20070523T220000Z FREEBUSY:20070524T210000Z/20070524T220000Z FREEBUSY:20070525T210000Z/20070525T220000Z FREEBUSY:20070526T210000Z/20070526T220000Z FREEBUSY:20070527T210000Z/20070527T220000Z FREEBUSY:20070528T210000Z/20070528T220000Z FREEBUSY:20070529T210000Z/20070529T220000Z FREEBUSY:20070530T210000Z/20070530T220000Z FREEBUSY:20070531T210000Z/20070531T220000Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070601T210000Z/20070601T220000Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070602T210000Z/20070602T220000Z FREEBUSY:20070603T210000Z/20070603T220000Z FREEBUSY:20070604T210000Z/20070604T220000Z FREEBUSY:20070605T210000Z/20070605T220000Z FREEBUSY:20070606T210000Z/20070606T220000Z FREEBUSY:20070607T210000Z/20070607T220000Z FREEBUSY:20070608T210000Z/20070608T220000Z FREEBUSY:20070609T210000Z/20070609T220000Z FREEBUSY:20070610T210000Z/20070610T220000Z FREEBUSY:20070611T210000Z/20070611T220000Z FREEBUSY:20070612T210000Z/20070612T220000Z FREEBUSY:20070613T210000Z/20070613T220000Z FREEBUSY:20070614T210000Z/20070614T220000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070615T210000Z/20070615T220000Z FREEBUSY:20070616T210000Z/20070616T220000Z FREEBUSY:20070617T210000Z/20070617T220000Z FREEBUSY:20070618T210000Z/20070618T220000Z FREEBUSY:20070619T210000Z/20070619T220000Z FREEBUSY:20070620T210000Z/20070620T220000Z FREEBUSY:20070621T210000Z/20070621T220000Z FREEBUSY:20070622T210000Z/20070622T220000Z FREEBUSY:20070623T210000Z/20070623T220000Z FREEBUSY:20070624T210000Z/20070624T220000Z FREEBUSY:20070625T210000Z/20070625T220000Z FREEBUSY:20070626T210000Z/20070626T220000Z FREEBUSY:20070627T210000Z/20070627T220000Z FREEBUSY:20070628T210000Z/20070628T220000Z FREEBUSY:20070629T040000Z/20070629T054500Z FREEBUSY:20070629T210000Z/20070629T220000Z FREEBUSY:20070630T210000Z/20070630T220000Z END:VFREEBUSY END:VCALENDAR a) Start: >2006-01-01 17:00:00< b) Location: >America/New_York< c)UTC Start: >20060101T220000Z< d) UTC End: >20060101T230000Z< rrule: >FREQ=DAILY;INTERVAL=1;COUNT=1000< status: >NULL< a) Start: >2006-11-01 10:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061031T210000Z< d) UTC End: >20061031T220000Z< rrule: >NULL< status: >NULL< a) Start: >2006-11-02 10:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061101T210000Z< d) UTC End: >20061101T220000Z< rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH< status: >NULL< a) Start: >2006-11-02 12:30:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061101T233000Z< d) UTC End: >20061102T003000Z< rrule: >NULL< status: >NULL< a) Start: >2006-11-03 16:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061103T030000Z< d) UTC End: >20061103T044500Z< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< status: >CONFIRMED< a) Start: >2006-12-23 13:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061223T000000Z< d) UTC End: >20061223T020000Z< rrule: >NULL< status: >CONFIRMED< a) Start: >2006-12-23 16:00:00< b) Location: >Antarctica/McMurdo< c)UTC Start: >20061223T030000Z< d) UTC End: >20061223T050000Z< rrule: >NULL< status: >CONFIRMED< a) Start: >2006-12-23 19:00:00< b) Location: >Antarctica/McMurdo< c)UTC Start: >20061223T060000Z< d) UTC End: >20061223T080000Z< rrule: >NULL< status: >TENTATIVE< a) Start: >NULL< b) Location: >NULL< c)UTC Start: >20061102T183000Z< d) UTC End: >20061102T203000Z< rrule: >FREQ=MONTHLY< status: >CONFIRMED< davical-1.1.1/testing/tests/regression-suite/0241-Moz-REPORT.test0000644000000000000000000000143611446006434021202 0ustar # # REPORT on scheduling inbox for pending VTODO on startup # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/.in/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 1 HEAD BEGINDATA ENDDATA QUERY SELECT dav_name, dav_displayname, parent_container FROM collection WHERE dav_name = '/user1/.in/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0016-Mulberry-MKCALENDAR-3.result0000644000000000000000000000044611732222743023324 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0220-Moz-REPORT.result0000644000000000000000000000046611732223002021526 0ustar HTTP/1.1 406 Not Acceptable Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 33 Content-Type: text/plain; charset="utf-8" REPORT body contains no XML data!davical-1.1.1/testing/tests/regression-suite/0863-Spec-REPORT-principal.test0000644000000000000000000000152711446006434023321 0ustar # # Do a REPORT request TYPE=REPORT URL=http://mycaldav/caldav.php/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20101013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml BEGINDATA Source Man ENDDATA davical-1.1.1/testing/tests/regression-suite/0900-Moz-REPORT.test0000644000000000000000000000166211446006434021205 0ustar # # A test from Mozilla after we have run all other tests and have # events from other calendars in the database. # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20101130 Calendar/0.4a1 HEADER=Accept: text/html,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Keep-Alive: 300 HEADER=Connection: keep-alive HEADER=Content-Type: text/xml HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0521-iCal-PROPFIND.test0000644000000000000000000000126511446006434021514 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user2/.out/ HEAD AUTH=user2:user2 HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0215-Moz-PUT-InProgress-Task.result0000644000000000000000000000046711732222777024203 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "cb3d9dc3e8c157f53eba3ea0e1e0f146" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0560-iPhone-PROPFIND.test0000644000000000000000000000141111756033053022063 0ustar # # Testing with a process similar to iPhone 3.1 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/ HEAD AUTH=user1:user1 HEADER=User-Agent: DAVKit/4.0 (728.3); iCalendar/1 (34); iPhone/3.0 7A341 HEADER=Content-Type: text/xml HEADER=Depth: 0 # # This query from the iPhone goes to the calendar-home-set and checks # what is available under that collection. # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0524-iCal-PROPFIND.test0000644000000000000000000000127611446006434021521 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/manager1/ HEAD AUTH=assistant1:assistant1 HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0924-MOVE-a.test0000644000000000000000000000134011633117640020412 0ustar # # MOVE an event from one location to another # TYPE=MOVE URL=http://regression.host/caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEADER=User-Agent: RFC4918 Spec Tests HEADER=Destination: http://regression.host/caldav.php/user1/nonexistent/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEAD QUERY SELECT caldav_data.dav_name AS data_name, calendar_item.dav_name AS item_name, caldav_data.user_no AS cd_user_no, calendar_item.user_no AS ci_user_no, caldav_data.collection_id AS cd_collection, calendar_item.collection_id AS ci_collection FROM caldav_data JOIN calendar_item USING(dav_id) WHERE caldav_data.dav_name ~ 'DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics' ORDER BY cd_collection ENDQUERY davical-1.1.1/testing/tests/regression-suite/0553-iPhone-PROPFIND.test0000644000000000000000000000143211446006434022067 0ustar # # Testing with a process similar to iPhone 3.1 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEAD AUTH=user1:user1 HEADER=User-Agent: DAVKit/4.0 (728.3); iCalendar/1 (34); iPhone/3.0 7A341 HEADER=Content-Type: text/xml HEADER=Depth: 1 # # This query from the iPhone goes to the calendar-home-set and checks # what is available under that collection. # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0941-GET-resource-denied.test0000644000000000000000000000026311446006434023122 0ustar # # GET attempt against a URL we don't have access to # TYPE=GET URL=http://regression.host/caldav.php/user1/home/20061101T073004Z.ics HEAD AUTH=user5:user5 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0108-Evo-REPORT-1.result0000644000000000000000000000156411732222756021674 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "e68750266884dbc4ee9f96f85a8dc39c" Content-Length: 568 Content-Type: text/xml; charset="utf-8" /davical/caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK /davical/caldav.php/user1/home/20061101T073004Z.ics "c3658901fd4689d4a1e1d6f08601ef4f" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0842-Spec-PROPPATCH-3.result0000644000000000000000000000175011755662204022367 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 528 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ Some properties were not able to be changed. HTTP/1.1 409 Conflict DAV::resourcetype may only be set to a new value, it may not be removed. changed_last_60se: >1< dav_displayname: >User One's Transparent Calendar< is_calendar: >1< resourcetypes: >< davical-1.1.1/testing/tests/regression-suite/0546-iCLoud-PUT-encoded-fail.test0000644000000000000000000000047311651212132023561 0ustar # # Testing with a process similar to iCal4 # TYPE=PUT URL=http://regression.host/caldav.php/user1/home/0546-deflate-PUT.ics HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/calendar HEADER=Content-Encoding: deflate # # DATA=0544-gzip-PUT davical-1.1.1/testing/tests/regression-suite/0845-Spec-PROPPATCH-principal.test0000644000000000000000000000132611446006434023643 0ustar # # Check for support of PROPPATCH method # # An attempt to set an arbitrary property on a principal # TYPE=PROPPATCH URL=http://mycaldav/caldav.php/user1/ HEADER=User-agent: SpecTest PROPPATCH HEADER=Content-type: text/xml HEAD BEGINDATA User 1 ENDDATA QUERY SELECT fullname, displayname FROM dav_principal WHERE dav_name = '/user1/'; ENDQUERY QUERY SELECT * FROM property WHERE dav_name = '/user1/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0963-POST-freebusy-private.result0000644000000000000000000000433611665236662024072 0ustar mailto:user1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20080730T110000Z DTEND:20080803T110000Z FREEBUSY:20080730T190000Z/20080731T050000Z FREEBUSY:20080730T194500Z/20080730T203000Z FREEBUSY:20080730T210000Z/20080730T220000Z FREEBUSY:20080731T190000Z/20080801T050000Z FREEBUSY:20080731T210000Z/20080731T220000Z FREEBUSY:20080801T210000Z/20080801T220000Z FREEBUSY:20080802T193000Z/20080802T213000Z FREEBUSY:20080802T210000Z/20080802T220000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ORGANIZER:mailto:user4@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net END:VFREEBUSY END:VCALENDAR class: >PUBLIC< dav_name: >/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics< finish: >20071210T193000Z< rrule: >FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH< start: >20071210T184500Z< class: >PUBLIC< dav_name: >/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics< finish: >20061102T203000Z< rrule: >FREQ=MONTHLY< start: >20061102T183000Z< class: >PUBLIC< dav_name: >/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA.ics< finish: >20071126T040000Z< rrule: >FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU< start: >20071125T180000Z< class: >PUBLIC< dav_name: >/user1/collection/Daily_NY_5pm.ics< finish: >20060101T230000Z< rrule: >FREQ=DAILY;INTERVAL=1;COUNT=1000< start: >20060101T220000Z< class: >PRIVATE< dav_name: >/user1/anotherone/20060803T084628Z-6040-1000-1-6lamb.ics< finish: >20060802T003456Z< rrule: >FREQ=YEARLY;INTERVAL=1< start: >20060801T003456Z< davical-1.1.1/testing/tests/regression-suite/0404-Cadaver-PUT-1.result0000644000000000000000000000000011651212132022107 0ustar davical-1.1.1/testing/tests/regression-suite/0939-PROPFIND-inherited-acl-set.result0000644000000000000000000000122111732223660024511 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "0c6459e59e9b002c2a4519db2b28f562" Content-Length: 341 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/20061101T073004Z.ics /caldav.php/user1/home/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0523-iCal-PROPFIND.test0000644000000000000000000000124111446006434021510 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user2 HEAD AUTH=user2:user2 HEADER=User-Agent: DAVKit/3.0.6 (653); CalendarStore/3.0.6 (847); iCal/3.0.6 (1273); Mac OS X/10.5.6 (9G55) HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0206-Moz-PUT-1.test0000644000000000000000000000110411446006434020766 0ustar # # PUT a recurring event that we can check we can/can't see at appropriate dates # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics HTTP/1.1 HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20101108 Calendar/0.4a1 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar HEAD # DATA=4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics davical-1.1.1/testing/tests/regression-suite/0844-Spec-PROPPATCH-addressbook.result0000644000000000000000000000144311755662207024531 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 313 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ All requested changes were made. HTTP/1.1 200 OK changed_last_5m: >1< dav_displayname: >User One's addressbook< is_addressbook: >1< is_calendar: >0< resourcetypes: >< davical-1.1.1/testing/tests/regression-suite/0839-Spec-UNLOCK-1.result0000644000000000000000000000073011732223567022023 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 198 Content-Type: text/xml; charset="utf-8" /user1/home/i1278618276.ics HTTP/1.1 423 Resource Locked davical-1.1.1/testing/tests/regression-suite/0903-GET-Collection.result0000644000000000000000000006105211754163406022505 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Etag: "f9a8ee6b41d9b02aa5176e6da349121a" Content-Length: 24817 Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN X-WR-CALNAME:anotherone BEGIN:VEVENT UID:20060803T084628Z-6040-1000-1-6@lamb DTSTAMP:20060803T084628Z DTSTART:20060801T123456 DTEND:20060802T123456 SUMMARY:Steve's Private Birthday CREATED:20060803T084628 LAST-MODIFIED:20060803T084657 CLASS:PRIVATE TRANSP:OPAQUE RRULE:FREQ=YEARLY;INTERVAL=1 SEQUENCE:1 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060803T084657Z-6038-1000-1-13@lamb DESCRIPTION:Steve's Birthday ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060903T233851Z-31623-1000-1-5@ubu DTSTAMP:20060903T233851Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060 907T123000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006090 7T133000 SUMMARY:Murray Flenshaw @ Copperstuff CREATED:20060903T233856 LAST-MODIFIED:20060903T233856 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060903T233851Z-31621-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Murray Flenshaw @ Copperstuff END:VALARM END:VEVENT BEGIN:VEVENT UID:20060905T231045Z-16025-1000-1-6@ubu DTSTAMP:20060905T231045Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060 919T090000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006091 9T120000 SUMMARY:NGOP Meeting X-EVOLUTION-CALDAV-HREF:http://mycaldav:80/caldav.php/andrew/20060905T23 1053Z.ics X-EVOLUTION-CALDAV-ETAG:"4d37ed48425acb9f4245539e2d2b726b" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060907T093732 LAST-MODIFIED:20060911T214556 CLASS:PUBLIC TRANSP:OPAQUE SEQUENCE:1 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060911T214556Z-21593-1000-1-6@ubu DESCRIPTION:NGOP Meeting ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060906T123509Z-5231-1000-1-5@ubu DTSTAMP:20060906T123509Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060 911T103000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006091 1T120000 SUMMARY:NGOP by-election readiness. X-EVOLUTION-CALDAV-HREF:http://mycaldav:80/caldav.php/andrew/20060906T12 3515Z.ics X-EVOLUTION-CALDAV-ETAG:"9a39bedee743f397ebeeda78a4233c8b" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060907T093748 LAST-MODIFIED:20060907T093748 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060906T123509Z-5254-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:NGOP by-election readiness. END:VALARM END:VEVENT BEGIN:VEVENT UID:20060907T213951Z-5189-1001-1-0@dolmein DTSTAMP:20060914T042719Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060 915T100000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006091 5T110000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Sysadmin -> Development CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Richard Hec tor;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:richard@example.org CREATED:20060914T051701 LAST-MODIFIED:20060914T051701 X-MICROSOFT-CDO-REPLYTIME:20060914T051701Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060914T051626Z-5898-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060912T233427Z-12681-1000-1-5@ubu DTSTAMP:20060912T233427Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Europe/Helsinki:200609 13T090000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Europe/Helsinki:20060913 T143000 TRANSP:OPAQUE SEQUENCE:5 SUMMARY:9:am - 2:30pm in Helsinki CLASS:PUBLIC X-EVOLUTION-CALDAV-HREF:http://mycaldav:80/caldav.php/andrew/20060912T23 3500Z.ics X-EVOLUTION-CALDAV-ETAG:"8d8ca5e838b7e088bf17d9916032eec6" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060913T003545 LAST-MODIFIED:20060913T003631 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060913T003631Z-12694-1000-1-24@ubu DESCRIPTION:9:am - 2:30pm in Helsinki ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060914T212513Z-15783-1000-1-11@ubu DTSTAMP:20060914T212513Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060 918T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006091 8T150000 SUMMARY:Donovan X-EVOLUTION-CALDAV-HREF:http://mycaldav:80/caldav.php/andrew/20060914T21 2516Z.ics X-EVOLUTION-CALDAV-ETAG:"004c7b3de49835f714ae7962e8d06d3c" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060914T213552 LAST-MODIFIED:20060914T213552 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060914T212513Z-15781-1000-1-18@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Donovan END:VALARM END:VEVENT BEGIN:VEVENT UID:20060918T011217Z-21151-1000-1-9@ubu DTSTAMP:20060918T011217Z DTSTART;VALUE=DATE:20060928 DTEND;VALUE=DATE:20060930 SUMMARY:Summer Festival CREATED:20060918T011218 LAST-MODIFIED:20060918T011218 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060918T011217Z-21149-1000-1-19@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Summer Festival END:VALARM END:VEVENT BEGIN:VEVENT UID:20060918T011246Z-21151-1000-1-10@ubu DTSTAMP:20060918T011246Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060 928T173000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006092 8T200000 SUMMARY:Summer Festival drinks at the loaded hog CREATED:20060918T011251 LAST-MODIFIED:20060918T011251 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060918T011246Z-21149-1000-1-20@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Summer Festival drinks at the loaded hog END:VALARM END:VEVENT BEGIN:VEVENT UID:20060918T071919Z-21151-1000-1-13@ubu DTSTAMP:20060918T071919Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060 925T120000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006092 5T133000 SUMMARY:Board Meeting CREATED:20060918T071921 LAST-MODIFIED:20060918T071921 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060918T071919Z-21149-1000-1-51@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Board Meeting END:VALARM END:VEVENT BEGIN:VEVENT UID:20060920T052705Z-28287-1000-1-5@ubu DTSTAMP:20060920T052705Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060 921T160000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006092 1T170000 SUMMARY:Really Geeky Thoughts X-EVOLUTION-CALDAV-HREF:http://andrew@mycaldav/caldav.php/andrew/2006092 0T052710Z.ics X-EVOLUTION-CALDAV-ETAG:"d9a4a80a3dbc76b947a3bf0f0672359c" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060920T052722 LAST-MODIFIED:20060921T012657 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060920T052705Z-28285-1000-1-7@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Really Geeky Thoughts END:VALARM END:VEVENT BEGIN:VEVENT UID:20061009T214137Z-5718-1001-1-1@dolmein DTSTAMP:20061009T214524Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 012T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006101 2T150000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Sysadmin Interview LOCATION:Copperstuff\, Level 2\, 150 Walthias St CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;LANGUAGE=en:MAILTO:jo@example.net X-MICROSOFT-CDO-REPLYTIME:20061010T014639Z CREATED:20061010T014639 LAST-MODIFIED:20061010T014639 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061010T014606Z-6897-1000-1-2@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061011T232622Z-27447-1000-1-6@ubu DTSTAMP:20061011T232622Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_4/Asia/Dubai:20061016T09 0000 DTEND;TZID=/softwarestudio.org/Olson_20011030_4/Asia/Dubai:20061016T1700 00 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Dubai Day CLASS:PUBLIC CREATED:20061011T232657 LAST-MODIFIED:20061011T232731 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061011T232731Z-27445-1000-1-15@ubu DESCRIPTION:Dubai Day ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061019T022147Z-5014-1001-1-0@dolmein DTSTAMP:20061019T022247Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 025T133000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006102 5T143000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Performance Review - Jon C CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=Jon Callenius;LANGUAGE=en:MAILTO:jon@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=David Smith;LANGUAGE=en:MAILTO:dave2@example.org X-MICROSOFT-CDO-REPLYTIME:20061020T071144Z CREATED:20061020T071144 LAST-MODIFIED:20061020T071144 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061020T071108Z-7292-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061019T022314Z-5014-1001-1-1@dolmein DTSTAMP:20061019T022452Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 025T150000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006102 5T160000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Performance Review - David C CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=David Smith;LANGUAGE=en:MAILTO:dave2@example.org X-MICROSOFT-CDO-REPLYTIME:20061020T071245Z CREATED:20061020T071245 LAST-MODIFIED:20061020T071245 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061020T071222Z-7292-1000-1-2@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for UID property. Removing entire property: DTSTAMP:20061025T193258Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 026T150000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006102 6T160000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Performance Review - David C CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=David Calle nius;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=David Smith ;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:dave2@example.org CREATED:20061025T210902 LAST-MODIFIED:20061025T210902 UID:20061025T210650Z-21440-1000-1-8@ubu X-MICROSOFT-CDO-REPLYTIME:20061025T210902Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061025T210650Z-21440-1000-1-9@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061026T222249Z-5029-1001-1-0@dolmein DTSTAMP:20061026T223020Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 030T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006103 0T160000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:ABC CLASS:PRIVATE CREATED:20061026T223700 LAST-MODIFIED:20061026T223700 DESCRIPTION:Mark and Tom from ABC would like to discuss the work require d and estimate for the work they would like us to do - \"start to become specific about things\". Expectations of work\, issues and solutions. ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug htonbeigh;LANGUAGE=en;PARTSTAT=TENTATIVE:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=Andy Capp;LANGUAGE=en:MAILTO:andyc@example.org X-MICROSOFT-CDO-REPLYTIME:20061026T223700Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061026T223608Z-4264-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061027T005242Z-5029-1001-1-1@dolmein DTSTAMP:20061027T010232Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 030T103000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006103 0T113000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Interview Linus Pauling CLASS:PRIVATE CREATED:20061027T022816 LAST-MODIFIED:20061027T022816 DESCRIPTION:I've already spoken to each of you about this\, this is just to ensure that it is in my calender :-) ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org X-MICROSOFT-CDO-REPLYTIME:20061027T022816Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061027T022803Z-4264-1000-1-2@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061029T195821Z-14356-1000-1-12@ubu DTSTAMP:20061029T195821Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 030T130000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006103 0T140000 SUMMARY:??? CREATED:20061029T195822 LAST-MODIFIED:20061029T195822 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061029T195821Z-14353-1000-1-6@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:??? END:VALARM END:VEVENT BEGIN:VEVENT UID:20061029T195827Z-14356-1000-1-13@ubu DTSTAMP:20061029T195827Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 030T160000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006103 0T170000 SUMMARY:IZPAXY CREATED:20061029T195828 LAST-MODIFIED:20061029T195828 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061029T195827Z-14353-1000-1-7@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:IZPAXY END:VALARM END:VEVENT BEGIN:VEVENT UID:20061031T194148Z-14356-1000-1-14@ubu DTSTAMP:20061031T194148Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 101T133000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006110 1T143000 SUMMARY:Doctor CREATED:20061031T194149 LAST-MODIFIED:20061031T194149 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061031T194148Z-14353-1000-1-19@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Doctor END:VALARM END:VEVENT BEGIN:VEVENT UID:20061101T224855Z-5026-1001-1-0@dolmein DTSTAMP:20061101T225011Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 102T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006110 2T150000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Sysadmin Interview CLASS:PRIVATE CREATED:20061101T230424 LAST-MODIFIED:20061101T230424 ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=Gerrold Nimby;LANGUAGE=en:MAILTO:gerrold@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org X-MICROSOFT-CDO-REPLYTIME:20061101T230424Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T230356Z-1895-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061105T211651Z-4384-1000-1-7@ubu DTSTAMP:20061105T211651Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 107T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006110 7T150000 SUMMARY:James What CREATED:20061105T211656 LAST-MODIFIED:20061106T213310 LOCATION:Copperstuff CLASS:PUBLIC TRANSP:OPAQUE SEQUENCE:3 ORGANIZER;CN=Andrew Moughtonbeigh:MAILTO:andrew@example.org DESCRIPTION:I am looking at hosting a custom Web application on a Linux Debian server. \nFrom what I understand you can provide the complete sol ution in terms of hosting and support. \nI am currently looking into hos ting providers as well as looking for some Debian admin skilled resource .\n ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Andrew Moughtonbeigh;LANGUAGE=en:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061106T213310Z-4382-1000-1-31@ubu DESCRIPTION:James What ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061119T201927Z-5105-1000-5103-8@ubu DTSTAMP:20061119T201927Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 122T130000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006112 2T133000 SUMMARY:Alan Wanston\, FudgeFactory CREATED:20061119T201929 LAST-MODIFIED:20061119T201951 SEQUENCE:1 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061119T201927Z-5101-1000-1-17@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Alan Wanston END:VALARM END:VEVENT BEGIN:VEVENT UID:20061119T202229Z-5105-1000-5103-9@ubu DTSTAMP:20061119T202229Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 120T110000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006112 0T120000 SUMMARY:IZPAXY Review CREATED:20061119T202231 LAST-MODIFIED:20061119T202231 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061119T202229Z-5101-1000-1-18@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:IZPAXY Review END:VALARM END:VEVENT BEGIN:VEVENT UID:20061210T214816Z-5064-1001-1-0@dolmein DTSTAMP:20061210T215058Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 212T100000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006121 2T110000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Interview - Arthur Williams CLASS:PRIVATE CREATED:20061211T020841 LAST-MODIFIED:20061211T020841 DESCRIPTION:I think you all have had a copy of Arthur Williams's CV pass ed onto you. ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=Gerrold Nimby;LANGUAGE=en:MAILTO:gerrold@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org X-MICROSOFT-CDO-REPLYTIME:20061211T020841Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061211T020828Z-15443-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061219T104451Z-28207-1000-1-8@ubu DTSTAMP:20061219T104451Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061 222T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006122 2T150000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Those who are left will have a drink to celebrate the new calend ar LOCATION:The Boardroom CLASS:PUBLIC ORGANIZER;CN=Andrew Moughtonbeigh:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T RUE;CN=Andrew Moughtonbeigh;LANGUAGE=en:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS VP=TRUE;LANGUAGE=en:MAILTO:Boardroom@example.org CREATED:20061219T104635 LAST-MODIFIED:20061219T104635 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061219T104635Z-23686-1000-1-22@ubu DESCRIPTION:Those who are left will have a drink to celebrate the new ca lendar ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:86203AFD481A6C42892013E6E0C4845D039A2543@AKEXBE02.telecom.tcnz.net DTSTAMP:20061005T230724Z DTSTART:20070120T093000 SUMMARY:Reminder for Mark for Absolom Livasathan's PGP WF Services cost request DESCRIPTION:From Absolom.Livasathan@example.com Fri Oct 6 12:00:02 2006 \n ORGANIZER;CN=Absolom Livasathan:Absolom.Livasathan@example.com ATTENDEE;RSVP=FALSE;CN=:andrew@example.org CREATED:20061005T230724 LAST-MODIFIED:20061005T230724 END:VEVENT BEGIN:VEVENT DTSTART;TZID=Pacific/Auckland:20061220T140000 SUMMARY:Really Geeky round table UID:DC9C0944-D80A-426D-A4A4-6003C72BA7B5 ORGANIZER;CN=Chris Dalgleish:mailto:chris@example.org SEQUENCE:2 DTSTAMP:20061219T195427Z DURATION:PT1H TRANSP:OPAQUE X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for ATTENDEE prop erty. Removing entire property: X-MICROSOFT-CDO-REPLYTIME:20061219T225056Z CREATED:20061219T225056 LAST-MODIFIED:20061219T225056 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061219T225040Z-21169-1000-1-13@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VTIMEZONE TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0546-iCLoud-PUT-encoded-fail.result0000644000000000000000000000064311732223067024130 0ustar HTTP/1.1 415 Unsupported Media Type Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 135 Content-Type: text/xml; charset="utf-8" Unable to decode "deflate" content encoding. davical-1.1.1/testing/tests/regression-suite/0818-Spec-PUT.test0000644000000000000000000000315211651212132020763 0ustar # # PUT an iCal style event into the database # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: RFC2518 Spec Tests HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//davical.org//NONSGML AWL Calendar//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:19901007T020000 RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU TZNAME:NZDT END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DESCRIPTION:Have a microparty. All the best parties are monthly! UID:MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74 DTSTAMP:20081027T074326Z SUMMARY:Woohoo! Time to Par-tay! CREATED:20081024T220749Z DTSTART;TZID=Pacific/Auckland:20081121T160000 DURATION:PT3H RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=3FR END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified, dtend - dtstart AS "~Duration" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0924-MOVE.test0000644000000000000000000000133711633117640020202 0ustar # # MOVE an event from one location to another # TYPE=MOVE URL=http://regression.host/caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEADER=User-Agent: RFC4918 Spec Tests HEADER=Destination: http://regression.host/caldav.php/user1/anotherone/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEAD QUERY SELECT caldav_data.dav_name AS data_name, calendar_item.dav_name AS item_name, caldav_data.user_no AS cd_user_no, calendar_item.user_no AS ci_user_no, caldav_data.collection_id AS cd_collection, calendar_item.collection_id AS ci_collection FROM caldav_data JOIN calendar_item USING(dav_id) WHERE caldav_data.dav_name ~ 'DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics' ORDER BY cd_collection ENDQUERY davical-1.1.1/testing/tests/regression-suite/0921-PROPFIND-supported-stuff.test0000644000000000000000000000105611446006434024020 0ustar # # PROPFIND looking for supported-methods supported-reports etc # # Non-existent principal # TYPE=PROPFIND URL=http://regression.host/caldav.php/bogusprincipal/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0538-iCal4-PUT.test0000644000000000000000000000172111446006434021034 0ustar # # Testing with a process similar to iCal4 # TYPE=PUT URL=http://regression.host/caldav.php/user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/calendar # # BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Europe/Prague BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20091006T225807Z UID:70D23799-4A68-4905-AB9F-4D47BA693CFD DTEND;TZID=Europe/Prague:20091005T150000 TRANSP:OPAQUE SUMMARY:New Event DTSTART;TZID=Europe/Prague:20091005T140000 DTSTAMP:20091006T225808Z SEQUENCE:1 END:VEVENT END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0822-Spec-PROPFIND-3.test0000644000000000000000000000146111633117640021700 0ustar # # Spec compliant test for all properties. Depth infinity this time # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: infinity HEADER=Content-Type: application/xml # REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# BEGINDATA ENDDATA # REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ davical-1.1.1/testing/tests/regression-suite/0531-iCal4-PROPFIND.result0000644000000000000000000000366411732223054022142 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ae6b3ed31d2295a38ad54bdf12fe02a7" Content-Length: 1655 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ /caldav.php/user1/.in/ /caldav.php/user1/.out/ /caldav.php/user1/.drop/ User 1 /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0401-Cadaver-PROPFIND-1.test0000644000000000000000000000103611446006434022340 0ustar # # Using CADAVER to do a PROPFIND # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: cadaver/0.22.3 neon/0.25.5 HEADER=Connection: TE HEADER=TE: trailers HEADER=Depth: 0 HEADER=Content-Type: application/xml BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0547-iCal4-PROPFIND.test0000644000000000000000000000223711731507625021615 0ustar # # Testing with a process similar to iCal on Lion # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEAD HEADER=User-Agent: DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEADER=Depth: 1 # # Looking for interesting stuff like xmpp-uri # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0403-Cadaver-LOCK-1.result0000644000000000000000000000135011732223032022200 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Lock-Token: Content-Length: 412 Content-Type: text/xml; charset="utf-8" 0 Second-30 opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx davical-1.1.1/testing/tests/regression-suite/0513-iCal-PUT.result0000644000000000000000000000405211732223043021273 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "6079c141bc189326bf2432a8426c4242" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:5 TRANSP:OPAQUE UID:6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA DTSTART;TZID=Pacific/Auckland:20071126T070000 DTSTAMP:20071124T084239Z SUMMARY:Go to work CREATED:20071124T083709Z DTEND;TZID=Pacific/Auckland:20071126T170000 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU BEGIN:VALARM X-WR-ALARMUID:F33877C6-563B-4F20-B129-77A5B6C6944E ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< dav_etag: >6079c141bc189326bf2432a8426c4242< description: >NULL< dtend: >2007-11-26 17:00:00< dtstamp: >2007-11-24 08:42:39< dtstart: >2007-11-26 07:00:00< due: >NULL< last_modified: >2007-11-24 08:42:39< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU< status: >NULL< summary: >Go to work< transp: >OPAQUE< tz_id: >Pacific/Auckland< uid: >6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0246-Moz-POST-FB.result0000644000000000000000000000120111732223016021566 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "1ae0716c07a40eb2663762d423506624" Content-Length: 335 Content-Type: text/xml; charset="utf-8" mailto:ultrabogosity@example.net 3.7;Invalid Calendar User davical-1.1.1/testing/tests/regression-suite/0535-iCal4-PROPPATCH.result0000644000000000000000000000103511747467516022276 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 267 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ All requested changes were made. HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0536-iCal4-PROPFIND.test0000644000000000000000000000064511446006434021607 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml HEADER=Depth: 1 # # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/Load-Sample-Data.result0000644000000000000000000000015111217772740022343 0ustar setval -------- 1000 (1 row) setval -------- 1000 (1 row) setval -------- 10 (1 row) davical-1.1.1/testing/tests/regression-suite/2003-REPORT-expanded-nz-holidays-2007.result0000644000000000000000000004436111732223740025412 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "f7228903b602d968abd90fe6c4c06d7c" Content-Length: 14640 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/nz_holidays/20081226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225121Z LAST-MODIFIED:20081117T225144Z DTSTAMP:20081117T225121Z UID:20081226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20071226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225212Z LAST-MODIFIED:20081117T230337Z DTSTAMP:20081117T225212Z UID:20090101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20070101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081225-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T224951Z LAST-MODIFIED:20081117T235108Z DTSTAMP:20081117T224951Z UID:20081225-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20071225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090206-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235224Z LAST-MODIFIED:20081120T002639Z DTSTAMP:20081117T235224Z UID:20090206-1-all-publicholidays-dol.govt.nz SUMMARY:Waitangi Day TRANSP:TRANSPARENT X-MOZ-GENERATION:4 DTSTART;VALUE=DATE:20070206 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070206 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090425-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011910Z LAST-MODIFIED:20081120T001537Z DTSTAMP:20081118T011910Z UID:20090425-1-all-publicholidays-dol.govt.nz SUMMARY:ANZAC Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20070425 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070425 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011947Z LAST-MODIFIED:20081118T012009Z DTSTAMP:20081118T011947Z UID:20090601-1-all-publicholidays-dol.govt.nz SUMMARY:Queen's Birthday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070604 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070604 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091026-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012125Z LAST-MODIFIED:20081118T012150Z DTSTAMP:20081118T012125Z UID:20091026-1-all-publicholidays-dol.govt.nz SUMMARY:Labour Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20071022 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071022 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235121Z LAST-MODIFIED:20081118T012314Z DTSTAMP:20081117T235121Z UID:20090102-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012344Z LAST-MODIFIED:20081118T012529Z DTSTAMP:20081118T012344Z UID:20091226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day Holiday TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20071226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091228-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012537Z LAST-MODIFIED:20081118T012606Z DTSTAMP:20081118T012537Z UID:20091228-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20071225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012634Z LAST-MODIFIED:20081118T012657Z DTSTAMP:20081118T012634Z UID:20100101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100607-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T013050Z LAST-MODIFIED:20081118T013102Z DTSTAMP:20081118T013050Z UID:20100607-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200154Z LAST-MODIFIED:20081119T200227Z DTSTAMP:20081119T200154Z UID:20081201-1-all-publicholidays-dol.govt.nz SUMMARY:Westland Anniversary Day (Monday nearest 1st December) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20071203 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071203 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200252Z LAST-MODIFIED:20081119T200304Z DTSTAMP:20081119T200252Z UID:20081201-2-all-publicholidays-dol.govt.nz SUMMARY:Chatham Islands Anniversary Day (Monday nearest 30th November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20071203 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071203 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090126-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200321Z LAST-MODIFIED:20081119T200334Z DTSTAMP:20081119T200321Z UID:20090126-1-all-publicholidays-dol.govt.nz SUMMARY:Auckland Anniversary Day (Monday nearest 29th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070129 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070129 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200350Z LAST-MODIFIED:20081119T200406Z DTSTAMP:20081119T200350Z UID:20090119-1-all-publicholidays-dol.govt.nz SUMMARY:Wellington Anniversary Day (Monday nearest 22nd January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070122 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070122 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200431Z LAST-MODIFIED:20081119T200443Z DTSTAMP:20081119T200431Z UID:20090119-2-all-publicholidays-dol.govt.nz SUMMARY:Southland Anniversary Day (Monday nearest 17th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070115 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070115 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090202-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200519Z LAST-MODIFIED:20081119T200530Z DTSTAMP:20081119T200519Z UID:20090202-1-all-publicholidays-dol.govt.nz SUMMARY:Nelson Anniversary Day (Monday nearest 1st Feb) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070129 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070129 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091023-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200759Z LAST-MODIFIED:20081119T200809Z DTSTAMP:20081119T200759Z UID:20091023-1-all-publicholidays-dol.govt.nz SUMMARY: Hawkes' Bay Anniversary Day (Friday before 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20071019 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071019 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200840Z LAST-MODIFIED:20081119T200928Z DTSTAMP:20081119T200840Z UID:20091102-1-all-publicholidays-dol.govt.nz SUMMARY:Marlborough Anniversary Day (Monday after 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20071029 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071029 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091113-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201008Z LAST-MODIFIED:20081119T201040Z DTSTAMP:20081119T201008Z UID:20091113-1-all-publicholidays-dol.govt.nz SUMMARY:Canterbury Anniversary Day (Second Friday after the first Tuesda y in November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20071116 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20071116 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090928-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201140Z LAST-MODIFIED:20081119T201153Z DTSTAMP:20081119T201140Z UID:20090928-1-all-publicholidays-dol.govt.nz SUMMARY:South Canterbury Anniversary Day (4th Monday in September) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070924 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20070924 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Boxing Day< dtstart: >2005-01-01 00:00:00+13< rrule: >FREQ=YEARLY< summary: >New Year's Day< dtstart: >2005-12-25 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Christmas Day< dtstart: >2005-02-06 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Waitangi Day< dtstart: >2005-04-25 00:00:00+12< rrule: >FREQ=YEARLY< summary: >ANZAC Day< dtstart: >2005-06-06 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=6;BYDAY=1MO< summary: >Queen's Birthday< dtstart: >2005-10-24 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYDAY=4MO< summary: >Labour Day< dtstart: >2005-01-02 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Day after New Year's Day< dtstart: >2005-12-27 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=2< summary: >Boxing Day Holiday< dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=1< summary: >Christmas Day Holiday< dtstart: >2005-01-03 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=1< summary: >New Year's Day Holiday< dtstart: >2005-01-04 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=2< summary: >Day after New Year's Day Holiday< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28< summary: >Westland Anniversary Day (Monday nearest 1st December)< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29< summary: >Chatham Islands Anniversary Day (Monday nearest 30th November)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO< summary: >Auckland Anniversary Day (Monday nearest 29th January)< dtstart: >2005-01-24 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO< summary: >Wellington Anniversary Day (Monday nearest 22nd January)< dtstart: >2005-01-17 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO< summary: >Southland Anniversary Day (Monday nearest 17th January)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO< summary: >Nelson Anniversary Day (Monday nearest 1st Feb)< dtstart: >2005-10-21 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR< summary: >Hawkes' Bay Anniversary Day (Friday before 4th Monday of October)< dtstart: >2005-10-31 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58< summary: >Marlborough Anniversary Day (Monday after 4th Monday of October)< dtstart: >2005-11-11 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR< summary: >Canterbury Anniversary Day (Second Friday after the first Tuesday in November)< dtstart: >2005-09-26 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=9;BYDAY=4MO< summary: >South Canterbury Anniversary Day (4th Monday in September)< davical-1.1.1/testing/tests/regression-suite/0106-Evo-GET-1.result0000644000000000000000000000260311732222755021270 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Etag: "c3658901fd4689d4a1e1d6f08601ef4f" Content-Length: 1099 Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VEVENT UID:20061101T073000Z-10468-1000-1-7@ubu DTSTAMP:20061101T073000Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T100000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T110000 SUMMARY:A Meeting X-EVOLUTION-CALDAV-HREF:http: //user1@mycaldav/caldav.php/user1/home/20061101T073004Z.ics BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:A Meeting END:VALARM END:VEVENT BEGIN:VTIMEZONE TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0917-PROPFIND-supported-stuff.test0000644000000000000000000000074611446006434024032 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0023-Mulberry-DELETE-3.test0000644000000000000000000000045611446006434022324 0ustar # # Do a DELETE with a correct etag which will succeed. TYPE=DELETE URL=http://mycaldav/caldav.php/resource2/home/27D2201A83F0CD2EA9ECEBB588F796A7-0.ics HEAD QUERY SELECT dav_id, dav_name, dav_etag FROM caldav_data WHERE dav_name = '/resource2/home/27D2201A83F0CD2EA9ECEBB588F796A7-0.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0309-Chandler-PROPFIND-4.test0000644000000000000000000000117611446006434022532 0ustar # # At this point Chandler does a PROPFIND on /user1/home/ # an OPTIONS on that). # Still Depth: 0 at this point... # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=Depth: infinity HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Chandler/0.7alpha4 (Linux) HEAD BEGINDATA ENDDATA # REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ # REPLACE=/^ETag: "[0-9a-f]{32}"/ETag: "deadbeefcafef00ddeadbeefcafefeed"/ davical-1.1.1/testing/tests/regression-suite/0534-iCal4-PROPPATCH.test0000644000000000000000000000072711446006434021725 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml # # BEGINDATA 1 ENDDATA davical-1.1.1/testing/tests/regression-suite/0232-Moz-PROPFIND.test0000644000000000000000000000070211446006434021403 0ustar # # Testing with a process similar to Mozilla Sunbird 0.7 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8pre) Gecko/20071023 Sunbird/0.7 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 0 # # The first query just gets the resourcetype # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0954-PROPFIND.result0000644000000000000000000000265111446006434021217 0ustar /caldav.php/user1/home/ Good Ticket ID /caldav.php/user1/ Seconds-3600 infinity HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0201-Moz-OPTIONS-2.test0000644000000000000000000000076511446006434021461 0ustar # # Do an initial OPTIONS request (authenticated) # ... actually, Mozilla Calendar doesn't do this, but no doubt they will. TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEAD davical-1.1.1/testing/tests/regression-suite/0932-PROPFIND-ish-misformed-request.result0000644000000000000000000000102311732223654025440 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "0c775c871b7748cdf156461686ccb5eb" Content-Length: 215 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0506-iCal-PUT.test0000644000000000000000000000343211651212132020734 0ustar # # PUT a newer version of the event into the calendar. # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEADER=If-Match: "b3e66a461ef178bd4791b2b6509bbb9d" HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:6 TRANSP:OPAQUE UID:AAA9318E-37D9-4319-8626-95ECD3D3B243 DTSTART;TZID=Pacific/Auckland:20071125T130000 DTSTAMP:20071124T224850Z SUMMARY:BBQ @ ML's CREATED:20071123T093048Z DTEND;TZID=Pacific/Auckland:20071125T190000 LOCATION:ML's House BEGIN:VALARM X-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_etag = 'efd0257efbc898d059c200d1391af060'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0108-Evo-REPORT-1.test0000644000000000000000000000105111446006434021317 0ustar # # Do a REPORT request (test operation in subdirectory of unrelated site) # TYPE=REPORT URL=http://alternate.host/davical/caldav.php/user1/home/ HEAD HEADER=Depth: 1 HEADER=User-Agent: Evolution/1.8.1 HEADER=Content-Type: text/xml BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-nz_holidays.test0000644000000000000000000000041011633117640025624 0ustar # # A collection of NZ holidays for some years (incomplete, sadly) # # TYPE=PUT URL=http://mycaldav/caldav.php/user4/nz_holidays/ HEADER=User-Agent: RSCDS Testing/0.9.x HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user4:user4 HEAD DATA=nz_holidays.ics davical-1.1.1/testing/tests/regression-suite/0910-Space-OPTIONS.result0000644000000000000000000000056011732223635022151 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT, DELETE, LOCK, UNLOCK, MOVE, GET, PUT, HEAD, MKTICKET, DELTICKET, ACL Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0237-Moz-REPORT.test0000644000000000000000000000146011446006434021204 0ustar # # Check for REPORT calendar-query of VTODO within time range # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.13pre) Gecko/20080916 Debian/unstable (Codename:sid) Iceowl/0.8 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 BEGINDATA /caldav.php/user1 ENDDATA davical-1.1.1/testing/tests/regression-suite/0598-REPORT-sync-initial.result0000644000000000000000000001127511743151345023422 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "d09f24a62fb258fc8adec1116c3901dc" Content-Length: 4480 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics "bcc402382688cb3e8e57379c757dbcb0" HTTP/1.1 200 OK /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics "a1c6404d61190f9574e2bfd69383f144" HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics "08a435c2abaf38f4a50a997343c098a7" HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics "5def8ae2b20893a1c7f4dbaeb008f2f1" HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics "ac90acd649c25070b1a2a17fb31a105a" HTTP/1.1 200 OK /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics "509b0f0d8a3363379f9f5727f5dd74a0" HTTP/1.1 200 OK /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics "cb3d9dc3e8c157f53eba3ea0e1e0f146" HTTP/1.1 200 OK /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics "00ad5eb1eb5507884710b0b66aa5d5c4" HTTP/1.1 200 OK /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics "a2990674708634a311bb98a59865ca50" HTTP/1.1 200 OK /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" HTTP/1.1 200 OK /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics "8f581a053df6d833254756dfd7553d37" HTTP/1.1 200 OK /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics "55f02f66966ee150320383803d1e0d34" HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" HTTP/1.1 200 OK /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics "efd0257efbc898d059c200d1391af060" HTTP/1.1 200 OK /caldav.php/user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics "257b9df4aaf573a578af4aadd033abf4" HTTP/1.1 200 OK /caldav.php/user1/home/0544-gzip-PUT.ics "6ddd18264a9d40c1c9d37a005eeb7e4f" HTTP/1.1 200 OK /caldav.php/user1/home/0545-deflate-PUT.ics "4a3aa58a3e11487e87d87024465d4182" HTTP/1.1 200 OK data:,27 davical-1.1.1/testing/tests/regression-suite/0233-Moz-PUT.test0000644000000000000000000000436611651212132020635 0ustar # # PUT a Mozilla style event into the database # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8pre) Gecko/20071023 Sunbird/0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT CREATED:20071203T202630Z LAST-MODIFIED:20071203T202834Z DTSTAMP:20071203T202630Z UID:e70576e9-c1e0-431e-a507-0386fd82f223 SUMMARY:Morning Meeting RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T074500 DTEND;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T083000 X-MOZ-LOCATIONPATH:e70576e9-c1e0-431e-a507-0386fd82f223.ics LOCATION:Suzies Coffee Lounge DESCRIPTION:Twice-weekly breakfast meeting CATEGORIES:Business BEGIN:VALARM TRIGGER;VALUE=DURATION:-PT10M DESCRIPTION:Mozilla Alarm: Morning Meeting ACTION:DISPLAY END:VALARM END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", ((current_timestamp AT TIME ZONE 'GMT' - calendar_item.last_modified) < '2 seconds'::interval) AS "~ Modified Now" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0885-GET-freebusy.test0000644000000000000000000000172111446006434021700 0ustar # # Request a freebusy report by URL # TYPE=GET URL=http://mycaldav/freebusy.php?user=user1@example.net&start=20061001T000000&end=20070630T235959 HEAD REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ REPLACE=/^DTSTART:20061001T000000Z\r?$/DTSTART:correct/ REPLACE=/^DTEND:20070630T235959Z\r?$/DTEND:correct/ QUERY SELECT calendar_item.rrule, status, to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS start, to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS finish FROM caldav_data INNER JOIN calendar_item USING(dav_id,user_no,dav_name) WHERE caldav_data.user_no = 10 AND rrule_event_overlaps( dtstart, dtend, rrule, '20061001T000000', '20070630T235959') AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) ORDER BY 2, 3 ENDQUERY davical-1.1.1/testing/tests/regression-suite/0808-Spec-UNLOCK-1.result0000644000000000000000000000042011732223550022003 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0924-MOVE-a.result0000644000000000000000000000105411751110634020750 0ustar HTTP/1.1 409 Conflict Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 37 Content-Type: text/plain; charset="utf-8" Destination collection does not exist cd_collection: >160< cd_user_no: >10< ci_collection: >160< ci_user_no: >10< data_name: >/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< item_name: >/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< davical-1.1.1/testing/tests/regression-suite/0249-Empty-PROPFIND.test0000644000000000000000000000120211633117640021740 0ustar # # Do a PROPFIND request with no content # we continue to see this as a collection... # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home # HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Depth: 0 BEGINDATA ENDDATA REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# davical-1.1.1/testing/tests/regression-suite/2000-REPORT-expanded-nz-holidays-2005.test0000644000000000000000000000166711633117640025051 0ustar # # Test expanded report for NZ public holidays for 2005 # TYPE=REPORT URL=http://regression.host/caldav.php/user4/nz_holidays/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dtstart, rrule, summary FROM calendar_item WHERE dav_name ~ '^/user4/nz_holidays/' AND (rrule IS NOT NULL OR (dtstart >= '20041231T110000Z' AND dtstart < '20051231T110000Z') ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/2001-REPORT-expanded-queens-birthday-2005.result0000644000000000000000000000222711732223736026251 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "f57bc105449e3d80e3411f3169b14ce4" Content-Length: 722 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011947Z LAST-MODIFIED:20081118T012009Z DTSTAMP:20081118T011947Z UID:20090601-1-all-publicholidays-dol.govt.nz SUMMARY:Queen's Birthday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050606 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dtstart: >2005-06-06 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=6;BYDAY=1MO< summary: >Queen's Birthday< davical-1.1.1/testing/tests/regression-suite/0231-Moz-REPORT-All-Tasks.test0000644000000000000000000000151211446006434022765 0ustar # # Do a REPORT request (test operation in subdirectory of unrelated site) # TYPE=REPORT URL=http://alternate.host/davical/caldav.php/user1/home/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0302-Chandler-OPTIONS-2.result0000644000000000000000000000056011732223021022755 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT, DELETE, LOCK, UNLOCK, MOVE, GET, PUT, HEAD, MKTICKET, DELTICKET, ACL Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0861-Spec-REPORT-principal.test0000644000000000000000000000141311446006434023311 0ustar # # Do a REPORT principal-property-search request # - in this case we look for all principals # TYPE=REPORT URL=http://mycaldav/caldav.php/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20101013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/2006-REPORT-expanded-nz-holidays-2010.test0000644000000000000000000000166711633117640025053 0ustar # # Test expanded report for NZ public holidays for 2010 # TYPE=REPORT URL=http://regression.host/caldav.php/user4/nz_holidays/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dtstart, rrule, summary FROM calendar_item WHERE dav_name ~ '^/user4/nz_holidays/' AND (rrule IS NOT NULL OR (dtstart >= '20091231T110000Z' AND dtstart < '20101231T110000Z') ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/0535-iCal4-PROPPATCH.test0000644000000000000000000000162211446006434021721 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml # # BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 4.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Europe/Prague BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0001-Mulberry-1.test0000644000000000000000000000012411446006434021346 0ustar # # Do an initial OPTIONS request TYPE=OPTIONS URL=http://mycaldav/caldav.php/ HEAD davical-1.1.1/testing/tests/regression-suite/0923-PROPFIND-supported-stuff.test0000644000000000000000000000111411446006434024015 0ustar # # PROPFIND looking for supported-methods supported-reports etc # # Bogus resource in collection # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/bogusnonexistentresource.ics HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0861-Spec-REPORT-principal.result0000644000000000000000000001040211732223602023642 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "135496e5aa8c45c3ba999c28f7ffec62" Content-Length: 4037 Content-Type: text/xml; charset="utf-8" /caldav.php/admin/ /caldav.php/admin/ DAViCal Administrator HTTP/1.1 200 OK /caldav.php/andrew/ /caldav.php/andrew/ Andrew McMillan HTTP/1.1 200 OK /caldav.php/user1/ /caldav.php/user1/ User 1 HTTP/1.1 200 OK /caldav.php/user2/ /caldav.php/user2/ User 2 HTTP/1.1 200 OK /caldav.php/user3/ /caldav.php/user3/ User 3 HTTP/1.1 200 OK /caldav.php/user4/ /caldav.php/user4/ User 4 HTTP/1.1 200 OK /caldav.php/user5/ /caldav.php/user5/ User 5 HTTP/1.1 200 OK /caldav.php/User%20Six/ /caldav.php/User%20Six/ User 6 HTTP/1.1 200 OK /caldav.php/manager1/ /caldav.php/manager1/ Manager 1 HTTP/1.1 200 OK /caldav.php/assistant1/ /caldav.php/assistant1/ Assistant 1 HTTP/1.1 200 OK /caldav.php/resource1/ /caldav.php/resource1/ Resource 1 HTTP/1.1 200 OK /caldav.php/resource2/ /caldav.php/resource2/ Resource 2 HTTP/1.1 200 OK /caldav.php/resmgr1/ /caldav.php/resmgr1/ Resource Managers HTTP/1.1 200 OK /caldav.php/teamclient1/ /caldav.php/teamclient1/ Team for Client1 HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0901-GET-Collection.test0000644000000000000000000000014411446006434022132 0ustar # # Doing a GET on an entire collection. # TYPE=GET URL=http://mycaldav/caldav.php/user1/home/ HEAD davical-1.1.1/testing/tests/regression-suite/0938-PROPFIND-inherited-acl-set.result0000644000000000000000000000107311732223660024515 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "5ff44edb9e8734dee700ac29aa6df3be" Content-Length: 255 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0014-Mulberry-PUT-3.result0000644000000000000000000000047211732222742022367 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "2c32a2f8aba853654eb17fe037a4db4d" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0305-Chandler-MKCOL-1.result0000644000000000000000000000107211732223024022473 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >.ce7ad224-8288-11db-ec28-b49a13ab0e46.tmp< dav_etag: >72205b235fa2a3dfd18535c0793b89b2< dav_name: >/user1/home/.ce7ad224-8288-11db-ec28-b49a13ab0e46.tmp/< is_calendar: >0< parent_container: >/user1/home/< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0844-Spec-PROPPATCH-principal.test0000644000000000000000000000143111446006434023637 0ustar # # Check for support of PROPPATCH method # # An attempt to set an arbitrary property on a principal # TYPE=PROPPATCH URL=http://mycaldav/caldav.php/user1/ HEADER=User-agent: SpecTest PROPPATCH HEADER=Content-type: text/xml HEAD BEGINDATA New Zealand NZ User Number One PROPPATCH'd in ENDDATA QUERY SELECT fullname, displayname FROM dav_principal WHERE dav_name = '/user1/'; ENDQUERY QUERY SELECT dav_name, property_name, property_value, changed_by FROM property WHERE dav_name = '/user1/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0959-REPORT-expanded.test0000644000000000000000000000165311633117640022246 0ustar # # Test REPORT access to a non-public calendar using a ticket. # TYPE=REPORT URL=http://regression.host/caldav.php/user2/home/ AUTH=user2:user2 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dav_name, dtstart, dtstart AT TIME ZONE 'UTC' AS dtstart_utc, rrule FROM calendar_item WHERE dav_name ~ '^/user2/home/' AND rrule IS NOT NULL AND dtstart < '20081201T000000Z' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0202-Moz-REPORT-1.result0000644000000000000000000000034211446006434021667 0ustar HTTP/1.1 401 Unauthorized Date: Dow, 01 Jan 2000 00:00:00 GMT WWW-Authenticate: Basic realm="DAViCal CalDAV Server" Content-Length: 40 Content-Type: text/plain; ; charset="utf-8" Please log in for access to this system.davical-1.1.1/testing/tests/regression-suite/0949-MKTICKET.result0000644000000000000000000000116111751110657021212 0ustar HTTP/1.1 400 Bad Request Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "7bc3d8a76fb705dfff8a6654bb8d7fb8" Content-Length: 155 Content-Type: text/xml; charset="utf-8" dav_owner_id: >1002< privileges: >000000000001001000100001< target_collection: >160< target_resource_i: >NULL< timeout: >01:00:00< davical-1.1.1/testing/tests/regression-suite/0995-REPORT-not-supported.result0000644000000000000000000000026411633117640023635 0ustar "bogus:namespace:which:does:not:exist:non-existent-report" is not a supported report type davical-1.1.1/testing/tests/regression-suite/0934-PROPFIND-acl.result0000644000000000000000000000507511732223655021761 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "47b370190326c7940b29c0231e7d9ed1" Content-Length: 2304 Content-Type: text/xml; charset="utf-8" /caldav.php/ /caldav.php/assistant1/ /caldav.php/teamclient1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0536-iCal4-PROPFIND.result0000644000000000000000000001120211743776133022147 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "c932a7b77636c45a6395fb906c9ff80c" Content-Length: 4421 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics "bcc402382688cb3e8e57379c757dbcb0" HTTP/1.1 200 OK /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics "a1c6404d61190f9574e2bfd69383f144" HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics "08a435c2abaf38f4a50a997343c098a7" HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics "5def8ae2b20893a1c7f4dbaeb008f2f1" HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics "ac90acd649c25070b1a2a17fb31a105a" HTTP/1.1 200 OK /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics "509b0f0d8a3363379f9f5727f5dd74a0" HTTP/1.1 200 OK /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics "cb3d9dc3e8c157f53eba3ea0e1e0f146" HTTP/1.1 200 OK /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics "00ad5eb1eb5507884710b0b66aa5d5c4" HTTP/1.1 200 OK /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics "a2990674708634a311bb98a59865ca50" HTTP/1.1 200 OK /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" HTTP/1.1 200 OK /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics "8f581a053df6d833254756dfd7553d37" HTTP/1.1 200 OK /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics "55f02f66966ee150320383803d1e0d34" HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" HTTP/1.1 200 OK /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics "efd0257efbc898d059c200d1391af060" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0522-iCal-PROPFIND.test0000644000000000000000000000126011446006434021510 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user2/ HEAD AUTH=user2:user2 HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0552-iPhone-PROPFIND.result0000644000000000000000000000243711743776507022452 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "9c0097968135b1bb539cee7121158c9c" Content-Length: 995 Content-Type: text/xml; charset="utf-8" /principals/users/user1/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ /caldav.php/user1/.in/ /caldav.php/user1/.out/ /caldav.php/user1/.drop/ User 1 HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0951-MKTICKET.result0000644000000000000000000000102011751110661021170 0ustar /caldav.php/user4/home/ dav_owner_id: >1002< privileges: >000000000001001000100001< target_collection: >160< target_resource_i: >NULL< timeout: >01:00:00< dav_owner_id: >1002< privileges: >000000000001001011100111< target_collection: >160< target_resource_i: >1530< timeout: >24:00:00< davical-1.1.1/testing/tests/regression-suite/0971-REPORT-principal-match-prop.result0000644000000000000000000000411511750214723025034 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "46d5fa30779c8449cfc918351c536a79" Content-Length: 1808 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/ User 1 HTTP/1.1 200 OK /caldav.php/user2/ /caldav.php/user2/ User 2 HTTP/1.1 200 OK /caldav.php/user3/ /caldav.php/user3/ User 3 HTTP/1.1 200 OK /caldav.php/user4/ /caldav.php/user4/ User 4 HTTP/1.1 200 OK /caldav.php/user5/ /caldav.php/user5/ User 5 HTTP/1.1 200 OK /caldav.php/User%20Six/ /caldav.php/User%20Six/ User 6 HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0204-Moz-REPORT-3.result0000644000000000000000000000261211732222766021703 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "8499ce6e92d129b549025ba6ceabe941" Content-Length: 1101 Content-Type: text/xml; charset="utf-8" /caldav.php/resource2/home/0A5EA1F0F2691A03E917E85F9F255448-0.ics BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061108T113035Z DTSTART;TZID=New Zealand Standard Time:20061030T100000 DURATION:PT1H LAST-MODIFIED:20061108T113044Z SEQUENCE:1 SUMMARY:Booking resource 2 UID:C8344958F0CC35344E063A04@D76FAF7B10D9E8D2D41F779C END:VEVENT END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0932-PROPFIND-ish-misformed-request.test0000644000000000000000000000071511446006434025105 0ustar # # PROPFIND with badly formed request should usefully error # # The tag should enclose the # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0012-Mulberry-PUT-2.test0000644000000000000000000000164211446006434022025 0ustar # # We now have a calendar so we can PUT an event into it... TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061102T090217Z DTSTART;TZID=New Zealand Standard Time:20061103T123000 DURATION:PT1H SUMMARY:Lunch with David UID:5A55230C8866CA8D3D325F3A@CA1CBED546AAE36FF3BC722E END:VEVENT END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0308-Chandler-OPTIONS-3.test0000644000000000000000000000023011446006434022430 0ustar # # Now do an OPTIONS request on ~/.chandler/ TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/home/.chandler/ HEADER=Chandler/0.7alpha4 (Linux) HEAD davical-1.1.1/testing/tests/regression-suite/0958-PROPFIND.result0000644000000000000000000000341211651212132021207 0ustar /public.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /public.php/user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics "f2c974ff51cb52cde0668544deb36380" HTTP/1.1 200 OK /public.php/user2/home/047871e3-6b70-4178-9af8-0ceb50f7b092.ics "58cba7e3fafb6080e85619ea77d08c7a" HTTP/1.1 200 OK /public.php/user2/home/9429a973-2b13-4b1a-be09-948d75425c45.ics "13249ced6c7527191a003f54f7e3cd25" HTTP/1.1 200 OK /public.php/user2/home/7d729xc0-0895-012d-124e-002421a2359e.ics "848df16c32fc3ce319083ae84c2603a3" HTTP/1.1 200 OK /public.php/user2/home/bd262d20-1cdb-012d-1264-002421a2359e.ics "671d4ee904be6c16dd1be076619fe7c0" HTTP/1.1 200 OK /public.php/user2/home/56f0e0e0-f742-012d-680c-002421a2359e.ics "e18c0d539b6dcb56df2d266dd4305008" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0012-Mulberry-PUT-2.result0000644000000000000000000000046711732222741022367 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "22158fc45876987b2b00749a3a1684d8" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0964-REPORT-calquery-private.result0000644000000000000000000000373411732223677024320 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "cdb4786ea5b91bf38b8f332da104965d" Content-Length: 1034 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/anotherone/86203AFD481A6C42892013E6E0C4845D039A2543AKEXBE02.telecom.tcnz.net.ics "621885941033781f3462950c9bc2844b" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT UID:86203AFD481A6C42892013E6E0C4845D039A2543@AKEXBE02.telecom.tcnz.net DTSTAMP:20061005T230724Z DTSTART:20070120T093000 SUMMARY:Reminder for Mark for Absolom Livasathan's PGP WF Services cost request DESCRIPTION:From Absolom.Livasathan@example.com Fri Oct 6 12:00:02 2006 \n ORGANIZER;CN=Absolom Livasathan:Absolom.Livasathan@example.com ATTENDEE;RSVP=FALSE;CN=:andrew@example.org CREATED:20061005T230724 LAST-MODIFIED:20061005T230724 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK class: >PUBLIC< dav_name: >/user1/anotherone/86203AFD481A6C42892013E6E0C4845D039A2543AKEXBE02.telecom.tcnz.net.ics< finish: >20070119T203000Z< rrule: >NULL< start: >20070119T203000Z< summary: >Reminder for Mark for Absolom Livasathan's PGP WF Services cost request< tz_id: >NULL< class: >PRIVATE< dav_name: >/user1/anotherone/20060803T084628Z-6040-1000-1-6lamb.ics< finish: >20060802T003456Z< rrule: >FREQ=YEARLY;INTERVAL=1< start: >20060801T003456Z< summary: >Steve's Private Birthday< tz_id: >NULL< davical-1.1.1/testing/tests/regression-suite/0838-Spec-LOCK.test0000644000000000000000000000103511446006434021053 0ustar # # Test specification compliance for LOCK request # TYPE=LOCK URL=http://regression.host/caldav.php/user1/home/i1278618276.ics HEADER=Depth: 0 HEADER=Timeout: Infinite,Second-4100000000 HEADER=Content-type: text/xml; charset="utf-8" HEAD # # Include the data in-line # BEGINDATA http://andrew.mcmillan.net.nz/node/5/ ENDDATA davical-1.1.1/testing/tests/regression-suite/0310-Chandler-PUT-1.test0000644000000000000000000000310211651212132021725 0ustar # # PUT request like Chandler does it. # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics HEADER=Content-Type: text/calendar HEAD # # Somewhat atypical Chandler data since I insisted it use a timezone on this occasion BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//PYVOBJECT//NONSGML Version 1//EN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD DTSTART:20000319T030000 RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=3 TZNAME:Pacific/Auckland TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD BEGIN:DAYLIGHT DTSTART:20001001T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:Pacific/Auckland TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT UID:71e2ae82-7870-11db-c6d6-f6927c144649 DTSTAMP:20060511T043751Z DTSTART;TZID=Pacific/Auckland:20061103T160000 DTEND;TZID=Pacific/Auckland:20061103T174500 DESCRIPTION: LOCATION:Level 3 RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900 STATUS:CONFIRMED SUMMARY:Beer O'Clock END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, calendar_item.last_modified, caldav_data AS "A1 CalDAV DATA" FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/nz_holidays.ics0000644000000000000000000003576411633117640021175 0ustar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN X-WR-CALNAME:New Zealand Public Holidays BEGIN:VEVENT CREATED:20081117T225121Z LAST-MODIFIED:20081117T225144Z DTSTAMP:20081117T225121Z UID:20081226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day DTSTART;VALUE=DATE:20051226 RRULE:FREQ=YEARLY TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081117T225212Z LAST-MODIFIED:20081117T230337Z DTSTAMP:20081117T225212Z UID:20090101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day DTSTART;VALUE=DATE:20050101 RRULE:FREQ=YEARLY TRANSP:TRANSPARENT X-MOZ-GENERATION:1 END:VEVENT BEGIN:VEVENT CREATED:20081117T224951Z LAST-MODIFIED:20081117T235108Z DTSTAMP:20081117T224951Z UID:20081225-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day DTSTART;VALUE=DATE:20051225 RRULE:FREQ=YEARLY TRANSP:TRANSPARENT X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT CREATED:20081117T235335Z LAST-MODIFIED:20081117T235417Z DTSTAMP:20081117T235335Z UID:20090410-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday DTSTART;VALUE=DATE:20090410 DTEND;VALUE=DATE:20090411 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081117T235224Z LAST-MODIFIED:20081120T002639Z DTSTAMP:20081117T235224Z UID:20090206-1-all-publicholidays-dol.govt.nz SUMMARY:Waitangi Day DTSTART;VALUE=DATE:20050206 RRULE:FREQ=YEARLY TRANSP:TRANSPARENT X-MOZ-GENERATION:4 END:VEVENT BEGIN:VEVENT CREATED:20081117T235455Z LAST-MODIFIED:20081117T235524Z DTSTAMP:20081117T235455Z UID:20090413-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday DTSTART;VALUE=DATE:20090413 DTEND;VALUE=DATE:20090414 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T011910Z LAST-MODIFIED:20081120T001537Z DTSTAMP:20081118T011910Z UID:20090425-1-all-publicholidays-dol.govt.nz SUMMARY:ANZAC Day DTSTART;VALUE=DATE:20050425 RRULE:FREQ=YEARLY TRANSP:TRANSPARENT X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT CREATED:20081118T011947Z LAST-MODIFIED:20081118T012009Z DTSTAMP:20081118T011947Z UID:20090601-1-all-publicholidays-dol.govt.nz SUMMARY:Queen's Birthday DTSTART;VALUE=DATE:20050606 RRULE:FREQ=YEARLY;BYMONTH=6;BYDAY=1MO TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T012125Z LAST-MODIFIED:20081118T012150Z DTSTAMP:20081118T012125Z UID:20091026-1-all-publicholidays-dol.govt.nz SUMMARY:Labour Day DTSTART;VALUE=DATE:20051024 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4MO TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081117T235121Z LAST-MODIFIED:20081118T012314Z DTSTAMP:20081117T235121Z UID:20090102-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day DTSTART;VALUE=DATE:20050102 RRULE:FREQ=YEARLY TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T012344Z LAST-MODIFIED:20081118T012529Z DTSTAMP:20081118T012344Z UID:20091226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day Holiday DTSTART;VALUE=DATE:20051227 RRULE:FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=2 TRANSP:TRANSPARENT X-MOZ-GENERATION:1 END:VEVENT BEGIN:VEVENT CREATED:20081118T012537Z LAST-MODIFIED:20081118T012606Z DTSTAMP:20081118T012537Z UID:20091228-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day Holiday DTSTART;VALUE=DATE:20051226 RRULE:FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=1 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T012634Z LAST-MODIFIED:20081118T012657Z DTSTAMP:20081118T012634Z UID:20100101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day Holiday DTSTART;VALUE=DATE:20050103 RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=1 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T013050Z LAST-MODIFIED:20081118T013102Z DTSTAMP:20081118T013050Z UID:20100607-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day Holiday DTSTART;VALUE=DATE:20050104 RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=2 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T012802Z LAST-MODIFIED:20081118T012811Z DTSTAMP:20081118T012802Z UID:20100402-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday DTSTART;VALUE=DATE:20100402 DTEND;VALUE=DATE:20100403 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T012817Z LAST-MODIFIED:20081118T012854Z DTSTAMP:20081118T012817Z UID:20100405-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday DTSTART;VALUE=DATE:20100405 DTEND;VALUE=DATE:20100406 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T014342Z LAST-MODIFIED:20081118T014404Z DTSTAMP:20081118T014342Z UID:20110422-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday DTSTART;VALUE=DATE:20110422 DTEND;VALUE=DATE:20110423 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T014406Z LAST-MODIFIED:20081118T014430Z DTSTAMP:20081118T014406Z UID:20110425-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday DTSTART;VALUE=DATE:20110425 DTEND;VALUE=DATE:20110426 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T015055Z LAST-MODIFIED:20081118T015123Z DTSTAMP:20081118T015055Z UID:20120406-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday DTSTART;VALUE=DATE:20120406 DTEND;VALUE=DATE:20120407 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T015128Z LAST-MODIFIED:20081118T015139Z DTSTAMP:20081118T015128Z UID:20120409-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday DTSTART;VALUE=DATE:20120409 DTEND;VALUE=DATE:20120410 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T015519Z LAST-MODIFIED:20081118T015535Z DTSTAMP:20081118T015519Z UID:20130329-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday DTSTART;VALUE=DATE:20130329 DTEND;VALUE=DATE:20130330 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T015540Z LAST-MODIFIED:20081118T015609Z DTSTAMP:20081118T015540Z UID:20130401-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday DTSTART;VALUE=DATE:20130401 DTEND;VALUE=DATE:20130402 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T020024Z LAST-MODIFIED:20081118T020127Z DTSTAMP:20081118T020105Z UID:20140418-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday DTSTART;VALUE=DATE:20140418 DTEND;VALUE=DATE:20140419 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T020135Z LAST-MODIFIED:20081118T020155Z DTSTAMP:20081118T020135Z UID:20140421-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday DTSTART;VALUE=DATE:20140421 DTEND;VALUE=DATE:20140422 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T020631Z LAST-MODIFIED:20081118T020647Z DTSTAMP:20081118T020631Z UID:20150403-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday DTSTART;VALUE=DATE:20150403 DTEND;VALUE=DATE:20150404 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T020717Z LAST-MODIFIED:20081118T020753Z DTSTAMP:20081118T020717Z UID:20150406-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday DTSTART;VALUE=DATE:20150406 DTEND;VALUE=DATE:20150407 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T021243Z LAST-MODIFIED:20081118T021253Z DTSTAMP:20081118T021243Z UID:20160325-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday DTSTART;VALUE=DATE:20160325 DTEND;VALUE=DATE:20160326 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081118T021257Z LAST-MODIFIED:20081118T021323Z DTSTAMP:20081118T021257Z UID:20160328-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday DTSTART;VALUE=DATE:20160328 DTEND;VALUE=DATE:20160329 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200154Z LAST-MODIFIED:20081119T200227Z DTSTAMP:20081119T200154Z UID:20081201-1-all-publicholidays-dol.govt.nz SUMMARY:Westland Anniversary Day (Monday nearest 1st December) DTSTART;VALUE=DATE:20051128 RRULE:FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200252Z LAST-MODIFIED:20081119T200304Z DTSTAMP:20081119T200252Z UID:20081201-2-all-publicholidays-dol.govt.nz SUMMARY:Chatham Islands Anniversary Day (Monday nearest 30th November) DTSTART;VALUE=DATE:20051128 RRULE:FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200321Z LAST-MODIFIED:20081119T200334Z DTSTAMP:20081119T200321Z UID:20090126-1-all-publicholidays-dol.govt.nz SUMMARY:Auckland Anniversary Day (Monday nearest 29th January) DTSTART;VALUE=DATE:20050131 RRULE:FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200350Z LAST-MODIFIED:20081119T200406Z DTSTAMP:20081119T200350Z UID:20090119-1-all-publicholidays-dol.govt.nz SUMMARY:Wellington Anniversary Day (Monday nearest 22nd January) DTSTART;VALUE=DATE:20050124 RRULE:FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200431Z LAST-MODIFIED:20081119T200443Z DTSTAMP:20081119T200431Z UID:20090119-2-all-publicholidays-dol.govt.nz SUMMARY:Southland Anniversary Day (Monday nearest 17th January) DTSTART;VALUE=DATE:20050117 RRULE:FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200519Z LAST-MODIFIED:20081119T200530Z DTSTAMP:20081119T200519Z UID:20090202-1-all-publicholidays-dol.govt.nz SUMMARY:Nelson Anniversary Day (Monday nearest 1st Feb) DTSTART;VALUE=DATE:20050131 RRULE:FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200607Z LAST-MODIFIED:20081119T200622Z DTSTAMP:20081119T200607Z UID:20090309-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day DTSTART;VALUE=DATE:20090309 DTEND;VALUE=DATE:20090310 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200640Z LAST-MODIFIED:20081119T200650Z DTSTAMP:20081119T200640Z UID:20090323-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day DTSTART;VALUE=DATE:20090323 DTEND;VALUE=DATE:20090324 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200759Z LAST-MODIFIED:20081119T200809Z DTSTAMP:20081119T200759Z UID:20091023-1-all-publicholidays-dol.govt.nz SUMMARY:Hawkes' Bay Anniversary Day (Friday before 4th Monday of October) DTSTART;VALUE=DATE:20051021 RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T200840Z LAST-MODIFIED:20081119T200928Z DTSTAMP:20081119T200840Z UID:20091102-1-all-publicholidays-dol.govt.nz SUMMARY:Marlborough Anniversary Day (Monday after 4th Monday of October) DTSTART;VALUE=DATE:20051031 RRULE:FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T201008Z LAST-MODIFIED:20081119T201040Z DTSTAMP:20081119T201008Z UID:20091113-1-all-publicholidays-dol.govt.nz SUMMARY:Canterbury Anniversary Day (Second Friday after the first Tuesday in November) DTSTART;VALUE=DATE:20051111 RRULE:FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T201140Z LAST-MODIFIED:20081119T201153Z DTSTAMP:20081119T201140Z UID:20090928-1-all-publicholidays-dol.govt.nz SUMMARY:South Canterbury Anniversary Day (4th Monday in September) DTSTART;VALUE=DATE:20050926 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=4MO TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T202108Z LAST-MODIFIED:20081119T202117Z DTSTAMP:20081119T202108Z UID:20100308-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day DTSTART;VALUE=DATE:20100308 DTEND;VALUE=DATE:20100309 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T202119Z LAST-MODIFIED:20081119T202125Z DTSTAMP:20081119T202119Z UID:20100322-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day DTSTART;VALUE=DATE:20100322 DTEND;VALUE=DATE:20100323 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T203128Z LAST-MODIFIED:20081119T203139Z DTSTAMP:20081119T203128Z UID:20110314-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day DTSTART;VALUE=DATE:20110314 DTEND;VALUE=DATE:20110315 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T203213Z LAST-MODIFIED:20081119T203247Z DTSTAMP:20081119T203213Z UID:20110321-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day DTSTART;VALUE=DATE:20110321 DTEND;VALUE=DATE:20110322 TRANSP:TRANSPARENT X-MOZ-GENERATION:1 END:VEVENT BEGIN:VEVENT CREATED:20081119T214936Z LAST-MODIFIED:20081119T214943Z DTSTAMP:20081119T214936Z UID:20120312-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day DTSTART;VALUE=DATE:20120312 DTEND;VALUE=DATE:20120313 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T215004Z LAST-MODIFIED:20081119T215012Z DTSTAMP:20081119T215004Z UID:20120326-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day DTSTART;VALUE=DATE:20120326 DTEND;VALUE=DATE:20120327 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T215900Z LAST-MODIFIED:20081119T215926Z DTSTAMP:20081119T215900Z UID:20130311-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day DTSTART;VALUE=DATE:20130311 DTEND;VALUE=DATE:20130312 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T215951Z LAST-MODIFIED:20081119T215958Z DTSTAMP:20081119T215951Z UID:20130325-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day DTSTART;VALUE=DATE:20130325 DTEND;VALUE=DATE:20130326 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T220720Z LAST-MODIFIED:20081119T220732Z DTSTAMP:20081119T220720Z UID:20140310-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day DTSTART;VALUE=DATE:20140310 DTEND;VALUE=DATE:20140311 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T220734Z LAST-MODIFIED:20081119T220743Z DTSTAMP:20081119T220734Z UID:20140324-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day DTSTART;VALUE=DATE:20140324 DTEND;VALUE=DATE:20140325 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T221413Z LAST-MODIFIED:20081119T221422Z DTSTAMP:20081119T221413Z UID:20150309-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day DTSTART;VALUE=DATE:20150309 DTEND;VALUE=DATE:20150310 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T221435Z LAST-MODIFIED:20081119T221446Z DTSTAMP:20081119T221435Z UID:20150323-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day DTSTART;VALUE=DATE:20150323 DTEND;VALUE=DATE:20150324 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T222143Z LAST-MODIFIED:20081119T222153Z DTSTAMP:20081119T222143Z UID:20160314-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day DTSTART;VALUE=DATE:20160314 DTEND;VALUE=DATE:20160315 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT CREATED:20081119T222159Z LAST-MODIFIED:20081119T222209Z DTSTAMP:20081119T222159Z UID:20160321-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day DTSTART;VALUE=DATE:20160321 DTEND;VALUE=DATE:20160322 TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0841-Spec-PROPPATCH-2.test0000644000000000000000000000216411446006434022020 0ustar # # Check for support of PROPPATCH method # # Convert the collection back to a calendar, change the displayname # again, set the calendar as transparent and remove the arbitrary property. # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEADER=User-agent: SpecTest PROPPATCH HEADER=Content-type: text/xml HEAD BEGINDATA User One's Transparent Calendar ENDDATA QUERY SELECT dav_displayname, is_calendar, is_addressbook, resourcetypes, modified > (current_timestamp - '5 minutes'::interval) AS changed_last_5m, schedule_transp FROM collection WHERE dav_name = '/user1/home/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0304-Chandler-PROPFIND-2.test0000644000000000000000000000124111446006434022514 0ustar # # Chandler expects the calendar to be there. After confirming # that it wants to find out what privileges are available. # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=Depth: 0 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Chandler/0.7alpha4 (Linux) HEAD BEGINDATA ENDDATA # REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ # REPLACE=/^ETag: "[0-9a-f]{32}"/ETag: "deadbeefcafef00ddeadbeefcafefeed"/ davical-1.1.1/testing/tests/regression-suite/0107-Evo-REPORT-1.result0000644000000000000000000000151611732222755021667 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "060f992b9ee715662940929074dc1f57" Content-Length: 530 Content-Type: text/xml; charset="utf-8" /user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK /user1/home/20061101T073004Z.ics "c3658901fd4689d4a1e1d6f08601ef4f" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/1101-REPORT-sync-changed.test0000644000000000000000000000102211743152027022763 0ustar # # Check for support of REPORT sync-collection with no sync-token # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-agent: sync-collection changes REPORT HEADER=Content-type: text/xml HEAD # Should be no changes - we just requested this, after all. # BEGINDATA data:,36 ENDDATA davical-1.1.1/testing/tests/regression-suite/0846-Spec-PROPPATCH-calendar.test0000644000000000000000000000201111446006434023424 0ustar # # Check for support of PROPPATCH method # # Try (and fail) to set the collection to be both an addressbook and a calendar. # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEADER=User-agent: SpecTest PROPPATCH HEADER=Content-type: text/xml HEAD BEGINDATA User 1's Calendaranza ENDDATA QUERY SELECT dav_displayname, is_addressbook, is_calendar, resourcetypes, modified > (current_timestamp - '5 minutes'::interval) AS changed_last_5m, schedule_transp FROM collection WHERE dav_name = '/user1/home/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0828-Spec-PROPFIND-5.test0000644000000000000000000000106611446006434021711 0ustar # # Testing for Spec compliance. PROPFIND on a calendar collection. # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# BEGINDATA ENDDATA # REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ davical-1.1.1/testing/tests/regression-suite/0208-Moz-REPORT-5.test0000644000000000000000000000162511446006434021347 0ustar # # Request a REPORT including the event we just added along with a bunch of # others. # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20061108 Calendar/0.4a1 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Keep-Alive: 300 HEADER=Content-Type: text/xml HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0886-REPORT-freebusy.result0000644000000000000000000001061011732472145022635 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 2752 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:correct DTEND:correct FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061223T000000Z/20061223T020000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070629T040000Z/20070629T054500Z END:VFREEBUSY END:VCALENDAR Dav Name: >/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics< a) start: >20061102T183000Z< b)finish: >20061102T203000Z< rrule: >FREQ=MONTHLY< status: >CONFIRMED< Dav Name: >/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics< a) start: >20061101T210000Z< b)finish: >20061101T220000Z< rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH< status: >NULL< Dav Name: >/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics< a) start: >20061103T030000Z< b)finish: >20061103T044500Z< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< status: >CONFIRMED< Dav Name: >/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics< a) start: >20061223T030000Z< b)finish: >20061223T050000Z< rrule: >NULL< status: >CONFIRMED< Dav Name: >/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics< a) start: >20061223T060000Z< b)finish: >20061223T080000Z< rrule: >NULL< status: >TENTATIVE< Dav Name: >/user1/home/20061101T073004Z.ics< a) start: >20061031T210000Z< b)finish: >20061031T220000Z< rrule: >NULL< status: >NULL< Dav Name: >/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics< a) start: >20061101T233000Z< b)finish: >20061102T003000Z< rrule: >NULL< status: >NULL< davical-1.1.1/testing/tests/regression-suite/0013-Mulberry-PROPFIND-5.test0000644000000000000000000000056411446006434022604 0ustar # # Before creating a calendar in Mulberry, we should be able # to do a PROPFIND and it should not be there. TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=Depth: 1 HEADER=Content-Type: text/xml; charset=utf-8 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/2003-REPORT-expanded-nz-holidays-2007.test0000644000000000000000000000166711633117640025056 0ustar # # Test expanded report for NZ public holidays for 2007 # TYPE=REPORT URL=http://regression.host/caldav.php/user4/nz_holidays/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dtstart, rrule, summary FROM calendar_item WHERE dav_name ~ '^/user4/nz_holidays/' AND (rrule IS NOT NULL OR (dtstart >= '20061231T110000Z' AND dtstart < '20071231T110000Z') ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/0924-MOVE.result0000644000000000000000000000101611732223646020537 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" cd_collection: >1566< cd_user_no: >10< ci_collection: >1566< ci_user_no: >10< data_name: >/user1/anotherone/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< item_name: >/user1/anotherone/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< davical-1.1.1/testing/tests/regression-suite/0870-Principal-PROPFIND.result0000644000000000000000000000470511633117640023135 0ustar /~user1/ /assistant1/ /teamclient1/ 20090531T120000Z User 1 httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0103-Evo-GET-1.result0000644000000000000000000000210311732222752021255 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Etag: "2c32a2f8aba853654eb17fe037a4db4d" Content-Length: 780 Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061102T090217Z DTSTART;TZID=New Zealand Standard Time:20061102T123000 DURATION:PT1H LAST-MODIFIED:20061104T002921Z SEQUENCE:1 SUMMARY:Lunch with David UID:5A55230C8866CA8D3D325F3A@CA1CBED546AAE36FF3BC722E END:VEVENT END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0247-Moz-PROPFIND.result0000644000000000000000000001100211732223017021737 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "daf491bbb56b3cc971668f69638f25d0" Content-Length: 4293 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics text/calendar "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics text/calendar "c3658901fd4689d4a1e1d6f08601ef4f" HTTP/1.1 200 OK /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics text/calendar "a1c6404d61190f9574e2bfd69383f144" HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics text/calendar "08a435c2abaf38f4a50a997343c098a7" HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics text/calendar "5def8ae2b20893a1c7f4dbaeb008f2f1" HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics text/calendar "ac90acd649c25070b1a2a17fb31a105a" HTTP/1.1 200 OK /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics text/calendar "509b0f0d8a3363379f9f5727f5dd74a0" HTTP/1.1 200 OK /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics text/calendar "cb3d9dc3e8c157f53eba3ea0e1e0f146" HTTP/1.1 200 OK /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics text/calendar "00ad5eb1eb5507884710b0b66aa5d5c4" HTTP/1.1 200 OK /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics text/calendar "a2990674708634a311bb98a59865ca50" HTTP/1.1 200 OK /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics text/calendar "e8060931f30c1798ac58ffbe4ec0bffc" HTTP/1.1 200 OK /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics text/calendar "8f581a053df6d833254756dfd7553d37" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0913-extended-MKCOL.test0000644000000000000000000000122011446006434022064 0ustar # # Extended MKCOL test - basic test # TYPE=MKCOL URL=http://mycaldav/caldav.php/User%20Six/basic%20%22Extended%20MKCOL%22/ HEADER=Content-Type: text/xml AUTH=User Six:user6 HEAD BEGINDATA Extended MKCOL Calendar ENDDATA QUERY SELECT dav_name, user_no, parent_container, dav_displayname, is_calendar, public_events_only, is_addressbook FROM collection WHERE dav_name ~ '/User Six/basic'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0826-Spec-PROPFIND.test0000644000000000000000000000124711446006434021546 0ustar # # Testing for Spec compliance. PROPFIND on the root # TYPE=PROPFIND URL=http://mycaldav/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0885-GET-freebusy.result0000644000000000000000000003717011633117640022246 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 14720 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20060930T110000Z DTEND:20070630T115959Z FREEBUSY:20061001T210000Z/20061001T220000Z FREEBUSY:20061002T210000Z/20061002T220000Z FREEBUSY:20061003T210000Z/20061003T220000Z FREEBUSY:20061004T210000Z/20061004T220000Z FREEBUSY:20061005T210000Z/20061005T220000Z FREEBUSY:20061006T210000Z/20061006T220000Z FREEBUSY:20061007T210000Z/20061007T220000Z FREEBUSY:20061008T210000Z/20061008T220000Z FREEBUSY:20061009T210000Z/20061009T220000Z FREEBUSY:20061010T210000Z/20061010T220000Z FREEBUSY:20061011T210000Z/20061011T220000Z FREEBUSY:20061012T210000Z/20061012T220000Z FREEBUSY:20061013T210000Z/20061013T220000Z FREEBUSY:20061014T210000Z/20061014T220000Z FREEBUSY:20061015T210000Z/20061015T220000Z FREEBUSY:20061016T210000Z/20061016T220000Z FREEBUSY:20061017T210000Z/20061017T220000Z FREEBUSY:20061018T210000Z/20061018T220000Z FREEBUSY:20061019T210000Z/20061019T220000Z FREEBUSY:20061020T210000Z/20061020T220000Z FREEBUSY:20061021T210000Z/20061021T220000Z FREEBUSY:20061022T210000Z/20061022T220000Z FREEBUSY:20061023T210000Z/20061023T220000Z FREEBUSY:20061024T210000Z/20061024T220000Z FREEBUSY:20061025T210000Z/20061025T220000Z FREEBUSY:20061026T210000Z/20061026T220000Z FREEBUSY:20061027T210000Z/20061027T220000Z FREEBUSY:20061028T210000Z/20061028T220000Z FREEBUSY:20061029T220000Z/20061029T230000Z FREEBUSY:20061030T220000Z/20061030T230000Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061031T220000Z/20061031T230000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T220000Z/20061101T230000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061102T220000Z/20061102T230000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061103T220000Z/20061103T230000Z FREEBUSY:20061104T220000Z/20061104T230000Z FREEBUSY:20061105T220000Z/20061105T230000Z FREEBUSY:20061106T220000Z/20061106T230000Z FREEBUSY:20061107T220000Z/20061107T230000Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061108T220000Z/20061108T230000Z FREEBUSY:20061109T220000Z/20061109T230000Z FREEBUSY:20061110T220000Z/20061110T230000Z FREEBUSY:20061111T220000Z/20061111T230000Z FREEBUSY:20061112T220000Z/20061112T230000Z FREEBUSY:20061113T220000Z/20061113T230000Z FREEBUSY:20061114T220000Z/20061114T230000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061115T220000Z/20061115T230000Z FREEBUSY:20061116T220000Z/20061116T230000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061117T220000Z/20061117T230000Z FREEBUSY:20061118T220000Z/20061118T230000Z FREEBUSY:20061119T220000Z/20061119T230000Z FREEBUSY:20061120T220000Z/20061120T230000Z FREEBUSY:20061121T220000Z/20061121T230000Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061122T220000Z/20061122T230000Z FREEBUSY:20061123T220000Z/20061123T230000Z FREEBUSY:20061124T220000Z/20061124T230000Z FREEBUSY:20061125T220000Z/20061125T230000Z FREEBUSY:20061126T220000Z/20061126T230000Z FREEBUSY:20061127T220000Z/20061127T230000Z FREEBUSY:20061128T220000Z/20061128T230000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061129T220000Z/20061129T230000Z FREEBUSY:20061130T220000Z/20061130T230000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061201T220000Z/20061201T230000Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061202T220000Z/20061202T230000Z FREEBUSY:20061203T220000Z/20061203T230000Z FREEBUSY:20061204T220000Z/20061204T230000Z FREEBUSY:20061205T220000Z/20061205T230000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061206T220000Z/20061206T230000Z FREEBUSY:20061207T220000Z/20061207T230000Z FREEBUSY:20061208T220000Z/20061208T230000Z FREEBUSY:20061209T220000Z/20061209T230000Z FREEBUSY:20061210T220000Z/20061210T230000Z FREEBUSY:20061211T220000Z/20061211T230000Z FREEBUSY:20061212T220000Z/20061212T230000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061213T220000Z/20061213T230000Z FREEBUSY:20061214T220000Z/20061214T230000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061215T220000Z/20061215T230000Z FREEBUSY:20061216T220000Z/20061216T230000Z FREEBUSY:20061217T220000Z/20061217T230000Z FREEBUSY:20061218T220000Z/20061218T230000Z FREEBUSY:20061219T220000Z/20061219T230000Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061220T220000Z/20061220T230000Z FREEBUSY:20061221T220000Z/20061221T230000Z FREEBUSY:20061222T220000Z/20061222T230000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061223T220000Z/20061223T230000Z FREEBUSY:20061224T220000Z/20061224T230000Z FREEBUSY:20061225T220000Z/20061225T230000Z FREEBUSY:20061226T220000Z/20061226T230000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061227T220000Z/20061227T230000Z FREEBUSY:20061228T220000Z/20061228T230000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20061229T220000Z/20061229T230000Z FREEBUSY:20061230T220000Z/20061230T230000Z FREEBUSY:20061231T220000Z/20061231T230000Z FREEBUSY:20070101T220000Z/20070101T230000Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070102T220000Z/20070102T230000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070103T220000Z/20070103T230000Z FREEBUSY:20070104T220000Z/20070104T230000Z FREEBUSY:20070105T220000Z/20070105T230000Z FREEBUSY:20070106T220000Z/20070106T230000Z FREEBUSY:20070107T220000Z/20070107T230000Z FREEBUSY:20070108T220000Z/20070108T230000Z FREEBUSY:20070109T220000Z/20070109T230000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070110T220000Z/20070110T230000Z FREEBUSY:20070111T220000Z/20070111T230000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070112T220000Z/20070112T230000Z FREEBUSY:20070113T220000Z/20070113T230000Z FREEBUSY:20070114T220000Z/20070114T230000Z FREEBUSY:20070115T220000Z/20070115T230000Z FREEBUSY:20070116T220000Z/20070116T230000Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070117T220000Z/20070117T230000Z FREEBUSY:20070118T220000Z/20070118T230000Z FREEBUSY:20070119T220000Z/20070119T230000Z FREEBUSY:20070120T220000Z/20070120T230000Z FREEBUSY:20070121T220000Z/20070121T230000Z FREEBUSY:20070122T220000Z/20070122T230000Z FREEBUSY:20070123T220000Z/20070123T230000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070124T220000Z/20070124T230000Z FREEBUSY:20070125T220000Z/20070125T230000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070126T220000Z/20070126T230000Z FREEBUSY:20070127T220000Z/20070127T230000Z FREEBUSY:20070128T220000Z/20070128T230000Z FREEBUSY:20070129T220000Z/20070129T230000Z FREEBUSY:20070130T220000Z/20070130T230000Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070131T220000Z/20070131T230000Z FREEBUSY:20070201T220000Z/20070201T230000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070202T220000Z/20070202T230000Z FREEBUSY:20070203T220000Z/20070203T230000Z FREEBUSY:20070204T220000Z/20070204T230000Z FREEBUSY:20070205T220000Z/20070205T230000Z FREEBUSY:20070206T220000Z/20070206T230000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070207T220000Z/20070207T230000Z FREEBUSY:20070208T220000Z/20070208T230000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070209T220000Z/20070209T230000Z FREEBUSY:20070210T220000Z/20070210T230000Z FREEBUSY:20070211T220000Z/20070211T230000Z FREEBUSY:20070212T220000Z/20070212T230000Z FREEBUSY:20070213T220000Z/20070213T230000Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070214T220000Z/20070214T230000Z FREEBUSY:20070215T220000Z/20070215T230000Z FREEBUSY:20070216T220000Z/20070216T230000Z FREEBUSY:20070217T220000Z/20070217T230000Z FREEBUSY:20070218T220000Z/20070218T230000Z FREEBUSY:20070219T220000Z/20070219T230000Z FREEBUSY:20070220T220000Z/20070220T230000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070221T220000Z/20070221T230000Z FREEBUSY:20070222T220000Z/20070222T230000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070223T220000Z/20070223T230000Z FREEBUSY:20070224T220000Z/20070224T230000Z FREEBUSY:20070225T220000Z/20070225T230000Z FREEBUSY:20070226T220000Z/20070226T230000Z FREEBUSY:20070227T220000Z/20070227T230000Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070228T220000Z/20070228T230000Z FREEBUSY:20070301T220000Z/20070301T230000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070302T220000Z/20070302T230000Z FREEBUSY:20070303T220000Z/20070303T230000Z FREEBUSY:20070304T220000Z/20070304T230000Z FREEBUSY:20070305T220000Z/20070305T230000Z FREEBUSY:20070306T220000Z/20070306T230000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070307T220000Z/20070307T230000Z FREEBUSY:20070308T220000Z/20070308T230000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070309T220000Z/20070309T230000Z FREEBUSY:20070310T220000Z/20070310T230000Z FREEBUSY:20070311T210000Z/20070311T220000Z FREEBUSY:20070312T210000Z/20070312T220000Z FREEBUSY:20070313T210000Z/20070313T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070315T210000Z/20070315T220000Z FREEBUSY:20070316T210000Z/20070316T220000Z FREEBUSY:20070317T210000Z/20070317T220000Z FREEBUSY:20070318T210000Z/20070318T220000Z FREEBUSY:20070319T210000Z/20070319T220000Z FREEBUSY:20070320T210000Z/20070320T220000Z FREEBUSY:20070321T210000Z/20070321T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070322T210000Z/20070322T220000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070323T210000Z/20070323T220000Z FREEBUSY:20070324T210000Z/20070324T220000Z FREEBUSY:20070325T210000Z/20070325T220000Z FREEBUSY:20070326T210000Z/20070326T220000Z FREEBUSY:20070327T210000Z/20070327T220000Z FREEBUSY:20070328T210000Z/20070328T220000Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070329T210000Z/20070329T220000Z FREEBUSY:20070330T210000Z/20070330T220000Z FREEBUSY:20070331T210000Z/20070331T220000Z FREEBUSY:20070401T210000Z/20070401T220000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070402T210000Z/20070402T220000Z FREEBUSY:20070403T210000Z/20070403T220000Z FREEBUSY:20070404T210000Z/20070404T220000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070405T210000Z/20070405T220000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070406T210000Z/20070406T220000Z FREEBUSY:20070407T210000Z/20070407T220000Z FREEBUSY:20070408T210000Z/20070408T220000Z FREEBUSY:20070409T210000Z/20070409T220000Z FREEBUSY:20070410T210000Z/20070410T220000Z FREEBUSY:20070411T210000Z/20070411T220000Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070412T210000Z/20070412T220000Z FREEBUSY:20070413T210000Z/20070413T220000Z FREEBUSY:20070414T210000Z/20070414T220000Z FREEBUSY:20070415T210000Z/20070415T220000Z FREEBUSY:20070416T210000Z/20070416T220000Z FREEBUSY:20070417T210000Z/20070417T220000Z FREEBUSY:20070418T210000Z/20070418T220000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070419T210000Z/20070419T220000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070420T210000Z/20070420T220000Z FREEBUSY:20070421T210000Z/20070421T220000Z FREEBUSY:20070422T210000Z/20070422T220000Z FREEBUSY:20070423T210000Z/20070423T220000Z FREEBUSY:20070424T210000Z/20070424T220000Z FREEBUSY:20070425T210000Z/20070425T220000Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070426T210000Z/20070426T220000Z FREEBUSY:20070427T210000Z/20070427T220000Z FREEBUSY:20070428T210000Z/20070428T220000Z FREEBUSY:20070429T210000Z/20070429T220000Z FREEBUSY:20070430T210000Z/20070430T220000Z FREEBUSY:20070501T210000Z/20070501T220000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070502T210000Z/20070502T220000Z FREEBUSY:20070503T210000Z/20070503T220000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070504T210000Z/20070504T220000Z FREEBUSY:20070505T210000Z/20070505T220000Z FREEBUSY:20070506T210000Z/20070506T220000Z FREEBUSY:20070507T210000Z/20070507T220000Z FREEBUSY:20070508T210000Z/20070508T220000Z FREEBUSY:20070509T210000Z/20070509T220000Z FREEBUSY:20070510T210000Z/20070510T220000Z FREEBUSY:20070511T210000Z/20070511T220000Z FREEBUSY:20070512T210000Z/20070512T220000Z FREEBUSY:20070513T210000Z/20070513T220000Z FREEBUSY:20070514T210000Z/20070514T220000Z FREEBUSY:20070515T210000Z/20070515T220000Z FREEBUSY:20070516T210000Z/20070516T220000Z FREEBUSY:20070517T210000Z/20070517T220000Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070518T210000Z/20070518T220000Z FREEBUSY:20070519T210000Z/20070519T220000Z FREEBUSY:20070520T210000Z/20070520T220000Z FREEBUSY:20070521T210000Z/20070521T220000Z FREEBUSY:20070522T210000Z/20070522T220000Z FREEBUSY:20070523T210000Z/20070523T220000Z FREEBUSY:20070524T210000Z/20070524T220000Z FREEBUSY:20070525T210000Z/20070525T220000Z FREEBUSY:20070526T210000Z/20070526T220000Z FREEBUSY:20070527T210000Z/20070527T220000Z FREEBUSY:20070528T210000Z/20070528T220000Z FREEBUSY:20070529T210000Z/20070529T220000Z FREEBUSY:20070530T210000Z/20070530T220000Z FREEBUSY:20070531T210000Z/20070531T220000Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070601T210000Z/20070601T220000Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070602T210000Z/20070602T220000Z FREEBUSY:20070603T210000Z/20070603T220000Z FREEBUSY:20070604T210000Z/20070604T220000Z FREEBUSY:20070605T210000Z/20070605T220000Z FREEBUSY:20070606T210000Z/20070606T220000Z FREEBUSY:20070607T210000Z/20070607T220000Z FREEBUSY:20070608T210000Z/20070608T220000Z FREEBUSY:20070609T210000Z/20070609T220000Z FREEBUSY:20070610T210000Z/20070610T220000Z FREEBUSY:20070611T210000Z/20070611T220000Z FREEBUSY:20070612T210000Z/20070612T220000Z FREEBUSY:20070613T210000Z/20070613T220000Z FREEBUSY:20070614T210000Z/20070614T220000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070615T210000Z/20070615T220000Z FREEBUSY:20070616T210000Z/20070616T220000Z FREEBUSY:20070617T210000Z/20070617T220000Z FREEBUSY:20070618T210000Z/20070618T220000Z FREEBUSY:20070619T210000Z/20070619T220000Z FREEBUSY:20070620T210000Z/20070620T220000Z FREEBUSY:20070621T210000Z/20070621T220000Z FREEBUSY:20070622T210000Z/20070622T220000Z FREEBUSY:20070623T210000Z/20070623T220000Z FREEBUSY:20070624T210000Z/20070624T220000Z FREEBUSY:20070625T210000Z/20070625T220000Z FREEBUSY:20070626T210000Z/20070626T220000Z FREEBUSY:20070627T210000Z/20070627T220000Z FREEBUSY:20070628T210000Z/20070628T220000Z FREEBUSY:20070629T040000Z/20070629T054500Z FREEBUSY:20070629T210000Z/20070629T220000Z FREEBUSY:20070630T210000Z/20070630T220000Z END:VFREEBUSY END:VCALENDAR finish: >20061102T203000Z< rrule: >FREQ=MONTHLY< start: >20061102T183000Z< status: >CONFIRMED< finish: >20061103T044500Z< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< start: >20061103T030000Z< status: >CONFIRMED< finish: >20061223T050000Z< rrule: >NULL< start: >20061223T030000Z< status: >CONFIRMED< finish: >20061223T080000Z< rrule: >NULL< start: >20061223T060000Z< status: >TENTATIVE< finish: >20060101T230000Z< rrule: >FREQ=DAILY;INTERVAL=1;COUNT=1000< start: >20060101T220000Z< status: >NULL< finish: >20061031T220000Z< rrule: >NULL< start: >20061031T210000Z< status: >NULL< finish: >20061101T220000Z< rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH< start: >20061101T210000Z< status: >NULL< finish: >20061102T003000Z< rrule: >NULL< start: >20061101T233000Z< status: >NULL< davical-1.1.1/testing/tests/regression-suite/0919-PROPFIND-supported-stuff.result0000644000000000000000000000374011732223642024370 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "98ceb8bb48fbdd547226d0b28aadd942" Content-Length: 1699 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/.in/ User 1 Inbox text/calendar HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0232-Moz-PROPFIND.result0000644000000000000000000000122711732223007021740 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "334c8abc0ac73261cdbf963fc7269d76" Content-Length: 347 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0943-REPORT-principal-search-property-set.test0000644000000000000000000000036711446006434026347 0ustar # # Do a principal-search-property-set REPORT request TYPE=REPORT URL=http://regression.host/caldav.php/ HEAD HEADER=Content-Type: text/xml BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0209-Moz-PUT-CONFIDENTIAL.test0000644000000000000000000000274611446006434022505 0ustar # # PUT a confidential item in the calendar which we won't be able to see # as a different user (later). # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a2pre) Gecko/20061222 Calendar/3.0a1 HEADER=Accept: text/html,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T032350Z LAST-MODIFIED:20061223T033144Z DTSTAMP:20061223T033144Z UID:9d050be7-8a02-4355-8ed3-02a9fc5f473f SUMMARY:Confidential Event PRIORITY:0 STATUS:CONFIRMED CLASS:CONFIDENTIAL DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T160000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T180000 X-MOZ-LOCATIONPATH:9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics LOCATION:In a confidential place END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0022-Mulberry-PUT-5.test0000644000000000000000000000163111446006434022027 0ustar # # PUT another event into the resource2 calendar so we can DELETE it # TYPE=PUT URL=http://mycaldav/caldav.php/resource2/home/27D2201A83F0CD2EA9ECEBB588F796A7-0.ics HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061121T233700Z DTSTART;TZID=New Zealand Standard Time:20061031T100000 DURATION:PT3H SUMMARY:Resource 2 to be deleted UID:5C50D66788218BF2180E0C7C@D76FAF7B10D9E8D2D41F779C END:VEVENT END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0103-Evo-GET-1.test0000644000000000000000000000026511446006434020724 0ustar # # Now we GET the entry that was in the report. # TYPE=GET URL=http://mycaldav/caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics HEADER=User-Agent: Evolution/1.8.1 HEAD davical-1.1.1/testing/tests/regression-suite/0402-Cadaver-GET-1.result0000644000000000000000000000211311633117640022073 0ustar BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VEVENT UID:20061101T073000Z-10468-1000-1-7@ubu DTSTAMP:20061101T073000Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T100000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T110000 SUMMARY:A Meeting X-EVOLUTION-CALDAV-HREF:http: //user1@mycaldav/caldav.php/user1/home/20061101T073004Z.ics BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:A Meeting END:VALARM END:VEVENT BEGIN:VTIMEZONE TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/Upgrade-Database.result0000644000000000000000000000022511643270616022467 0ustar Supported locales updated. Updated view: dav_principal.sql applied. CalDAV functions updated. RRULE functions updated. Database permissions updated. davical-1.1.1/testing/tests/regression-suite/2000-REPORT-expanded-nz-holidays-2005.result0000644000000000000000000004275711732476441025424 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "1ede6102fc1fe7d9d94f0e8f11fe6e42" Content-Length: 13870 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/nz_holidays/20081226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225121Z LAST-MODIFIED:20081117T225144Z DTSTAMP:20081117T225121Z UID:20081226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051226 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225212Z LAST-MODIFIED:20081117T230337Z DTSTAMP:20081117T225212Z UID:20090101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20050101 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081225-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T224951Z LAST-MODIFIED:20081117T235108Z DTSTAMP:20081117T224951Z UID:20081225-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20051225 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090206-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235224Z LAST-MODIFIED:20081120T002639Z DTSTAMP:20081117T235224Z UID:20090206-1-all-publicholidays-dol.govt.nz SUMMARY:Waitangi Day TRANSP:TRANSPARENT X-MOZ-GENERATION:4 DTSTART;VALUE=DATE:20050206 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090425-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011910Z LAST-MODIFIED:20081120T001537Z DTSTAMP:20081118T011910Z UID:20090425-1-all-publicholidays-dol.govt.nz SUMMARY:ANZAC Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20050425 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011947Z LAST-MODIFIED:20081118T012009Z DTSTAMP:20081118T011947Z UID:20090601-1-all-publicholidays-dol.govt.nz SUMMARY:Queen's Birthday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050606 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091026-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012125Z LAST-MODIFIED:20081118T012150Z DTSTAMP:20081118T012125Z UID:20091026-1-all-publicholidays-dol.govt.nz SUMMARY:Labour Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051024 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235121Z LAST-MODIFIED:20081118T012314Z DTSTAMP:20081117T235121Z UID:20090102-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050102 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012344Z LAST-MODIFIED:20081118T012529Z DTSTAMP:20081118T012344Z UID:20091226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day Holiday TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20051227 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091228-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012537Z LAST-MODIFIED:20081118T012606Z DTSTAMP:20081118T012537Z UID:20091228-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051226 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012634Z LAST-MODIFIED:20081118T012657Z DTSTAMP:20081118T012634Z UID:20100101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050103 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100607-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T013050Z LAST-MODIFIED:20081118T013102Z DTSTAMP:20081118T013050Z UID:20100607-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050104 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200154Z LAST-MODIFIED:20081119T200227Z DTSTAMP:20081119T200154Z UID:20081201-1-all-publicholidays-dol.govt.nz SUMMARY:Westland Anniversary Day (Monday nearest 1st December) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051128 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200252Z LAST-MODIFIED:20081119T200304Z DTSTAMP:20081119T200252Z UID:20081201-2-all-publicholidays-dol.govt.nz SUMMARY:Chatham Islands Anniversary Day (Monday nearest 30th November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051128 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090126-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200321Z LAST-MODIFIED:20081119T200334Z DTSTAMP:20081119T200321Z UID:20090126-1-all-publicholidays-dol.govt.nz SUMMARY:Auckland Anniversary Day (Monday nearest 29th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050131 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200350Z LAST-MODIFIED:20081119T200406Z DTSTAMP:20081119T200350Z UID:20090119-1-all-publicholidays-dol.govt.nz SUMMARY:Wellington Anniversary Day (Monday nearest 22nd January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050124 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200431Z LAST-MODIFIED:20081119T200443Z DTSTAMP:20081119T200431Z UID:20090119-2-all-publicholidays-dol.govt.nz SUMMARY:Southland Anniversary Day (Monday nearest 17th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050117 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090202-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200519Z LAST-MODIFIED:20081119T200530Z DTSTAMP:20081119T200519Z UID:20090202-1-all-publicholidays-dol.govt.nz SUMMARY:Nelson Anniversary Day (Monday nearest 1st Feb) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050131 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091023-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200759Z LAST-MODIFIED:20081119T200809Z DTSTAMP:20081119T200759Z UID:20091023-1-all-publicholidays-dol.govt.nz SUMMARY: Hawkes' Bay Anniversary Day (Friday before 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051021 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200840Z LAST-MODIFIED:20081119T200928Z DTSTAMP:20081119T200840Z UID:20091102-1-all-publicholidays-dol.govt.nz SUMMARY:Marlborough Anniversary Day (Monday after 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051031 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091113-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201008Z LAST-MODIFIED:20081119T201040Z DTSTAMP:20081119T201008Z UID:20091113-1-all-publicholidays-dol.govt.nz SUMMARY:Canterbury Anniversary Day (Second Friday after the first Tuesda y in November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051111 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090928-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201140Z LAST-MODIFIED:20081119T201153Z DTSTAMP:20081119T201140Z UID:20090928-1-all-publicholidays-dol.govt.nz SUMMARY:South Canterbury Anniversary Day (4th Monday in September) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050926 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Boxing Day< dtstart: >2005-01-01 00:00:00+13< rrule: >FREQ=YEARLY< summary: >New Year's Day< dtstart: >2005-12-25 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Christmas Day< dtstart: >2005-02-06 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Waitangi Day< dtstart: >2005-04-25 00:00:00+12< rrule: >FREQ=YEARLY< summary: >ANZAC Day< dtstart: >2005-06-06 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=6;BYDAY=1MO< summary: >Queen's Birthday< dtstart: >2005-10-24 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYDAY=4MO< summary: >Labour Day< dtstart: >2005-01-02 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Day after New Year's Day< dtstart: >2005-12-27 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=2< summary: >Boxing Day Holiday< dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=1< summary: >Christmas Day Holiday< dtstart: >2005-01-03 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=1< summary: >New Year's Day Holiday< dtstart: >2005-01-04 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=2< summary: >Day after New Year's Day Holiday< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28< summary: >Westland Anniversary Day (Monday nearest 1st December)< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29< summary: >Chatham Islands Anniversary Day (Monday nearest 30th November)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO< summary: >Auckland Anniversary Day (Monday nearest 29th January)< dtstart: >2005-01-24 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO< summary: >Wellington Anniversary Day (Monday nearest 22nd January)< dtstart: >2005-01-17 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO< summary: >Southland Anniversary Day (Monday nearest 17th January)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO< summary: >Nelson Anniversary Day (Monday nearest 1st Feb)< dtstart: >2005-10-21 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR< summary: >Hawkes' Bay Anniversary Day (Friday before 4th Monday of October)< dtstart: >2005-10-31 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58< summary: >Marlborough Anniversary Day (Monday after 4th Monday of October)< dtstart: >2005-11-11 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR< summary: >Canterbury Anniversary Day (Second Friday after the first Tuesday in November)< dtstart: >2005-09-26 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=9;BYDAY=4MO< summary: >South Canterbury Anniversary Day (4th Monday in September)< davical-1.1.1/testing/tests/regression-suite/0309-Chandler-PROPFIND-3.test0000644000000000000000000000067611446006434022535 0ustar # # At this point Chandler does a PROPFIND on .../.chandler/ (it just did # an OPTIONS on that). # Still Depth: 0 at this point... # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/.chandler/ HEADER=Depth: 0 HEADER=Content-Type: text/xml; charset=utf-8 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0827-Spec-PROPFIND.result0000644000000000000000000002774511633117640022121 0ustar / /assistant1/ /teamclient1/ 20090531T120000Z DAViCal CalDAV Server httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /user1/ /assistant1/ /teamclient1/ 20090531T120000Z User 1 httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /manager1/ 20090531T120000Z Manager 1 httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 403 Forbidden HTTP/1.1 404 Not Found /assistant1/ 20090531T120000Z Assistant 1 httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 403 Forbidden HTTP/1.1 404 Not Found /resource1/ /resmgr1/ 20090531T120000Z Resource 1 httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /resource2/ /resmgr1/ 20090531T120000Z Resource 2 httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0995-REPORT-not-supported.test0000644000000000000000000000044511633117640023277 0ustar # # Test REPORT response to a request for an unsupported report # TYPE=REPORT URL=http://regression.host/caldav.php/user1/home/ BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0212-Moz-PROPFIND.test0000644000000000000000000000124011446006434021377 0ustar # # Do a PROPFIND request without the trailing '/', to confirm that # we continue to see this as a collection... # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0400-Cadaver-OPTIONS-1.test0000644000000000000000000000022711446006434022252 0ustar # # Basic testing with Cadaver DAV client # TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: cadaver/0.22.3 neon/0.25.5 HEAD davical-1.1.1/testing/tests/regression-suite/0514-iCal-PUT-VTODO.test0000644000000000000000000000322211651212132021621 0ustar # # PUT an iCal style event into the database # TYPE=PUT URL=http://mycaldav/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/E6BC62F3-77C6-4FB7-BDD3-6882E2F1BE74.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:19901007T020000 RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU TZNAME:NZDT END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO PRIORITY:5 SEQUENCE:7 DESCRIPTION:Organise a party UID:E6BC62F3-77C6-4FB7-BDD3-6882E2F1BE74 DTSTART;TZID=Pacific/Auckland:20040101T120000 DTSTAMP:20071124T220925Z SUMMARY:Celebrate a significant birthday CREATED:20071124T220749Z X-APPLE-SORT-ORDER:2147483647 DUE;VALUE=DATE:20100217 END:VTODO END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due at time zone olson_name as due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/E6BC62F3-77C6-4FB7-BDD3-6882E2F1BE74.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user6.test0000644000000000000000000000512111651212132024341 0ustar # # PUT a calendar collection to user3 so we have some starting events # # There is no CalDAV defined behaviour for this. # TYPE=PUT URL=http://mycaldav/caldav.php/User%20Six/home/ HEADER=User-Agent: RSCDS Testing/0.9.x HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=User Six:user6 HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Europe/Helsinki BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 DTSTART:19810329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:EEST END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 DTSTART:19961027T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:EET END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:Bogus Nonstandard Time BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 DTSTART:19810329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:EEST END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 DTSTART:19961027T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:EET END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:3 TRANSP:OPAQUE UID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB DTSTART;TZID=Europe/Helsinki:20081025T133000 DTSTAMP:20081024T200745Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12 SUMMARY:Irregular meeting for User 3 CREATED:20081024T200734Z DTEND;TZID=Europe/Helsinki:20081025T143000 END:VEVENT BEGIN:VEVENT SEQUENCE:2 TRANSP:OPAQUE UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491 DTSTART;TZID=Europe/Helsinki:20081024T084500 DTSTAMP:20081025T112653Z SUMMARY:Dentist\'s Council meeting RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR CREATED:20081025T112648Z DTEND;TZID=Europe/Helsinki:20081024T113000 END:VEVENT BEGIN:VEVENT SEQUENCE:1 TRANSP:OPAQUE UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491 DTSTART;TZID=Bogus Nonstandard Time:20091017T084500 DTSTAMP:20081025T112653Z SUMMARY:Bogus Nonstandard Meeting RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR CREATED:20081025T112648Z DTEND;TZID=Bogus Nonstandard Time:20091017T113000 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS "A1 CalDAV DATA" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/User Six/home/' ENDQUERY QUERY SELECT count(*) FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '^/User Six/home/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0019-Mulberry-OPTIONS-3.test0000644000000000000000000000015611446006434022517 0ustar # # Do an OPTIONS request for an illegal path TYPE=OPTIONS URL=http://mycaldav/caldav.php/(admin|user1)/ HEAD davical-1.1.1/testing/tests/regression-suite/0955-DELTICKET.test0000644000000000000000000000150511751112167020745 0ustar # # DELTICKET the resource ticket we created back in 950... # TYPE=DELTICKET URL=http://regression.host/caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics HEADER=User-Agent: Ticket Spec Tests HEAD # Get the ticket we created earlier in 950... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 160 AND target_resource_id IS NOT NULL; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Ticket: ##ticket## HEADER=Depth: 0 BEGINDATA ENDDATA QUERY SELECT dav_owner_id, date_trunc( 'minute', ('55 seconds' + expires - current_timestamp)::interval(0)) AS timeout, privileges, target_collection_id, target_resource_id FROM access_ticket ENDQUERY # REPLACE=!\S{8}!Good Ticket ID! # REPLACE=!Ticket: \S{8}!Ticket:Good Ticket ID! davical-1.1.1/testing/tests/regression-suite/0541-iCal4-PROPFIND.result0000644000000000000000000000347111776301356022151 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "f37173f187202c0128fbd251363ade37" Content-Length: 1532 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ user1 home #0252D4FF 1 /caldav.php/user1/home/ BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Europe/Prague BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0850-Spec-REPORT-1.result0000644000000000000000000000277611732223577022051 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "680074e03fc52481b3dfabaa48d555a7" Content-Length: 1217 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/20061101T073004Z.ics "bcc402382688cb3e8e57379c757dbcb0" BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VEVENT UID:20061101T073000Z-10468-1000-1-7@ubu DTSTAMP:20061101T073000Z DTSTART;TZID=Pacific/Auckland:20061101T100000 DTEND;TZID=Pacific/Auckland:20061101T110000 SUMMARY:A Changed Meeting BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:A Meeting END:VALARM END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0920-PROPFIND-supported-stuff.result0000644000000000000000000000364111732223643024361 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "f4ace4415ef70e47f318ae774aaaac48" Content-Length: 1636 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/.out/ User 1 Outbox text/calendar HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0002-Mulberry-1.test0000644000000000000000000000060511446006434021353 0ustar # # After creating a calendar in Mulberry, we should be able # to do a PROPFIND and discover it. TYPE=PROPFIND URL=http://mycaldav/caldav.php/ HEADER=Depth: 1 HEADER=Content-Type: text/xml; charset=utf-8 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0605-Soho-MKCALENDAR.result0000644000000000000000000000044711732223541022275 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0948-MKTICKET.test0000644000000000000000000000136311446006434020654 0ustar # # MKTICKET request for a ticket on a collection # TYPE=MKTICKET URL=http://regression.host/caldav.php/user1/home/ HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA Second-3600 1 ENDDATA QUERY SELECT dav_owner_id, (expires - current_timestamp)::interval(0) AS timeout, privileges, target_collection_id, target_resource_id FROM access_ticket ENDQUERY REPLACE=!ETag: "\S+"!ETag: "Some good etag"! REPLACE=!\S{8}!Good Ticket ID! REPLACE=!Ticket: \S{8}!Ticket:Good Ticket ID! davical-1.1.1/testing/tests/regression-suite/0511-iCal-PROPFIND.result0000644000000000000000000000242711732223042022045 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "58ac2b1da600dda0e7b2e256a8dac271" Content-Length: 987 Content-Type: text/xml; charset="utf-8" / /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ /caldav.php/user1/.in/ /caldav.php/user1/.out/ /caldav.php/user1/.drop/ DAViCal CalDAV Server HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0241-Moz-REPORT.result0000644000000000000000000000074111732223014021530 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "07474790757c5e1b526ce4901889d6d3" Content-Length: 68 Content-Type: text/xml; charset="utf-8" dav_displayname: >User 1 Inbox< dav_name: >/user1/.in/< parent_container: >/user1/< davical-1.1.1/testing/tests/regression-suite/2100-REPORT-calquery-no-prop.result0000644000000000000000000001320711776267250024217 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "looks like an etag" Content-Length: 5464 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics text/calendar 999 Weekly Project Meeting Dow, 01 Jan 2000 00:00:00 GMT 20061120T041336Z "a1c6404d61190f9574e2bfd69383f144" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics text/calendar 956 Confidential Event Dow, 01 Jan 2000 00:00:00 GMT 20061223T032350Z "08a435c2abaf38f4a50a997343c098a7" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics text/calendar 970 Private Event Dow, 01 Jan 2000 00:00:00 GMT 20061223T031415Z "5def8ae2b20893a1c7f4dbaeb008f2f1" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics text/calendar 929 Tentative Event Dow, 01 Jan 2000 00:00:00 GMT 20061223T051646Z "ac90acd649c25070b1a2a17fb31a105a" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics text/calendar 769 Beer O'Clock Dow, 01 Jan 2000 00:00:00 GMT 20060511T043751Z "55f02f66966ee150320383803d1e0d34" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics text/calendar 313 Morning Mgmt Mtg Dow, 01 Jan 2000 00:00:00 GMT 20061024T115217Z "6f16959eee5c920b45548840b1e9ea19" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0927-MOVE.result0000644000000000000000000000100011751110644020525 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" cd_collection: >160< cd_user_no: >10< ci_collection: >160< ci_user_no: >10< data_name: >/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< item_name: >/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< davical-1.1.1/testing/tests/regression-suite/0916-PROPFIND-supported-stuff.result0000644000000000000000000000307211732223641024362 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "8d5e76c5b7b5676fc36e38cfad77c5db" Content-Length: 1277 Content-Type: text/xml; charset="utf-8" /caldav.php/ DAViCal CalDAV Server /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0539-iCal4-PROPFIND.test0000644000000000000000000000067311446006434021613 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPFIND URL=http://regression.host/ HEAD HEADER=User-Agent: DAVKit/4.0.1 (730); CalendarStore/4.0.1 (973); iCal/4.0.1 (1374); Mac OS X/10.6.2 (10C540) HEADER=Depth: 0 HEADER=Content-Type: text/xml # # Finding where to start from # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0202-Moz-REPORT-1.test0000644000000000000000000000153611446006434021336 0ustar # # Do a REPORT request (unauthenticated) TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEAD NOAUTH HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user4.result0000644000000000000000000000044111732222726024710 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0100-Evo-OPTIONS-1.result0000644000000000000000000000034211446006434021770 0ustar HTTP/1.1 401 Unauthorized Date: Dow, 01 Jan 2000 00:00:00 GMT WWW-Authenticate: Basic realm="DAViCal CalDAV Server" Content-Length: 40 Content-Type: text/plain; ; charset="utf-8" Please log in for access to this system.davical-1.1.1/testing/tests/regression-suite/0701-caldav4j-PUT.result0000644000000000000000000000316711732223543022125 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "7b70c8c0621b4daac509b8198e9e13d8" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR PRODID:-//OSAF//NONSGML Scoooby Server//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:America/New_York LAST-MODIFIED:20051220T211408Z BEGIN:STANDARD DTSTART:20051030T060000 TZOFFSETTO:-0500 TZOFFSETFROM:+0000 TZNAME:EST END:STANDARD BEGIN:DAYLIGHT DTSTART:20060402T010000 TZOFFSETTO:-0400 TZOFFSETFROM:-0500 TZNAME:EDT END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DTSTART;TZID=America/New_York:20060101T170000 SUMMARY:Daily_NY_5pm UID:DE916949-731D-4DAE-BA93-48A38B2B2030 SEQUENCE:4 DTSTAMP:20090515T095326Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1000 DURATION:PT1H END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< dav_etag: >7b70c8c0621b4daac509b8198e9e13d8< description: >NULL< dtend: >2006-01-01 18:00:00< dtstamp: >2009-05-15 09:53:26< dtstart: >2006-01-01 17:00:00< due: >NULL< last_modified: >2009-05-15 09:53:26< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=DAILY;INTERVAL=1;COUNT=1000< status: >NULL< summary: >Daily_NY_5pm< transp: >NULL< tz_id: >America/New_York< uid: >DE916949-731D-4DAE-BA93-48A38B2B2030< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0929-MOVE.test0000644000000000000000000000066111446006434020206 0ustar # # MOVE an event from one location to another # TYPE=MOVE URL=http://regression.host/caldav.php/user1/movedcalendar/ HEADER=User-Agent: RFC4918 Spec Tests HEADER=Destination: /caldav.php/user1/anotherone/ HEAD QUERY SELECT dav_name, user_no, (modified > (current_timestamp - '1 hour'::interval)) AS mod_in_last_hour, dav_etag FROM collection WHERE collection.dav_name ~ '(anotherone|movedcalendar)'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0941-GET-resource-denied.result0000644000000000000000000000173311732223662023466 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Etag: "bcc402382688cb3e8e57379c757dbcb0" Content-Length: 676 Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT SUMMARY:Busy CLASS:CONFIDENTIAL DTSTART;TZID=Pacific/Auckland:20061101T100000 DTEND;TZID=Pacific/Auckland:20061101T110000 UID:20061101T073000Z-10468-1000-1-7@ubu END:VEVENT END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0200-Moz-OPTIONS-1.test0000644000000000000000000000071011446006434021445 0ustar # # Do an initial OPTIONS request (unauthenticated) # ... actually, Mozilla Calendar doesn't do this, but no doubt they will. TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/home/ NOAUTH HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEAD davical-1.1.1/testing/tests/regression-suite/0542-iCal4-REPORT.result0000644000000000000000000000524211743776301021742 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "dc8a8dd8d55f610adb87fb0f9c1705cf" Content-Length: 2405 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/resource1/ Resource 1 /caldav.php/resource1/ mailto:resource1@example.net /caldav.php/resource1/ HTTP/1.1 200 OK /caldav.php/resource2/ Resource 2 /caldav.php/resource2/ mailto:resource2@example.net /caldav.php/resource2/ HTTP/1.1 200 OK /caldav.php/manager1/ Manager 1 /caldav.php/manager1/ mailto:manager1@example.net /caldav.php/manager1/ HTTP/1.1 200 OK /caldav.php/assistant1/ Assistant 1 /caldav.php/assistant1/ mailto:assistant1@example.net /caldav.php/assistant1/ HTTP/1.1 200 OK HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0544-iCLoud-PUT-encoded.test0000644000000000000000000000046511651212132022647 0ustar # # Testing with a process similar to iCal4 # TYPE=PUT URL=http://regression.host/caldav.php/user1/home/0544-gzip-PUT.ics HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/calendar HEADER=Content-Encoding: gzip # # DATA=0544-gzip-PUT davical-1.1.1/testing/tests/regression-suite/0309-Chandler-PROPFIND-4.result0000644000000000000000000001077411732223026023071 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "2e9da41da3450d7ccfe49fb10bb32c62" Content-Length: 4287 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ user1 home HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" Lunch with David HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics "c3658901fd4689d4a1e1d6f08601ef4f" A Meeting HTTP/1.1 200 OK /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics "a1c6404d61190f9574e2bfd69383f144" Weekly Project Meeting HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics "08a435c2abaf38f4a50a997343c098a7" Confidential Event HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics "5def8ae2b20893a1c7f4dbaeb008f2f1" Private Event HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics "ac90acd649c25070b1a2a17fb31a105a" Tentative Event HTTP/1.1 200 OK /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics "509b0f0d8a3363379f9f5727f5dd74a0" Incomplete, uncancelled HTTP/1.1 200 OK /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics "cb3d9dc3e8c157f53eba3ea0e1e0f146" 50% Complete, uncancelled HTTP/1.1 200 OK /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics "00ad5eb1eb5507884710b0b66aa5d5c4" Due 7/8/7 16:30, completed HTTP/1.1 200 OK /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics "a2990674708634a311bb98a59865ca50" A Cancelled Task, with a start and due date HTTP/1.1 200 OK /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" Morning Meeting HTTP/1.1 200 OK /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics "8f581a053df6d833254756dfd7553d37" Release 0.9.3 HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0971-REPORT-principal-match-prop.test0000644000000000000000000000116411633117640024476 0ustar # # principal-match REPORT on a principal-property (displayname) # TYPE=REPORT URL=http://mycaldav/caldav.php/ AUTH=user1:user1 HEADER=User-Agent: DAViCal Testing HEADER=Accept: text/xml HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 0 HEAD BEGINDATA User ENDDATA davical-1.1.1/testing/tests/regression-suite/0203-Moz-REPORT-2.test0000644000000000000000000000152511446006434021336 0ustar # # Do a REPORT request (authenticated) TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0904-PUT-bad-timezone.test0000644000000000000000000000313611651212132022445 0ustar # # PUT an event with a non-standard timezone # # There is no CalDAV defined behaviour for this. # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/PUT-eastern-time.ics HEADER=User-Agent: DAViCal Testing/0.9.x HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:(UTC-05:00) Eastern Time (US & Canada) BEGIN:STANDARD DTSTART:16010101T020000 TZOFFSETFROM:-0400 TZOFFSETTO:-0500 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11 END:STANDARD BEGIN:DAYLIGHT DTSTART:16010101T020000 TZOFFSETFROM:-0500 TZOFFSETTO:-0400 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT UID:PUT-eastern-time DTSTAMP:20101009T214524Z SUMMARY;LANGUAGE=en-US:Psychic's Anonymous Meeting DTSTART;TZID="(UTC-05:00) Eastern Time (US & Canada)":20110912T110000 DTEND;TZID="(UTC-05:00) Eastern Time (US & Canada)":20110912T113000 LOCATION:You will know when you arrive CREATED:20101010T014639 LAST-MODIFIED:20101010T014639 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/home/PUT-eastern-time.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0102-Evo-REPORT-1.result0000644000000000000000000000120211732222751021646 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "5d903e7367fc5fd8975cd2a2f12c94ef" Content-Length: 326 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0538-iCal4-PUT.result0000644000000000000000000000046711732223061021374 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "257b9df4aaf573a578af4aadd033abf4" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0561-iOS-PROPPATCH.test0000644000000000000000000000156711756041376021476 0ustar # # Testing the encoding of arbitrary XML into the database # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml HEADER=Prefer: return-minimal # # BEGINDATA /caldav.php/user1/home/1 insideinside2 ENDDATA QUERY SELECT property_name, property_value FROM property WHERE dav_name = '/user1/home/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0235-Moz-REPORT.test0000644000000000000000000000143511446006434021204 0ustar # # Check for REPORT calendar-query of VEVENT within time range # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8pre) Gecko/20071023 Sunbird/0.7 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0006-Mulberry-1.result0000644000000000000000000000152311732222736021721 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "11e359b5ecf3fe8b807545812243c418" Content-Length: 535 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0810-Spec-LOCK-1.test0000644000000000000000000000102711446006434021200 0ustar # # Test specification compliance for LOCK request on a collection # TYPE=LOCK URL=http://mycaldav/caldav.php/user1/home/ HEADER=Depth: 0 HEADER=Timeout: Infinite,Second-4100000000 HEADER=Content-type: text/xml; charset="utf-8" HEAD # # Include the data in-line # BEGINDATA http://andrew.mcmillan.net.nz/node/5/ ENDDATA davical-1.1.1/testing/tests/regression-suite/0225-Moz-OPTIONS-group-principal.test0000644000000000000000000000027111633117640024431 0ustar # # Do an OPTIONS request against the principal-URL of a group we are a member of # TYPE=OPTIONS URL=http://mycaldav/caldav.php/teamclient1/ HEADER=User-Agent: DAViCalTester/1.0 HEAD davical-1.1.1/testing/tests/regression-suite/0957-MKTICKET.result0000644000000000000000000000216711751115123021211 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Ticket:Good Ticket ID ETag: "Some good etag" Content-Length: 521 Content-Type: text/xml; charset="utf-8" Good Ticket ID /caldav.php/user2/ infinity infinity dav_owner_id: >1002< privileges: >000000000001001000100001< target_collection: >160< target_resource_i: >NULL< timeout: >01:00:00< dav_owner_id: >1003< privileges: >000000000001001011100111< target_collection: >161< target_resource_i: >NULL< timeout: >NULL< davical-1.1.1/testing/tests/regression-suite/2002-REPORT-expanded-nz-holidays-2006.result0000644000000000000000000004436111732223737025416 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "296a9ed871698eebf52782ec7839fc55" Content-Length: 14640 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/nz_holidays/20081226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225121Z LAST-MODIFIED:20081117T225144Z DTSTAMP:20081117T225121Z UID:20081226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20061226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225212Z LAST-MODIFIED:20081117T230337Z DTSTAMP:20081117T225212Z UID:20090101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20060101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081225-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T224951Z LAST-MODIFIED:20081117T235108Z DTSTAMP:20081117T224951Z UID:20081225-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20061225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090206-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235224Z LAST-MODIFIED:20081120T002639Z DTSTAMP:20081117T235224Z UID:20090206-1-all-publicholidays-dol.govt.nz SUMMARY:Waitangi Day TRANSP:TRANSPARENT X-MOZ-GENERATION:4 DTSTART;VALUE=DATE:20060206 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060206 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090425-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011910Z LAST-MODIFIED:20081120T001537Z DTSTAMP:20081118T011910Z UID:20090425-1-all-publicholidays-dol.govt.nz SUMMARY:ANZAC Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20060425 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060425 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011947Z LAST-MODIFIED:20081118T012009Z DTSTAMP:20081118T011947Z UID:20090601-1-all-publicholidays-dol.govt.nz SUMMARY:Queen's Birthday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060605 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060605 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091026-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012125Z LAST-MODIFIED:20081118T012150Z DTSTAMP:20081118T012125Z UID:20091026-1-all-publicholidays-dol.govt.nz SUMMARY:Labour Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20061023 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061023 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235121Z LAST-MODIFIED:20081118T012314Z DTSTAMP:20081117T235121Z UID:20090102-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012344Z LAST-MODIFIED:20081118T012529Z DTSTAMP:20081118T012344Z UID:20091226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day Holiday TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20061226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091228-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012537Z LAST-MODIFIED:20081118T012606Z DTSTAMP:20081118T012537Z UID:20091228-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20061225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012634Z LAST-MODIFIED:20081118T012657Z DTSTAMP:20081118T012634Z UID:20100101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100607-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T013050Z LAST-MODIFIED:20081118T013102Z DTSTAMP:20081118T013050Z UID:20100607-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060103 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060103 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200154Z LAST-MODIFIED:20081119T200227Z DTSTAMP:20081119T200154Z UID:20081201-1-all-publicholidays-dol.govt.nz SUMMARY:Westland Anniversary Day (Monday nearest 1st December) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20061204 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061204 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200252Z LAST-MODIFIED:20081119T200304Z DTSTAMP:20081119T200252Z UID:20081201-2-all-publicholidays-dol.govt.nz SUMMARY:Chatham Islands Anniversary Day (Monday nearest 30th November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20061127 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061127 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090126-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200321Z LAST-MODIFIED:20081119T200334Z DTSTAMP:20081119T200321Z UID:20090126-1-all-publicholidays-dol.govt.nz SUMMARY:Auckland Anniversary Day (Monday nearest 29th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060130 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060130 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200350Z LAST-MODIFIED:20081119T200406Z DTSTAMP:20081119T200350Z UID:20090119-1-all-publicholidays-dol.govt.nz SUMMARY:Wellington Anniversary Day (Monday nearest 22nd January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060123 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060123 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200431Z LAST-MODIFIED:20081119T200443Z DTSTAMP:20081119T200431Z UID:20090119-2-all-publicholidays-dol.govt.nz SUMMARY:Southland Anniversary Day (Monday nearest 17th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060116 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060116 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090202-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200519Z LAST-MODIFIED:20081119T200530Z DTSTAMP:20081119T200519Z UID:20090202-1-all-publicholidays-dol.govt.nz SUMMARY:Nelson Anniversary Day (Monday nearest 1st Feb) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060130 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060130 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091023-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200759Z LAST-MODIFIED:20081119T200809Z DTSTAMP:20081119T200759Z UID:20091023-1-all-publicholidays-dol.govt.nz SUMMARY: Hawkes' Bay Anniversary Day (Friday before 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20061020 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061020 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200840Z LAST-MODIFIED:20081119T200928Z DTSTAMP:20081119T200840Z UID:20091102-1-all-publicholidays-dol.govt.nz SUMMARY:Marlborough Anniversary Day (Monday after 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20061030 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061030 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091113-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201008Z LAST-MODIFIED:20081119T201040Z DTSTAMP:20081119T201008Z UID:20091113-1-all-publicholidays-dol.govt.nz SUMMARY:Canterbury Anniversary Day (Second Friday after the first Tuesda y in November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20061117 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20061117 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090928-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201140Z LAST-MODIFIED:20081119T201153Z DTSTAMP:20081119T201140Z UID:20090928-1-all-publicholidays-dol.govt.nz SUMMARY:South Canterbury Anniversary Day (4th Monday in September) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060925 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20060925 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Boxing Day< dtstart: >2005-01-01 00:00:00+13< rrule: >FREQ=YEARLY< summary: >New Year's Day< dtstart: >2005-12-25 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Christmas Day< dtstart: >2005-02-06 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Waitangi Day< dtstart: >2005-04-25 00:00:00+12< rrule: >FREQ=YEARLY< summary: >ANZAC Day< dtstart: >2005-06-06 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=6;BYDAY=1MO< summary: >Queen's Birthday< dtstart: >2005-10-24 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYDAY=4MO< summary: >Labour Day< dtstart: >2005-01-02 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Day after New Year's Day< dtstart: >2005-12-27 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=2< summary: >Boxing Day Holiday< dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=1< summary: >Christmas Day Holiday< dtstart: >2005-01-03 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=1< summary: >New Year's Day Holiday< dtstart: >2005-01-04 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=2< summary: >Day after New Year's Day Holiday< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28< summary: >Westland Anniversary Day (Monday nearest 1st December)< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29< summary: >Chatham Islands Anniversary Day (Monday nearest 30th November)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO< summary: >Auckland Anniversary Day (Monday nearest 29th January)< dtstart: >2005-01-24 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO< summary: >Wellington Anniversary Day (Monday nearest 22nd January)< dtstart: >2005-01-17 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO< summary: >Southland Anniversary Day (Monday nearest 17th January)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO< summary: >Nelson Anniversary Day (Monday nearest 1st Feb)< dtstart: >2005-10-21 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR< summary: >Hawkes' Bay Anniversary Day (Friday before 4th Monday of October)< dtstart: >2005-10-31 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58< summary: >Marlborough Anniversary Day (Monday after 4th Monday of October)< dtstart: >2005-11-11 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR< summary: >Canterbury Anniversary Day (Second Friday after the first Tuesday in November)< dtstart: >2005-09-26 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=9;BYDAY=4MO< summary: >South Canterbury Anniversary Day (4th Monday in September)< davical-1.1.1/testing/tests/regression-suite/0834-Spec-FREEBUSY-1.test0000644000000000000000000000104311446006434021700 0ustar # # Request a REPORT which should report only freebusy # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: CALDAV compliance testing HEADER=Accept: text/calendar HEADER=Content-Type: text/xml HEADER=Depth: 1 HEAD AUTH=manager1:manager1 BEGINDATA ENDDATA REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ davical-1.1.1/testing/tests/regression-suite/0927-MOVE.test0000644000000000000000000000126711633117640020207 0ustar # # MOVE an event from one location to another # TYPE=MOVE URL=http://regression.host/caldav.php/resource1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEADER=User-Agent: RFC4918 Spec Tests HEADER=Destination: /caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEAD QUERY SELECT caldav_data.dav_name AS data_name, calendar_item.dav_name AS item_name, caldav_data.user_no AS cd_user_no, calendar_item.user_no AS ci_user_no, caldav_data.collection_id AS cd_collection, calendar_item.collection_id AS ci_collection FROM caldav_data JOIN calendar_item USING(dav_id) WHERE caldav_data.dav_name ~ 'DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0006-Mulberry-1.test0000644000000000000000000000057711446006434021367 0ustar # # After creating the calendar we should be able to get any URLs TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=Depth: 1 HEADER=Content-Type: text/xml; charset=utf-8 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0817-Spec-PUT.test0000644000000000000000000000311211651212132020756 0ustar # # PUT an iCal style event into the database # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: RFC2518 Spec Tests HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//davical.org//NONSGML AWL Calendar//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:19901007T020000 RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU TZNAME:NZDT END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DESCRIPTION:Have a party. All the best parties are monthly! UID:DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74 DTSTAMP:20081024T220925Z SUMMARY:Party all day! CREATED:20081024T220749Z DTSTART;TZID=Pacific/Auckland;VALUE=DATE:20081114 RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified, dtend - dtstart AS "~Duration" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0804-Mulberry-PUT-1.test0000644000000000000000000000412211651212132022021 0ustar # # Attempt to put this event into a location that is locked. # - but this time supply the token so it succeeds # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/i1278618276.ics # Get the lock token from the earlier lock GETSQL=locktoken SELECT opaquelocktoken FROM locks WHERE dav_name = '/user1/home/i1278618276.ics' ENDSQL HEADER=Content-Type: text/calendar; charset=utf-8 HEADER=Lock-Token: HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Facebook//NONSGML Facebook Events V0.9//EN X-ORIGINAL-URL:http://www.facebook.com/event.php?eid=33142748183 VERSION:2.0 CALSCALE:GREGORIAN METHOD:PUBLISH BEGIN:VEVENT DTSTAMP:20081030T194443 LAST-MODIFIED:20081030T194443 CREATED:20081030T194401 SEQUENCE:42 ORGANIZER:MAILTO:sigurd@sliverstripe.com DTSTART:20081117T180000 DTEND:20081117T210000 UID:e33142748183@facebook.com SUMMARY:Wellington Meetup and v2.3 pre-release party LOCATION:Southern Cross Bar/Restaurant\, Cub a St/Able Smith St intersection URL:http://www.facebook.com/event.php?eid=33142748183 DESCRIPTION:Food\, alcohol\, code\, and websites. What more do you want in life?\n\nW e're interesting in meeting up wit h the local web community and thos e who use SilverStripe\, so that we can listen to your ideas and answ er your questions\, technical or ot herwise.\n\nWe'll also be demonstrat ing what's coming in SilverStripe v2.3\, and you get to meet the peop le behind the code!\n\n\nhttp://www.f acebook.com/event.php?eid=33142748 183 CLASS:PUBLIC CATEGORIES: STATUS:CONFIRMED PARTSTAT:ACCEPTED END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart, dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, ((current_timestamp AT TIME ZONE 'GMT' - calendar_item.last_modified) < '2 seconds'::interval) AS "~ Modified Now", caldav_data AS "A1 CalDAV DATA" FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user1/home/i1278618276.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-us_holidays.result0000644000000000000000000000044111732222731026165 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0005-Mulberry-1.result0000644000000000000000000000563411732222735021726 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "966d4f7d769690fca393be5ba814e8a2" Content-Length: 2655 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0017-Mulberry-MKCALENDAR-4.test0000644000000000000000000000021211446006434022755 0ustar # # Make a calendar for someone else who we are *NOT* allowed to write to TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/admin/home/ HEAD davical-1.1.1/testing/tests/regression-suite/0311-Chandler-PUT-2.result0000644000000000000000000000240511732223030022272 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "6f16959eee5c920b45548840b1e9ea19" Content-Length: 0 Content-Type: text/plain; charset="utf-8" A1 CalDAV DATA: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//PYVOBJECT//NONSGML Version 1//EN BEGIN:VEVENT UID:da81c0ee-7871-11db-c6d6-f6927c144649 DTSTAMP:20061024T115217Z DTSTART:20061103T073000 DTEND:20061103T093000 DESCRIPTION: LOCATION:Olivia's RRULE:FREQ=MONTHLY STATUS:CONFIRMED SUMMARY:Morning Mgmt Mtg END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >< dtend: >2006-11-03 09:30:00< dtstamp: >2006-10-24 11:52:17< dtstart: >2006-11-03 07:30:00< due: >NULL< last_modified: >2006-10-24 11:52:17< location: >Olivia's< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY< status: >CONFIRMED< summary: >Morning Mgmt Mtg< transp: >NULL< tz_id: >NULL< uid: >da81c0ee-7871-11db-c6d6-f6927c144649< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0550-iPhone-REPORT.result0000644000000000000000000000266711732223527022232 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "2e6245a9dbcab04c95bbfe73fae7e497" Content-Length: 1146 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" HTTP/1.1 200 OK /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics "55f02f66966ee150320383803d1e0d34" HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" HTTP/1.1 200 OK /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics "efd0257efbc898d059c200d1391af060" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0004-Mulberry-1.result0000644000000000000000000000044611732222734021720 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0218-Moz-REPORT.test0000644000000000000000000000161411446006434021204 0ustar # # Request a REPORT as a user with read only access. # TYPE=REPORT AUTH=manager1:manager1 URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20101108 Calendar/0.4a1 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Keep-Alive: 300 HEADER=Content-Type: text/xml HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0559-iOS-REPORT.result0000644000000000000000000000466611732223535021513 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "09eb139019832f5f89469c914c977636" Content-Length: 1227 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" text/calendar HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" text/calendar HTTP/1.1 200 OK /caldav.php/user1/home/0544-gzip-PUT.ics "6ddd18264a9d40c1c9d37a005eeb7e4f" text/calendar HTTP/1.1 200 OK /caldav.php/user1/home/0545-deflate-PUT.ics "4a3aa58a3e11487e87d87024465d4182" text/calendar HTTP/1.1 200 OK dav_name: >/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics< dtstart: >2006-11-02 10:00:00+13< rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH< dav_name: >/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics< dtstart: >2007-12-11 07:45:00+13< rrule: >FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH< dav_name: >/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics< dtstart: >2006-11-03 16:00:00+13< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< dav_name: >/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics< dtstart: >2006-11-03 07:30:00+13< rrule: >FREQ=MONTHLY< dav_name: >/user1/home/0544-gzip-PUT.ics< dtstart: >2011-10-05 14:00:00+13< rrule: >NULL< dav_name: >/user1/home/0545-deflate-PUT.ics< dtstart: >2011-10-07 10:00:00+13< rrule: >NULL< davical-1.1.1/testing/tests/regression-suite/0401-Cadaver-PROPFIND-1.result0000644000000000000000000000116311750137427022705 0ustar /caldav.php/user1/home/ Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0512-iCal-PUT.test0000644000000000000000000000346211651212132020734 0ustar # # PUT an iCal style event into the database # TYPE=PUT URL=http://mycaldav/caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:1 TRANSP:OPAQUE UID:6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA DTSTART;TZID=Pacific/Auckland:20071126T220000 DTSTAMP:20071124T083709Z SUMMARY:New Event CREATED:20071124T083709Z DTEND;TZID=Pacific/Auckland:20071126T230000 BEGIN:VALARM X-WR-ALARMUID:F33877C6-563B-4F20-B129-77A5B6C6944E ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0812-Spec-LOCK-1.test0000644000000000000000000000113211446006434021177 0ustar # # Test specification compliance for LOCK request # - This is a request for something which is already locked # and should fail. # TYPE=LOCK URL=http://mycaldav/caldav.php/user1/home/ HEADER=Depth: 0 HEADER=Timeout: Infinite,Second-4100000000 HEADER=Content-type: text/xml; charset="utf-8" HEAD # # Include the data in-line # BEGINDATA http://andrew.mcmillan.net.nz/node/5/ ENDDATA davical-1.1.1/testing/tests/regression-suite/1103-REPORT-sync-changed.result0000644000000000000000000001546611743156533023353 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "bd79d222644ec62ac4d24d754dae06c2" Content-Length: 6649 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics "bcc402382688cb3e8e57379c757dbcb0" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics "a1c6404d61190f9574e2bfd69383f144" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics "08a435c2abaf38f4a50a997343c098a7" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics "5def8ae2b20893a1c7f4dbaeb008f2f1" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics "ac90acd649c25070b1a2a17fb31a105a" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics "509b0f0d8a3363379f9f5727f5dd74a0" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics "cb3d9dc3e8c157f53eba3ea0e1e0f146" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics "00ad5eb1eb5507884710b0b66aa5d5c4" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics "a2990674708634a311bb98a59865ca50" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics "8f581a053df6d833254756dfd7553d37" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics "55f02f66966ee150320383803d1e0d34" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics "efd0257efbc898d059c200d1391af060" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics "257b9df4aaf573a578af4aadd033abf4" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/0544-gzip-PUT.ics "6ddd18264a9d40c1c9d37a005eeb7e4f" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/0545-deflate-PUT.ics "4a3aa58a3e11487e87d87024465d4182" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics "165746adbab8bc0c8336a63cc5332ff2" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics "2a09ef8c6a9e0b6bc16228359b99d8e7" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/home/PUT-eastern-time.ics "0b17d5f4102e63037d2ae732e4ca563d" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK data:,36 davical-1.1.1/testing/tests/regression-suite/0502-iCal-PROPFIND.test0000644000000000000000000000076711446006434021521 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEAD HEADER=User-Agent: DAVKit/2.0 (10.5; wrbt) iCal 3.0 HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0537-iCal4-PROPFIND.result0000644000000000000000000000207311743776157022164 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "1e225088c56c4098da7aadf1f844d028" Content-Length: 767 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/.in/ "0389feae460444b4b5db3b16c94b1e43" HTTP/1.1 200 OK /caldav.php/user1/.in/15f40cce00b378332164188cf779f0d6.ics HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0933-PROPFIND-supported-privilege-set.result0000644000000000000000000001055511732223654026021 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ad3defe4bec3b3af2799d11bf03c5f40" Content-Length: 4144 Content-Type: text/xml; charset="utf-8" /caldav.php/ Read the content of a resource or collection Create a resource or collection Delete a resource or collection Write content Write properties Read the free/busy information for a calendar collection Read ACLs for a resource or collection Read the details of the current user's access control to this resource. Write ACLs for a resource or collection Remove a lock Deliver scheduling invitations from an organiser to this scheduling inbox Deliver scheduling replies from an attendee to this scheduling inbox Allow free/busy enquiries targeted at the owner of this scheduling inbox Send scheduling invitations as an organiser from the owner of this scheduling outbox. Send scheduling replies as an attendee from the owner of this scheduling outbox. Send free/busy enquiries HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0603-Soho-PROPFIND.test0000644000000000000000000000120611446006434021550 0ustar # # SOHO Organizer works best looking at the person # # Now imagine what would happen if they supplied a 'Depth: 1' header! # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEADER=User-Agent: SOHO Organizer/6.5.2 libcurl/7.17.0 OpenSSL/0.9.7l zlib/1.2.3 libssh2/0.17 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0923-PROPFIND-supported-stuff.result0000644000000000000000000000062011732223645024360 0ustar HTTP/1.1 404 Not Found Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 129 Content-Type: text/xml; charset="utf-8" That resource is not present on this server. davical-1.1.1/testing/tests/regression-suite/0022-Mulberry-PUT-5.result0000644000000000000000000000046711732222747022401 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "81979ab45975368d619171a4c3e1e5e2" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0940-PROPFIND-acl.result0000644000000000000000000000074511732223661021752 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 214 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ davical-1.1.1/testing/tests/regression-suite/0236-Moz-REPORT.result0000644000000000000000000000676711732223011021547 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ab07e565993a377f23fc062109bbf013" Content-Length: 2857 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics "509b0f0d8a3363379f9f5727f5dd74a0" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTODO CREATED:20070805T200215Z LAST-MODIFIED:20070805T201531Z DTSTAMP:20070805T200215Z UID:2178279a-aec2-471f-832d-1f6df6203f2f SUMMARY:Incomplete\, uncancelled X-MOZ-LOCATIONPATH:2178279a-aec2-471f-832d-1f6df6203f2f.ics DESCRIPTION:This task is incomplete and has not been cancelled (has no status at all) END:VTODO END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics "cb3d9dc3e8c157f53eba3ea0e1e0f146" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTODO CREATED:20070805T201557Z LAST-MODIFIED:20070805T201643Z DTSTAMP:20070805T201557Z UID:917b9e47-b748-4550-a566-657fbe672447 SUMMARY:50% Complete\, uncancelled STATUS:IN-PROCESS PERCENT-COMPLETE:50 X-MOZ-LOCATIONPATH:917b9e47-b748-4550-a566-657fbe672447.ics DESCRIPTION:This task is in progress (50% complete) and has not been cancelled. END:VTODO END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics "8f581a053df6d833254756dfd7553d37" BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO CREATED:20071203T202915Z LAST-MODIFIED:20071203T203021Z DTSTAMP:20071203T202915Z UID:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08 SUMMARY:Release 0.9.3 STATUS:IN-PROCESS DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 PERCENT-COMPLETE:95 X-MOZ-LOCATIONPATH:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics BEGIN:VALARM TRIGGER;VALUE=DURATION:-P2D DESCRIPTION:Mozilla Alarm: Release 0.9.3 ACTION:DISPLAY END:VALARM END:VTODO END:VCALENDAR HTTP/1.1 200 OK dtstart: >NULL< due: >NULL< rrule: >NULL< summary: >Incomplete, uncancelled< dtstart: >NULL< due: >NULL< rrule: >NULL< summary: >50% Complete, uncancelled< dtstart: >2007-12-09 13:30:00+13< due: >2007-12-09 13:30:00+13< rrule: >NULL< summary: >Release 0.9.3< davical-1.1.1/testing/tests/regression-suite/0515-iCal-PUT-VEVENT.test0000644000000000000000000000403011651212132021734 0ustar # # PUT an iCal style event with repeats and alarms # TYPE=PUT URL=http://mycaldav/caldav.php/resource2/home/3C1BF85D-3F28-413F-844F-80EBD33B8EE6.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Lunch will be needed UID:3C1BF85D-3F28-413F-844F-80EBD33B8EE6 TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20071123T120000 DTSTAMP:20071124T221900Z SUMMARY:Beard Meeting CREATED:20071124T221521Z DTEND;TZID=Pacific/Auckland:20071123T140000 RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4FR BEGIN:VALARM X-WR-ALARMUID:F5B2B4CF-E7F2-47B3-8243-8CB829E81122 ACTION:EMAIL DESCRIPTION:This is an event reminder SUMMARY:Alarm notification ATTENDEE:mailto:andrew@mcmillan.net.nz TRIGGER:-P8D END:VALARM BEGIN:VALARM X-WR-ALARMUID:3A336F1D-550D-412F-9BDE-EBE8B03E8A53 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/resource2/home/3C1BF85D-3F28-413F-844F-80EBD33B8EE6.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0601-Soho-OPTIONS.result0000644000000000000000000000057211732223536022026 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT, DELETE, LOCK, UNLOCK, MOVE, GET, HEAD, MKCOL, MKCALENDAR, PROPPATCH, BIND, ACL Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0826-Spec-PROPFIND.result0000644000000000000000000000521511633117640022104 0ustar / /assistant1/ /teamclient1/ 20090531T120000Z DAViCal CalDAV Server httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0700-caldav4j-MKCALENDAR.result0000644000000000000000000000065311732223542023051 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >collection< is_calendar: >1< parent_container: >/user1/< public_events_onl: >0< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0019-Mulberry-OPTIONS-3.result0000644000000000000000000000050011732222745023052 0ustar HTTP/1.1 400 Bad Request Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 46 Content-Type: text/plain; charset="utf-8" The calendar path contains illegal characters.davical-1.1.1/testing/tests/regression-suite/0507-iCal-MKCALENDAR.result0000644000000000000000000000103711732223040022224 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >Untitled< is_calendar: >1< parent_container: >/user1/< public_events_onl: >0< user_no: >10< changed_by: >10< property_name: >http://apple.com/ns/ical/:calendar-color< property_value: >#391B71A0< davical-1.1.1/testing/tests/regression-suite/0803-Mulberry-PUT-1.test0000644000000000000000000000275011446006434022035 0ustar # # Attempt to put this event into a location that is locked. # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/i1278618276.ics HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Facebook//NONSGML Facebook Events V0.9//EN X-ORIGINAL-URL:http://www.facebook.com/event.php?eid=33142748183 VERSION:2.0 CALSCALE:GREGORIAN METHOD:PUBLISH BEGIN:VEVENT DTSTAMP:20081030T194443 LAST-MODIFIED:20081030T194443 CREATED:20081030T194401 SEQUENCE:42 ORGANIZER:MAILTO:sigurd@sliverstripe.com DTSTART:20081117T180000 DTEND:20081117T210000 UID:e33142748183@facebook.com SUMMARY:Wellington Meetup and v2.3 pre-release party LOCATION:Southern Cross Bar/Restaurant\, Cub a St/Able Smith St intersection URL:http://www.facebook.com/event.php?eid=33142748183 DESCRIPTION:Food\, alcohol\, code\, and websites. What more do you want in life?\n\nW e're interesting in meeting up wit h the local web community and thos e who use SilverStripe\, so that we can listen to your ideas and answ er your questions\, technical or ot herwise.\n\nWe'll also be demonstrat ing what's coming in SilverStripe v2.3\, and you get to meet the peop le behind the code!\n\n\nhttp://www.f acebook.com/event.php?eid=33142748 183 CLASS:PUBLIC CATEGORIES: STATUS:CONFIRMED PARTSTAT:ACCEPTED END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT 'Should be 0' AS prompt, count(*) FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '^/user1/home/i1278618276.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0801-Spec-LOCK-1.result0000644000000000000000000000142611732223545021544 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 456 Content-Type: text/xml; charset="utf-8" 0 http://andrew.mcmillan.net.nz/node/5/ Second-300 opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ?column?: >Refreshed (should be 1)< refresh_success: >1< davical-1.1.1/testing/tests/regression-suite/0541-iCal4-PROPFIND.test0000644000000000000000000000141611446006434021600 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/home/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml HEADER=Depth: 0 # # Looking for interesting stuff like xmpp-uri # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0832-freebusy.result0000644000000000000000000003715611643010227021617 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT Content-Length: 14720 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20060930T110000Z DTEND:correct FREEBUSY:20061001T210000Z/20061001T220000Z FREEBUSY:20061002T210000Z/20061002T220000Z FREEBUSY:20061003T210000Z/20061003T220000Z FREEBUSY:20061004T210000Z/20061004T220000Z FREEBUSY:20061005T210000Z/20061005T220000Z FREEBUSY:20061006T210000Z/20061006T220000Z FREEBUSY:20061007T210000Z/20061007T220000Z FREEBUSY:20061008T210000Z/20061008T220000Z FREEBUSY:20061009T210000Z/20061009T220000Z FREEBUSY:20061010T210000Z/20061010T220000Z FREEBUSY:20061011T210000Z/20061011T220000Z FREEBUSY:20061012T210000Z/20061012T220000Z FREEBUSY:20061013T210000Z/20061013T220000Z FREEBUSY:20061014T210000Z/20061014T220000Z FREEBUSY:20061015T210000Z/20061015T220000Z FREEBUSY:20061016T210000Z/20061016T220000Z FREEBUSY:20061017T210000Z/20061017T220000Z FREEBUSY:20061018T210000Z/20061018T220000Z FREEBUSY:20061019T210000Z/20061019T220000Z FREEBUSY:20061020T210000Z/20061020T220000Z FREEBUSY:20061021T210000Z/20061021T220000Z FREEBUSY:20061022T210000Z/20061022T220000Z FREEBUSY:20061023T210000Z/20061023T220000Z FREEBUSY:20061024T210000Z/20061024T220000Z FREEBUSY:20061025T210000Z/20061025T220000Z FREEBUSY:20061026T210000Z/20061026T220000Z FREEBUSY:20061027T210000Z/20061027T220000Z FREEBUSY:20061028T210000Z/20061028T220000Z FREEBUSY:20061029T220000Z/20061029T230000Z FREEBUSY:20061030T220000Z/20061030T230000Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061031T220000Z/20061031T230000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T220000Z/20061101T230000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061102T220000Z/20061102T230000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061103T220000Z/20061103T230000Z FREEBUSY:20061104T220000Z/20061104T230000Z FREEBUSY:20061105T220000Z/20061105T230000Z FREEBUSY:20061106T220000Z/20061106T230000Z FREEBUSY:20061107T220000Z/20061107T230000Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061108T220000Z/20061108T230000Z FREEBUSY:20061109T220000Z/20061109T230000Z FREEBUSY:20061110T220000Z/20061110T230000Z FREEBUSY:20061111T220000Z/20061111T230000Z FREEBUSY:20061112T220000Z/20061112T230000Z FREEBUSY:20061113T220000Z/20061113T230000Z FREEBUSY:20061114T220000Z/20061114T230000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061115T220000Z/20061115T230000Z FREEBUSY:20061116T220000Z/20061116T230000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061117T220000Z/20061117T230000Z FREEBUSY:20061118T220000Z/20061118T230000Z FREEBUSY:20061119T220000Z/20061119T230000Z FREEBUSY:20061120T220000Z/20061120T230000Z FREEBUSY:20061121T220000Z/20061121T230000Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061122T220000Z/20061122T230000Z FREEBUSY:20061123T220000Z/20061123T230000Z FREEBUSY:20061124T220000Z/20061124T230000Z FREEBUSY:20061125T220000Z/20061125T230000Z FREEBUSY:20061126T220000Z/20061126T230000Z FREEBUSY:20061127T220000Z/20061127T230000Z FREEBUSY:20061128T220000Z/20061128T230000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061129T220000Z/20061129T230000Z FREEBUSY:20061130T220000Z/20061130T230000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061201T220000Z/20061201T230000Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061202T220000Z/20061202T230000Z FREEBUSY:20061203T220000Z/20061203T230000Z FREEBUSY:20061204T220000Z/20061204T230000Z FREEBUSY:20061205T220000Z/20061205T230000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061206T220000Z/20061206T230000Z FREEBUSY:20061207T220000Z/20061207T230000Z FREEBUSY:20061208T220000Z/20061208T230000Z FREEBUSY:20061209T220000Z/20061209T230000Z FREEBUSY:20061210T220000Z/20061210T230000Z FREEBUSY:20061211T220000Z/20061211T230000Z FREEBUSY:20061212T220000Z/20061212T230000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061213T220000Z/20061213T230000Z FREEBUSY:20061214T220000Z/20061214T230000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061215T220000Z/20061215T230000Z FREEBUSY:20061216T220000Z/20061216T230000Z FREEBUSY:20061217T220000Z/20061217T230000Z FREEBUSY:20061218T220000Z/20061218T230000Z FREEBUSY:20061219T220000Z/20061219T230000Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061220T220000Z/20061220T230000Z FREEBUSY:20061221T220000Z/20061221T230000Z FREEBUSY:20061222T220000Z/20061222T230000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061223T220000Z/20061223T230000Z FREEBUSY:20061224T220000Z/20061224T230000Z FREEBUSY:20061225T220000Z/20061225T230000Z FREEBUSY:20061226T220000Z/20061226T230000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061227T220000Z/20061227T230000Z FREEBUSY:20061228T220000Z/20061228T230000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20061229T220000Z/20061229T230000Z FREEBUSY:20061230T220000Z/20061230T230000Z FREEBUSY:20061231T220000Z/20061231T230000Z FREEBUSY:20070101T220000Z/20070101T230000Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070102T220000Z/20070102T230000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070103T220000Z/20070103T230000Z FREEBUSY:20070104T220000Z/20070104T230000Z FREEBUSY:20070105T220000Z/20070105T230000Z FREEBUSY:20070106T220000Z/20070106T230000Z FREEBUSY:20070107T220000Z/20070107T230000Z FREEBUSY:20070108T220000Z/20070108T230000Z FREEBUSY:20070109T220000Z/20070109T230000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070110T220000Z/20070110T230000Z FREEBUSY:20070111T220000Z/20070111T230000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070112T220000Z/20070112T230000Z FREEBUSY:20070113T220000Z/20070113T230000Z FREEBUSY:20070114T220000Z/20070114T230000Z FREEBUSY:20070115T220000Z/20070115T230000Z FREEBUSY:20070116T220000Z/20070116T230000Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070117T220000Z/20070117T230000Z FREEBUSY:20070118T220000Z/20070118T230000Z FREEBUSY:20070119T220000Z/20070119T230000Z FREEBUSY:20070120T220000Z/20070120T230000Z FREEBUSY:20070121T220000Z/20070121T230000Z FREEBUSY:20070122T220000Z/20070122T230000Z FREEBUSY:20070123T220000Z/20070123T230000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070124T220000Z/20070124T230000Z FREEBUSY:20070125T220000Z/20070125T230000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070126T220000Z/20070126T230000Z FREEBUSY:20070127T220000Z/20070127T230000Z FREEBUSY:20070128T220000Z/20070128T230000Z FREEBUSY:20070129T220000Z/20070129T230000Z FREEBUSY:20070130T220000Z/20070130T230000Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070131T220000Z/20070131T230000Z FREEBUSY:20070201T220000Z/20070201T230000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070202T220000Z/20070202T230000Z FREEBUSY:20070203T220000Z/20070203T230000Z FREEBUSY:20070204T220000Z/20070204T230000Z FREEBUSY:20070205T220000Z/20070205T230000Z FREEBUSY:20070206T220000Z/20070206T230000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070207T220000Z/20070207T230000Z FREEBUSY:20070208T220000Z/20070208T230000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070209T220000Z/20070209T230000Z FREEBUSY:20070210T220000Z/20070210T230000Z FREEBUSY:20070211T220000Z/20070211T230000Z FREEBUSY:20070212T220000Z/20070212T230000Z FREEBUSY:20070213T220000Z/20070213T230000Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070214T220000Z/20070214T230000Z FREEBUSY:20070215T220000Z/20070215T230000Z FREEBUSY:20070216T220000Z/20070216T230000Z FREEBUSY:20070217T220000Z/20070217T230000Z FREEBUSY:20070218T220000Z/20070218T230000Z FREEBUSY:20070219T220000Z/20070219T230000Z FREEBUSY:20070220T220000Z/20070220T230000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070221T220000Z/20070221T230000Z FREEBUSY:20070222T220000Z/20070222T230000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070223T220000Z/20070223T230000Z FREEBUSY:20070224T220000Z/20070224T230000Z FREEBUSY:20070225T220000Z/20070225T230000Z FREEBUSY:20070226T220000Z/20070226T230000Z FREEBUSY:20070227T220000Z/20070227T230000Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070228T220000Z/20070228T230000Z FREEBUSY:20070301T220000Z/20070301T230000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070302T220000Z/20070302T230000Z FREEBUSY:20070303T220000Z/20070303T230000Z FREEBUSY:20070304T220000Z/20070304T230000Z FREEBUSY:20070305T220000Z/20070305T230000Z FREEBUSY:20070306T220000Z/20070306T230000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070307T220000Z/20070307T230000Z FREEBUSY:20070308T220000Z/20070308T230000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070309T220000Z/20070309T230000Z FREEBUSY:20070310T220000Z/20070310T230000Z FREEBUSY:20070311T210000Z/20070311T220000Z FREEBUSY:20070312T210000Z/20070312T220000Z FREEBUSY:20070313T210000Z/20070313T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070315T210000Z/20070315T220000Z FREEBUSY:20070316T210000Z/20070316T220000Z FREEBUSY:20070317T210000Z/20070317T220000Z FREEBUSY:20070318T210000Z/20070318T220000Z FREEBUSY:20070319T210000Z/20070319T220000Z FREEBUSY:20070320T210000Z/20070320T220000Z FREEBUSY:20070321T210000Z/20070321T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070322T210000Z/20070322T220000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070323T210000Z/20070323T220000Z FREEBUSY:20070324T210000Z/20070324T220000Z FREEBUSY:20070325T210000Z/20070325T220000Z FREEBUSY:20070326T210000Z/20070326T220000Z FREEBUSY:20070327T210000Z/20070327T220000Z FREEBUSY:20070328T210000Z/20070328T220000Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070329T210000Z/20070329T220000Z FREEBUSY:20070330T210000Z/20070330T220000Z FREEBUSY:20070331T210000Z/20070331T220000Z FREEBUSY:20070401T210000Z/20070401T220000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070402T210000Z/20070402T220000Z FREEBUSY:20070403T210000Z/20070403T220000Z FREEBUSY:20070404T210000Z/20070404T220000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070405T210000Z/20070405T220000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070406T210000Z/20070406T220000Z FREEBUSY:20070407T210000Z/20070407T220000Z FREEBUSY:20070408T210000Z/20070408T220000Z FREEBUSY:20070409T210000Z/20070409T220000Z FREEBUSY:20070410T210000Z/20070410T220000Z FREEBUSY:20070411T210000Z/20070411T220000Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070412T210000Z/20070412T220000Z FREEBUSY:20070413T210000Z/20070413T220000Z FREEBUSY:20070414T210000Z/20070414T220000Z FREEBUSY:20070415T210000Z/20070415T220000Z FREEBUSY:20070416T210000Z/20070416T220000Z FREEBUSY:20070417T210000Z/20070417T220000Z FREEBUSY:20070418T210000Z/20070418T220000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070419T210000Z/20070419T220000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070420T210000Z/20070420T220000Z FREEBUSY:20070421T210000Z/20070421T220000Z FREEBUSY:20070422T210000Z/20070422T220000Z FREEBUSY:20070423T210000Z/20070423T220000Z FREEBUSY:20070424T210000Z/20070424T220000Z FREEBUSY:20070425T210000Z/20070425T220000Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070426T210000Z/20070426T220000Z FREEBUSY:20070427T210000Z/20070427T220000Z FREEBUSY:20070428T210000Z/20070428T220000Z FREEBUSY:20070429T210000Z/20070429T220000Z FREEBUSY:20070430T210000Z/20070430T220000Z FREEBUSY:20070501T210000Z/20070501T220000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070502T210000Z/20070502T220000Z FREEBUSY:20070503T210000Z/20070503T220000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070504T210000Z/20070504T220000Z FREEBUSY:20070505T210000Z/20070505T220000Z FREEBUSY:20070506T210000Z/20070506T220000Z FREEBUSY:20070507T210000Z/20070507T220000Z FREEBUSY:20070508T210000Z/20070508T220000Z FREEBUSY:20070509T210000Z/20070509T220000Z FREEBUSY:20070510T210000Z/20070510T220000Z FREEBUSY:20070511T210000Z/20070511T220000Z FREEBUSY:20070512T210000Z/20070512T220000Z FREEBUSY:20070513T210000Z/20070513T220000Z FREEBUSY:20070514T210000Z/20070514T220000Z FREEBUSY:20070515T210000Z/20070515T220000Z FREEBUSY:20070516T210000Z/20070516T220000Z FREEBUSY:20070517T210000Z/20070517T220000Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070518T210000Z/20070518T220000Z FREEBUSY:20070519T210000Z/20070519T220000Z FREEBUSY:20070520T210000Z/20070520T220000Z FREEBUSY:20070521T210000Z/20070521T220000Z FREEBUSY:20070522T210000Z/20070522T220000Z FREEBUSY:20070523T210000Z/20070523T220000Z FREEBUSY:20070524T210000Z/20070524T220000Z FREEBUSY:20070525T210000Z/20070525T220000Z FREEBUSY:20070526T210000Z/20070526T220000Z FREEBUSY:20070527T210000Z/20070527T220000Z FREEBUSY:20070528T210000Z/20070528T220000Z FREEBUSY:20070529T210000Z/20070529T220000Z FREEBUSY:20070530T210000Z/20070530T220000Z FREEBUSY:20070531T210000Z/20070531T220000Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070601T210000Z/20070601T220000Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070602T210000Z/20070602T220000Z FREEBUSY:20070603T210000Z/20070603T220000Z FREEBUSY:20070604T210000Z/20070604T220000Z FREEBUSY:20070605T210000Z/20070605T220000Z FREEBUSY:20070606T210000Z/20070606T220000Z FREEBUSY:20070607T210000Z/20070607T220000Z FREEBUSY:20070608T210000Z/20070608T220000Z FREEBUSY:20070609T210000Z/20070609T220000Z FREEBUSY:20070610T210000Z/20070610T220000Z FREEBUSY:20070611T210000Z/20070611T220000Z FREEBUSY:20070612T210000Z/20070612T220000Z FREEBUSY:20070613T210000Z/20070613T220000Z FREEBUSY:20070614T210000Z/20070614T220000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070615T210000Z/20070615T220000Z FREEBUSY:20070616T210000Z/20070616T220000Z FREEBUSY:20070617T210000Z/20070617T220000Z FREEBUSY:20070618T210000Z/20070618T220000Z FREEBUSY:20070619T210000Z/20070619T220000Z FREEBUSY:20070620T210000Z/20070620T220000Z FREEBUSY:20070621T210000Z/20070621T220000Z FREEBUSY:20070622T210000Z/20070622T220000Z FREEBUSY:20070623T210000Z/20070623T220000Z FREEBUSY:20070624T210000Z/20070624T220000Z FREEBUSY:20070625T210000Z/20070625T220000Z FREEBUSY:20070626T210000Z/20070626T220000Z FREEBUSY:20070627T210000Z/20070627T220000Z FREEBUSY:20070628T210000Z/20070628T220000Z FREEBUSY:20070629T040000Z/20070629T054500Z FREEBUSY:20070629T210000Z/20070629T220000Z FREEBUSY:20070630T210000Z/20070630T220000Z END:VFREEBUSY END:VCALENDAR finish: >20061102T203000Z< rrule: >FREQ=MONTHLY< start: >20061102T183000Z< status: >CONFIRMED< finish: >20061103T044500Z< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< start: >20061103T030000Z< status: >CONFIRMED< finish: >20061223T050000Z< rrule: >NULL< start: >20061223T030000Z< status: >CONFIRMED< finish: >20061223T080000Z< rrule: >NULL< start: >20061223T060000Z< status: >TENTATIVE< finish: >20060101T230000Z< rrule: >FREQ=DAILY;INTERVAL=1;COUNT=1000< start: >20060101T220000Z< status: >NULL< finish: >20061031T220000Z< rrule: >NULL< start: >20061031T210000Z< status: >NULL< finish: >20061101T220000Z< rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH< start: >20061101T210000Z< status: >NULL< finish: >20061102T003000Z< rrule: >NULL< start: >20061101T233000Z< status: >NULL< davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user4.test0000644000000000000000000000050611633117640024351 0ustar # # PUT a calendar collection to user4 so we have some starting events # # There is no CalDAV defined behaviour for this. # TYPE=PUT URL=http://mycaldav/caldav.php/user4/home/ HEADER=User-Agent: RSCDS Testing/0.9.x HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user4:user4 HEAD DATA=0000-Setup-PUT-collection-user4 davical-1.1.1/testing/tests/regression-suite/0506-iCal-PUT.result0000644000000000000000000000364511732223037021307 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "efd0257efbc898d059c200d1391af060" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:6 TRANSP:OPAQUE UID:AAA9318E-37D9-4319-8626-95ECD3D3B243 DTSTART;TZID=Pacific/Auckland:20071125T130000 DTSTAMP:20071124T224850Z SUMMARY:BBQ @ ML's CREATED:20071123T093048Z DTEND;TZID=Pacific/Auckland:20071125T190000 LOCATION:ML's House BEGIN:VALARM X-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2007-11-25 19:00:00< dtstamp: >2007-11-24 22:48:50< dtstart: >2007-11-25 13:00:00< due: >NULL< last_modified: >2007-11-24 22:48:50< location: >ML's House< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >NULL< status: >NULL< summary: >BBQ @ ML's< transp: >OPAQUE< tz_id: >Pacific/Auckland< uid: >AAA9318E-37D9-4319-8626-95ECD3D3B243< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0516-iCal-POST.test0000644000000000000000000000364211651212132021055 0ustar # # Testing for how iCal does a POST for free/busy # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Recipient: mailto:user2@example.net HEADER=Content-Type: text/calendar HEADER=Originator: mailto:user1@example.net BEGINDATA BEGIN:VCALENDAR PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN VERSION:2.0 METHOD:REQUEST BEGIN:VFREEBUSY DTSTART:20081022T054500Z UID:89E43E7F-911D-4052-9FE3-4782268649E0 ORGANIZER:mailto:user1@example.net X-WR-ATTENDEE:mailto:user2@example.net DTSTAMP:20081025T112708Z SUMMARY:Availability for mailto:user2@example.net CREATED:20081025T112708Z DTEND:20081024T083000Z X-CALENDARSERVER-MASK-UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491 END:VFREEBUSY END:VCALENDAR ENDDATA REPLACE=#\d{8}T\d{6}#YYYYMMDDThhmmss# REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ QUERY SELECT calendar_item.rrule, calendar_item.status, dtstart AT TIME ZONE olson_name AS "a) Start", olson_name AS "b) Location", to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "c)UTC Start", to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "d) UTC End" FROM usr INNER JOIN collection USING (user_no) INNER JOIN caldav_data USING (collection_id) INNER JOIN calendar_item USING(dav_id) LEFT JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user2/' AND collection.is_calendar AND rrule_event_overlaps( dtstart, dtend, rrule, '20081022T054500Z', '20081024T083000Z' ) AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ORDER BY 2, 3 ENDQUERY davical-1.1.1/testing/tests/regression-suite/0543-iCal5-REPORT.test0000644000000000000000000000127711651212132021372 0ustar # # Testing with a process similar to iCal5 # - using an open-ended time query. # TYPE=REPORT URL=http://regression.host/caldav.php/user1/home/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml HEADER=Depth: 1 # # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0945-ACL.result0000644000000000000000000000134311732223664020376 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" by_collection: >NULL< by_principal: >1002< displayname: >User 4< privileges: >000000001111111011111111< to_principal: >1005< by_collection: >NULL< by_principal: >1002< displayname: >Assistant 1< privileges: >000000000001001011000111< to_principal: >1009< by_collection: >NULL< by_principal: >1002< displayname: >Team for Client1< privileges: >000000000001001000000001< to_principal: >1013< davical-1.1.1/testing/tests/regression-suite/0544-gzip-PUT.data0000644000000000000000000000065511651212132020775 0ustar 9 NAO0C;MNv*K@]**B&DWHce}3/39W-SZp:e4F%XU`}nX60ml7?80;sch{{˕~k^owkڵ=Jq&A*LpăB<ؘ,sgPB%LάVEu;rt 'PNJ$zF'7'5ρ<$b~70AP@VwGJ 4$d|DπIp|y].({)XD(]i2N P-I8xE Z]LK\VL%oGKl6v}>6a0)d yyqIHSh_M_tpDpdavical-1.1.1/testing/tests/regression-suite/2005-REPORT-expanded-nz-holidays-2009.result0000644000000000000000000005201711732223742025415 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "fc9daf01eee113bfb5af81c356d1a649" Content-Length: 17045 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/nz_holidays/20081226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225121Z LAST-MODIFIED:20081117T225144Z DTSTAMP:20081117T225121Z UID:20081226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20091226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225212Z LAST-MODIFIED:20081117T230337Z DTSTAMP:20081117T225212Z UID:20090101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20090101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081225-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T224951Z LAST-MODIFIED:20081117T235108Z DTSTAMP:20081117T224951Z UID:20081225-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20091225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090410-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235335Z LAST-MODIFIED:20081117T235417Z DTSTAMP:20081117T235335Z UID:20090410-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090410 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090206-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235224Z LAST-MODIFIED:20081120T002639Z DTSTAMP:20081117T235224Z UID:20090206-1-all-publicholidays-dol.govt.nz SUMMARY:Waitangi Day TRANSP:TRANSPARENT X-MOZ-GENERATION:4 DTSTART;VALUE=DATE:20090206 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090206 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090413-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235455Z LAST-MODIFIED:20081117T235524Z DTSTAMP:20081117T235455Z UID:20090413-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090413 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090425-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011910Z LAST-MODIFIED:20081120T001537Z DTSTAMP:20081118T011910Z UID:20090425-1-all-publicholidays-dol.govt.nz SUMMARY:ANZAC Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20090425 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090425 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011947Z LAST-MODIFIED:20081118T012009Z DTSTAMP:20081118T011947Z UID:20090601-1-all-publicholidays-dol.govt.nz SUMMARY:Queen's Birthday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090601 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090601 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091026-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012125Z LAST-MODIFIED:20081118T012150Z DTSTAMP:20081118T012125Z UID:20091026-1-all-publicholidays-dol.govt.nz SUMMARY:Labour Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20091026 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091026 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235121Z LAST-MODIFIED:20081118T012314Z DTSTAMP:20081117T235121Z UID:20090102-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012344Z LAST-MODIFIED:20081118T012529Z DTSTAMP:20081118T012344Z UID:20091226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day Holiday TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20091228 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091228 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091228-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012537Z LAST-MODIFIED:20081118T012606Z DTSTAMP:20081118T012537Z UID:20091228-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20091225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012634Z LAST-MODIFIED:20081118T012657Z DTSTAMP:20081118T012634Z UID:20100101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100607-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T013050Z LAST-MODIFIED:20081118T013102Z DTSTAMP:20081118T013050Z UID:20100607-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200154Z LAST-MODIFIED:20081119T200227Z DTSTAMP:20081119T200154Z UID:20081201-1-all-publicholidays-dol.govt.nz SUMMARY:Westland Anniversary Day (Monday nearest 1st December) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20091130 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091130 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200252Z LAST-MODIFIED:20081119T200304Z DTSTAMP:20081119T200252Z UID:20081201-2-all-publicholidays-dol.govt.nz SUMMARY:Chatham Islands Anniversary Day (Monday nearest 30th November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20091130 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091130 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090126-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200321Z LAST-MODIFIED:20081119T200334Z DTSTAMP:20081119T200321Z UID:20090126-1-all-publicholidays-dol.govt.nz SUMMARY:Auckland Anniversary Day (Monday nearest 29th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090126 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090126 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200350Z LAST-MODIFIED:20081119T200406Z DTSTAMP:20081119T200350Z UID:20090119-1-all-publicholidays-dol.govt.nz SUMMARY:Wellington Anniversary Day (Monday nearest 22nd January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090119 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090119 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200431Z LAST-MODIFIED:20081119T200443Z DTSTAMP:20081119T200431Z UID:20090119-2-all-publicholidays-dol.govt.nz SUMMARY:Southland Anniversary Day (Monday nearest 17th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090119 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090119 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090202-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200519Z LAST-MODIFIED:20081119T200530Z DTSTAMP:20081119T200519Z UID:20090202-1-all-publicholidays-dol.govt.nz SUMMARY:Nelson Anniversary Day (Monday nearest 1st Feb) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090202 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090202 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090309-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200607Z LAST-MODIFIED:20081119T200622Z DTSTAMP:20081119T200607Z UID:20090309-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090309 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090323-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200640Z LAST-MODIFIED:20081119T200650Z DTSTAMP:20081119T200640Z UID:20090323-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090323 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091023-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200759Z LAST-MODIFIED:20081119T200809Z DTSTAMP:20081119T200759Z UID:20091023-1-all-publicholidays-dol.govt.nz SUMMARY: Hawkes' Bay Anniversary Day (Friday before 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20091023 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091023 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200840Z LAST-MODIFIED:20081119T200928Z DTSTAMP:20081119T200840Z UID:20091102-1-all-publicholidays-dol.govt.nz SUMMARY:Marlborough Anniversary Day (Monday after 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20091102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091113-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201008Z LAST-MODIFIED:20081119T201040Z DTSTAMP:20081119T201008Z UID:20091113-1-all-publicholidays-dol.govt.nz SUMMARY:Canterbury Anniversary Day (Second Friday after the first Tuesda y in November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20091113 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20091113 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090928-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201140Z LAST-MODIFIED:20081119T201153Z DTSTAMP:20081119T201140Z UID:20090928-1-all-publicholidays-dol.govt.nz SUMMARY:South Canterbury Anniversary Day (4th Monday in September) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090928 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20090928 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Boxing Day< dtstart: >2005-01-01 00:00:00+13< rrule: >FREQ=YEARLY< summary: >New Year's Day< dtstart: >2005-12-25 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Christmas Day< dtstart: >2009-04-10 00:00:00+12< rrule: >NULL< summary: >Good Friday< dtstart: >2005-02-06 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Waitangi Day< dtstart: >2009-04-13 00:00:00+12< rrule: >NULL< summary: >Easter Monday< dtstart: >2005-04-25 00:00:00+12< rrule: >FREQ=YEARLY< summary: >ANZAC Day< dtstart: >2005-06-06 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=6;BYDAY=1MO< summary: >Queen's Birthday< dtstart: >2005-10-24 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYDAY=4MO< summary: >Labour Day< dtstart: >2005-01-02 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Day after New Year's Day< dtstart: >2005-12-27 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=2< summary: >Boxing Day Holiday< dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=1< summary: >Christmas Day Holiday< dtstart: >2005-01-03 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=1< summary: >New Year's Day Holiday< dtstart: >2005-01-04 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=2< summary: >Day after New Year's Day Holiday< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28< summary: >Westland Anniversary Day (Monday nearest 1st December)< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29< summary: >Chatham Islands Anniversary Day (Monday nearest 30th November)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO< summary: >Auckland Anniversary Day (Monday nearest 29th January)< dtstart: >2005-01-24 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO< summary: >Wellington Anniversary Day (Monday nearest 22nd January)< dtstart: >2005-01-17 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO< summary: >Southland Anniversary Day (Monday nearest 17th January)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO< summary: >Nelson Anniversary Day (Monday nearest 1st Feb)< dtstart: >2009-03-09 00:00:00+13< rrule: >NULL< summary: >Taranaki Anniversary Day< dtstart: >2009-03-23 00:00:00+13< rrule: >NULL< summary: >Otago Anniversary Day< dtstart: >2005-10-21 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR< summary: >Hawkes' Bay Anniversary Day (Friday before 4th Monday of October)< dtstart: >2005-10-31 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58< summary: >Marlborough Anniversary Day (Monday after 4th Monday of October)< dtstart: >2005-11-11 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR< summary: >Canterbury Anniversary Day (Second Friday after the first Tuesday in November)< dtstart: >2005-09-26 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=9;BYDAY=4MO< summary: >South Canterbury Anniversary Day (4th Monday in September)< davical-1.1.1/testing/tests/regression-suite/0929-MOVE.result0000644000000000000000000000062711732223651020547 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_etag: >d28a7507a92f6f6b368c87a65808155e< dav_name: >/user1/anotherone/< mod_in_last_hour: >1< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0200-Moz-OPTIONS-1.result0000644000000000000000000000034211446006434022005 0ustar HTTP/1.1 401 Unauthorized Date: Dow, 01 Jan 2000 00:00:00 GMT WWW-Authenticate: Basic realm="DAViCal CalDAV Server" Content-Length: 40 Content-Type: text/plain; ; charset="utf-8" Please log in for access to this system.davical-1.1.1/testing/tests/regression-suite/0928-MOVE.test0000644000000000000000000000066111446006434020205 0ustar # # MOVE an event from one location to another # TYPE=MOVE URL=http://regression.host/caldav.php/user1/anotherone/ HEADER=User-Agent: RFC4918 Spec Tests HEADER=Destination: /caldav.php/user1/movedcalendar/ HEAD QUERY SELECT dav_name, user_no, (modified > (current_timestamp - '1 hour'::interval)) AS mod_in_last_hour, dav_etag FROM collection WHERE collection.dav_name ~ '(anotherone|movedcalendar)'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0810-Spec-LOCK-1.result0000644000000000000000000000142411732223551021537 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Lock-Token: Content-Length: 456 Content-Type: text/xml; charset="utf-8" 0 http://andrew.mcmillan.net.nz/node/5/ Second-300 opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx davical-1.1.1/testing/tests/regression-suite/2007-REPORT-expanded-nz-holidays-2011.test0000644000000000000000000000166711633117640025055 0ustar # # Test expanded report for NZ public holidays for 2011 # TYPE=REPORT URL=http://regression.host/caldav.php/user4/nz_holidays/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dtstart, rrule, summary FROM calendar_item WHERE dav_name ~ '^/user4/nz_holidays/' AND (rrule IS NOT NULL OR (dtstart >= '20101231T110000Z' AND dtstart < '20111231T110000Z') ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/0847-Spec-PROPFIND-slash.result0000644000000000000000000000107211754162327023222 0ustar /caldav.php/ /caldav.php/ /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0833-freebusy.test0000644000000000000000000000031411446006434021251 0ustar # # Request a freebusy report by URL # TYPE=GET URL=http://mycaldav/freebusy.php/user1/home/?start=20061001T000000Z&end=20070630T235959Z HEAD REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ davical-1.1.1/testing/tests/regression-suite/0825-Spec-PROPFIND-6.result0000644000000000000000000000172311633117640022246 0ustar /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics text/calendar 313 Morning Mgmt Mtg Dow, 01 Jan 2000 00:00:00 GMT 20061024T115217Z "6f16959eee5c920b45548840b1e9ea19" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0240-Moz-PROPFIND.test0000644000000000000000000000103611446006434021403 0ustar # # Check for PROPFIND for scheduing inbox/outbox # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20100917 Sunbird/1.0 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0011-Mulberry-PUT-1b.test0000644000000000000000000000303411651212132022152 0ustar # # We now have a calendar so we can PUT an event into it... TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics HEADER=Content-Type: text/calendar; charset=utf-8 HEADER=If-Match: "b000d7defa19ccb7cd21e546b54155ee" HEAD BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 X-WR-CALNAME:home BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061107T031419Z DTSTART;TZID=New Zealand Standard Time:20061025T091500 DURATION:PT1H SUMMARY:A first event, modified. UID:B18CBB57295D01D7661A6DD4@D76FAF7B10D9E8D2D41F779C END:VEVENT END:VCALENDAR ENDDATA # at time zone 'GMT' AS dtstamp, QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, calendar_item.last_modified, caldav_data AS "A1 CalDAV DATA" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user1/home/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0532-iCal4-PROPFIND.result0000644000000000000000000004314311776301347022151 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "af0e2626081e066848c332179455f34e" Content-Length: 17701 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ "89514106d00f37cc9ee71689c450d2ef" User 1 /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ "ce9a871cfb30dd7b7f94481944f3769b" user1 home /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ "24c9e15e52afc47c225b757e7bee1f9d" user1 addresses /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ "bac273dae96780a3c8ed0c032266322c" created /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.in/ "0389feae460444b4b5db3b16c94b1e43" User 1 Inbox /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.out/ "1" User 1 Outbox /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ "ac192d10783fff90598af2facc8259df" iCal Calendar #391B71A0 /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ "abad5538c4aa570cc54b6ff0d36a4565" /user1/calendar-proxy-read/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ "04ba2c2164225fb5abce13f2c523b6c7" /user1/calendar-proxy-write/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0915-extended-MKCOL.result0000644000000000000000000000127711732223640022437 0ustar HTTP/1.1 409 Conflict Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 430 Content-Type: text/plain; charset="utf-8" HTTP/1.1 424 Failed Dependency HTTP/1.1 409 Conflict Property is read-only davical-1.1.1/testing/tests/regression-suite/0502-iCal-PROPFIND.result0000644000000000000000000000757611732223034022060 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "e3f59c55883b61b4390fd7ffbe74644b" Content-Length: 3649 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ User 1 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ user1 home HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ user1 addresses HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ created HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.in/ User 1 Inbox HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.out/ User 1 Outbox HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ /user1/calendar-proxy-read/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ /user1/calendar-proxy-write/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0240-Moz-PROPFIND-sub.result0000644000000000000000000000203711732223012022522 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "0df5049284c13eae94d8f8ddc52d521b" Content-Length: 739 Content-Type: text/xml; charset="utf-8" /davical/caldav.php/user1/ /davical/caldav.php/user1/ mailto:user1@example.net /davical/caldav.php/user1/ /davical/caldav.php/user1/.in/ /davical/caldav.php/user1/.out/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0224-Moz-OPTIONS-principal.result0000644000000000000000000000057211732223004023631 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT, DELETE, LOCK, UNLOCK, MOVE, GET, HEAD, MKCOL, MKCALENDAR, PROPPATCH, BIND, ACL Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection.result0000644000000000000000000003022511732222716023652 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR DTSTART;TZID=Pacific/Auckland:20081020T110000 DTEND;TZID=Pacific/Auckland:20081020T113000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2008-10-20 11:30:00< dtstamp: >2008-10-23 05:49:58< dtstart: >2008-10-20 11:00:00< due: >NULL< location: >NULL< logged_user: >1< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR< status: >NULL< summary: >Near Daily Action Meeting< transp: >NULL< tz_id: >Pacific/Auckland< uid: >33169d69-2969-4a96-a3e1-2e312b7614e6< url: >NULL< user_no: >11< A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081020T090000 DTEND;TZID=Pacific/Auckland:20081020T100000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2008-10-20 10:00:00< dtstamp: >2008-10-23 05:49:34< dtstart: >2008-10-20 09:00:00< due: >NULL< location: >NULL< logged_user: >1< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=WEEKLY;INTERVAL=1< status: >NULL< summary: >Weekly Project Meeting< transp: >NULL< tz_id: >Pacific/Auckland< uid: >047871e3-6b70-4178-9af8-0ceb50f7b092< url: >NULL< user_no: >11< A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081024T140000 DTEND;TZID=Pacific/Auckland:20081024T150000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2008-10-24 15:00:00< dtstamp: >2008-10-23 05:51:15< dtstart: >2008-10-24 14:00:00< due: >NULL< location: >NULL< logged_user: >1< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=WEEKLY;INTERVAL=1< status: >NULL< summary: >Weekly catch-up< transp: >NULL< tz_id: >Pacific/Auckland< uid: >9429a973-2b13-4b1a-be09-948d75425c45< url: >NULL< user_no: >11< A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday RRULE:FREQ=MONTHLY;BYDAY=1MO,2TU,3TH,-1FR;INTERVAL=1 DESCRIPTION:An all day event on various days. DTSTART;TZID=America/Los_Angeles:20081006T000000 CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D END:VEVENT BEGIN:VTIMEZONE TZID:America/Los_Angeles X-TZINFO:America/Los_Angeles[2007g/Partial@883612800000] BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:19980405T020000 RRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:19981025T020000 RRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >An all day event on various days.< dtend: >2008-10-07 00:00:00< dtstamp: >2008-03-03 01:54:22< dtstart: >2008-10-06 00:00:00< due: >NULL< location: >NULL< logged_user: >1< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY;BYDAY=1MO,2TU,3TH,-1FR;INTERVAL=1< status: >NULL< summary: >1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday< transp: >NULL< tz_id: >America/Los_Angeles< uid: >7d729xc0-0895-012d-124e-002421a2359e< url: >NULL< user_no: >11< A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT LAST-MODIFIED:20081123T210725Z SEQUENCE:6 UID:bd262d20-1cdb-012d-1264-002421a2359e SUMMARY:Afternoon run DESCRIPTION: DTSTART;TZID=America/Los_Angeles:20081123T150000 CREATED:20081123T210644Z DTSTAMP:20081123T210725Z DURATION:PT1H LOCATION: RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU END:VEVENT BEGIN:VTIMEZONE TZID:America/Los_Angeles X-TZINFO:America/Los_Angeles[2007g/Partial@883612800000] BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:19980405T020000 RRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:19981025T020000 RRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >< dtend: >2008-11-23 16:00:00< dtstamp: >2008-11-23 21:07:25< dtstart: >2008-11-23 15:00:00< due: >NULL< location: >< logged_user: >1< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=WEEKLY;INTERVAL=1;BYDAY=SU< status: >NULL< summary: >Afternoon run< transp: >NULL< tz_id: >America/Los_Angeles< uid: >bd262d20-1cdb-012d-1264-002421a2359e< url: >NULL< user_no: >11< A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT LAST-MODIFIED:20110101T005414Z SEQUENCE:12 URL;VALUE=URI:http://www.oregontrufflefestival.com UID:56f0e0e0-f742-012d-680c-002421a2359e SUMMARY:Willamette Valley Vineyards at the Oregon Truffle Festival DESCRIPTION:The 6th Annual Oregon Truffle Festival will be held in and a round Eugene Oregon over three brisk winter days from January 28-30\, 20 11. Created to celebrate the magnificent Oregon truffles as they reach t he peak of ripeness in their native soil\, it is the first festival of i ts kind in North America\, dedicated to sharing the experience of the ch efs\, foragers and fans of Oregon\\'s wild truffles\, from their hidden source in the forest to their glory on the table.\n\nThe theme for 2011 is "Slow Food"\, and Willamette Valley Vineyards will be hosting a gourm et wine luncheon during the festival. Please visit www.oregontrufflefest ival.com for more info and to purchase tickets.\n\n DTSTART;TZID=America/Los_Angeles:20110128 CREATED:20101231T193025Z DTSTAMP:20110101T005414Z DURATION:P1D LOCATION:Eugene Oregon X-VENUE: X-EMAIL-RSVP-UPDATES:true RRULE:FREQ=DAILY;COUNT=3;INTERVAL=1 END:VEVENT BEGIN:VTIMEZONE TZID:America/Los_Angeles X-TZINFO:America/Los_Angeles[2007g/Partial@883612800000] BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:19980405T020000 RRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:19981025T020000 RRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >The 6th Annual Oregon Truffle Festival will be held in and around Eugene Oregon over three brisk winter days from January 28-30, 2011. Created to celebrate the magnificent Oregon truffles as they reach the peak of ripeness in their native soil, it is the first festival of its kind in North America, dedicated to sharing the experience of the chefs, foragers and fans of Oregon\'s wild truffles, from their hidden source in the forest to their glory on the table. The theme for 2011 is "Slow Food", and Willamette Valley Vineyards will be hosting a gourmet wine luncheon during the festival. Please visit www.oregontrufflefestival.com for more info and to purchase tickets. < dtend: >2011-01-29 00:00:00< dtstamp: >2011-01-01 00:54:14< dtstart: >2011-01-28 00:00:00< due: >NULL< location: >Eugene Oregon< logged_user: >1< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=DAILY;COUNT=3;INTERVAL=1< status: >NULL< summary: >Willamette Valley Vineyards at the Oregon Truffle Festival< transp: >NULL< tz_id: >America/Los_Angeles< uid: >56f0e0e0-f742-012d-680c-002421a2359e< url: >http://www.oregontrufflefestival.com< user_no: >11< count: >6< davical-1.1.1/testing/tests/regression-suite/0902-PUT-collection.test0000644000000000000000000006123611633117640022235 0ustar # # PUT an entire calendar collection with one fell swoop # # There is no CalDAV defined behaviour for this. # TYPE=PUT URL=http://mycaldav/caldav.php/user1/anotherone/ HEADER=User-Agent: RSCDS Testing/0.7.x HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=admin:nimda HEAD BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Ximian//NONSGML Evolution Calendar//EN VERSION:2.0 BEGIN:VEVENT UID:20061119T201927Z-5105-1000-5103-8@ubu DTSTAMP:20061119T201927Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061122T130000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061122T133000 SUMMARY:Alan Wanston\, FudgeFactory CREATED:20061119T201929 LAST-MODIFIED:20061119T201951 SEQUENCE:1 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061119T201927Z-5101-1000-1-17@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Alan Wanston END:VALARM END:VEVENT BEGIN:VEVENT UID:20061029T195821Z-14356-1000-1-12@ubu DTSTAMP:20061029T195821Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061030T130000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061030T140000 SUMMARY:??? CREATED:20061029T195822 LAST-MODIFIED:20061029T195822 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061029T195821Z-14353-1000-1-6@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:??? END:VALARM END:VEVENT BEGIN:VEVENT UID:20061105T211651Z-4384-1000-1-7@ubu DTSTAMP:20061105T211651Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061107T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061107T150000 SUMMARY:James What CREATED:20061105T211656 LAST-MODIFIED:20061106T213310 LOCATION:Copperstuff CLASS:PUBLIC TRANSP:OPAQUE SEQUENCE:3 ORGANIZER;CN=Andrew Moughtonbeigh:MAILTO:andrew@example.org DESCRIPTION:I am looking at hosting a custom Web application on a Linux Debian server. \nFrom what I understand you can provide the complete solution in terms of hosting and support. \nI am currently looking into hosting providers as well as looking for some Debian admin skilled resource.\n ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061106T213310Z-4382-1000-1-31@ubu DESCRIPTION:James What ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061031T194148Z-14356-1000-1-14@ubu DTSTAMP:20061031T194148Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T133000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061101T143000 SUMMARY:Doctor CREATED:20061031T194149 LAST-MODIFIED:20061031T194149 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061031T194148Z-14353-1000-1-19@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Doctor END:VALARM END:VEVENT BEGIN:VEVENT UID:20061027T005242Z-5029-1001-1-1@dolmein DTSTAMP:20061027T010232Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061030T103000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061030T113000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Interview Linus Pauling CLASS:PRIVATE CREATED:20061027T022816 LAST-MODIFIED:20061027T022816 DESCRIPTION:I've already spoken to each of you about this\, this is just to ensure that it is in my calender :-) ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org X-MICROSOFT-CDO-REPLYTIME:20061027T022816Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061027T022803Z-4264-1000-1-2@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for UID property. Removing entire property: DTSTAMP:20061025T193258Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061026T150000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061026T160000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Performance Review - David C CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=David Callenius; LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=David Smith;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:dave2@example.org CREATED:20061025T210902 LAST-MODIFIED:20061025T210902 UID:20061025T210650Z-21440-1000-1-8@ubu X-MICROSOFT-CDO-REPLYTIME:20061025T210902Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061025T210650Z-21440-1000-1-9@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061019T022314Z-5014-1001-1-1@dolmein DTSTAMP:20061019T022452Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061025T150000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061025T160000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Performance Review - David C CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=David Smith;LANGUAGE=en:MAILTO:dave2@example.org X-MICROSOFT-CDO-REPLYTIME:20061020T071245Z CREATED:20061020T071245 LAST-MODIFIED:20061020T071245 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061020T071222Z-7292-1000-1-2@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060918T011246Z-21151-1000-1-10@ubu DTSTAMP:20060918T011246Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060928T173000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060928T200000 SUMMARY:Summer Festival drinks at the loaded hog CREATED:20060918T011251 LAST-MODIFIED:20060918T011251 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060918T011246Z-21149-1000-1-20@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Summer Festival drinks at the loaded hog END:VALARM END:VEVENT BEGIN:VEVENT UID:20061029T195827Z-14356-1000-1-13@ubu DTSTAMP:20061029T195827Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061030T160000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061030T170000 SUMMARY:IZPAXY CREATED:20061029T195828 LAST-MODIFIED:20061029T195828 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061029T195827Z-14353-1000-1-7@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:IZPAXY END:VALARM END:VEVENT BEGIN:VEVENT UID:20061011T232622Z-27447-1000-1-6@ubu DTSTAMP:20061011T232622Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_4/Asia/Dubai: 20061016T090000 DTEND;TZID=/softwarestudio.org/Olson_20011030_4/Asia/Dubai: 20061016T170000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Dubai Day CLASS:PUBLIC CREATED:20061011T232657 LAST-MODIFIED:20061011T232731 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061011T232731Z-27445-1000-1-15@ubu DESCRIPTION:Dubai Day ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:86203AFD481A6C42892013E6E0C4845D039A2543@AKEXBE02.telecom.tcnz.net DTSTAMP:20061005T230724Z DTSTART:20070120T093000 SUMMARY:Reminder for Mark for Absolom Livasathan's PGP WF Services cost request DESCRIPTION:From Absolom.Livasathan@example.com Fri Oct 6 12:00:02 2006\n ORGANIZER;CN=Absolom Livasathan:Absolom.Livasathan@example.com ATTENDEE;RSVP=FALSE;CN=:andrew@example.org CREATED:20061005T230724 LAST-MODIFIED:20061005T230724 END:VEVENT BEGIN:VEVENT UID:20061219T104451Z-28207-1000-1-8@ubu DTSTAMP:20061219T104451Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061222T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061222T150000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Those who are left will have a drink to celebrate the new calendar LOCATION:The Boardroom CLASS:PUBLIC ORGANIZER;CN=Andrew Moughtonbeigh:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;LANGUAGE=en:MAILTO:Boardroom@example.org CREATED:20061219T104635 LAST-MODIFIED:20061219T104635 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061219T104635Z-23686-1000-1-22@ubu DESCRIPTION:Those who are left will have a drink to celebrate the new calendar ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060914T212513Z-15783-1000-1-11@ubu DTSTAMP:20060914T212513Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060918T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060918T150000 SUMMARY:Donovan X-EVOLUTION-CALDAV-HREF:http://mycaldav: 80/caldav.php/andrew/20060914T212516Z.ics X-EVOLUTION-CALDAV-ETAG:"004c7b3de49835f714ae7962e8d06d3c" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060914T213552 LAST-MODIFIED:20060914T213552 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060914T212513Z-15781-1000-1-18@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Donovan END:VALARM END:VEVENT BEGIN:VEVENT UID:20060906T123509Z-5231-1000-1-5@ubu DTSTAMP:20060906T123509Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060911T103000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060911T120000 SUMMARY:NGOP by-election readiness. X-EVOLUTION-CALDAV-HREF:http://mycaldav: 80/caldav.php/andrew/20060906T123515Z.ics X-EVOLUTION-CALDAV-ETAG:"9a39bedee743f397ebeeda78a4233c8b" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060907T093748 LAST-MODIFIED:20060907T093748 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060906T123509Z-5254-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:NGOP by-election readiness. END:VALARM END:VEVENT BEGIN:VEVENT UID:20060903T233851Z-31623-1000-1-5@ubu DTSTAMP:20060903T233851Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060907T123000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060907T133000 SUMMARY:Murray Flenshaw @ Copperstuff CREATED:20060903T233856 LAST-MODIFIED:20060903T233856 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060903T233851Z-31621-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Murray Flenshaw @ Copperstuff END:VALARM END:VEVENT BEGIN:VEVENT UID:20060920T052705Z-28287-1000-1-5@ubu DTSTAMP:20060920T052705Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060921T160000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060921T170000 SUMMARY:Really Geeky Thoughts X-EVOLUTION-CALDAV-HREF:http: //andrew@mycaldav/caldav.php/andrew/20060920T052710Z.ics X-EVOLUTION-CALDAV-ETAG:"d9a4a80a3dbc76b947a3bf0f0672359c" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060920T052722 LAST-MODIFIED:20060921T012657 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060920T052705Z-28285-1000-1-7@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Really Geeky Thoughts END:VALARM END:VEVENT BEGIN:VEVENT UID:20060918T011217Z-21151-1000-1-9@ubu DTSTAMP:20060918T011217Z DTSTART;VALUE=DATE:20060928 DTEND;VALUE=DATE:20060930 SUMMARY:Summer Festival CREATED:20060918T011218 LAST-MODIFIED:20060918T011218 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060918T011217Z-21149-1000-1-19@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Summer Festival END:VALARM END:VEVENT BEGIN:VEVENT UID:20060912T233427Z-12681-1000-1-5@ubu DTSTAMP:20060912T233427Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Europe/Helsinki: 20060913T090000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Europe/Helsinki: 20060913T143000 TRANSP:OPAQUE SEQUENCE:5 SUMMARY:9:am - 2:30pm in Helsinki CLASS:PUBLIC X-EVOLUTION-CALDAV-HREF:http://mycaldav: 80/caldav.php/andrew/20060912T233500Z.ics X-EVOLUTION-CALDAV-ETAG:"8d8ca5e838b7e088bf17d9916032eec6" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060913T003545 LAST-MODIFIED:20060913T003631 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060913T003631Z-12694-1000-1-24@ubu DESCRIPTION:9:am - 2:30pm in Helsinki ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060803T084628Z-6040-1000-1-6@lamb DTSTAMP:20060803T084628Z DTSTART:20060801T123456 DTEND:20060802T123456 SUMMARY:Steve's Private Birthday CREATED:20060803T084628 LAST-MODIFIED:20060803T084657 CLASS:PRIVATE TRANSP:OPAQUE RRULE:FREQ=YEARLY;INTERVAL=1 SEQUENCE:1 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060803T084657Z-6038-1000-1-13@lamb DESCRIPTION:Steve's Birthday ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061210T214816Z-5064-1001-1-0@dolmein DTSTAMP:20061210T215058Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061212T100000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061212T110000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Interview - Arthur Williams CLASS:PRIVATE CREATED:20061211T020841 LAST-MODIFIED:20061211T020841 DESCRIPTION:I think you all have had a copy of Arthur Williams's CV passed onto you. ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=Gerrold Nimby;LANGUAGE=en:MAILTO:gerrold@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org X-MICROSOFT-CDO-REPLYTIME:20061211T020841Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061211T020828Z-15443-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060907T213951Z-5189-1001-1-0@dolmein DTSTAMP:20060914T042719Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060915T100000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060915T110000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Sysadmin -> Development CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Richard Hector;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:richard@example.org CREATED:20060914T051701 LAST-MODIFIED:20060914T051701 X-MICROSOFT-CDO-REPLYTIME:20060914T051701Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060914T051626Z-5898-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060905T231045Z-16025-1000-1-6@ubu DTSTAMP:20060905T231045Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060919T090000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060919T120000 SUMMARY:NGOP Meeting X-EVOLUTION-CALDAV-HREF:http://mycaldav: 80/caldav.php/andrew/20060905T231053Z.ics X-EVOLUTION-CALDAV-ETAG:"4d37ed48425acb9f4245539e2d2b726b" X-EVOLUTION-MOVE-CALENDAR:1 CREATED:20060907T093732 LAST-MODIFIED:20060911T214556 CLASS:PUBLIC TRANSP:OPAQUE SEQUENCE:1 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060911T214556Z-21593-1000-1-6@ubu DESCRIPTION:NGOP Meeting ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT DTSTART;TZID=Pacific/Auckland:20061220T140000 SUMMARY:Really Geeky round table UID:DC9C0944-D80A-426D-A4A4-6003C72BA7B5 ORGANIZER;CN=Chris Dalgleish:mailto:chris@example.org SEQUENCE:2 DTSTAMP:20061219T195427Z DURATION:PT1H TRANSP:OPAQUE X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for ATTENDEE property. Removing entire property: X-MICROSOFT-CDO-REPLYTIME:20061219T225056Z CREATED:20061219T225056 LAST-MODIFIED:20061219T225056 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061219T225040Z-21169-1000-1-13@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061101T224855Z-5026-1001-1-0@dolmein DTSTAMP:20061101T225011Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061102T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061102T150000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:Sysadmin Interview CLASS:PRIVATE CREATED:20061101T230424 LAST-MODIFIED:20061101T230424 ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=Gerrold Nimby;LANGUAGE=en:MAILTO:gerrold@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org X-MICROSOFT-CDO-REPLYTIME:20061101T230424Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T230356Z-1895-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20060918T071919Z-21151-1000-1-13@ubu DTSTAMP:20060918T071919Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060925T120000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20060925T133000 SUMMARY:Board Meeting CREATED:20060918T071921 LAST-MODIFIED:20060918T071921 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20060918T071919Z-21149-1000-1-51@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:Board Meeting END:VALARM END:VEVENT BEGIN:VEVENT UID:20061119T202229Z-5105-1000-5103-9@ubu DTSTAMP:20061119T202229Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061120T110000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061120T120000 SUMMARY:IZPAXY Review CREATED:20061119T202231 LAST-MODIFIED:20061119T202231 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061119T202229Z-5101-1000-1-18@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:IZPAXY Review END:VALARM END:VEVENT BEGIN:VEVENT UID:20061026T222249Z-5029-1001-1-0@dolmein DTSTAMP:20061026T223020Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061030T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061030T160000 TRANSP:OPAQUE SEQUENCE:3 SUMMARY:ABC CLASS:PRIVATE CREATED:20061026T223700 LAST-MODIFIED:20061026T223700 DESCRIPTION:Mark and Tom from ABC would like to discuss the work required and estimate for the work they would like us to do - \"start to become specific about things\". Expectations of work\, issues and solutions. ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en;PARTSTAT=TENTATIVE:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=Andy Capp;LANGUAGE=en:MAILTO:andyc@example.org X-MICROSOFT-CDO-REPLYTIME:20061026T223700Z BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061026T223608Z-4264-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061019T022147Z-5014-1001-1-0@dolmein DTSTAMP:20061019T022247Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061025T133000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061025T143000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Performance Review - Jon C CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=Jon Callenius;LANGUAGE=en:MAILTO:jon@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=David Smith;LANGUAGE=en:MAILTO:dave2@example.org X-MICROSOFT-CDO-REPLYTIME:20061020T071144Z CREATED:20061020T071144 LAST-MODIFIED:20061020T071144 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061020T071108Z-7292-1000-1-0@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VEVENT UID:20061009T214137Z-5718-1001-1-1@dolmein DTSTAMP:20061009T214524Z DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061012T140000 DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland: 20061012T150000 TRANSP:OPAQUE SEQUENCE:2 SUMMARY:Sysadmin Interview LOCATION:Copperstuff\, Level 2\, 150 Walthias St CLASS:PRIVATE ORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED; RSVP=TRUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moughtonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;LANGUAGE=en:MAILTO:jo@example.net X-MICROSOFT-CDO-REPLYTIME:20061010T014639Z CREATED:20061010T014639 LAST-MODIFIED:20061010T014639 BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061010T014606Z-6897-1000-1-2@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M END:VALARM END:VEVENT BEGIN:VTIMEZONE TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE END:VCALENDAR ENDDATA QUERY SELECT count(*) AS caldav_data FROM caldav_data WHERE dav_name ~ '^/user1/anotherone/' ENDQUERY QUERY SELECT count(*) AS calendar_item FROM calendar_item WHERE dav_name ~ '^/user1/anotherone/' ENDQUERY QUERY SELECT count(*) AS alarms FROM calendar_alarm JOIN calendar_item USING(dav_id) WHERE dav_name ~ '^/user1/anotherone/' ENDQUERY QUERY SELECT count(*) AS attendees FROM calendar_attendee JOIN calendar_item USING(dav_id) WHERE dav_name ~ '^/user1/anotherone/' ENDQUERY QUERY SELECT collection_id, dav_displayname, dav_etag, dav_name, default_privileges, description, is_addressbook, is_calendar, parent_container, public_events_only, resourcetypes, schedule_transp, timezone, user_no, publicly_readable FROM collection WHERE dav_name = '/user1/anotherone/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/1102-REPORT-sync-changed.test0000644000000000000000000000102211743152056022766 0ustar # # Check for support of REPORT sync-collection with no sync-token # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-agent: sync-collection changes REPORT HEADER=Content-type: text/xml HEAD # Should be no changes - we just requested this, after all. # BEGINDATA data:,36 ENDDATA davical-1.1.1/testing/tests/regression-suite/0832-freebusy.test0000644000000000000000000000171411446006434021255 0ustar # # Request a freebusy report by URL # TYPE=GET URL=http://mycaldav/freebusy.php/user1@example.net?start=20061001T000000&end=20070630T235959 HEAD REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ REPLACE=/^DTSTART:20060930T120000Z\r?$/DTSTART:correct/ REPLACE=/^DTEND:20070630T115959Z\r?$/DTEND:correct/ QUERY SELECT calendar_item.rrule, status, to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS start, to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS finish FROM caldav_data INNER JOIN calendar_item USING(dav_id,user_no,dav_name) WHERE caldav_data.user_no = 10 AND rrule_event_overlaps( dtstart, dtend, rrule, '20061001T000000', '20070630T235959') AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) ORDER BY 2, 3 ENDQUERY davical-1.1.1/testing/tests/regression-suite/us_holidays.ics0000644000000000000000000003637511633117640021174 0ustar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN X-WR-CALNAME:US Holidays BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20190421 DTEND;VALUE=DATE:20190422 SUMMARY:Easter Sunday UID:64E660BA-86DB-43CD-A067-194149D28471-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151248Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20041011 DTEND;VALUE=DATE:20041012 SUMMARY:Columbus Day UID:64874200-9494-415C-9FA8-B86F739FFB13-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051009;BYMONTH=10;BYDAY=2MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040704 DTEND;VALUE=DATE:20040705 SUMMARY:Independence Day UID:468CB2B3-342D-4D1D-B152-F52608E6CB4C-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060703 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110424 DTEND;VALUE=DATE:20110425 SUMMARY:Easter Sunday UID:01253561-2B9B-4341-88F5-29A572BB3E75-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151243Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20200412 DTEND;VALUE=DATE:20200413 SUMMARY:Easter Sunday UID:8EE35D87-548A-4495-BE91-07303C510724-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151246Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040101 DTEND;VALUE=DATE:20040102 SUMMARY:New Year's Day UID:5D55021E-0C17-49BD-BE73-29F472A75FAD-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:4 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051231 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051027 DTEND;VALUE=DATE:20051028 SUMMARY:Navy Day UID:183A097B-7D44-4C66-9569-AA520E7CB8DC-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151243Z RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20240331 DTEND;VALUE=DATE:20240401 SUMMARY:Easter Sunday UID:EDF531F8-7E53-4604-9F72-16BCD40CD7D2-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151242Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060416 DTEND;VALUE=DATE:20060417 SUMMARY:Easter Sunday UID:95DAFE6C-E465-40C1-8FAD-4EAB11CAD26B-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151251Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040119 DTEND;VALUE=DATE:20040120 SUMMARY:Martin Luther King Jr.'s Birthday UID:E8C35314-F61A-4649-A4C3-E4F24B2BA454-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:5 DTSTAMP:20060216T151248Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060115;BYMONTH=1;BYDAY=3MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20120408 DTEND;VALUE=DATE:20120409 SUMMARY:Easter Sunday UID:0EF392B7-5203-432C-B41B-BB7AFC5CBA6A-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151249Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20140420 DTEND;VALUE=DATE:20140421 SUMMARY:Easter Sunday UID:BCC001F2-681A-4D72-9631-ACCE8EA480A0-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151249Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051124 DTEND;VALUE=DATE:20051125 SUMMARY:Thanksgiving Day UID:F35052B2-D44B-43F8-9F2C-95149FD385FF-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151251Z RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=11;BYDAY=4TH END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060101 DTEND;VALUE=DATE:20060102 SUMMARY:New Year's Day UID:8FF1DB95-BC31-48B3-94A8-A519ED090EF7-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:4 DTSTAMP:20060216T151243Z RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20180401 DTEND;VALUE=DATE:20180402 SUMMARY:Easter Sunday UID:AB045233-7D93-490A-AEDC-70710D207055-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151245Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040906 DTEND;VALUE=DATE:20040907 SUMMARY:Labor Day UID:D2B79EA9-E22C-4F27-BB84-750584839575-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:4 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060903;BYMONTH=9;BYDAY=1MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040212 DTEND;VALUE=DATE:20040213 SUMMARY:Lincoln's Birthday UID:B14BF09D-1745-4F98-89D3-98410ACFD9C9-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151247Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060211 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20210404 DTEND;VALUE=DATE:20210405 SUMMARY:Easter Sunday UID:B5F73538-5A2E-4518-86F8-4AC2415447BB-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151244Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060904 DTEND;VALUE=DATE:20060905 SUMMARY:Labor Day UID:E1C2F367-726B-4BBC-A6F0-37E31EDA74F0-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:4 DTSTAMP:20060216T151247Z RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=9;BYDAY=1MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20050327 DTEND;VALUE=DATE:20050328 SUMMARY:Easter Sunday UID:467631C8-F6B4-419C-878F-082B8774CC6C-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151248Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTAMP:20060216T151243Z UID:20432B95-74EB-4A97-B6AA-CF307DE25236-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTART;VALUE=DATE:20040531 SUMMARY:Memorial Day DTEND;VALUE=DATE:20040601 DESCRIPTION:Fly flag half-staff until noon. RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060528;BYMONTH=5;BYDAY=-1MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040411 DTEND;VALUE=DATE:20040412 SUMMARY:Easter Sunday UID:AB7564F8-DEC3-4A9B-B228-595138D8F83E-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151243Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20080323 DTEND;VALUE=DATE:20080324 SUMMARY:Easter Sunday UID:70F1BEC8-058E-4CA0-A401-9D0AA6D10C25-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:4 DTSTAMP:20060216T151241Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060514 DTEND;VALUE=DATE:20060515 SUMMARY:Mother's Day UID:3DDCAA37-8FC9-4602-8161-062DA284C25A-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151242Z RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=2SU END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060704 DTEND;VALUE=DATE:20060705 SUMMARY:Independence Day UID:4D1563A6-B1B6-4FC3-B68D-C5BC32117935-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20220417 DTEND;VALUE=DATE:20220418 SUMMARY:Easter Sunday UID:8711F720-D78C-4AE3-86CC-4BE1C6A04944-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151245Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20100404 DTEND;VALUE=DATE:20100405 SUMMARY:Easter Sunday UID:7B660B80-30F0-42CC-A32A-4FEE2ECC6515-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151243Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051010 DTEND;VALUE=DATE:20051011 SUMMARY:Columbus Day UID:8B7568AE-0F91-48DA-88EE-210E402147BF-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=10;BYDAY=2MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040614 DTEND;VALUE=DATE:20040615 SUMMARY:Flag Day UID:349DCD34-83E1-42EF-81C7-C051E5B6FAC8-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151245Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060613 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20041027 DTEND;VALUE=DATE:20041028 SUMMARY:Navy Day UID:B7DA1215-2500-41A6-A40E-706ADD5FFC1E-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151243Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051026 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040216 DTEND;VALUE=DATE:20040217 SUMMARY:Washington's Birthday UID:7D553648-4460-4618-977E-12B8DB4516BF-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:5 DTSTAMP:20060216T151242Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060219;BYMONTH=2;BYDAY=3MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20230409 DTEND;VALUE=DATE:20230410 SUMMARY:Easter Sunday UID:4006A01A-8E57-497A-8061-C504817DEC29-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151248Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040515 DTEND;VALUE=DATE:20040516 SUMMARY:Armed Forces Day UID:DE7C6F7A-EA80-42C8-A05B-89341A373CA2-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151242Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060519;BYMONTH=5;BYDAY=3SA END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051111 DTEND;VALUE=DATE:20051112 SUMMARY:Veterans Day UID:64A2DCF3-5A6B-4EF4-A520-BA01CBC97617-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151242Z RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040120 DTEND;VALUE=DATE:20040121 SUMMARY:Inauguration Day UID:5155D737-F8AA-4522-8703-D51B4A30AF9C-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:6 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060119 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTAMP:20060216T151243Z UID:E44DD94F-150A-4B6E-8692-A53437147FCF-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTART;VALUE=DATE:20060529 SUMMARY:Memorial Day DTEND;VALUE=DATE:20060530 DESCRIPTION:Fly flag half-staff until noon. RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=-1MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060520 DTEND;VALUE=DATE:20060521 SUMMARY:Armed Forces Day UID:DEACF954-F452-4AC2-BB9C-437533BF49A6-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151247Z RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=3SA END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060917 DTEND;VALUE=DATE:20060918 SUMMARY:Constitution Day UID:9C3C643D-D138-4AA9-9AB4-F77443E70837-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20250420 DTEND;VALUE=DATE:20250421 SUMMARY:Easter Sunday UID:79FC38CA-5D7B-45B9-839B-27B5C8C3A514-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151246Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20041111 DTEND;VALUE=DATE:20041112 SUMMARY:Veterans Day UID:75F65F7C-5D88-45B2-9D95-18F7C8AFEB86-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151243Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051110 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20160327 DTEND;VALUE=DATE:20160328 SUMMARY:Easter Sunday UID:7D9E7675-0B5B-4E43-B918-235CD5A9248E-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151249Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20150405 DTEND;VALUE=DATE:20150406 SUMMARY:Easter Sunday UID:DF4DAEB8-7248-4F1F-BA4E-EA8B5BDF5D0C-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151244Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060212 DTEND;VALUE=DATE:20060213 SUMMARY:Lincoln's Birthday UID:E238FE0B-4E32-43D6-965F-ACC28CC43B21-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151243Z RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060220 DTEND;VALUE=DATE:20060221 SUMMARY:Washington's Birthday UID:3BBE9587-1A13-4DF6-8671-08511BC92786-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:5 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=2;BYDAY=3MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040917 DTEND;VALUE=DATE:20040918 SUMMARY:Constitution Day UID:9672014B-DAE5-42AF-B83E-91CE92CE1278-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151249Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060916 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20070408 DTEND;VALUE=DATE:20070409 SUMMARY:Easter Sunday UID:95C333C1-CEAE-45F0-B448-B8F9F5B768A2-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151247Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060120 DTEND;VALUE=DATE:20060121 SUMMARY:Inauguration Day UID:5485295A-60A8-4CBF-9574-CE838633DD95-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:6 DTSTAMP:20060216T151245Z RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20130331 DTEND;VALUE=DATE:20130401 SUMMARY:Easter Sunday UID:7896BE9D-72E8-4C38-9BC7-203830C6429B-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151244Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20041225 DTEND;VALUE=DATE:20041226 SUMMARY:Christmas Day UID:57B0B83E-0913-4853-B784-C072F9F990DF-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151245Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051224 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20040509 DTEND;VALUE=DATE:20040510 SUMMARY:Mother's Day UID:6E846799-408D-4D86-B3DF-D9946CCDB194-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151244Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060513;BYMONTH=5;BYDAY=2SU END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20170416 DTEND;VALUE=DATE:20170417 SUMMARY:Easter Sunday UID:35EE647D-6E48-4233-B0C4-CCC497684C92-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151251Z END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20051225 DTEND;VALUE=DATE:20051226 SUMMARY:Christmas Day UID:555C0D00-991F-48C5-A68B-7E3CBD5780FA-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151245Z RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20041125 DTEND;VALUE=DATE:20041126 SUMMARY:Thanksgiving Day UID:73C40DD3-C7C0-42BB-95F5-22B1FCE2F240-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151244Z RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051123;BYMONTH=11;BYDAY=4TH END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060116 DTEND;VALUE=DATE:20060117 SUMMARY:Martin Luther King Jr.'s Birthday UID:910ED267-B8DF-4CA7-B867-0ED1A5FD3F23-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:5 DTSTAMP:20060216T151242Z RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=1;BYDAY=3MO END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20060614 DTEND;VALUE=DATE:20060615 SUMMARY:Flag Day UID:C15CE396-EAA3-49FB-B79F-79AF3D6E5069-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:3 DTSTAMP:20060216T151247Z RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20090412 DTEND;VALUE=DATE:20090413 SUMMARY:Easter Sunday UID:698F4B6B-C5B9-4AF6-9E38-DF171C8448A5-7CFA95A3-9734-46AF-A4DC-5FB544A D96AF SEQUENCE:2 DTSTAMP:20060216T151249Z END:VEVENT END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0216-Moz-PUT-Completed-Task.result0000644000000000000000000000046711732223000024001 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "00ad5eb1eb5507884710b0b66aa5d5c4" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0911-Space-MKCALENDAR.test0000644000000000000000000000132711446006434022061 0ustar # # MKCALENDAR test for username with a space # TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ HEADER=Content-Type: text/xml AUTH=User Six:user6 HEAD BEGINDATA Space Calendar #391B71A0 ENDDATA QUERY SELECT user_no, parent_container, dav_displayname, is_calendar, public_events_only FROM collection WHERE dav_name = '/User Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0248-Bad-PROPFIND.result0000644000000000000000000000067311732223020021667 0ustar HTTP/1.1 400 Bad Request Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Location: /caldav.php/user1/home/ ETag: "567b0424ecca3303b030d882be2093ef" Content-Length: 86 Content-Type: text/xml; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0956-PROPFIND.result0000644000000000000000000000113511446006434021215 0ustar /public.php/user1/home/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0965-GET.result0000644000000000000000000000200311651212132020376 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, calendar-access Etag: "13249ced6c7527191a003f54f7e3cd25" Content-Length: 834 Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081024T140000 DTEND;TZID=Pacific/Auckland:20081024T150000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0099-REPORT-sync-initial.result0000644000000000000000000000124511743151262023410 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "e19f623303e99e3b089b635e55823c28" Content-Length: 361 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK data:,12 davical-1.1.1/testing/tests/regression-suite/0820-Spec-PROPFIND-1.result0000644000000000000000000000546111633117640022237 0ustar /caldav.php/user1/home/ /caldav.php/assistant1/ /caldav.php/teamclient1/ 20090602T120000Z user1 home httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/Really-Upgrade-Database.result0000644000000000000000000000035011664132211023703 0ustar The database is version 9.1 currently at revision 1.2.11. No patches were applied. Supported locales updated. Updated view: dav_principal.sql applied. CalDAV functions updated. RRULE functions updated. Database permissions updated. davical-1.1.1/testing/tests/regression-suite/0501-iCal-PROPFIND.test0000644000000000000000000000155311446006434021512 0ustar # # Testing with a process similar to iCal 3 (preferably 3.0.1+) # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEAD HEADER=User-Agent: DAVKit/2.0 (10.5; wrbt) iCal 3.0 HEADER=Content-Type: text/xml HEADER=Depth: 0 # # This query from iCal seems to discover several things. Firstly they # get the calendar-home-set URL for this path. Secondly, they ascertain # whether the calendar supports scheduling, and finally, whether it # handles some Apple-specific extensions. # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0912-Space-PROPFIND.test0000644000000000000000000000127711446006434021706 0ustar # # Testing username with a space, similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/User%20Six/ AUTH=User Six:user6 HEAD HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0933-PROPFIND-supported-privilege-set.test0000644000000000000000000000057111446006434025454 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0243-Moz-POST-FB.test0000644000000000000000000000347411651212132021237 0ustar # # POST to scheduling outbox for freebusy query on user2 # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/calendar; charset=utf-8 REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 METHOD:REQUEST BEGIN:VFREEBUSY DTSTAMP:20081022T062945Z ORGANIZER:mailto:user1@example.net DTSTART:20081020T110000Z DTEND:20081105T110000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net END:VFREEBUSY END:VCALENDAR ENDDATA QUERY SELECT calendar_item.rrule, calendar_item.status, dtstart AT TIME ZONE olson_name AS "a) Start", olson_name AS "b) Location", to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "c)UTC Start", to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "d) UTC End" FROM usr INNER JOIN collection USING (user_no) INNER JOIN caldav_data USING (collection_id) INNER JOIN calendar_item USING(dav_id) LEFT JOIN timezones ON (tz_id=tzid) WHERE lower(usr.email) = 'user1@example.net' AND collection.is_calendar AND collection.schedule_transp = 'opaque' AND rrule_event_overlaps( dtstart, dtend, rrule, '20081020T110000Z', '20081105T110000Z' ) AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ORDER BY 3 ENDQUERY davical-1.1.1/testing/tests/regression-suite/0526-iCal-PROPFIND.test0000644000000000000000000000063611446006434021522 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEAD HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0304-Chandler-PROPFIND-2.result0000644000000000000000000000300411732223023023043 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "53e2a5d2cabcd630996fc1f50f0bf094" Content-Length: 1223 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ user1 home HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0018-Mulberry-PUT-4.test0000644000000000000000000000172311446006434022035 0ustar # # We now have a calendar so we can PUT an event into it... TYPE=PUT URL=http://mycaldav/caldav.php/resource2/home/0A5EA1F0F2691A03E917E85F9F255448-0.ics HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061108T113035Z DTSTART;TZID=New Zealand Standard Time:20061030T100000 DURATION:PT1H LAST-MODIFIED:20061108T113044Z SEQUENCE:1 SUMMARY:Booking resource 2 UID:C8344958F0CC35344E063A04@D76FAF7B10D9E8D2D41F779C END:VEVENT END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0525-iCal-PROPFIND.result0000644000000000000000000000321211732223051022043 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "d5cc88f137d733e311ab4e4f73e88ed8" Content-Length: 1357 Content-Type: text/xml; charset="utf-8" /caldav.php/manager1/calendar-proxy-read/ "ccdfbfa2e7ee6c47d3ea8f134d415b89" /manager1/calendar-proxy-read/ /caldav.php/assistant1/ /caldav.php/teamclient1/ /caldav.php/user1/ /caldav.php/user1/calendar-proxy-read/ /caldav.php/assistant1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-read/ /caldav.php/resource2/calendar-proxy-read/ /caldav.php/user1/ /caldav.php/assistant1/ /caldav.php/resource1/ /caldav.php/resource2/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0105-Evo-REPORT-1.test0000644000000000000000000000074611446006434021326 0ustar # # Do a REPORT request TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEAD HEADER=Depth: 1 HEADER=User-Agent: Evolution/1.8.1 HEADER=Content-Type: text/xml BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0215-Moz-PUT-InProgress-Task.test0000644000000000000000000000172211446006434023627 0ustar # # PUT an "In Progress" task in the calendar # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.7pre) Gecko/20070805 Calendar/0.7pre HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTODO CREATED:20070805T201557Z LAST-MODIFIED:20070805T201643Z DTSTAMP:20070805T201557Z UID:917b9e47-b748-4550-a566-657fbe672447 SUMMARY:50% Complete\, uncancelled STATUS:IN-PROCESS PERCENT-COMPLETE:50 X-MOZ-LOCATIONPATH:917b9e47-b748-4550-a566-657fbe672447.ics DESCRIPTION:This task is in progress (50% complete) and has not been cancelled. END:VTODO END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0531-iCal4-PROPFIND.test0000644000000000000000000000140011446006434021570 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml HEADER=Depth: 0 # # Looking for interesting stuff like xmpp-uri # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0223-Moz-OPTIONS-denied.result0000644000000000000000000000074511732223003023100 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 214 Content-Type: text/xml; charset="utf-8" /caldav.php/user3/ davical-1.1.1/testing/tests/regression-suite/0505-iCal-PUT.test0000644000000000000000000000331011651212132020726 0ustar # # PUT an iCal style event into the database # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: DAVKit/2.0 (10.5.1; wrbt) iCal 3.0.1 HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:1 TRANSP:OPAQUE UID:AAA9318E-37D9-4319-8626-95ECD3D3B243 DTSTART;TZID=Pacific/Auckland:20071125T230000 DTSTAMP:20071123T093048Z SUMMARY:New Event CREATED:20071123T093048Z DTEND;TZID=Pacific/Auckland:20071126T000000 BEGIN:VALARM X-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_etag = 'b3e66a461ef178bd4791b2b6509bbb9d'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0540-iCal4-PROPFIND.result0000644000000000000000000000115411732223063022132 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "e08b84121b3f5a9294092cd23f6e5798" Content-Length: 304 Content-Type: text/xml; charset="utf-8" / /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0524-iCal-PROPFIND.result0000644000000000000000000001434311732223050022050 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "45a0a8b922545d0793e9b0b9d10726fe" Content-Length: 6054 Content-Type: text/xml; charset="utf-8" /caldav.php/manager1/ "ab4a67c917e242e0989cd278c75a510e" Manager 1 /caldav.php/assistant1/ /caldav.php/teamclient1/ /caldav.php/user1/ /caldav.php/user1/calendar-proxy-read/ /caldav.php/assistant1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-read/ /caldav.php/resource2/calendar-proxy-read/ /caldav.php/user1/ /caldav.php/assistant1/ /caldav.php/resource1/ /caldav.php/resource2/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/manager1/home/ "c240642ddef994358c96da82c0361a58" manager1 home /caldav.php/assistant1/ /caldav.php/teamclient1/ /caldav.php/user1/ /caldav.php/user1/calendar-proxy-read/ /caldav.php/assistant1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-read/ /caldav.php/resource2/calendar-proxy-read/ /caldav.php/user1/ /caldav.php/assistant1/ /caldav.php/resource1/ /caldav.php/resource2/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/manager1/addresses/ "c240642ddef994358c96da82c0361a58" manager1 addresses /caldav.php/assistant1/ /caldav.php/teamclient1/ /caldav.php/user1/ /caldav.php/user1/calendar-proxy-read/ /caldav.php/assistant1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-read/ /caldav.php/resource2/calendar-proxy-read/ /caldav.php/user1/ /caldav.php/assistant1/ /caldav.php/resource1/ /caldav.php/resource2/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/manager1/calendar-proxy-read/ "ccdfbfa2e7ee6c47d3ea8f134d415b89" /manager1/calendar-proxy-read/ /caldav.php/assistant1/ /caldav.php/teamclient1/ /caldav.php/user1/ /caldav.php/user1/calendar-proxy-read/ /caldav.php/assistant1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-read/ /caldav.php/resource2/calendar-proxy-read/ /caldav.php/user1/ /caldav.php/assistant1/ /caldav.php/resource1/ /caldav.php/resource2/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/manager1/calendar-proxy-write/ "ff25f14bac404c0aae34b5e75618d479" /manager1/calendar-proxy-write/ /caldav.php/assistant1/ /caldav.php/teamclient1/ /caldav.php/user1/ /caldav.php/user1/calendar-proxy-read/ /caldav.php/assistant1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-read/ /caldav.php/resource2/calendar-proxy-read/ /caldav.php/user1/ /caldav.php/assistant1/ /caldav.php/resource1/ /caldav.php/resource2/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0007-Mulberry-1.result0000644000000000000000000000050611732222736021722 0ustar HTTP/1.1 405 Method Not Allowed Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 45 Content-Type: text/plain; charset="utf-8" A collection already exists at that location.davical-1.1.1/testing/tests/regression-suite/0701-caldav4j-PUT.test0000644000000000000000000000255711651212132021560 0ustar # # PUT an caldav4j regression testing event into the database # TYPE=PUT URL=http://mycaldav/caldav.php/user1/collection/Daily_NY_5pm.ics HEADER=Content-Type: text/calendar HEADER=User-Agent: Jakarta Commons-HttpClient/3.0 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//OSAF//NONSGML Scoooby Server//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:America/New_York LAST-MODIFIED:20051220T211408Z BEGIN:STANDARD DTSTART:20051030T060000 TZOFFSETTO:-0500 TZOFFSETFROM:+0000 TZNAME:EST END:STANDARD BEGIN:DAYLIGHT DTSTART:20060402T010000 TZOFFSETTO:-0400 TZOFFSETFROM:-0500 TZNAME:EDT END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DTSTART;TZID=America/New_York:20060101T170000 SUMMARY:Daily_NY_5pm UID:DE916949-731D-4DAE-BA93-48A38B2B2030 SEQUENCE:4 DTSTAMP:20090515T095326Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1000 DURATION:PT1H END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS " CalDAV Data", calendar_item.last_modified FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name = '/user1/collection/Daily_NY_5pm.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0602-Soho-PROPFIND.result0000644000000000000000000000176211732223537022120 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "600c4b10a558bf4dcaff71d767733dbc" Content-Length: 694 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0237-Moz-REPORT.result0000644000000000000000000000127311446006434021545 0ustar /caldav.php/user1/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ /caldav.php/user1/.in/ /caldav.php/user1/.out/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0944-REPORT-principal-property-search.test0000644000000000000000000000105511446006434025552 0ustar # # Do a principal-property-search REPORT request TYPE=REPORT URL=http://regression.host/caldav.php/ HEAD HEADER=Content-Type: text/xml BEGINDATA user1@ex ENDDATA davical-1.1.1/testing/tests/regression-suite/0018-Mulberry-PUT-4.result0000644000000000000000000000046711732222744022402 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "75a75e1c7c4546074aab7645b5323738" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0936-PROPFIND-acl-restrictions.result0000644000000000000000000000116111732223656024502 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "b7aa82d645859eafdf0c41ad74490024" Content-Length: 309 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0948-MKTICKET.result0000644000000000000000000000162011751110656021210 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Ticket:Good Ticket ID ETag: "Some good etag" Content-Length: 440 Content-Type: text/xml; charset="utf-8" Good Ticket ID /caldav.php/user1/ Second-3600 infinity dav_owner_id: >1002< privileges: >000000000001001000100001< target_collection: >160< target_resource_i: >NULL< timeout: >01:00:00< davical-1.1.1/testing/tests/regression-suite/0837-freebusy.test0000644000000000000000000000251411651212132021251 0ustar # # Request a freebusy report by URL by a user # who doesn't have freebusy access. # TYPE=GET AUTH=user3:user3 URL=http://mycaldav/freebusy.php/user1@example.net?start=20061001T000000&finish=20070630T235959 HEAD REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ REPLACE=/^DTSTART:20061001T000000Z$/DTSTART:correct/ REPLACE=/^DTEND:20070630T235959Z$/DTEND:correct/ QUERY SELECT calendar_item.rrule, calendar_item.status, dtstart AT TIME ZONE olson_name AS "a) Start", olson_name AS "b) Location", to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "c)UTC Start", to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "d) UTC End" FROM usr INNER JOIN collection USING (user_no) INNER JOIN caldav_data USING (collection_id) INNER JOIN calendar_item USING(dav_id) LEFT JOIN timezones ON (tz_id=tzid) WHERE usr.email = 'user1@example.net' AND collection.is_calendar AND collection.schedule_transp = 'opaque' AND rrule_event_overlaps( dtstart, dtend, rrule, '20061001T000000Z', '20070630T235959Z' ) AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ORDER BY 3 ENDQUERY davical-1.1.1/testing/tests/regression-suite/0530-iCal4-PROPFIND.test0000644000000000000000000000071011446006434021572 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml HEADER=Depth: 0 # # Woohoo! Searching for the current-user-principal... # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0964-REPORT-calquery-private.test0000644000000000000000000000321011651212132023726 0ustar # # REPORT on user1's calendar as a less privileged user # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/anotherone/ AUTH=user4:user4 HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 1 HEAD BEGINDATA ENDDATA QUERY SELECT calendar_item.rrule, to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS start, to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS finish, class, calendar_item.dav_name, calendar_item.summary, calendar_item.tz_id FROM usr INNER JOIN collection USING (user_no) INNER JOIN caldav_data USING (collection_id) INNER JOIN calendar_item USING(dav_id) WHERE collection.dav_name = '/user1/anotherone/' AND collection.is_calendar AND rrule_event_overlaps( dtstart, dtend, rrule, '20070101T000000Z', '20080803T110000Z' ) AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ORDER BY dav_id ENDQUERY davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user3.test0000644000000000000000000000366511651212132024351 0ustar # # PUT a calendar collection to user3 so we have some starting events # # There is no CalDAV defined behaviour for this. # TYPE=PUT URL=http://mycaldav/caldav.php/user3/home/ HEADER=User-Agent: RSCDS Testing/0.9.x HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user3:user3 HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Europe/Helsinki BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 DTSTART:19810329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:EEST END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 DTSTART:19961027T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:EET END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:3 TRANSP:OPAQUE UID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB DTSTART;TZID=Europe/Helsinki:20081025T133000 DTSTAMP:20081024T200745Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12 SUMMARY:Irregular meeting for User 3 CREATED:20081024T200734Z DTEND;TZID=Europe/Helsinki:20081025T143000 END:VEVENT BEGIN:VEVENT SEQUENCE:2 TRANSP:OPAQUE UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491 DTSTART;TZID=Europe/Helsinki:20081024T084500 DTSTAMP:20081025T112653Z SUMMARY:Dentist\'s Council meeting RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR CREATED:20081025T112648Z DTEND;TZID=Europe/Helsinki:20081024T113000 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS "A1 CalDAV DATA" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user3/home/' ENDQUERY QUERY SELECT count(*) FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '^/user3/home/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0827-Spec-PROPFIND.test0000644000000000000000000000125011446006434021541 0ustar # # Testing for Spec compliance. PROPFIND on the root # TYPE=PROPFIND URL=http://mycaldav/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 1 HEADER=Content-Type: application/xml REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0005-Mulberry-1.test0000644000000000000000000000063011446006434021354 0ustar # # Before creating a calendar in Mulberry, we should be able # to do a PROPFIND and it should not be there. TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEADER=Depth: 1 HEADER=Content-Type: text/xml; charset=utf-8 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0560-iPhone-PROPFIND.result0000644000000000000000000000203311756131014022417 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "2b2bbe0fd58f5dc4b170658721ef721f" Content-Length: 735 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/ Untitled #391B71A0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0211-Moz-PUT-TENTATIVE.test0000644000000000000000000000271311446006434022174 0ustar # # PUT a confidential item in the calendar which we won't be able to see # as a different user (later). # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a2pre) Gecko/20061222 Calendar/3.0a1 HEADER=Accept: text/html,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T051646Z LAST-MODIFIED:20061223T051713Z DTSTAMP:20061223T051713Z UID:fbd57454-d966-4a14-8341-abe1edb1ae66 SUMMARY:Tentative Event STATUS:TENTATIVE CLASS:PUBLIC DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T190000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T210000 X-MOZ-LOCATIONPATH:fbd57454-d966-4a14-8341-abe1edb1ae66.ics LOCATION:Never never land END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/2007-REPORT-expanded-nz-holidays-2011.result0000644000000000000000000005204311732223744025411 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "abd4188c213ff3babafa5b142cd65d4b" Content-Length: 17065 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/nz_holidays/20081226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225121Z LAST-MODIFIED:20081117T225144Z DTSTAMP:20081117T225121Z UID:20081226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20111226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T225212Z LAST-MODIFIED:20081117T230337Z DTSTAMP:20081117T225212Z UID:20090101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20110101 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110101 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081225-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T224951Z LAST-MODIFIED:20081117T235108Z DTSTAMP:20081117T224951Z UID:20081225-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20111225 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111225 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090206-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235224Z LAST-MODIFIED:20081120T002639Z DTSTAMP:20081117T235224Z UID:20090206-1-all-publicholidays-dol.govt.nz SUMMARY:Waitangi Day TRANSP:TRANSPARENT X-MOZ-GENERATION:4 DTSTART;VALUE=DATE:20110206 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110206 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090425-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011910Z LAST-MODIFIED:20081120T001537Z DTSTAMP:20081118T011910Z UID:20090425-1-all-publicholidays-dol.govt.nz SUMMARY:ANZAC Day TRANSP:TRANSPARENT X-MOZ-GENERATION:2 DTSTART;VALUE=DATE:20110425 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110425 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T011947Z LAST-MODIFIED:20081118T012009Z DTSTAMP:20081118T011947Z UID:20090601-1-all-publicholidays-dol.govt.nz SUMMARY:Queen's Birthday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110606 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110606 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091026-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012125Z LAST-MODIFIED:20081118T012150Z DTSTAMP:20081118T012125Z UID:20091026-1-all-publicholidays-dol.govt.nz SUMMARY:Labour Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20111024 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111024 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081117T235121Z LAST-MODIFIED:20081118T012314Z DTSTAMP:20081117T235121Z UID:20090102-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110102 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110102 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091226-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012344Z LAST-MODIFIED:20081118T012529Z DTSTAMP:20081118T012344Z UID:20091226-1-all-publicholidays-dol.govt.nz SUMMARY:Boxing Day Holiday TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20111227 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111227 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091228-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012537Z LAST-MODIFIED:20081118T012606Z DTSTAMP:20081118T012537Z UID:20091228-1-all-publicholidays-dol.govt.nz SUMMARY:Christmas Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20111226 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111226 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100101-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T012634Z LAST-MODIFIED:20081118T012657Z DTSTAMP:20081118T012634Z UID:20100101-1-all-publicholidays-dol.govt.nz SUMMARY:New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110103 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110103 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20100607-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T013050Z LAST-MODIFIED:20081118T013102Z DTSTAMP:20081118T013050Z UID:20100607-1-all-publicholidays-dol.govt.nz SUMMARY:Day after New Year's Day Holiday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110104 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110104 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20110422-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T014342Z LAST-MODIFIED:20081118T014404Z DTSTAMP:20081118T014342Z UID:20110422-1-all-publicholidays-dol.govt.nz SUMMARY:Good Friday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110422 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20110425-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081118T014406Z LAST-MODIFIED:20081118T014430Z DTSTAMP:20081118T014406Z UID:20110425-1-all-publicholidays-dol.govt.nz SUMMARY:Easter Monday TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110425 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200154Z LAST-MODIFIED:20081119T200227Z DTSTAMP:20081119T200154Z UID:20081201-1-all-publicholidays-dol.govt.nz SUMMARY:Westland Anniversary Day (Monday nearest 1st December) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20111128 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111128 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20081201-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200252Z LAST-MODIFIED:20081119T200304Z DTSTAMP:20081119T200252Z UID:20081201-2-all-publicholidays-dol.govt.nz SUMMARY:Chatham Islands Anniversary Day (Monday nearest 30th November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20111128 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111128 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090126-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200321Z LAST-MODIFIED:20081119T200334Z DTSTAMP:20081119T200321Z UID:20090126-1-all-publicholidays-dol.govt.nz SUMMARY:Auckland Anniversary Day (Monday nearest 29th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110131 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110131 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200350Z LAST-MODIFIED:20081119T200406Z DTSTAMP:20081119T200350Z UID:20090119-1-all-publicholidays-dol.govt.nz SUMMARY:Wellington Anniversary Day (Monday nearest 22nd January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110124 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110124 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090119-2-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200431Z LAST-MODIFIED:20081119T200443Z DTSTAMP:20081119T200431Z UID:20090119-2-all-publicholidays-dol.govt.nz SUMMARY:Southland Anniversary Day (Monday nearest 17th January) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110117 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110117 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090202-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200519Z LAST-MODIFIED:20081119T200530Z DTSTAMP:20081119T200519Z UID:20090202-1-all-publicholidays-dol.govt.nz SUMMARY:Nelson Anniversary Day (Monday nearest 1st Feb) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110131 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110131 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091023-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200759Z LAST-MODIFIED:20081119T200809Z DTSTAMP:20081119T200759Z UID:20091023-1-all-publicholidays-dol.govt.nz SUMMARY: Hawkes' Bay Anniversary Day (Friday before 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20111021 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111021 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091102-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T200840Z LAST-MODIFIED:20081119T200928Z DTSTAMP:20081119T200840Z UID:20091102-1-all-publicholidays-dol.govt.nz SUMMARY:Marlborough Anniversary Day (Monday after 4th Monday of October) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20111031 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111031 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20091113-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201008Z LAST-MODIFIED:20081119T201040Z DTSTAMP:20081119T201008Z UID:20091113-1-all-publicholidays-dol.govt.nz SUMMARY:Canterbury Anniversary Day (Second Friday after the first Tuesda y in November) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20111111 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20111111 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20090928-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T201140Z LAST-MODIFIED:20081119T201153Z DTSTAMP:20081119T201140Z UID:20090928-1-all-publicholidays-dol.govt.nz SUMMARY:South Canterbury Anniversary Day (4th Monday in September) TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110926 DURATION:P1D RECURRENCE-ID;VALUE=DATE:20110926 END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20110314-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T203128Z LAST-MODIFIED:20081119T203139Z DTSTAMP:20081119T203128Z UID:20110314-1-all-publicholidays-dol.govt.nz SUMMARY:Taranaki Anniversary Day TRANSP:TRANSPARENT DTSTART;VALUE=DATE:20110314 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/20110321-1-all-publicholidays-dol.govt.nz.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081119T203213Z LAST-MODIFIED:20081119T203247Z DTSTAMP:20081119T203213Z UID:20110321-1-all-publicholidays-dol.govt.nz SUMMARY:Otago Anniversary Day TRANSP:TRANSPARENT X-MOZ-GENERATION:1 DTSTART;VALUE=DATE:20110321 DURATION:P1D END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Boxing Day< dtstart: >2005-01-01 00:00:00+13< rrule: >FREQ=YEARLY< summary: >New Year's Day< dtstart: >2005-12-25 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Christmas Day< dtstart: >2005-02-06 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Waitangi Day< dtstart: >2005-04-25 00:00:00+12< rrule: >FREQ=YEARLY< summary: >ANZAC Day< dtstart: >2005-06-06 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=6;BYDAY=1MO< summary: >Queen's Birthday< dtstart: >2005-10-24 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYDAY=4MO< summary: >Labour Day< dtstart: >2005-01-02 00:00:00+13< rrule: >FREQ=YEARLY< summary: >Day after New Year's Day< dtstart: >2005-12-27 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=2< summary: >Boxing Day Holiday< dtstart: >2005-12-26 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=1< summary: >Christmas Day Holiday< dtstart: >2005-01-03 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=1< summary: >New Year's Day Holiday< dtstart: >2005-01-04 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=2< summary: >Day after New Year's Day Holiday< dtstart: >2011-04-22 00:00:00+12< rrule: >NULL< summary: >Good Friday< dtstart: >2011-04-25 00:00:00+12< rrule: >NULL< summary: >Easter Monday< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28< summary: >Westland Anniversary Day (Monday nearest 1st December)< dtstart: >2005-11-28 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29< summary: >Chatham Islands Anniversary Day (Monday nearest 30th November)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO< summary: >Auckland Anniversary Day (Monday nearest 29th January)< dtstart: >2005-01-24 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO< summary: >Wellington Anniversary Day (Monday nearest 22nd January)< dtstart: >2005-01-17 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO< summary: >Southland Anniversary Day (Monday nearest 17th January)< dtstart: >2005-01-31 00:00:00+13< rrule: >FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO< summary: >Nelson Anniversary Day (Monday nearest 1st Feb)< dtstart: >2005-10-21 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR< summary: >Hawkes' Bay Anniversary Day (Friday before 4th Monday of October)< dtstart: >2005-10-31 00:00:00+13< rrule: >FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58< summary: >Marlborough Anniversary Day (Monday after 4th Monday of October)< dtstart: >2005-11-11 00:00:00+13< rrule: >FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR< summary: >Canterbury Anniversary Day (Second Friday after the first Tuesday in November)< dtstart: >2005-09-26 00:00:00+12< rrule: >FREQ=YEARLY;BYMONTH=9;BYDAY=4MO< summary: >South Canterbury Anniversary Day (4th Monday in September)< dtstart: >2011-03-14 00:00:00+13< rrule: >NULL< summary: >Taranaki Anniversary Day< dtstart: >2011-03-21 00:00:00+13< rrule: >NULL< summary: >Otago Anniversary Day< davical-1.1.1/testing/tests/regression-suite/0557-iPhone-MKCALENDAR.result0000644000000000000000000000133711755655204022626 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >Untitled< is_calendar: >1< parent_container: >/user1/< public_events_onl: >0< user_no: >10< changed_by: >10< property_name: >http://apple.com/ns/ical/:calendar-color< property_value: >#391B71A0< changed_by: >10< property_name: >urn:ietf:params:xml:ns:caldav:supported-calendar-component-set< property_value: > < davical-1.1.1/testing/tests/regression-suite/0822-Spec-PROPFIND-3.result0000644000000000000000000004514711651212132022240 0ustar /caldav.php/user1/home/ 20090602T120000Z user1 home httpd/unix-directory Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics 20061101T200217Z Lunch with David 747 text/calendar "2c32a2f8aba853654eb17fe037a4db4d" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/20061101T073004Z.ics 20061031T183000Z A Changed Meeting 829 text/calendar "bcc402382688cb3e8e57379c757dbcb0" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics 20061119T151336Z Weekly Project Meeting 999 text/calendar "a1c6404d61190f9574e2bfd69383f144" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics 20061222T142350Z Confidential Event 956 text/calendar "08a435c2abaf38f4a50a997343c098a7" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics 20061222T141415Z Private Event 970 text/calendar "5def8ae2b20893a1c7f4dbaeb008f2f1" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics 20061222T161646Z Tentative Event 929 text/calendar "ac90acd649c25070b1a2a17fb31a105a" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics 20070805T080215Z Incomplete, uncancelled 415 text/calendar "509b0f0d8a3363379f9f5727f5dd74a0" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics 20070805T081557Z 50% Complete, uncancelled 449 text/calendar "cb3d9dc3e8c157f53eba3ea0e1e0f146" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics 20070805T081647Z Due 7/8/7 16:30, completed 961 text/calendar "00ad5eb1eb5507884710b0b66aa5d5c4" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics 20070806T103244Z A Cancelled Task, with a start and due date 1001 text/calendar "a2990674708634a311bb98a59865ca50" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics 20071203T072630Z Morning Meeting 1119 text/calendar "e8060931f30c1798ac58ffbe4ec0bffc" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics 20071203T072915Z Release 0.9.3 1013 text/calendar "8f581a053df6d833254756dfd7553d37" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics 20060510T163751Z Beer O'Clock 769 text/calendar "55f02f66966ee150320383803d1e0d34" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics 20061023T225217Z Morning Mgmt Mtg 313 text/calendar "6f16959eee5c920b45548840b1e9ea19" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics 20071122T203048Z BBQ @ ML's 981 text/calendar "efd0257efbc898d059c200d1391af060" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics 20091006T095807Z New Event 676 text/calendar "257b9df4aaf573a578af4aadd033abf4" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/0544-gzip-PUT.ics 20111004T023507Z In Central Europe, 2pm, Oct 5th for 1 hour 761 text/calendar "6ddd18264a9d40c1c9d37a005eeb7e4f" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/0545-deflate-PUT.ics 20111004T023507Z In Prague, 10am, Oct 7th for 1 hour 710 text/calendar "4a3aa58a3e11487e87d87024465d4182" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 20081024T090749Z Party all day! 772 text/calendar "165746adbab8bc0c8336a63cc5332ff2" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 20081024T090749Z Woohoo! Time to Par-tay! 800 text/calendar "2a09ef8c6a9e0b6bc16228359b99d8e7" Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0306-Chandler-DELETE-1.test0000644000000000000000000000070711446006434022244 0ustar # # Test the DELETE of the collection which Chandler does at # this point in it's search for understanding # TYPE=DELETE URL=http://mycaldav/caldav.php/user1/home/.ce7ad224-8288-11db-ec28-b49a13ab0e46.tmp/ HEADER=Chandler/0.7alpha4 (Linux) HEAD # # Query to confirm we got rid of it QUERY SELECT 'Count of matching calendars (should be 0)', count(1) FROM collection WHERE dav_name = '/user1/home/.ce7ad224-8288-11db-ec28-b49a13ab0e46.tmp/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0889-POST-freebusy.test0000644000000000000000000000254711633117640022061 0ustar # # Testing for Spec compliance. POST on outbox for # free/busy information but this time try and get as many # events included in the processing as possible # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=User-Agent: draft-schedule-05 Spec Tests HEADER=Content-Type: text/calendar REPLACE=#\d{8}T\d{6}#YYYYMMDDThhmmss# BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 METHOD:REQUEST BEGIN:VFREEBUSY DTSTAMP:20081019T202752Z ORGANIZER:mailto:user1@example.net DTSTART:20001021T110000Z DTEND:20101106T110000Z UID:1e680b0e-ee15-4d63-844f-3e48aa92791f ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user2@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user3@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user4@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user6@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:resource2@example.net END:VFREEBUSY END:VCALENDAR ENDDATA REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ davical-1.1.1/testing/tests/regression-suite/0248-Bad-PROPFIND.test0000644000000000000000000000111411633117640021331 0ustar # # Do a PROPFIND request with junk in the request # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0547-iCal4-PROPFIND.result0000644000000000000000000004774211776301362022165 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "0c6e80ace8d360479d21cc6ebfcd3f6c" Content-Length: 20132 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ "89514106d00f37cc9ee71689c450d2ef" User 1 /caldav.php/user1/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ "243d78db0cc75a576d2603eef69efdc9" user1 home #0252D4FF 1 /caldav.php/user1/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ "24c9e15e52afc47c225b757e7bee1f9d" user1 addresses /caldav.php/user1/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ "bac273dae96780a3c8ed0c032266322c" created /caldav.php/user1/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.in/ "0389feae460444b4b5db3b16c94b1e43" User 1 Inbox /caldav.php/user1/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.out/ "1" User 1 Outbox /caldav.php/user1/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ "ac192d10783fff90598af2facc8259df" iCal Calendar #391B71A0 /caldav.php/user1/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ "abad5538c4aa570cc54b6ff0d36a4565" /user1/calendar-proxy-read/ /caldav.php/user1/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ "04ba2c2164225fb5abce13f2c523b6c7" /user1/calendar-proxy-write/ /caldav.php/user1/ /caldav.php/user1/home/ /caldav.php/user1/created/ /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0557-iPhone-MKCALENDAR.test0000644000000000000000000000163211651212132022245 0ustar # # MKCALENDAR test for iCal # TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/ HEADER=Content-Type: text/xml HEAD BEGINDATA Untitled #391B71A0 ENDDATA QUERY SELECT user_no, parent_container, dav_displayname, is_calendar, public_events_only FROM collection WHERE dav_name = '/user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/'; ENDQUERY QUERY SELECT property_name, property_value, changed_by FROM property WHERE dav_name = '/user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0225-Moz-OPTIONS-group-principal.result0000644000000000000000000000057211732223006024766 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Allow: OPTIONS, PROPFIND, REPORT, DELETE, LOCK, UNLOCK, MOVE, GET, HEAD, MKCOL, MKCALENDAR, PROPPATCH, BIND, ACL Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0533-iCal4-PROPPATCH.test0000644000000000000000000000073711446006434021725 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml # # BEGINDATA #0252D4FF ENDDATA davical-1.1.1/testing/tests/regression-suite/0862-Spec-REPORT-principal.test0000644000000000000000000000152311446006434023314 0ustar # # Do a REPORT request TYPE=REPORT URL=http://mycaldav/caldav.php/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20101013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml BEGINDATA user 1 ENDDATA davical-1.1.1/testing/tests/regression-suite/0846-Spec-PROPPATCH-calendar.result0000644000000000000000000000227211755667725024017 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 687 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ Some properties were not able to be changed. HTTP/1.1 403 Forbidden Unsupported resourcetype modification. HTTP/1.1 424 Failed Dependency changed_last_5m: >1< dav_displayname: >User One's addressbook< is_addressbook: >1< is_calendar: >0< resourcetypes: >< schedule_transp: >transparent< davical-1.1.1/testing/tests/regression-suite/0010-Mulberry-PUT-1.result0000644000000000000000000000325611732222737022370 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "b000d7defa19ccb7cd21e546b54155ee" Content-Length: 0 Content-Type: text/plain; charset="utf-8" A1 CalDAV DATA: >BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 X-WR-CALNAME:home BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061025T101327Z DTSTART;TZID=New Zealand Standard Time:20061025T091500 DURATION:PT1H SUMMARY:A first event UID:B18CBB57295D01D7661A6DD4@D76FAF7B10D9E8D2D41F779C END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2006-10-25 10:15:00< dtstamp: >2006-10-25 10:13:27< dtstart: >2006-10-25 09:15:00< due: >NULL< last_modified: >2006-10-25 10:13:27< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >NULL< status: >NULL< summary: >A first event< transp: >NULL< tz_id: >New Zealand Standard Time< uid: >B18CBB57295D01D7661A6DD4@D76FAF7B10D9E8D2D41F779C< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/2005-REPORT-expanded-nz-holidays-2009.test0000644000000000000000000000166711633117640025062 0ustar # # Test expanded report for NZ public holidays for 2009 # TYPE=REPORT URL=http://regression.host/caldav.php/user4/nz_holidays/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA ENDDATA QUERY SELECT dtstart, rrule, summary FROM calendar_item WHERE dav_name ~ '^/user4/nz_holidays/' AND (rrule IS NOT NULL OR (dtstart >= '20081231T110000Z' AND dtstart < '20091231T110000Z') ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/0838-Spec-LOCK.result0000644000000000000000000000142411732223566021421 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Lock-Token: Content-Length: 456 Content-Type: text/xml; charset="utf-8" 0 http://andrew.mcmillan.net.nz/node/5/ Second-300 opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx davical-1.1.1/testing/tests/regression-suite/0528-iCal-PROPFIND.test0000644000000000000000000000064011446006434021517 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/resmgr1/ HEAD HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0504-iCal-PROPFIND.result0000644000000000000000000001057011732223036022050 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "198df454dbf27f8311378759dfeaee14" Content-Length: 4155 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics "bcc402382688cb3e8e57379c757dbcb0" HTTP/1.1 200 OK /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics "a1c6404d61190f9574e2bfd69383f144" HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics "08a435c2abaf38f4a50a997343c098a7" HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics "5def8ae2b20893a1c7f4dbaeb008f2f1" HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics "ac90acd649c25070b1a2a17fb31a105a" HTTP/1.1 200 OK /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics "509b0f0d8a3363379f9f5727f5dd74a0" HTTP/1.1 200 OK /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics "cb3d9dc3e8c157f53eba3ea0e1e0f146" HTTP/1.1 200 OK /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics "00ad5eb1eb5507884710b0b66aa5d5c4" HTTP/1.1 200 OK /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics "a2990674708634a311bb98a59865ca50" HTTP/1.1 200 OK /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" HTTP/1.1 200 OK /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics "8f581a053df6d833254756dfd7553d37" HTTP/1.1 200 OK /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics "55f02f66966ee150320383803d1e0d34" HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0244-Moz-POST-FB.test0000644000000000000000000000331111633117640021236 0ustar # # POST to scheduling outbox for freebusy query on user2 # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/calendar; charset=utf-8 HEADER=Originator: mailto:user1@example.net HEADER=Recipient: mailto:user2@example.net REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 METHOD:REQUEST BEGIN:VFREEBUSY DTSTAMP:20081022T062945Z ORGANIZER:mailto:user1@example.net DTSTART:20081020T110000Z DTEND:20081105T110000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user2@example.net END:VFREEBUSY END:VCALENDAR ENDDATA QUERY SELECT calendar_item.rrule, to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS start, to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS finish, class FROM usr INNER JOIN collection USING (user_no) INNER JOIN caldav_data USING (collection_id) INNER JOIN calendar_item USING(dav_id) WHERE lower(usr.email) = 'user2@example.net' AND collection.is_calendar AND rrule_event_overlaps( dtstart, dtend, rrule, '20081020T110000Z', '20081105T110000Z' ) AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ORDER BY dav_id ENDQUERY davical-1.1.1/testing/tests/regression-suite/0828-Spec-PROPFIND-5.result0000644000000000000000000000164611633117640022254 0ustar /caldav.php/user1/home/ httpd/unix-directory user1 home Dow, 01 Jan 2000 00:00:00 GMT 20090602T120000Z /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user3-utf8.test0000644000000000000000000000151311651212132025223 0ustar # # PUT a calendar collection to user3 to test UTF-8 processing # TYPE=PUT URL=http://mycaldav/caldav.php/user3/utf8/ HEADER=User-Agent: RSCDS Testing/0.9.x HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user3:user3 HEAD QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, caldav_data AS "A1 CalDAV DATA" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user3/utf8/' ENDQUERY QUERY SELECT count(*) FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '^/user3/utf8/' ENDQUERY DATA=utf8-test davical-1.1.1/testing/tests/regression-suite/0243-Moz-POST-FB.result0000644000000000000000000000226311631652652021606 0ustar mailto:user1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20081020T110000Z DTEND:20081105T110000Z FREEBUSY:20081020T184500Z/20081020T193000Z FREEBUSY:20081022T184500Z/20081022T193000Z FREEBUSY:20081027T184500Z/20081027T193000Z FREEBUSY:20081029T184500Z/20081029T193000Z FREEBUSY:20081103T184500Z/20081103T193000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net END:VFREEBUSY END:VCALENDAR a) Start: >2007-12-11 07:45:00< b) Location: >Antarctica/McMurdo< c)UTC Start: >20071210T184500Z< d) UTC End: >20071210T193000Z< rrule: >FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH< status: >NULL< davical-1.1.1/testing/tests/regression-suite/0537-iCal4-PROPFIND.test0000644000000000000000000000071511446006434021606 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/.in/ HEAD HEADER=DAVKit/4.0 (729); CalendarStore/4.0 (965); iCal/4.0 (1362); Mac OS X/10.6.1 (10B504) HEADER=Content-Type: text/xml HEADER=Depth: 1 # # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0236-Moz-REPORT.test0000644000000000000000000000237011651212132021174 0ustar # # Check for REPORT calendar-query of VTODO within time range # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8pre) Gecko/20071023 Sunbird/0.7 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 1 HEAD BEGINDATA ENDDATA QUERY SELECT dtstart, due, rrule, summary FROM calendar_item JOIN caldav_data USING (dav_id) WHERE calendar_item.dav_name ~ '^/user1/home/' AND caldav_data.caldav_type = 'VTODO' AND (rrule IS NOT NULL OR dtstart IS NULL OR ( ( (due IS NULL AND dtstart > '20071101T110000Z') OR due > '20071101T110000Z' ) AND dtstart < '20080104T110000Z' ) ) ENDQUERY davical-1.1.1/testing/tests/regression-suite/0552-iPhone-PROPFIND.test0000644000000000000000000000157511446006434022076 0ustar # # Testing with a process similar to iPhone 3 # TYPE=PROPFIND URL=http://mycaldav/principals/users/user1/ HEAD AUTH=user1:user1 HEADER=User-Agent: DAVKit/4.0 (728.3); iCalendar/1 (34); iPhone/3.0 7A341 HEADER=Content-Type: text/xml # # This query from the iPhone seems to discover several things. Firstly they # get the calendar-home-set URL for this path. Secondly, they ascertain # whether the calendar supports scheduling, and finally, whether it # handles some Apple-specific extensions. # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0872-PROPFIND.test0000644000000000000000000000114711446006434020656 0ustar # # Testing for Spec compliance. PROPFIND on a calendar, # Depth: 1, looking for the getctag & getetag # TYPE=PROPFIND AUTH=user2:user2 URL=http://mycaldav/caldav.php/user2/home/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 1 HEADER=Content-Type: application/xml HEAD REPLACE=#\d{8}T\d{6}#YYYYMMDDThhmmss# BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0935-PROPFIND-acl.result0000644000000000000000000000414311732223656021756 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "bb9774ca300b3d2a6ce694e6326a8673" Content-Length: 1830 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/assistant1/ /caldav.php/teamclient1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0860-Spec-REPORT-principal.result0000644000000000000000000000057711732223601023654 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "07474790757c5e1b526ce4901889d6d3" Content-Length: 68 Content-Type: text/xml; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0604-Soho-PROPFIND.test0000644000000000000000000000115011446006434021547 0ustar # # SOHO Organizer works best looking at the person # # Suppose there were a Depth: 0 header? # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEADER=User-Agent: SOHO Organizer/6.5.2 libcurl/7.17.0 OpenSSL/0.9.7l zlib/1.2.3 libssh2/0.17 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0830-Spec-FREEBUSY-1.test0000644000000000000000000000274611651212132021677 0ustar # # Request a REPORT which should report only freebusy # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: CALDAV compliance testing HEADER=Accept: text/calendar HEADER=Content-Type: text/xml HEADER=Depth: 1 HEAD BEGINDATA ENDDATA REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ QUERY SELECT calendar_item.rrule, calendar_item.status, dtstart AT TIME ZONE olson_name AS "a) Start", olson_name AS "b) Location", to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "c)UTC Start", to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "d) UTC End" FROM usr INNER JOIN collection USING (user_no) INNER JOIN caldav_data USING (collection_id) INNER JOIN calendar_item USING(dav_id) LEFT JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user1/home/' AND collection.is_calendar AND collection.schedule_transp = 'opaque' AND rrule_event_overlaps( dtstart, dtend, rrule, '20061004T140000Z', '20070105T220000Z' ) AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ORDER BY 3 ENDQUERY davical-1.1.1/testing/tests/regression-suite/0015-Mulberry-PROPFIND-6.result0000644000000000000000000000264111732222743023145 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "5fec6bf01e8802ec9facdb7adc7ab93f" Content-Length: 1124 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics 731 text/calendar HTTP/1.1 200 OK /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics 747 text/calendar HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0021-Mulberry-DELETE-2.result0000644000000000000000000000042111732222746022654 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/2100-REPORT-calquery-no-prop.test0000644000000000000000000000123611776163005023650 0ustar # # A test from Mozilla after we have run all other tests and have # events from other calendars in the database. # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: DAViCal/RegressionTest HEADER=Content-Type: text/xml HEADER=Depth: 1 HEAD BEGINDATA ENDDATA REPLACE=/ETag: "[a-z0-9]+"/ETag: "looks like an etag"/ davical-1.1.1/testing/tests/regression-suite/0937-PROPFIND-inherited-acl-set.result0000644000000000000000000000106611732223657024524 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "049914e7ea4ed4db2a7a2a1c2494e0d4" Content-Length: 250 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0912-Space-PROPFIND.result0000644000000000000000000001144211732223636022243 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "f640afc35eb1b3892d84512c69748944" Content-Length: 4581 Content-Type: text/xml; charset="utf-8" /caldav.php/User%20Six/ "f077f746d340bc4f1998b35342411363" User 6 /caldav.php/User%20Six/home/ /caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/User%20Six/home/ "993b04b3b3772dc595b5896f1bf36192" User Six home /caldav.php/User%20Six/home/ /caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/User%20Six/addresses/ "28e06afe6d538a7e84518750357ef98d" User Six addresses /caldav.php/User%20Six/home/ /caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ "d0711d9c33f6c22359ee83adb7751cda" Space Calendar #391B71A0 /caldav.php/User%20Six/home/ /caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/User%20Six/calendar-proxy-read/ "7032a440adf6aaab2a81cd3bc214d153" /User Six/calendar-proxy-read/ /caldav.php/User%20Six/home/ /caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/User%20Six/calendar-proxy-write/ "d729246362363c87ec3d13d6eaa99efa" /User Six/calendar-proxy-write/ /caldav.php/User%20Six/home/ /caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0925-MOVE.result0000644000000000000000000000100011751110641020520 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" cd_collection: >160< cd_user_no: >10< ci_collection: >160< ci_user_no: >10< data_name: >/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< item_name: >/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics< davical-1.1.1/testing/tests/regression-suite/0824-Spec-PROPFIND-5.test0000644000000000000000000000111011446006434021673 0ustar # # Testing for Spec compliance. PROPFIND on a calendar collection. # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# BEGINDATA ENDDATA # REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ davical-1.1.1/testing/tests/regression-suite/0700-caldav4j-MKCALENDAR.test0000644000000000000000000000112011446006434022501 0ustar # # MKCALENDAR test for caldav4j # TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/user1/collection/ HEADER=Content-Type: text/xml HEAD BEGINDATA My sample calendar description ENDDATA QUERY SELECT user_no, parent_container, dav_displayname, is_calendar, public_events_only FROM collection WHERE dav_name = '/user1/collection/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0921-PROPFIND-supported-stuff.result0000644000000000000000000000062011732223644024355 0ustar HTTP/1.1 404 Not Found Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 129 Content-Type: text/xml; charset="utf-8" That resource is not present on this server. davical-1.1.1/testing/tests/regression-suite/0402-Cadaver-GET-1.test0000644000000000000000000000030011446006434021530 0ustar # # Doing a GET with cadaver # TYPE=GET URL=http://mycaldav/caldav.php/user1/home/20061101T073004Z.ics HEADER=User-Agent: cadaver/0.22.3 neon/0.25.5 HEADER=Connection: TE HEADER=TE: trailers davical-1.1.1/testing/tests/regression-suite/0947-ACL.result0000644000000000000000000000134311732223666020402 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" by_collection: >NULL< by_principal: >1002< displayname: >User 4< privileges: >000000000001001000100001< to_principal: >1005< by_collection: >NULL< by_principal: >1002< displayname: >Assistant 1< privileges: >000000000001001011000111< to_principal: >1009< by_collection: >NULL< by_principal: >1002< displayname: >Team for Client1< privileges: >000000000001001000000001< to_principal: >1013< davical-1.1.1/testing/tests/regression-suite/0946-ACL.result0000644000000000000000000000064111751110654020372 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" by_collection: >160< by_principal: >NULL< displayname: >User 4< privileges: >000000000000001000110001< to_principal: >1005< davical-1.1.1/testing/tests/regression-suite/0918-PROPFIND-supported-stuff.result0000644000000000000000000000465011755670647024410 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "d8ca6e096e4f41c01747fcc58a8e822f" Content-Length: 2155 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ User 1's Calendaranza text/calendar HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0300-Chandler-OPTIONS-1.test0000644000000000000000000000024711446006434022426 0ustar # # Do an initial OPTIONS request (unauthenticated) TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/home/ NOAUTH HEADER=User-Agent: Chandler/0.7alpha4 (Linux) HEAD davical-1.1.1/testing/tests/regression-suite/0952-PROPFIND.result0000644000000000000000000000113511751112127021205 0ustar /caldav.php/user1/home/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0508-iCal-REPORT.result0000644000000000000000000000325211732223040021640 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "caba91d5411c487320e8acc717f44528" Content-Length: 1389 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics "efd0257efbc898d059c200d1391af060" BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:6 TRANSP:OPAQUE UID:AAA9318E-37D9-4319-8626-95ECD3D3B243 DTSTART;TZID=Pacific/Auckland:20071125T130000 DTSTAMP:20071124T224850Z SUMMARY:BBQ @ ML's CREATED:20071123T093048Z DTEND;TZID=Pacific/Auckland:20071125T190000 LOCATION:ML's House BEGIN:VALARM X-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user3-utf8.result0000644000000000000000000000047311732222720025572 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" count: >34< davical-1.1.1/testing/tests/regression-suite/0216-Moz-PUT-Completed-Task.test0000644000000000000000000000271511446006434023454 0ustar # # PUT a completed task in the calendar # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.7pre) Gecko/20070805 Calendar/0.7pre HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO CREATED:20070805T201647Z LAST-MODIFIED:20070805T201834Z DTSTAMP:20070805T201647Z UID:0575d895-a006-4ed8-9be6-0d1b6b6b1f96 SUMMARY:Due 7/8/7 16:30\, completed STATUS:COMPLETED DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070807T163000 COMPLETED:20070805T201737Z PERCENT-COMPLETE:100 X-MOZ-LOCATIONPATH:0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics DESCRIPTION:Due on 7/8/7 at 4:30pm\, but completed alread on 6/8/7 CATEGORIES:Projects END:VTODO END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0935-PROPFIND-acl.test0000644000000000000000000000055311446006434021413 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0510-iCal-PROPFIND.test0000644000000000000000000000113511446006434021506 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEAD HEADER=User-Agent: DAVKit/2.0 (10.5; wrbt) iCal 3.0 HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0848-Spec-PROPPATCH-calendar.test0000644000000000000000000000166411755670223023451 0ustar # # Check for support of PROPPATCH method # # Try (and succeed) to set the collection to be a calendar. # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEADER=User-agent: SpecTest PROPPATCH HEADER=Content-type: text/xml HEAD BEGINDATA User 1's Calendaranza ENDDATA QUERY SELECT dav_displayname, is_addressbook, is_calendar, resourcetypes, modified > (current_timestamp - '5 minutes'::interval) AS changed_last_5m, schedule_transp FROM collection WHERE dav_name = '/user1/home/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0800-Spec-LOCK-1.result0000644000000000000000000000142411732223544021540 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Lock-Token: Content-Length: 456 Content-Type: text/xml; charset="utf-8" 0 http://andrew.mcmillan.net.nz/node/5/ Second-300 opaquelocktoken:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx davical-1.1.1/testing/tests/regression-suite/0504-iCal-PROPFIND.test0000644000000000000000000000104611446006434021512 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEAD HEADER=User-Agent: DAVKit/2.0 (10.5; wrbt) iCal 3.0 HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA # REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ # REPLACE=/^ETag: "[0-9a-f]{32}"/ETag: "deadbeefcafef00ddeadbeefcafefeed"/ davical-1.1.1/testing/tests/regression-suite/0860-Spec-REPORT-principal.test0000644000000000000000000000137211446006434023314 0ustar # # Do a REPORT request TYPE=REPORT URL=http://mycaldav/caldav.php/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20101013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA user1 ENDDATA davical-1.1.1/testing/tests/regression-suite/0525-iCal-PROPFIND.test0000644000000000000000000000132211446006434021512 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/manager1/calendar-proxy-read/ HEAD AUTH=assistant1:assistant1 HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0302-Chandler-OPTIONS-2.test0000644000000000000000000000022211446006434022422 0ustar # # Do an initial OPTIONS request (authenticated) TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/home/ HEADER=Chandler/0.7alpha4 (Linux) HEAD davical-1.1.1/testing/tests/regression-suite/0936-PROPFIND-acl-restrictions.test0000644000000000000000000000057011446006434024141 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0551-iPhone-REPORT.test0000644000000000000000000000143011446006434021655 0ustar # # Testing with a process similar to iPhone 3 # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEAD AUTH=user1:user1 HEADER=User-Agent: DAVKit/4.0 (728.3); iCalendar/1 (34); iPhone/3.0 7A341 HEADER=Content-Type: text/xml BEGINDATA /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics ENDDATA davical-1.1.1/testing/tests/regression-suite/0505-iCal-PUT.result0000644000000000000000000000360611732223036021302 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "b3e66a461ef178bd4791b2b6509bbb9d" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:1 TRANSP:OPAQUE UID:AAA9318E-37D9-4319-8626-95ECD3D3B243 DTSTART;TZID=Pacific/Auckland:20071125T230000 DTSTAMP:20071123T093048Z SUMMARY:New Event CREATED:20071123T093048Z DTEND;TZID=Pacific/Auckland:20071126T000000 BEGIN:VALARM X-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2007-11-26 00:00:00< dtstamp: >2007-11-23 09:30:48< dtstart: >2007-11-25 23:00:00< due: >NULL< last_modified: >2007-11-23 09:30:48< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >NULL< status: >NULL< summary: >New Event< transp: >OPAQUE< tz_id: >Pacific/Auckland< uid: >AAA9318E-37D9-4319-8626-95ECD3D3B243< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0604-Soho-PROPFIND.result0000644000000000000000000000176211732223540022114 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "600c4b10a558bf4dcaff71d767733dbc" Content-Length: 694 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0249-Empty-PROPFIND.result0000644000000000000000000000164611633117640022313 0ustar /caldav.php/user1/home/ httpd/unix-directory user1 home Dow, 01 Jan 2000 00:00:00 GMT 20090602T120000Z /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0996-PUT-odd-characters.test0000644000000000000000000000366411667262161023011 0ustar # # Attempt to put an event containing odd characters # TYPE=PUT URL=http://regression.host/caldav.php/User%20Six/home/c0f7c860-1345-012d-125f-002421a2359e.ics HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=User Six:user6 BEGINDATA BEGIN:VCALENDAR PRODID:-//Open Source Applications Foundation//NONSGML Chandler Server//E N VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:America/Los_Angeles X-TZINFO:America/Los_Angeles[2007g/Partial@883612800000] BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:19980405T020000 RRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:19981025T020000 RRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE BEGIN:VEVENT LAST-MODIFIED:20100316T162103Z SEQUENCE:4 UID:c0f7c860-1345-012d-125f-002421a2359e SUMMARY:2nd Annual Lobsterfest: will you come? DESCRIPTION:2nd Annual Lobsterfest\nSaturday\, August 7\nTime to be annou nced\, @Chamisal Vineyards @1pm\n$85 members\; $100 non members. Inquire for s pecial group pricing. Will you come? DTSTART;TZID=America/Los_Angeles:20100807T000000 CREATED:20100316T162026Z DTSTAMP:20100316T162103Z DURATION:P1D LOCATION:Chamisal Vineyards\\, Oregon X-VENUE:Chamisal Vineyards END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.caldav_data AS "Event Data", caldav_data.dav_name, caldav_data.dav_etag, dtstart, summary, description FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ 'c0f7c860-1345-012d-125f-002421a2359e.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0550-iPhone-REPORT.test0000644000000000000000000000126611446006434021663 0ustar # # Testing with a process similar to iPhone 3 # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEAD AUTH=user1:user1 HEADER=User-Agent: DAVKit/4.0 (728.3); iCalendar/1 (34); iPhone/3.0 7A341 HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0010-Mulberry-PUT-1.test0000644000000000000000000000265511651212132022017 0ustar # # We now have a calendar so we can PUT an event into it... TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/F56B49B10FC923D20FE2DC92D6580340-0.ics HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 X-WR-CALNAME:home BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061025T101327Z DTSTART;TZID=New Zealand Standard Time:20061025T091500 DURATION:PT1H SUMMARY:A first event UID:B18CBB57295D01D7661A6DD4@D76FAF7B10D9E8D2D41F779C END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_type, logged_user, uid, dtstamp, dtstart at time zone olson_name as dtstart, dtend at time zone olson_name as dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, calendar_item.last_modified, caldav_data AS "A1 CalDAV DATA" FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user1/home/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0222-Moz-OPTIONS-allowed.test0000644000000000000000000000040011446006434022734 0ustar # # Do an OPTIONS request (authenticated) against a user who we # have read access to. # TYPE=OPTIONS URL=http://mycaldav/caldav.php/manager1/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20111013 Thunderbird/1.5.0.7 HEAD davical-1.1.1/testing/tests/regression-suite/0210-Moz-PUT-PRIVATE.test0000644000000000000000000000276411446006434021750 0ustar # # PUT a confidential item in the calendar which we won't be able to see # as a different user (later). # TYPE=PUT URL=http://mycaldav/caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a2pre) Gecko/20061222 Calendar/3.0a1 HEADER=Accept: text/html,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/calendar; charset=utf-8 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T031415Z LAST-MODIFIED:20061223T032305Z DTSTAMP:20061223T032305Z UID:1906b3ca-4890-468a-9b58-1de74bf2c716 SUMMARY:Private Event PRIORITY:0 STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T130000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T150000 X-MOZ-LOCATIONPATH:1906b3ca-4890-468a-9b58-1de74bf2c716.ics LOCATION:At a private location DESCRIPTION:Private and Confirmed END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/regression-suite/0306-Chandler-DELETE-1.result0000644000000000000000000000055011732223024022571 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" ?column?: >Count of matching calendars (should be 0)< count: >0< davical-1.1.1/testing/tests/regression-suite/0245-Moz-POST-FB.result0000644000000000000000000000270111732223016021573 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "some valid etag" Content-Length: 919 Content-Type: text/xml; charset="utf-8" mailto:user3@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20081020T110000Z DTEND:20081105T110000Z FREEBUSY:20081024T054500Z/20081024T083000Z FREEBUSY:20081028T064500Z/20081028T093000Z FREEBUSY:20081031T064500Z/20081031T093000Z FREEBUSY:20081104T064500Z/20081104T093000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user3@example.net END:VFREEBUSY END:VCALENDAR a) Start: >20081024T054500Z< b) Finish: >20081024T083000Z< c) RRule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR< class: >PUBLIC< d) Start: >2008-10-24 08:45:00< olson_name: >Europe/Helsinki< status: >NULL< davical-1.1.1/testing/tests/regression-suite/0601-Soho-OPTIONS.test0000644000000000000000000000031111446006434021454 0ustar # # Do an initial OPTIONS request (authenticated) TYPE=OPTIONS URL=http://mycaldav/caldav.php/user1/ HEADER=User-Agent: SOHO Organizer/6.5.2 libcurl/7.17.0 OpenSSL/0.9.7l zlib/1.2.3 libssh2/0.17 HEAD davical-1.1.1/testing/tests/regression-suite/0543-iCal5-REPORT.result0000644000000000000000000000241111732223065021727 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "488fe5f72406ee18b5238feabfd50afc" Content-Length: 973 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" text/calendar HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" text/calendar HTTP/1.1 200 OK /caldav.php/user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics "257b9df4aaf573a578af4aadd033abf4" text/calendar HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0242-Moz-REPORT.result0000644000000000000000000000057711732223014021540 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "07474790757c5e1b526ce4901889d6d3" Content-Length: 68 Content-Type: text/xml; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0554-iPhone-PROPFIND.result0000644000000000000000000003200011750141767022431 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "badcdb23956a17ef94ec1b98cd36f6fe" Content-Length: 12994 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ User 1 "89514106d00f37cc9ee71689c450d2ef" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ user1 home "243d78db0cc75a576d2603eef69efdc9" #0252D4FF HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ user1 addresses "24c9e15e52afc47c225b757e7bee1f9d" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ created "bac273dae96780a3c8ed0c032266322c" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.in/ User 1 Inbox "0389feae460444b4b5db3b16c94b1e43" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/.out/ User 1 Outbox "1" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ iCal Calendar "ac192d10783fff90598af2facc8259df" #391B71A0 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ /user1/calendar-proxy-read/ "abad5538c4aa570cc54b6ff0d36a4565" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ /user1/calendar-proxy-write/ "04ba2c2164225fb5abce13f2c523b6c7" HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0820-Spec-PROPFIND-1.test0000644000000000000000000000146011446006434021673 0ustar # # Testing for Spec compliance. PROPFIND on a calendar collection. # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml REPLACE=#2\d{3}-\d\d-\d\dT\d\d:\d\d:\d\d[+-]\d\d:\d\d#YYYY-MM-DDThh:mm:ss+ZZ:ZZ# BEGINDATA ENDDATA # REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ davical-1.1.1/testing/tests/regression-suite/0844-Spec-PROPPATCH-addressbook.test0000644000000000000000000000146311446006434024163 0ustar # # Check for support of PROPPATCH method # # Convert the collection to an addressbook, and change the displayname # again # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user1/home/ HEADER=User-agent: SpecTest PROPPATCH HEADER=Content-type: text/xml HEAD BEGINDATA User One's addressbook ENDDATA QUERY SELECT dav_displayname, is_calendar, is_addressbook, resourcetypes, modified > (current_timestamp - '5 minutes'::interval) AS changed_last_5m FROM collection WHERE dav_name = '/user1/home/'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0845-Spec-PROPPATCH-principal.result0000644000000000000000000000130211747467631024212 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 374 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ All requested changes were made. HTTP/1.1 200 OK displayname: >User 1< fullname: >User 1< davical-1.1.1/testing/tests/regression-suite/0520-iCal-PROPFIND.test0000644000000000000000000000126411446006434021512 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user2/.in/ HEAD AUTH=user2:user2 HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33) HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0540-iCal4-PROPFIND.test0000644000000000000000000000070211446006434021574 0ustar # # Testing with a process similar to iCal4 # TYPE=PROPFIND URL=http://regression.host/ HEAD HEADER=User-Agent: DAVKit/4.0.1 (730); CalendarStore/4.0.1 (973); iCal/4.0.1 (1374); Mac OS X/10.6.2 (10C540) HEADER=Depth: 0 HEADER=Content-Type: text/xml # # Finding where to start from, part 2. # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0862-Spec-REPORT-principal.result0000644000000000000000000000300711732223603023647 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "0f4b3456426720dea03e25482da4057d" Content-Length: 1226 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/ User 1 /caldav.php/user1/ /caldav.php/assistant1/ /caldav.php/manager1/ /caldav.php/resmgr1/ /caldav.php/resource1/ /caldav.php/resource2/ /caldav.php/teamclient1/ /caldav.php/manager1/calendar-proxy-read/ /caldav.php/assistant1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-write/ /caldav.php/resource2/calendar-proxy-write/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0539-iCal4-PROPFIND.result0000644000000000000000000000113711732223062022142 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "dfef5d203b227bafbee76592e8924179" Content-Length: 291 Content-Type: text/xml; charset="utf-8" / / HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0803-Mulberry-PUT-1.result0000644000000000000000000000105311732223546022372 0ustar HTTP/1.1 100 Continue HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 198 Content-Type: text/xml; charset="utf-8" /user1/home/i1278618276.ics HTTP/1.1 423 Resource Locked count: >0< prompt: >Should be 0< davical-1.1.1/testing/tests/regression-suite/0997-PUT-many-overrides.test0000644000000000000000000003045711672053171023066 0ustar # # Attempt to put an event containing many overrides # TYPE=PUT URL=http://regression.host/caldav.php/User%20Six/home/c0f7c860-1345-012d-125f-002421a2359e.ics HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=User Six:user6 BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:Europe/Zagreb X-LIC-LOCATION:Europe/Zagreb BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20101126T133639Z LAST-MODIFIED:20101126T133639Z DTSTAMP:20101126T133640Z UID:KOrganizer-1348288421.174 SUMMARY:Kosarkaska utakmica DTSTART;TZID=Europe/Zagreb:20101128T110000 DTEND;TZID=Europe/Zagreb:20101128T130000 LOCATION:Zagrebacki velesajam TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110402T095510Z LAST-MODIFIED:20110402T095533Z DTSTAMP:20110402T095533Z UID:9fc3d340-fd02-4198-9b7f-bd9b339fdf01 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110329T193000 DTEND;TZID=Europe/Zagreb:20110329T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110406T222101Z LAST-MODIFIED:20110406T222129Z DTSTAMP:20110406T222129Z UID:b5185f5f-c60d-43e2-8727-d73b05f0b403 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110408T180000 DTEND;TZID=Europe/Zagreb:20110408T210000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110405T141057Z LAST-MODIFIED:20110410T105121Z DTSTAMP:20110410T105121Z UID:ad2e3d46-338c-4123-bfed-edf0d06a3f5d SUMMARY:Vaterpolo PMF DTSTART;TZID=Europe/Zagreb:20110411T120000 DTEND;TZID=Europe/Zagreb:20110411T130000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110406T222101Z LAST-MODIFIED:20110412T145952Z DTSTAMP:20110412T145952Z UID:97f37cf2-a89a-4eb9-aff7-024e21d4ac63 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110413T200000 DTEND;TZID=Europe/Zagreb:20110413T230000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110417T133012Z LAST-MODIFIED:20110417T133033Z DTSTAMP:20110417T133033Z UID:d98993b2-3fc1-4f40-a3b7-1744f2eff118 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110419T193000 DTEND;TZID=Europe/Zagreb:20110419T223000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110509T075204Z DTSTAMP:20110509T075204Z UID:d9600248-ff59-45aa-a08b-d16d09f7443c SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110509T150000 DTEND;TZID=Europe/Zagreb:20110509T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103420Z LAST-MODIFIED:20110320T103436Z DTSTAMP:20110320T103436Z UID:bf913c7d-8e42-4d30-989b-3f86c3e7f130 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110322T200000 DTEND;TZID=Europe/Zagreb:20110322T230000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110414T134428Z LAST-MODIFIED:20110414T134446Z DTSTAMP:20110414T134446Z UID:6d870107-9251-4eb1-baff-9cc9c9d995a0 SUMMARY:Vaterpolo DTSTART;TZID=Europe/Zagreb:20110415T120000 DTEND;TZID=Europe/Zagreb:20110415T130000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110320T103513Z DTSTAMP:20110320T103513Z UID:b79f6edf-3b11-439f-85af-7eca5d5e7d6e SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110321T150000 DTEND;TZID=Europe/Zagreb:20110321T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110405T141057Z LAST-MODIFIED:20110405T141143Z DTSTAMP:20110405T141143Z UID:3bc03dfc-c7e1-4500-ae67-a17c309025e8 SUMMARY:Vaterpolo PMF DTSTART;TZID=Europe/Zagreb:20110406T133000 DTEND;TZID=Europe/Zagreb:20110406T143000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110430T093717Z LAST-MODIFIED:20110430T093741Z DTSTAMP:20110430T093741Z UID:d0fe1e24-25c9-4f1a-a1a5-7e4c38b2a4bd SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110427T193000 DTEND;TZID=Europe/Zagreb:20110427T223000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110430T093903Z LAST-MODIFIED:20110503T141014Z DTSTAMP:20110503T141014Z UID:e8835dcb-9c58-446c-8020-1d14e299994b SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110506T190000 DTEND;TZID=Europe/Zagreb:20110506T220000 DESCRIPTION:protiv VIDRE\; dvorana u podsusedu TRANSP:OPAQUE SEQUENCE:2 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110503T141104Z DTSTAMP:20110503T141104Z UID:631e6b38-c41c-49c6-8902-357650d1332c SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110502T150000 DTEND;TZID=Europe/Zagreb:20110502T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110412T145824Z DTSTAMP:20110412T145824Z UID:2f32a2e1-f739-4c1a-920b-a605cc969e25 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110411T150000 DTEND;TZID=Europe/Zagreb:20110411T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110414T134428Z LAST-MODIFIED:20110416T203013Z DTSTAMP:20110416T203013Z UID:63d93f32-aa1d-4aaf-b0c6-f332689c395b SUMMARY:Vaterpolo DTSTART;TZID=Europe/Zagreb:20110415T140000 DTEND;TZID=Europe/Zagreb:20110415T150000 TRANSP:OPAQUE SEQUENCE:1 X-MOZ-GENERATION:1 END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110417T195943Z DTSTAMP:20110417T195943Z UID:96d9a904-21da-44cf-a818-ace2e24117f3 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110418T150000 DTEND;TZID=Europe/Zagreb:20110418T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110513T180125Z LAST-MODIFIED:20110513T180150Z DTSTAMP:20110513T180150Z UID:6541bbc5-5054-4482-9656-781fccb1c9c0 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110513T160000 DTEND;TZID=Europe/Zagreb:20110513T170000 DESCRIPTION:s filom u dvorani Precko TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110520T201034Z LAST-MODIFIED:20110520T201057Z DTSTAMP:20110520T201057Z UID:585e23cf-ef43-459a-9ad7-f05ceadc369e SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110524T190000 DTEND;TZID=Europe/Zagreb:20110524T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110311T213444Z LAST-MODIFIED:20110311T213526Z DTSTAMP:20110311T213526Z UID:abe35ff2-22ca-4abc-84ed-75cd594f152a SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110311T190000 DTEND;TZID=Europe/Zagreb:20110311T220000 LOCATION:Rugvica DESCRIPTION:igramo protiv STK Rugvice TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110314T195438Z LAST-MODIFIED:20110314T195500Z DTSTAMP:20110314T195500Z UID:f1a6d3ca-6070-453f-ae7d-10e204569461 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110317T200000 DTEND;TZID=Europe/Zagreb:20110317T210000 DESCRIPTION:protiv Mladih purgera TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110320T103444Z LAST-MODIFIED:20110328T181956Z DTSTAMP:20110328T181956Z UID:db31907b-1b8a-4f70-aa8e-e2c86ffc125a SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110328T150000 DTEND;TZID=Europe/Zagreb:20110328T160000 LOCATION:PBF TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110602T091841Z LAST-MODIFIED:20110602T091933Z DTSTAMP:20110602T091933Z UID:158bce95-0f67-4cfc-9cc0-df42603a7497 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20110606T193000 DTEND;TZID=Europe/Zagreb:20110606T230000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110603T144349Z LAST-MODIFIED:20110603T144405Z DTSTAMP:20110603T144405Z UID:e0b1fbe6-885e-447b-8811-0d0dafc7cc9a SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110603T100000 DTEND;TZID=Europe/Zagreb:20110603T130000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110605T191628Z LAST-MODIFIED:20110605T191643Z DTSTAMP:20110605T191643Z UID:d59ca055-4396-442c-af99-5c45cfd8e75d SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110604T180000 DTEND;TZID=Europe/Zagreb:20110604T210000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20110607T222032Z LAST-MODIFIED:20110607T222045Z DTSTAMP:20110607T222045Z UID:6ec29b6e-c8f3-40b3-87d3-d7ebe742a8cc SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20110606T150000 DTEND;TZID=Europe/Zagreb:20110606T160000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111007T155910Z LAST-MODIFIED:20111007T155930Z DTSTAMP:20111007T155930Z UID:807b2e3b-6bc1-4fd4-8002-6a4a3d6ab210 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111010T200000 DTEND;TZID=Europe/Zagreb:20111010T230000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111009T102456Z LAST-MODIFIED:20111009T102524Z DTSTAMP:20111009T102524Z UID:17848910-224e-4b2e-82a1-880e7579fc09 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20111009T190000 DTEND;TZID=Europe/Zagreb:20111009T210000 LOCATION:faks DESCRIPTION:trening s najmanom na faksu TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111010T141132Z LAST-MODIFIED:20111010T141158Z DTSTAMP:20111010T141158Z UID:1dc66abb-d265-4115-bed1-8647076b6a6e SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111014T203000 DTEND;TZID=Europe/Zagreb:20111014T230000 DESCRIPTION:Odra Vex dizajn TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111014T073351Z LAST-MODIFIED:20111014T073406Z DTSTAMP:20111014T073406Z UID:40881d4c-03b1-4bd6-9486-47c88e42d4a9 SUMMARY:Girje DTSTART;TZID=Europe/Zagreb:20111011T190000 DTEND;TZID=Europe/Zagreb:20111011T200000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111015T174624Z LAST-MODIFIED:20111015T174705Z DTSTAMP:20111015T174705Z UID:9d8b6e90-6ba9-4bec-8000-e1f9609b84a7 SUMMARY:Stolni DTSTART;TZID=Europe/Zagreb:20111015T170000 DTEND;TZID=Europe/Zagreb:20111015T190000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111016T111311Z LAST-MODIFIED:20111016T111339Z DTSTAMP:20111016T111339Z UID:8f2601db-6537-40aa-91b5-3bff62c6aaeb SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111018T193000 DTEND;TZID=Europe/Zagreb:20111018T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111022T125946Z LAST-MODIFIED:20111022T130003Z DTSTAMP:20111022T130003Z UID:c606f5b2-4519-4b4c-9010-96ca6d301e70 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20111022T100000 DTEND;TZID=Europe/Zagreb:20111022T120000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111022T125946Z LAST-MODIFIED:20111022T130030Z DTSTAMP:20111022T130030Z UID:178d87de-d399-422f-955c-3d8867a7f384 SUMMARY:Stolni tenis DTSTART;TZID=Europe/Zagreb:20111023T100000 DTEND;TZID=Europe/Zagreb:20111023T120000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111007T155910Z LAST-MODIFIED:20111026T212929Z DTSTAMP:20111026T212929Z UID:104e403e-9639-4316-813f-e843520901a5 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111028T203000 DTEND;TZID=Europe/Zagreb:20111028T233000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111111T094915Z LAST-MODIFIED:20111111T094932Z DTSTAMP:20111111T094932Z UID:64804e8e-fef5-46e3-b2a2-b494d9120dc1 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111111T190000 DTEND;TZID=Europe/Zagreb:20111111T213000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111113T175921Z LAST-MODIFIED:20111113T175937Z DTSTAMP:20111113T175937Z UID:72181664-03b7-4789-90a0-8bbec9300b5c SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111116T193000 DTEND;TZID=Europe/Zagreb:20111116T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111126T133916Z LAST-MODIFIED:20111126T133937Z DTSTAMP:20111126T133937Z UID:f3f56428-d648-4d8a-9174-57927d74e346 SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111124T193000 DTEND;TZID=Europe/Zagreb:20111124T223000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111126T133916Z LAST-MODIFIED:20111126T134122Z DTSTAMP:20111126T134122Z UID:548df49b-2451-4224-bd7b-5780dd93a19e SUMMARY:SOKAZ DTSTART;TZID=Europe/Zagreb:20111201T193000 DTEND;TZID=Europe/Zagreb:20111201T223000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT CREATED:20111014T073351Z LAST-MODIFIED:20111127T154401Z DTSTAMP:20111127T154401Z UID:154529bd-dcd2-43ad-900e-050a4d22f3a1 SUMMARY:Girje RRULE:FREQ=WEEKLY;UNTIL=20111220T180000Z;BYDAY=MO,TH DTSTART;TZID=Europe/Zagreb:20111013T190000 DTEND;TZID=Europe/Zagreb:20111013T200000 TRANSP:OPAQUE SEQUENCE:1 X-MOZ-GENERATION:3 END:VEVENT BEGIN:VEVENT CREATED:20111126T134122Z LAST-MODIFIED:20111126T134129Z DTSTAMP:20111126T134129Z UID:154529bd-dcd2-43ad-900e-050a4d22f3a1 SUMMARY:Girje RECURRENCE-ID;TZID=Europe/Zagreb:20111201T190000 DTSTART;TZID=Europe/Zagreb:20111130T190000 DTEND;TZID=Europe/Zagreb:20111130T200000 SEQUENCE:2 TRANSP:OPAQUE X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT CREATED:20111127T154352Z LAST-MODIFIED:20111127T154401Z DTSTAMP:20111127T154401Z UID:154529bd-dcd2-43ad-900e-050a4d22f3a1 SUMMARY:Girje RECURRENCE-ID;TZID=Europe/Zagreb:20111205T190000 DTSTART;TZID=Europe/Zagreb:20111206T190000 DTEND;TZID=Europe/Zagreb:20111206T200000 SEQUENCE:2 TRANSP:OPAQUE X-MOZ-GENERATION:3 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.caldav_data AS "Event Data", caldav_data.dav_name, caldav_data.dav_etag, dtstart, summary, description FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ 'c0f7c860-1345-012d-125f-002421a2359e.ics' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0303-Chandler-PROPFIND-1.test0000644000000000000000000000113311446006434022512 0ustar # # Chandler expects to find the calendar. Here it confirms # that it actually is one. # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEADER=Depth: 0 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Chandler/0.7alpha4 (Linux) HEAD BEGINDATA ENDDATA # REPLACE=/^ETag: "[0-9a-f]{32}"/ETag: "deadbeefcafef00ddeadbeefcafefeed"/ # REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ davical-1.1.1/testing/tests/regression-suite/0960-GET.test0000644000000000000000000000067611751114123020052 0ustar # # Test GET access to a non-public calendar using a ticket. # TYPE=GET URL=http://regression.host/public.php/user2/home/9429a973-2b13-4b1a-be09-948d75425c45.ics NOAUTH # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 161 AND target_resource_id is null; ENDSQL HEADER=User-Agent: DAViCalTester/public HEADER=Ticket: ##ticket## HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0599-REPORT-sync-changed.test0000644000000000000000000000062211743153077023022 0ustar # # Check for support of REPORT sync-collection with sync-token # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-agent: sync-collection changes REPORT HEADER=Content-type: text/xml HEAD BEGINDATA data:,12 ENDDATA davical-1.1.1/testing/tests/regression-suite/0517-iCal-POST.result0000644000000000000000000000000711446006434021415 0ustar Createddavical-1.1.1/testing/tests/regression-suite/0970-REPORT-principal-match-self.test0000644000000000000000000000070711633117640024450 0ustar # # principal-match REPORT on self as user1 # TYPE=REPORT URL=http://mycaldav/caldav.php/ AUTH=user1:user1 HEADER=User-Agent: DAViCal Testing HEADER=Accept: text/xml HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0844-Spec-PROPPATCH-principal.result0000644000000000000000000000204311747467620024212 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 374 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ All requested changes were made. HTTP/1.1 200 OK displayname: >User Number One PROPPATCH'd in< fullname: >User Number One PROPPATCH'd in< changed_by: >10< dav_name: >/user1/< property_name: >http://dotcal.com/principal-properties:country< property_value: >New Zealand< changed_by: >10< dav_name: >/user1/< property_name: >http://dotcal.com/principal-properties:countrycode< property_value: >NZ< davical-1.1.1/testing/tests/regression-suite/0900-Moz-REPORT.result0000644000000000000000000001512711732223624021545 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "6e587c714900b10e370ba52b9834bf90" Content-Length: 6426 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061120T041336Z LAST-MODIFIED:20061120T041709Z DTSTAMP:20061120T041709Z UID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 SUMMARY:Weekly Project Meeting PRIORITY:0 CLASS:PUBLIC RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000 CATEGORIES:Projects X-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T032350Z LAST-MODIFIED:20061223T033144Z DTSTAMP:20061223T033144Z UID:9d050be7-8a02-4355-8ed3-02a9fc5f473f SUMMARY:Confidential Event PRIORITY:0 STATUS:CONFIRMED CLASS:CONFIDENTIAL DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T160000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T180000 X-MOZ-LOCATIONPATH:9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics LOCATION:In a confidential place END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T031415Z LAST-MODIFIED:20061223T032305Z DTSTAMP:20061223T032305Z UID:1906b3ca-4890-468a-9b58-1de74bf2c716 SUMMARY:Private Event PRIORITY:0 STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T130000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T150000 X-MOZ-LOCATIONPATH:1906b3ca-4890-468a-9b58-1de74bf2c716.ics LOCATION:At a private location DESCRIPTION:Private and Confirmed END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics BEGIN:VCALENDAR PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN VERSION:2.0 BEGIN:VEVENT CREATED:20061223T051646Z LAST-MODIFIED:20061223T051713Z DTSTAMP:20061223T051713Z UID:fbd57454-d966-4a14-8341-abe1edb1ae66 SUMMARY:Tentative Event STATUS:TENTATIVE CLASS:PUBLIC DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T190000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T210000 X-MOZ-LOCATIONPATH:fbd57454-d966-4a14-8341-abe1edb1ae66.ics LOCATION:Never never land END:VEVENT BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics BEGIN:VCALENDAR VERSION:2.0 PRODID:-//PYVOBJECT//NONSGML Version 1//EN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD DTSTART:20000319T030000 RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=3 TZNAME:Pacific/Auckland TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD BEGIN:DAYLIGHT DTSTART:20001001T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:Pacific/Auckland TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT UID:71e2ae82-7870-11db-c6d6-f6927c144649 DTSTAMP:20060511T043751Z DTSTART;TZID=Pacific/Auckland:20061103T160000 DTEND;TZID=Pacific/Auckland:20061103T174500 DESCRIPTION: LOCATION:Level 3 RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900 STATUS:CONFIRMED SUMMARY:Beer O'Clock END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics BEGIN:VCALENDAR VERSION:2.0 PRODID:-//PYVOBJECT//NONSGML Version 1//EN BEGIN:VEVENT UID:da81c0ee-7871-11db-c6d6-f6927c144649 DTSTAMP:20061024T115217Z DTSTART:20061103T073000 DTEND:20061103T093000 DESCRIPTION: LOCATION:Olivia's RRULE:FREQ=MONTHLY STATUS:CONFIRMED SUMMARY:Morning Mgmt Mtg END:VEVENT END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0221-Moz-PROPFIND.test0000644000000000000000000000133211446006434021401 0ustar # # Do a PROPFIND request TYPE=PROPFIND URL=http://mycaldav/caldav.php/user5/home/ HEAD AUTH=user5:user5 HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4pre) Gecko/20090324 Calendar/1.0pre HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/xml; charset=utf-8 HEADER=Depth: 0 BEGINDATA ENDDATA REPLACE=!"[a-z0-9]+"!"Looks like a good CTAG to me :-)"! REPLACE=!^ETag: "[a-z0-9]+"!ETag: "Looks like a good ETAG to me :-)"! davical-1.1.1/testing/tests/regression-suite/0944-REPORT-principal-property-search.result0000644000000000000000000000170511732223663026116 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "4801fed73bca80f8f4b91b3d69dd2454" Content-Length: 649 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ User 1 /caldav.php/user1/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/utf8-test.data0000644000000000000000000001654211651212132020631 0ustar BEGIN:VCALENDAR VERSION:2.0 PRODID:-//RSB//FreeMiCal//EN BEGIN:VEVENT SUMMARY:Aüa Aaaaaa aaa Aaaaa aaa Aaaaaaaaa-Aaaaüa aaaaaaa aa. Aaaaaaaa DTSTART;VALUE=DATE:20071111 DTEND;VALUE=DATE:20071112 DTSTAMP:20070613T112658 DESCRIPTION:Aaaaa Aaaa aa 11.11.11 aaaaaaaaa/aaäaßaaa\n\n END:VEVENT BEGIN:VEVENT SUMMARY:Aaa1111 - aaaaaaaaaaa aaaaaaaaaaa aaa aaaaaa DTSTART;VALUE=DATE:20070915 DTEND;VALUE=DATE:20070916 DTSTAMP:20070613T112658 LOCATION:Aaaaaa/Aaa DESCRIPTION:Aaaaaaaaaa aa 11.11.1111 aaa aaaaaaa@a-aaaaaaa.aa\nAaaaaaa aaaaaaaa üaaa aaaaaaa@aaaaaaaa.aa\n\n END:VEVENT BEGIN:VEVENT SUMMARY:AAA'11 DTSTART;VALUE=DATE:20070824 DTEND;VALUE=DATE:20070825 DTSTAMP:20070613T112658 LOCATION:Aaa Aöaaa, Aaaaaaaaa DESCRIPTION:aaaa://aaa.aaa11.aa/\n\n CATEGORIES:Aaaaaaa Aaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaa Aaaaaaaaaaaaaaäa DTSTART:20070820T090000 DTEND:20070820T151500 DTSTAMP:20070613T112659 CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaa Aaaaaaaaaaaaaa DTSTART;VALUE=DATE:20070713 DTEND;VALUE=DATE:20070714 DTSTAMP:20070613T112659 CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaa aaa Aaaaa DTSTART:20070710T093000 DTEND:20070710T120000 DTSTAMP:20070613T112659 CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaa Aaaaaaa DTSTART;VALUE=DATE:20070630 DTEND;VALUE=DATE:20070701 DTSTAMP:20070613T112659 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaa Aaaaaaaaaaaaa DTSTART;VALUE=DATE:20070629 DTEND;VALUE=DATE:20070630 DTSTAMP:20070613T112659 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaa Aaaaaaaaaaaa DTSTART:20070628T193000 DTEND:20070628T223000 DTSTAMP:20070613T112659 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaa aaaaa aa Aaaaaaaaa, aa Aaaaa+Aaaa aa aaa Aaaaa DTSTART;VALUE=DATE:20070628 DTEND;VALUE=DATE:20070629 DTSTAMP:20070613T112659 DESCRIPTION:-A.A. Aaaaaaaöaaaaaa aaa Aaaaaaaaa Aaaaaaaaa (aaaaaa)\n-\n \n END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaaaaaa DTSTART:20070627T154500 DTEND:20070627T234500 DTSTAMP:20070613T112659 LOCATION:Aaaaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaaaaa aaa AaaaAaaaaa-Aaaaaaa DTSTART;VALUE=DATE:20070616 DTEND;VALUE=DATE:20070617 DTSTAMP:20070613T112700 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaa Aaaaaa DTSTART;VALUE=DATE:20070615 DTEND;VALUE=DATE:20070618 DTSTAMP:20070613T112700 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaa aa aaa Aüaaaa aaa Aaa aaa Aaaa DTSTART;VALUE=DATE:20070614 DTEND;VALUE=DATE:20070622 DTSTAMP:20070613T112700 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaaaa DTSTART:20070613T180000 DTEND:20070613T203000 DTSTAMP:20070613T112700 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaaaa aaa Aaaa DTSTART:20070613T100000 DTEND:20070613T111000 DTSTAMP:20070613T112700 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaaaa DTSTART:20070612T180000 DTEND:20070612T200000 DTSTAMP:20070613T112700 END:VEVENT BEGIN:VEVENT SUMMARY:AaaAaa11-Aaaaaaaaaaäaaaaaaaaa DTSTART:20070612T180000 DTEND:20070612T210000 DTSTAMP:20070613T112700 CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaa aaa AaaAaa-Aaaaaaa DTSTART:20070612T180000 DTEND:20070612T183000 DTSTAMP:20070613T112701 LOCATION:AaaAaa-Aaaa aaa Aaaaaaaaa CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaa Aaaaa Aaaaaa aaaaaaaaa DTSTART:20070612T160000 DTEND:20070612T172000 DTSTAMP:20070613T112701 LOCATION:Aaa Aaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaa aaa Aaaaa aa Aaaaaaaaaaaaaaa DTSTART:20070612T110000 DTEND:20070612T115000 DTSTAMP:20070613T112701 CATEGORIES:Aaaaaaaaaäa Aaaaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaa aaaaaaaaaaaa DTSTART:20070614T100000 DTEND:20070614T110000 DTSTAMP:20070613T112701 CATEGORIES:Aaaaaäaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:AA/Aaaaaa Aa Aaaaaaa 1.1.1 aaaaaaaaaa (Aaaaa Aaaa Aaaaa) DTSTART:20070611T180000 DTEND:20070611T181500 DTSTAMP:20070613T112702 CATEGORIES:Aaaaaa Aaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Üaaaa aaaaaaaaa aaa DTSTART:20070611T160000 DTEND:20070611T180000 DTSTAMP:20070613T112702 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaa aöaaaaaa aaaaaaaa DTSTART:20070611T140000 DTEND:20070611T180000 DTSTAMP:20070613T112702 DESCRIPTION:Aaaaaaaa Aaaaaa Aaaaaa\nA-Aaaaa aaaaaaaaaa\nAa Aaaaaa aaaa aaa\nAa Aaaaaaa-Aaaa-Aaaaa aaaaaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaa aaa Aaaa aaa Aaaaa DTSTART:20070611T131500 DTEND:20070611T134500 DTSTAMP:20070613T112702 END:VEVENT BEGIN:VEVENT SUMMARY:Aa Aaaaaaaaaaa Aaaa Aaaaaaa aa. Aaaaaa aaaaaaaaa Aaaaaaaaaaaaa a DTSTART:20101124T133000 DTEND:20101124T140000 DTSTAMP:20101123T221234 LOCATION:A1.111 DESCRIPTION:Aaaaaaaaaaaaaaaaaa\nAaaaaaaaaaaaa, aaaa aa aaaa aa aaa Aaa aaaaaaaaaaaaa aaaaaaa, aüaa Aaaaäaaaaa Aaa\n\nAaa Aaaaaaa, aaaa Aaaaaa aäaaaaaa Aaaaa Aaaaaaaaaaa\n\nAaaaaaaa aaa A-Aaaa aa Aaaaaa Aaaaa AA AAAAAAA "aaaaaa:aaaaaaa@aaaa.aaa-aaaaaaaaa.aa" aaaaaaa@aaaa.aaa-aaaaaa aaa.aa aaaa aaa aaa Aaaaaaa CLASS:PRIVATE END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaa aaa Aaaaaaäaaaaaaaa Aaaaaaa DTSTART:20110106T140000 DTEND:20110106T150000 DTSTAMP:20101207T215936 LOCATION:Aaaaaaaaaäa Aaaaaaaaa - A1.111 DESCRIPTION:Aaa Aaaaaa aaaaaa aaaa aaa aaaaa aaaaaaaaaa: \n* Aaaaaaaaa aaaaa aaa Aaaaaaa aaa Aaaaaaaaaa - Aaaaa aaa Aaaaaaaaa, Aaaaaaaaaaa aa aäß aaa Aaäaaaaaaaaaaaaaaaaaa \n* Aaaaa aaa Aaaaaaaaa aaa Aaaaaaaaaaaa aaa Aaäaaaaaa aaa Aaaaaaaaaaaaaaaa - Aaaaaaaaaaaaaaaaößaa, Aaaaaaaaaa aaaaaa aaa aaaßaa Aaaaaaaaaaaaaaa \n* A-Aaaaaaaa-Aaaaaaaaa aaa Aaaaaaa aaa, Aaaaaaaaaa Aaaaaaaaaaaaaaaaa aaa aaaAA-Aaaaaaaaa, Aaaaaaaaaaaaaaa aa Aaaaaa \n* Aaaaaaaaaaaaa aaa Aaaaaaaaaaaaaaaa aaa 11.11.1111 aaa Aa aaaa aaa aaa Aaaaaaaaa Aaaaaaaaaaaaaa - Aaaaaaaaa Aaaaa, Aaaaaaa Aaaaa aaa \n* Aaaaaaaaaaaaaa aüa Aaaaaaaaaaaaäaaa CATEGORIES:AAAA 1111/1111 END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaaaaaa Aaaa DTSTART:20110108T140000 DTEND:20110109T000000 DTSTAMP:20101230T124751 LOCATION:Aaaaaaa DESCRIPTION:Aaa aaa aa aaa 1 Aaaaaaa aaaaaa aaaaaa (aaaaaa)\n- aaaaaa aaaaaaaaaa, aaaaaaa aaaaaaaa\n- aaaa aaaaaa aaaaaaa\n- aaa aaaaaaaa aa aaa aäaaaaaa aaaa aaaaaaaaaa\n- aa aaaaaa aaaaaaaa aaaa aa aaaa aaaa. aaaaaaaaa, aaaaaaaa aaaaaa aaa aa BEGIN:VALARM TRIGGER:-PT4320M DESCRIPTION:Aaaaa: Aaaaaaaaaaa Aaaa ACTION:DISPLAY END:VALARM END:VEVENT BEGIN:VEVENT SUMMARY:Aaaa - Aaa Aaaaaaa (aaa Aaaaaa aaa Aaaaaa) DTSTART:20101228T201500 DTEND:20101228T211500 DTSTAMP:20101230T145020 LOCATION:Aaaa Aaaaaaaa CATEGORIES:Aaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaa aaaaaaa DTSTART:20110104T190000 DTEND:20110104T200000 DTSTAMP:20110101T134833 CLASS:PRIVATE BEGIN:VALARM TRIGGER:-PT15M DESCRIPTION:Aaaaa: Aaaaaaa aaaaaaa ACTION:DISPLAY END:VALARM END:VEVENT BEGIN:VEVENT SUMMARY:AA/Aaaaa Aüa aaaaaa Aaaaaaaa aaaaaaaaaaaa DTSTART:20101230T140000 DTEND:20101230T143000 DTSTAMP:20110101T134922 CATEGORIES:Aaaaaa Aaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:AA/Aaaaa Aaaaaaaaaaaaa aaa Aaa DTSTART:20101231T112000 DTEND:20101231T140500 DTSTAMP:20110101T135020 DESCRIPTION:Aaaaaaaaaaa aaa Aaaaaäaaa aaaa Aaaaa aaaaaaaaaaaa aaa aaaa äaa\nA-Aaaa-Aaaaaaaa aaa Aaaa Aaaaaaaa aaa aaa aaaa aaa Aaaa Aaaaüaaa üaaaaaaaaa\nAaaaaaa aaa Aaaaaaaaaaaaaaaaa aa aaa Aaaaaaaa aaaa Aaaaaaa aa aaa A-Aaaaa aaaaaaaaaa\nAaa Aaaa Aaaaaaaa aaaaaaaaaa aaa Aaaaaaaaa aaaaaaaaa\nAaaaaaaaaaaaaaaa Aaaaaaaa CATEGORIES:Aaaaaa Aaaaaaa END:VEVENT BEGIN:VEVENT SUMMARY:Aaaaaaa aaa aaa AAA, Aaaaa Aaaaaaaa aaa Aaaa aa aaa Aaaaaaa aa a Aaaaaaaaaaaaaaaaaaaaaaaaa aaa Aaaaaaaaaa aaa Aaaaaaaaaa aa aaaaaaaaa a DTSTART:20110111T140000 DTEND:20110111T160000 DTSTAMP:20110111T220245 LOCATION:Aaaaaaaaaäa Aaaaaaaaa - AAA, Aüaa aaa Aaaa Aaaaaa CATEGORIES:AAAA 1111/1111 END:VEVENT END:VCALENDAR davical-1.1.1/testing/tests/regression-suite/0887-POST-freebusy.result0000644000000000000000000004112511633117640022411 0ustar mailto:user1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:correct DTEND:correct FREEBUSY:20060930T210000Z/20060930T220000Z FREEBUSY:20061001T210000Z/20061001T220000Z FREEBUSY:20061002T210000Z/20061002T220000Z FREEBUSY:20061003T210000Z/20061003T220000Z FREEBUSY:20061004T210000Z/20061004T220000Z FREEBUSY:20061005T210000Z/20061005T220000Z FREEBUSY:20061006T210000Z/20061006T220000Z FREEBUSY:20061007T210000Z/20061007T220000Z FREEBUSY:20061008T210000Z/20061008T220000Z FREEBUSY:20061009T210000Z/20061009T220000Z FREEBUSY:20061010T210000Z/20061010T220000Z FREEBUSY:20061011T210000Z/20061011T220000Z FREEBUSY:20061012T210000Z/20061012T220000Z FREEBUSY:20061013T210000Z/20061013T220000Z FREEBUSY:20061014T210000Z/20061014T220000Z FREEBUSY:20061015T210000Z/20061015T220000Z FREEBUSY:20061016T210000Z/20061016T220000Z FREEBUSY:20061017T210000Z/20061017T220000Z FREEBUSY:20061018T210000Z/20061018T220000Z FREEBUSY:20061019T210000Z/20061019T220000Z FREEBUSY:20061020T210000Z/20061020T220000Z FREEBUSY:20061021T210000Z/20061021T220000Z FREEBUSY:20061022T210000Z/20061022T220000Z FREEBUSY:20061023T210000Z/20061023T220000Z FREEBUSY:20061024T210000Z/20061024T220000Z FREEBUSY:20061025T210000Z/20061025T220000Z FREEBUSY:20061026T210000Z/20061026T220000Z FREEBUSY:20061027T210000Z/20061027T220000Z FREEBUSY:20061028T210000Z/20061028T220000Z FREEBUSY:20061029T220000Z/20061029T230000Z FREEBUSY:20061030T220000Z/20061030T230000Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061031T220000Z/20061031T230000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T220000Z/20061101T230000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061102T220000Z/20061102T230000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061103T220000Z/20061103T230000Z FREEBUSY:20061104T220000Z/20061104T230000Z FREEBUSY:20061105T220000Z/20061105T230000Z FREEBUSY:20061106T220000Z/20061106T230000Z FREEBUSY:20061107T220000Z/20061107T230000Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061108T220000Z/20061108T230000Z FREEBUSY:20061109T220000Z/20061109T230000Z FREEBUSY:20061110T220000Z/20061110T230000Z FREEBUSY:20061111T220000Z/20061111T230000Z FREEBUSY:20061112T220000Z/20061112T230000Z FREEBUSY:20061113T220000Z/20061113T230000Z FREEBUSY:20061114T220000Z/20061114T230000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061115T220000Z/20061115T230000Z FREEBUSY:20061116T220000Z/20061116T230000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061117T220000Z/20061117T230000Z FREEBUSY:20061118T220000Z/20061118T230000Z FREEBUSY:20061119T220000Z/20061119T230000Z FREEBUSY:20061120T220000Z/20061120T230000Z FREEBUSY:20061121T220000Z/20061121T230000Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061122T220000Z/20061122T230000Z FREEBUSY:20061123T220000Z/20061123T230000Z FREEBUSY:20061124T220000Z/20061124T230000Z FREEBUSY:20061125T220000Z/20061125T230000Z FREEBUSY:20061126T220000Z/20061126T230000Z FREEBUSY:20061127T220000Z/20061127T230000Z FREEBUSY:20061128T220000Z/20061128T230000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061129T220000Z/20061129T230000Z FREEBUSY:20061130T220000Z/20061130T230000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061201T220000Z/20061201T230000Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061202T220000Z/20061202T230000Z FREEBUSY:20061203T220000Z/20061203T230000Z FREEBUSY:20061204T220000Z/20061204T230000Z FREEBUSY:20061205T220000Z/20061205T230000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061206T220000Z/20061206T230000Z FREEBUSY:20061207T220000Z/20061207T230000Z FREEBUSY:20061208T220000Z/20061208T230000Z FREEBUSY:20061209T220000Z/20061209T230000Z FREEBUSY:20061210T220000Z/20061210T230000Z FREEBUSY:20061211T220000Z/20061211T230000Z FREEBUSY:20061212T220000Z/20061212T230000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061213T220000Z/20061213T230000Z FREEBUSY:20061214T220000Z/20061214T230000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061215T220000Z/20061215T230000Z FREEBUSY:20061216T220000Z/20061216T230000Z FREEBUSY:20061217T220000Z/20061217T230000Z FREEBUSY:20061218T220000Z/20061218T230000Z FREEBUSY:20061219T220000Z/20061219T230000Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061220T220000Z/20061220T230000Z FREEBUSY:20061221T220000Z/20061221T230000Z FREEBUSY:20061222T220000Z/20061222T230000Z FREEBUSY:20061223T000000Z/20061223T020000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061223T220000Z/20061223T230000Z FREEBUSY:20061224T220000Z/20061224T230000Z FREEBUSY:20061225T220000Z/20061225T230000Z FREEBUSY:20061226T220000Z/20061226T230000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061227T220000Z/20061227T230000Z FREEBUSY:20061228T220000Z/20061228T230000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20061229T220000Z/20061229T230000Z FREEBUSY:20061230T220000Z/20061230T230000Z FREEBUSY:20061231T220000Z/20061231T230000Z FREEBUSY:20070101T220000Z/20070101T230000Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070102T220000Z/20070102T230000Z FREEBUSY:20070103T210000Z/20070103T220000Z FREEBUSY:20070103T220000Z/20070103T230000Z FREEBUSY:20070104T220000Z/20070104T230000Z FREEBUSY:20070105T220000Z/20070105T230000Z FREEBUSY:20070106T220000Z/20070106T230000Z FREEBUSY:20070107T220000Z/20070107T230000Z FREEBUSY:20070108T220000Z/20070108T230000Z FREEBUSY:20070109T220000Z/20070109T230000Z FREEBUSY:20070110T210000Z/20070110T220000Z FREEBUSY:20070110T220000Z/20070110T230000Z FREEBUSY:20070111T220000Z/20070111T230000Z FREEBUSY:20070112T030000Z/20070112T044500Z FREEBUSY:20070112T220000Z/20070112T230000Z FREEBUSY:20070113T220000Z/20070113T230000Z FREEBUSY:20070114T220000Z/20070114T230000Z FREEBUSY:20070115T220000Z/20070115T230000Z FREEBUSY:20070116T220000Z/20070116T230000Z FREEBUSY:20070117T210000Z/20070117T220000Z FREEBUSY:20070117T220000Z/20070117T230000Z FREEBUSY:20070118T220000Z/20070118T230000Z FREEBUSY:20070119T220000Z/20070119T230000Z FREEBUSY:20070120T220000Z/20070120T230000Z FREEBUSY:20070121T220000Z/20070121T230000Z FREEBUSY:20070122T220000Z/20070122T230000Z FREEBUSY:20070123T220000Z/20070123T230000Z FREEBUSY:20070124T210000Z/20070124T220000Z FREEBUSY:20070124T220000Z/20070124T230000Z FREEBUSY:20070125T220000Z/20070125T230000Z FREEBUSY:20070126T030000Z/20070126T044500Z FREEBUSY:20070126T220000Z/20070126T230000Z FREEBUSY:20070127T220000Z/20070127T230000Z FREEBUSY:20070128T220000Z/20070128T230000Z FREEBUSY:20070129T220000Z/20070129T230000Z FREEBUSY:20070130T220000Z/20070130T230000Z FREEBUSY:20070131T210000Z/20070131T220000Z FREEBUSY:20070131T220000Z/20070131T230000Z FREEBUSY:20070201T220000Z/20070201T230000Z FREEBUSY:20070202T183000Z/20070202T203000Z FREEBUSY:20070202T220000Z/20070202T230000Z FREEBUSY:20070203T220000Z/20070203T230000Z FREEBUSY:20070204T220000Z/20070204T230000Z FREEBUSY:20070205T220000Z/20070205T230000Z FREEBUSY:20070206T220000Z/20070206T230000Z FREEBUSY:20070207T210000Z/20070207T220000Z FREEBUSY:20070207T220000Z/20070207T230000Z FREEBUSY:20070208T220000Z/20070208T230000Z FREEBUSY:20070209T030000Z/20070209T044500Z FREEBUSY:20070209T220000Z/20070209T230000Z FREEBUSY:20070210T220000Z/20070210T230000Z FREEBUSY:20070211T220000Z/20070211T230000Z FREEBUSY:20070212T220000Z/20070212T230000Z FREEBUSY:20070213T220000Z/20070213T230000Z FREEBUSY:20070214T210000Z/20070214T220000Z FREEBUSY:20070214T220000Z/20070214T230000Z FREEBUSY:20070215T220000Z/20070215T230000Z FREEBUSY:20070216T220000Z/20070216T230000Z FREEBUSY:20070217T220000Z/20070217T230000Z FREEBUSY:20070218T220000Z/20070218T230000Z FREEBUSY:20070219T220000Z/20070219T230000Z FREEBUSY:20070220T220000Z/20070220T230000Z FREEBUSY:20070221T210000Z/20070221T220000Z FREEBUSY:20070221T220000Z/20070221T230000Z FREEBUSY:20070222T220000Z/20070222T230000Z FREEBUSY:20070223T030000Z/20070223T044500Z FREEBUSY:20070223T220000Z/20070223T230000Z FREEBUSY:20070224T220000Z/20070224T230000Z FREEBUSY:20070225T220000Z/20070225T230000Z FREEBUSY:20070226T220000Z/20070226T230000Z FREEBUSY:20070227T220000Z/20070227T230000Z FREEBUSY:20070228T210000Z/20070228T220000Z FREEBUSY:20070228T220000Z/20070228T230000Z FREEBUSY:20070301T220000Z/20070301T230000Z FREEBUSY:20070302T183000Z/20070302T203000Z FREEBUSY:20070302T220000Z/20070302T230000Z FREEBUSY:20070303T220000Z/20070303T230000Z FREEBUSY:20070304T220000Z/20070304T230000Z FREEBUSY:20070305T220000Z/20070305T230000Z FREEBUSY:20070306T220000Z/20070306T230000Z FREEBUSY:20070307T210000Z/20070307T220000Z FREEBUSY:20070307T220000Z/20070307T230000Z FREEBUSY:20070308T220000Z/20070308T230000Z FREEBUSY:20070309T030000Z/20070309T044500Z FREEBUSY:20070309T220000Z/20070309T230000Z FREEBUSY:20070310T220000Z/20070310T230000Z FREEBUSY:20070311T210000Z/20070311T220000Z FREEBUSY:20070312T210000Z/20070312T220000Z FREEBUSY:20070313T210000Z/20070313T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070314T210000Z/20070314T220000Z FREEBUSY:20070315T210000Z/20070315T220000Z FREEBUSY:20070316T210000Z/20070316T220000Z FREEBUSY:20070317T210000Z/20070317T220000Z FREEBUSY:20070318T210000Z/20070318T220000Z FREEBUSY:20070319T210000Z/20070319T220000Z FREEBUSY:20070320T210000Z/20070320T220000Z FREEBUSY:20070321T210000Z/20070321T220000Z FREEBUSY:20070321T220000Z/20070321T230000Z FREEBUSY:20070322T210000Z/20070322T220000Z FREEBUSY:20070323T040000Z/20070323T054500Z FREEBUSY:20070323T210000Z/20070323T220000Z FREEBUSY:20070324T210000Z/20070324T220000Z FREEBUSY:20070325T210000Z/20070325T220000Z FREEBUSY:20070326T210000Z/20070326T220000Z FREEBUSY:20070327T210000Z/20070327T220000Z FREEBUSY:20070328T210000Z/20070328T220000Z FREEBUSY:20070328T220000Z/20070328T230000Z FREEBUSY:20070329T210000Z/20070329T220000Z FREEBUSY:20070330T210000Z/20070330T220000Z FREEBUSY:20070331T210000Z/20070331T220000Z FREEBUSY:20070401T210000Z/20070401T220000Z FREEBUSY:20070402T193000Z/20070402T213000Z FREEBUSY:20070402T210000Z/20070402T220000Z FREEBUSY:20070403T210000Z/20070403T220000Z FREEBUSY:20070404T210000Z/20070404T220000Z FREEBUSY:20070404T220000Z/20070404T230000Z FREEBUSY:20070405T210000Z/20070405T220000Z FREEBUSY:20070406T040000Z/20070406T054500Z FREEBUSY:20070406T210000Z/20070406T220000Z FREEBUSY:20070407T210000Z/20070407T220000Z FREEBUSY:20070408T210000Z/20070408T220000Z FREEBUSY:20070409T210000Z/20070409T220000Z FREEBUSY:20070410T210000Z/20070410T220000Z FREEBUSY:20070411T210000Z/20070411T220000Z FREEBUSY:20070411T220000Z/20070411T230000Z FREEBUSY:20070412T210000Z/20070412T220000Z FREEBUSY:20070413T210000Z/20070413T220000Z FREEBUSY:20070414T210000Z/20070414T220000Z FREEBUSY:20070415T210000Z/20070415T220000Z FREEBUSY:20070416T210000Z/20070416T220000Z FREEBUSY:20070417T210000Z/20070417T220000Z FREEBUSY:20070418T210000Z/20070418T220000Z FREEBUSY:20070418T220000Z/20070418T230000Z FREEBUSY:20070419T210000Z/20070419T220000Z FREEBUSY:20070420T040000Z/20070420T054500Z FREEBUSY:20070420T210000Z/20070420T220000Z FREEBUSY:20070421T210000Z/20070421T220000Z FREEBUSY:20070422T210000Z/20070422T220000Z FREEBUSY:20070423T210000Z/20070423T220000Z FREEBUSY:20070424T210000Z/20070424T220000Z FREEBUSY:20070425T210000Z/20070425T220000Z FREEBUSY:20070425T220000Z/20070425T230000Z FREEBUSY:20070426T210000Z/20070426T220000Z FREEBUSY:20070427T210000Z/20070427T220000Z FREEBUSY:20070428T210000Z/20070428T220000Z FREEBUSY:20070429T210000Z/20070429T220000Z FREEBUSY:20070430T210000Z/20070430T220000Z FREEBUSY:20070501T210000Z/20070501T220000Z FREEBUSY:20070502T193000Z/20070502T213000Z FREEBUSY:20070502T210000Z/20070502T220000Z FREEBUSY:20070503T210000Z/20070503T220000Z FREEBUSY:20070504T040000Z/20070504T054500Z FREEBUSY:20070504T210000Z/20070504T220000Z FREEBUSY:20070505T210000Z/20070505T220000Z FREEBUSY:20070506T210000Z/20070506T220000Z FREEBUSY:20070507T210000Z/20070507T220000Z FREEBUSY:20070508T210000Z/20070508T220000Z FREEBUSY:20070509T210000Z/20070509T220000Z FREEBUSY:20070510T210000Z/20070510T220000Z FREEBUSY:20070511T210000Z/20070511T220000Z FREEBUSY:20070512T210000Z/20070512T220000Z FREEBUSY:20070513T210000Z/20070513T220000Z FREEBUSY:20070514T210000Z/20070514T220000Z FREEBUSY:20070515T210000Z/20070515T220000Z FREEBUSY:20070516T210000Z/20070516T220000Z FREEBUSY:20070517T210000Z/20070517T220000Z FREEBUSY:20070518T040000Z/20070518T054500Z FREEBUSY:20070518T210000Z/20070518T220000Z FREEBUSY:20070519T210000Z/20070519T220000Z FREEBUSY:20070520T210000Z/20070520T220000Z FREEBUSY:20070521T210000Z/20070521T220000Z FREEBUSY:20070522T210000Z/20070522T220000Z FREEBUSY:20070523T210000Z/20070523T220000Z FREEBUSY:20070524T210000Z/20070524T220000Z FREEBUSY:20070525T210000Z/20070525T220000Z FREEBUSY:20070526T210000Z/20070526T220000Z FREEBUSY:20070527T210000Z/20070527T220000Z FREEBUSY:20070528T210000Z/20070528T220000Z FREEBUSY:20070529T210000Z/20070529T220000Z FREEBUSY:20070530T210000Z/20070530T220000Z FREEBUSY:20070531T210000Z/20070531T220000Z FREEBUSY:20070601T040000Z/20070601T054500Z FREEBUSY:20070601T210000Z/20070601T220000Z FREEBUSY:20070602T193000Z/20070602T213000Z FREEBUSY:20070602T210000Z/20070602T220000Z FREEBUSY:20070603T210000Z/20070603T220000Z FREEBUSY:20070604T210000Z/20070604T220000Z FREEBUSY:20070605T210000Z/20070605T220000Z FREEBUSY:20070606T210000Z/20070606T220000Z FREEBUSY:20070607T210000Z/20070607T220000Z FREEBUSY:20070608T210000Z/20070608T220000Z FREEBUSY:20070609T210000Z/20070609T220000Z FREEBUSY:20070610T210000Z/20070610T220000Z FREEBUSY:20070611T210000Z/20070611T220000Z FREEBUSY:20070612T210000Z/20070612T220000Z FREEBUSY:20070613T210000Z/20070613T220000Z FREEBUSY:20070614T210000Z/20070614T220000Z FREEBUSY:20070615T040000Z/20070615T054500Z FREEBUSY:20070615T210000Z/20070615T220000Z FREEBUSY:20070616T210000Z/20070616T220000Z FREEBUSY:20070617T210000Z/20070617T220000Z FREEBUSY:20070618T210000Z/20070618T220000Z FREEBUSY:20070619T210000Z/20070619T220000Z FREEBUSY:20070620T210000Z/20070620T220000Z FREEBUSY:20070621T210000Z/20070621T220000Z FREEBUSY:20070622T210000Z/20070622T220000Z FREEBUSY:20070623T210000Z/20070623T220000Z FREEBUSY:20070624T210000Z/20070624T220000Z FREEBUSY:20070625T210000Z/20070625T220000Z FREEBUSY:20070626T210000Z/20070626T220000Z FREEBUSY:20070627T210000Z/20070627T220000Z FREEBUSY:20070628T210000Z/20070628T220000Z FREEBUSY:20070629T040000Z/20070629T054500Z FREEBUSY:20070629T210000Z/20070629T220000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ORGANIZER:mailto:user1@example.net ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net END:VFREEBUSY END:VCALENDAR Dav Name: >/user1/collection/Daily_NY_5pm.ics< a) start: >20060101T220000Z< b)finish: >20060101T230000Z< rrule: >FREQ=DAILY;INTERVAL=1;COUNT=1000< status: >NULL< Dav Name: >/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics< a) start: >20061102T183000Z< b)finish: >20061102T203000Z< rrule: >FREQ=MONTHLY< status: >CONFIRMED< Dav Name: >/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics< a) start: >20061101T210000Z< b)finish: >20061101T220000Z< rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH< status: >NULL< Dav Name: >/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics< a) start: >20061103T030000Z< b)finish: >20061103T044500Z< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< status: >CONFIRMED< Dav Name: >/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics< a) start: >20061223T030000Z< b)finish: >20061223T050000Z< rrule: >NULL< status: >CONFIRMED< Dav Name: >/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics< a) start: >20061223T060000Z< b)finish: >20061223T080000Z< rrule: >NULL< status: >TENTATIVE< Dav Name: >/user1/home/20061101T073004Z.ics< a) start: >20061031T210000Z< b)finish: >20061031T220000Z< rrule: >NULL< status: >NULL< Dav Name: >/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics< a) start: >20061101T233000Z< b)finish: >20061102T003000Z< rrule: >NULL< status: >NULL< davical-1.1.1/testing/tests/regression-suite/0961-REPORT-public-expanded.test0000644000000000000000000000144511751114252023507 0ustar # # Test REPORT access to a non-public calendar using a ticket. # TYPE=REPORT URL=http://regression.host/public.php/user2/home/ NOAUTH # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 161 AND target_resource_id is null; ENDSQL HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEAD BEGINDATA /public.php/user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics ENDDATA davical-1.1.1/testing/tests/regression-suite/0503-iCal-PROPFIND.test0000644000000000000000000000135611446006434021515 0ustar # # Testing with a process similar to iCal 10.5 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEAD HEADER=User-Agent: DAVKit/2.0 (10.5; wrbt) iCal 3.0 HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA ENDDATA # REPLACE=/^ETag: "[0-9a-f]{32}"/ETag: "deadbeefcafef00ddeadbeefcafefeed"/ # REPLACE=/"[0-9a-f]{32}"<.A:getctag>/"deadbeefcafef00ddeadbeefcafefeed"<.A:getctag>/ davical-1.1.1/testing/tests/regression-suite/0556-iPhone-REPORT.test0000644000000000000000000000106611633117640021667 0ustar # # Testing with a process similar to iPhone 5 # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEAD AUTH=user1:user1 HEADER=User-Agent: iOS/5.0 (9A5302b) dataaccessd/1.0 HEADER=Content-Type: text/xml HEADER=Depth: 1 # BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0830-Spec-FREEBUSY-1.result0000644000000000000000000000627311732223560022244 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 1256 Content-Type: text/calendar BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20061004T140000Z DTEND:20070105T220000Z FREEBUSY:20061031T210000Z/20061031T220000Z FREEBUSY:20061101T210000Z/20061101T220000Z FREEBUSY:20061101T233000Z/20061102T003000Z FREEBUSY:20061102T183000Z/20061102T203000Z FREEBUSY:20061103T030000Z/20061103T044500Z FREEBUSY:20061108T210000Z/20061108T220000Z FREEBUSY:20061115T210000Z/20061115T220000Z FREEBUSY:20061117T030000Z/20061117T044500Z FREEBUSY:20061122T210000Z/20061122T220000Z FREEBUSY:20061129T210000Z/20061129T220000Z FREEBUSY:20061201T030000Z/20061201T044500Z FREEBUSY:20061202T183000Z/20061202T203000Z FREEBUSY:20061206T210000Z/20061206T220000Z FREEBUSY:20061213T210000Z/20061213T220000Z FREEBUSY:20061215T030000Z/20061215T044500Z FREEBUSY:20061220T210000Z/20061220T220000Z FREEBUSY:20061223T000000Z/20061223T020000Z FREEBUSY:20061223T030000Z/20061223T050000Z FREEBUSY;FBTYPE=BUSY-TENTATIVE:20061223T060000Z/20061223T080000Z FREEBUSY:20061227T210000Z/20061227T220000Z FREEBUSY:20061229T030000Z/20061229T044500Z FREEBUSY:20070102T183000Z/20070102T203000Z FREEBUSY:20070103T210000Z/20070103T220000Z END:VFREEBUSY END:VCALENDAR a) Start: >2006-11-01 10:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061031T210000Z< d) UTC End: >20061031T220000Z< rrule: >NULL< status: >NULL< a) Start: >2006-11-02 10:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061101T210000Z< d) UTC End: >20061101T220000Z< rrule: >FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH< status: >NULL< a) Start: >2006-11-02 12:30:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061101T233000Z< d) UTC End: >20061102T003000Z< rrule: >NULL< status: >NULL< a) Start: >2006-11-03 16:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061103T030000Z< d) UTC End: >20061103T044500Z< rrule: >FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900< status: >CONFIRMED< a) Start: >2006-12-23 13:00:00< b) Location: >Pacific/Auckland< c)UTC Start: >20061223T000000Z< d) UTC End: >20061223T020000Z< rrule: >NULL< status: >CONFIRMED< a) Start: >2006-12-23 16:00:00< b) Location: >Antarctica/McMurdo< c)UTC Start: >20061223T030000Z< d) UTC End: >20061223T050000Z< rrule: >NULL< status: >CONFIRMED< a) Start: >2006-12-23 19:00:00< b) Location: >Antarctica/McMurdo< c)UTC Start: >20061223T060000Z< d) UTC End: >20061223T080000Z< rrule: >NULL< status: >TENTATIVE< a) Start: >NULL< b) Location: >NULL< c)UTC Start: >20061102T183000Z< d) UTC End: >20061102T203000Z< rrule: >FREQ=MONTHLY< status: >CONFIRMED< davical-1.1.1/testing/tests/regression-suite/0219-Moz-REPORT.test0000644000000000000000000000162011446006434021202 0ustar # # Request a REPORT as a user with read/write access # TYPE=REPORT AUTH=assistant1:assistant1 URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20061108 Calendar/0.4a1 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Keep-Alive: 300 HEADER=Content-Type: text/xml HEADER=Depth: 1 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0105-Evo-REPORT-1.result0000644000000000000000000000154411732222754021665 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ca51ab493acbf1f9847c2cd95ef33026" Content-Length: 552 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics "2c32a2f8aba853654eb17fe037a4db4d" HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics "c3658901fd4689d4a1e1d6f08601ef4f" HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0950-MKTICKET.result0000644000000000000000000000217411751110660021201 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Ticket:Good Ticket ID ETag: "Some good ETag" Content-Length: 525 Content-Type: text/xml; charset="utf-8" Good Ticket ID /caldav.php/user1/ Second-86400 infinity dav_owner_id: >1002< privileges: >000000000001001000100001< target_collection: >160< target_resource_i: >NULL< timeout: >01:00:00< dav_owner_id: >1002< privileges: >000000000001001011100111< target_collection: >160< target_resource_i: >1530< timeout: >1 day< davical-1.1.1/testing/tests/regression-suite/0107-Evo-REPORT-1.test0000644000000000000000000000077111446006434021326 0ustar # # Do a REPORT request (test RewriteRule support) # TYPE=REPORT URL=http://mycaldav/user1/home/ HEAD HEADER=Depth: 1 HEADER=User-Agent: Evolution/1.8.1 HEADER=Content-Type: text/xml BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0240-Moz-PROPFIND.result0000644000000000000000000000554611732223013021744 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "fd17acf5fe9ad6e6612323ef680b3d10" Content-Length: 2601 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/home/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addresses/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/created/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-read/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/calendar-proxy-write/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0000-Setup-PUT-collection-user3.result0000644000000000000000000000626211732222716024715 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT SEQUENCE:3 TRANSP:OPAQUE UID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB DTSTART;TZID=Europe/Helsinki:20081025T133000 DTSTAMP:20081024T200745Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12 SUMMARY:Irregular meeting for User 3 CREATED:20081024T200734Z DTEND;TZID=Europe/Helsinki:20081025T143000 END:VEVENT BEGIN:VTIMEZONE TZID:Europe/Helsinki BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 DTSTART:19810329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:EEST END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 DTSTART:19961027T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:EET END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2008-10-25 14:30:00< dtstamp: >2008-10-24 20:07:45< dtstart: >2008-10-25 13:30:00< due: >NULL< location: >NULL< logged_user: >12< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12< status: >NULL< summary: >Irregular meeting for User 3< transp: >OPAQUE< tz_id: >Europe/Helsinki< uid: >55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB< url: >NULL< user_no: >12< A1 CalDAV DATA: >BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT SEQUENCE:2 TRANSP:OPAQUE UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491 DTSTART;TZID=Europe/Helsinki:20081024T084500 DTSTAMP:20081025T112653Z SUMMARY:Dentist\'s Council meeting RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR CREATED:20081025T112648Z DTEND;TZID=Europe/Helsinki:20081024T113000 END:VEVENT BEGIN:VTIMEZONE TZID:Europe/Helsinki BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 DTSTART:19810329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:EEST END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 DTSTART:19961027T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:EET END:STANDARD END:VTIMEZONE END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2008-10-24 11:30:00< dtstamp: >2008-10-25 11:26:53< dtstart: >2008-10-24 08:45:00< due: >NULL< location: >NULL< logged_user: >12< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR< status: >NULL< summary: >Dentist\'s Council meeting< transp: >OPAQUE< tz_id: >Europe/Helsinki< uid: >174F9C2A-1223-40C4-9E06-6E91F2EA9491< url: >NULL< user_no: >12< count: >2< davical-1.1.1/testing/tests/regression-suite/0305-Chandler-MKCOL-1.test0000644000000000000000000000070111446006434022140 0ustar # # Test the MKCOL which Chandler does at this point in it's # search for understanding # TYPE=MKCOL URL=http://mycaldav/caldav.php/user1/home/.ce7ad224-8288-11db-ec28-b49a13ab0e46.tmp/ HEADER=Chandler/0.7alpha4 (Linux) HEAD # # Query to confirm we got it QUERY SELECT user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar FROM collection WHERE dav_name = '/user1/home/.ce7ad224-8288-11db-ec28-b49a13ab0e46.tmp/' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0223-Moz-OPTIONS-denied.test0000644000000000000000000000040411446006434022542 0ustar # # Do an OPTIONS request (authenticated) against a user who we # do not have read access to. # TYPE=OPTIONS URL=http://mycaldav/caldav.php/user3/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20111013 Thunderbird/1.5.0.7 HEAD davical-1.1.1/testing/tests/regression-suite/0510-iCal-PROPFIND.result0000644000000000000000000000244211732223042022041 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "acfaf4c13829d0f908c2bd54a2180454" Content-Length: 998 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ /caldav.php/user1/.in/ /caldav.php/user1/.out/ /caldav.php/user1/.drop/ user1 home HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0956-PROPFIND.test0000644000000000000000000000166611751113775020675 0ustar # # PROPFIND on a collection which we can only access via a ticket # also retrieving the tickets on that resource. # using the /public.php/ URL with no authentication # TYPE=PROPFIND URL=http://regression.host/public.php/user1/home/ NOAUTH # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 160 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEADER=Depth: 0 BEGINDATA ENDDATA REPLACE=!\S{8}!Good Ticket ID! REPLACE=!Seconds-3\d+!Seconds-3600! davical-1.1.1/testing/tests/regression-suite/0919-PROPFIND-supported-stuff.test0000644000000000000000000000101611446006434024023 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/user1/.in/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0873-GroupDAV-PROPFIND.test0000644000000000000000000000164211750435300022300 0ustar # # Testing with a GroupDAV style request for a PROPFIND on the root with a Depth 1 # TYPE=PROPFIND URL=http://mycaldav/caldav.php/ HEAD AUTH=user1:user1 HEADER=Content-Type: text/xml HEADER=Depth: 1 BEGINDATA ENDDATA REPLACE=/ETag: "\S+"/ETag: "some valid etag"/ REPLACE=!C:getctag>\S+some valid etag ENDDATA davical-1.1.1/testing/tests/regression-suite/0926-MOVE.test0000644000000000000000000000126711633117640020206 0ustar # # MOVE an event from one location to another # TYPE=MOVE URL=http://regression.host/caldav.php/user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEADER=User-Agent: RFC4918 Spec Tests HEADER=Destination: /caldav.php/resource1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics HEAD QUERY SELECT caldav_data.dav_name AS data_name, calendar_item.dav_name AS item_name, caldav_data.user_no AS cd_user_no, calendar_item.user_no AS ci_user_no, caldav_data.collection_id AS cd_collection, calendar_item.collection_id AS ci_collection FROM caldav_data JOIN calendar_item USING(dav_id) WHERE caldav_data.dav_name ~ 'DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics'; ENDQUERY davical-1.1.1/testing/tests/regression-suite/0959-REPORT-expanded.result0000644000000000000000000002670211732223674022614 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "d0ccb82b5692c5bb20f022b0973ff36c" Content-Length: 10328 Content-Type: text/xml; charset="utf-8" /caldav.php/user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081102T220000Z DURATION:PT30M RECURRENCE-ID:20081102T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081104T220000Z DURATION:PT30M RECURRENCE-ID:20081104T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081106T220000Z DURATION:PT30M RECURRENCE-ID:20081106T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081109T220000Z DURATION:PT30M RECURRENCE-ID:20081109T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081111T220000Z DURATION:PT30M RECURRENCE-ID:20081111T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081113T220000Z DURATION:PT30M RECURRENCE-ID:20081113T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081116T220000Z DURATION:PT30M RECURRENCE-ID:20081116T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081118T220000Z DURATION:PT30M RECURRENCE-ID:20081118T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081120T220000Z DURATION:PT30M RECURRENCE-ID:20081120T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081123T220000Z DURATION:PT30M RECURRENCE-ID:20081123T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081125T220000Z DURATION:PT30M RECURRENCE-ID:20081125T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081127T220000Z DURATION:PT30M RECURRENCE-ID:20081127T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081130T220000Z DURATION:PT30M RECURRENCE-ID:20081130T220000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user2/home/047871e3-6b70-4178-9af8-0ceb50f7b092.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting X-MOZ-GENERATION:2 DTSTART:20081102T200000Z DURATION:PT1H RECURRENCE-ID:20081102T200000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting X-MOZ-GENERATION:2 DTSTART:20081109T200000Z DURATION:PT1H RECURRENCE-ID:20081109T200000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting X-MOZ-GENERATION:2 DTSTART:20081116T200000Z DURATION:PT1H RECURRENCE-ID:20081116T200000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting X-MOZ-GENERATION:2 DTSTART:20081123T200000Z DURATION:PT1H RECURRENCE-ID:20081123T200000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting X-MOZ-GENERATION:2 DTSTART:20081130T200000Z DURATION:PT1H RECURRENCE-ID:20081130T200000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user2/home/9429a973-2b13-4b1a-be09-948d75425c45.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up X-MOZ-GENERATION:2 DTSTART:20081107T010000Z DURATION:PT1H RECURRENCE-ID:20081107T010000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up X-MOZ-GENERATION:2 DTSTART:20081114T010000Z DURATION:PT1H RECURRENCE-ID:20081114T010000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up X-MOZ-GENERATION:2 DTSTART:20081121T010000Z DURATION:PT1H RECURRENCE-ID:20081121T010000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up X-MOZ-GENERATION:2 DTSTART:20081128T010000Z DURATION:PT1H RECURRENCE-ID:20081128T010000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user2/home/7d729xc0-0895-012d-124e-002421a2359e.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday DESCRIPTION:An all day event on various days. CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D DTSTART:20081031T070000Z DURATION:P1D RECURRENCE-ID:20081031T070000Z END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday DESCRIPTION:An all day event on various days. CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D DTSTART:20081103T080000Z DURATION:P1D RECURRENCE-ID:20081103T080000Z END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday DESCRIPTION:An all day event on various days. CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D DTSTART:20081111T080000Z DURATION:P1D RECURRENCE-ID:20081111T080000Z END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday DESCRIPTION:An all day event on various days. CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D DTSTART:20081120T080000Z DURATION:P1D RECURRENCE-ID:20081120T080000Z END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday DESCRIPTION:An all day event on various days. CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D DTSTART:20081128T080000Z DURATION:P1D RECURRENCE-ID:20081128T080000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user2/home/bd262d20-1cdb-012d-1264-002421a2359e.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT LAST-MODIFIED:20081123T210725Z SEQUENCE:6 UID:bd262d20-1cdb-012d-1264-002421a2359e SUMMARY:Afternoon run DESCRIPTION: CREATED:20081123T210644Z DTSTAMP:20081123T210725Z DURATION:PT1H LOCATION: DTSTART:20081123T230000Z DURATION:PT1H END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20081123T210725Z SEQUENCE:6 UID:bd262d20-1cdb-012d-1264-002421a2359e SUMMARY:Afternoon run DESCRIPTION: CREATED:20081123T210644Z DTSTAMP:20081123T210725Z DURATION:PT1H LOCATION: DTSTART:20081130T230000Z DURATION:PT1H RECURRENCE-ID:20081130T230000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dav_name: >/user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics< dtstart: >2008-10-20 11:00:00+13< dtstart_utc: >2008-10-19 22:00:00< rrule: >FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR< dav_name: >/user2/home/047871e3-6b70-4178-9af8-0ceb50f7b092.ics< dtstart: >2008-10-20 09:00:00+13< dtstart_utc: >2008-10-19 20:00:00< rrule: >FREQ=WEEKLY;INTERVAL=1< dav_name: >/user2/home/9429a973-2b13-4b1a-be09-948d75425c45.ics< dtstart: >2008-10-24 14:00:00+13< dtstart_utc: >2008-10-24 01:00:00< rrule: >FREQ=WEEKLY;INTERVAL=1< dav_name: >/user2/home/7d729xc0-0895-012d-124e-002421a2359e.ics< dtstart: >2008-10-06 20:00:00+13< dtstart_utc: >2008-10-06 07:00:00< rrule: >FREQ=MONTHLY;BYDAY=1MO,2TU,3TH,-1FR;INTERVAL=1< dav_name: >/user2/home/bd262d20-1cdb-012d-1264-002421a2359e.ics< dtstart: >2008-11-24 12:00:00+13< dtstart_utc: >2008-11-23 23:00:00< rrule: >FREQ=WEEKLY;INTERVAL=1;BYDAY=SU< davical-1.1.1/testing/tests/regression-suite/0602-Soho-PROPFIND.test0000644000000000000000000000105611446006434021552 0ustar # # SOHO Organizer works best looking at the person # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEADER=User-Agent: SOHO Organizer/6.5.2 libcurl/7.17.0 OpenSSL/0.9.7l zlib/1.2.3 libssh2/0.17 HEADER=Content-Type: text/xml; charset=utf-8 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0930-REPORT-expand-property.test0000644000000000000000000000063211446006434023600 0ustar # # expand-property REPORT # TYPE=REPORT URL=http://regression.host/caldav.php/user1/home/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0011-Mulberry-PUT-1b.result0000644000000000000000000000330711732222740022522 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "6cff373f55c3e8318ad1c0db93205d08" Content-Length: 0 Content-Type: text/plain; charset="utf-8" A1 CalDAV DATA: >BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//mulberrymail.com//Mulberry v4.0//EN VERSION:2.0 X-WR-CALNAME:home BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20061107T031419Z DTSTART;TZID=New Zealand Standard Time:20061025T091500 DURATION:PT1H SUMMARY:A first event, modified. UID:B18CBB57295D01D7661A6DD4@D76FAF7B10D9E8D2D41F779C END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< description: >NULL< dtend: >2006-10-25 10:15:00< dtstamp: >2006-11-07 03:14:19< dtstart: >2006-10-25 09:15:00< due: >NULL< last_modified: >2006-11-07 03:14:19< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >NULL< status: >NULL< summary: >A first event, modified.< transp: >NULL< tz_id: >New Zealand Standard Time< uid: >B18CBB57295D01D7661A6DD4@D76FAF7B10D9E8D2D41F779C< url: >NULL< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0562-iOS-PROPFIND.result0000644000000000000000000000244111756133320021676 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ad7ec8d22f626f3c8f86c0a275847c93" Content-Length: 997 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ /caldav.php/user1/home/ 1 inside inside2 HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0017-Mulberry-MKCALENDAR-4.result0000644000000000000000000000075211732222744023327 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 219 Content-Type: text/xml; charset="utf-8" /caldav.php/admin/home/ davical-1.1.1/testing/tests/regression-suite/0928-MOVE.result0000644000000000000000000000063211732223650020541 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_etag: >d28a7507a92f6f6b368c87a65808155e< dav_name: >/user1/movedcalendar/< mod_in_last_hour: >1< user_no: >10< davical-1.1.1/testing/tests/regression-suite/0523-iCal-PROPFIND.result0000644000000000000000000000247711732223050022054 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Location: /caldav.php/user2/ ETag: "cb2395b4d4b229e5ea994113535bf173" Content-Length: 989 Content-Type: text/xml; charset="utf-8" /caldav.php/user2/ /caldav.php/user2/ mailto:user2@example.net /caldav.php/user2/ /caldav.php/user2/.in/ /caldav.php/user2/.out/ /caldav.php/user2/.drop/ User 2 HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0847-Spec-PROPFIND-slash.test0000644000000000000000000000113111753040331022644 0ustar # # Testing for Spec compliance. PROPFIND on / # TYPE=PROPFIND URL=http://mycaldav/caldav.php/ HEADER=User-Agent: RFC2518 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml BEGINDATA ENDDATA # # # # # # # #ENDDATA davical-1.1.1/testing/tests/regression-suite/0515-iCal-PUT-VEVENT.result0000644000000000000000000000444111732223044022305 0ustar HTTP/1.1 100 Continue HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "c057c3eb789b944e76f4d77fccf36ea1" Content-Length: 0 Content-Type: text/plain; charset="utf-8" CalDAV Data: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Lunch will be needed UID:3C1BF85D-3F28-413F-844F-80EBD33B8EE6 TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20071123T120000 DTSTAMP:20071124T221900Z SUMMARY:Beard Meeting CREATED:20071124T221521Z DTEND;TZID=Pacific/Auckland:20071123T140000 RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4FR BEGIN:VALARM X-WR-ALARMUID:F5B2B4CF-E7F2-47B3-8243-8CB829E81122 ACTION:EMAIL DESCRIPTION:This is an event reminder SUMMARY:Alarm notification ATTENDEE:mailto:andrew@mcmillan.net.nz TRIGGER:-P8D END:VALARM BEGIN:VALARM X-WR-ALARMUID:3A336F1D-550D-412F-9BDE-EBE8B03E8A53 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< class: >PUBLIC< dav_etag: >c057c3eb789b944e76f4d77fccf36ea1< description: >Lunch will be needed< dtend: >2007-11-23 14:00:00< dtstamp: >2007-11-24 22:19:00< dtstart: >2007-11-23 12:00:00< due: >NULL< last_modified: >2007-11-24 22:19:00< location: >NULL< logged_user: >10< percent_complete: >NULL< priority: >NULL< rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=4FR< status: >NULL< summary: >Beard Meeting< transp: >OPAQUE< tz_id: >Pacific/Auckland< uid: >3C1BF85D-3F28-413F-844F-80EBD33B8EE6< url: >NULL< user_no: >101< davical-1.1.1/testing/tests/regression-suite/0520-iCal-PROPFIND.result0000644000000000000000000000320711732223045022045 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "9b4a5104ccdf29c1ff158b1463f41d5c" Content-Length: 1354 Content-Type: text/xml; charset="utf-8" /caldav.php/user2/.in/ "0389feae460444b4b5db3b16c94b1e43" User 2 Inbox /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/.in/15f40cce00b378332164188cf779f0d6.ics test meeting /caldav.php/user2/home/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0544-iCLoud-PUT-encoded.result0000644000000000000000000000046711732223066023220 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "6ddd18264a9d40c1c9d37a005eeb7e4f" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0300-Chandler-OPTIONS-1.result0000644000000000000000000000034211446006434022761 0ustar HTTP/1.1 401 Unauthorized Date: Dow, 01 Jan 2000 00:00:00 GMT WWW-Authenticate: Basic realm="DAViCal CalDAV Server" Content-Length: 40 Content-Type: text/plain; ; charset="utf-8" Please log in for access to this system.davical-1.1.1/testing/tests/regression-suite/0886-REPORT-freebusy.test0000644000000000000000000000242011732445667022307 0ustar # # Request a freebusy report by URL # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/home/ HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ REPLACE=/^DTSTART:20060930T120000Z\r?$/DTSTART:correct/ REPLACE=/^DTEND:20070630T115959Z\r?$/DTEND:correct/ BEGINDATA ENDDATA QUERY SELECT dav_name AS "Dav Name", calendar_item.rrule, status, to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "a) start", to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "b)finish" FROM caldav_data INNER JOIN calendar_item USING(dav_id,user_no,dav_name) WHERE dav_name ~ '^/user1/home/[^/]+$' AND rrule_event_overlaps( dtstart, dtend, rrule, '20061001T000000', '20070630T235959') AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) ORDER BY 2, 3, 4 ENDQUERY # caldav_data.user_no = 10 davical-1.1.1/testing/tests/regression-suite/0831-Spec-RRULE-1.test0000644000000000000000000000057611446006434021354 0ustar # # Test specification compliance for RRULE # # TYPE=TESTRRULE URL=http://mycaldav/caldav.php HEAD # # This is a special type of request which just calls a PHP # program specifically for exercising the RRULE library. # REPLACE=/P: 0\.\d{4} & S: 0\.\d{4}// # REPLACE=/Content-Type: text.(html|plain)/Content-Type: text/ REPLACE=~Content-Type: text/html~Content-Type: text/plain~ davical-1.1.1/testing/tests/regression-suite/0527-iCal-PROPFIND.result0000644000000000000000000000255411732223052022056 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "1f0e016ecbd8566bc60b88a167178059" Content-Length: 1071 Content-Type: text/xml; charset="utf-8" /caldav.php/resmgr1/ /caldav.php/resource1/calendar-proxy-write/ /caldav.php/resource2/calendar-proxy-write/ HTTP/1.1 200 OK /caldav.php/resmgr1/calendar-proxy-read/ /caldav.php/resource1/calendar-proxy-write/ /caldav.php/resource2/calendar-proxy-write/ HTTP/1.1 200 OK /caldav.php/resmgr1/calendar-proxy-write/ /caldav.php/resource1/calendar-proxy-write/ /caldav.php/resource2/calendar-proxy-write/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0812-Spec-LOCK-1.result0000644000000000000000000000071111732223552021540 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 183 Content-Type: text/xml; charset="utf-8" /user1/home/ HTTP/1.1 423 Resource Locked davical-1.1.1/testing/tests/regression-suite/0205-Moz-PROPFIND-1.test0000644000000000000000000000106511446006434021544 0ustar # # Do a PROPFIND request TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/home/ HEAD HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061013 Thunderbird/1.5.0.7 HEADER=Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 HEADER=Content-Type: text/xml HEADER=Depth: 0 BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0996-PUT-odd-characters.result0000644000000000000000000000356011671741073023342 0ustar Event Data: >BEGIN:VCALENDAR PRODID:-//Open Source Applications Foundation//NONSGML Chandler Server//E N VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:America/Los_Angeles X-TZINFO:America/Los_Angeles[2007g/Partial@883612800000] BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:19980405T020000 RRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:19981025T020000 RRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE BEGIN:VEVENT LAST-MODIFIED:20100316T162103Z SEQUENCE:4 UID:c0f7c860-1345-012d-125f-002421a2359e SUMMARY:2nd Annual Lobsterfest: will you come? DESCRIPTION:2nd Annual Lobsterfest\nSaturday\, August 7\nTime to be annou nced\, @Chamisal Vineyards @1pm\n$85 members\; $100 non members. Inquire for s pecial group pricing. Will you come? DTSTART;TZID=America/Los_Angeles:20100807T000000 CREATED:20100316T162026Z DTSTAMP:20100316T162103Z DURATION:P1D LOCATION:Chamisal Vineyards\\, Oregon X-VENUE:Chamisal Vineyards END:VEVENT END:VCALENDAR < dav_etag: >82d83a8c540d8fa53d5ad843b6456558< dav_name: >/User Six/home/c0f7c860-1345-012d-125f-002421a2359e.ics< description: >2nd Annual Lobsterfest Saturday, August 7 Time to be announced, @Chamisal Vineyards @1pm $85 members; $100 non members. Inquire for special group pricing. Will you come?< dtstart: >2010-08-07 19:00:00+12< summary: >2nd Annual Lobsterfest: will you come?< davical-1.1.1/testing/tests/regression-suite/0874-PROPFIND.test0000644000000000000000000000063211446006434020656 0ustar # # Testing for Spec compliance. PROPFIND on a principal, # Depth: 0, looking for the supported-privilege-set response # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEADER=User-Agent: RFC3744 Spec Tests HEADER=Depth: 0 HEADER=Content-Type: application/xml HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0962-REPORT-expanded.result0000644000000000000000000000624211732223675022604 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "6049c2ed7383e7a84ccf7f019f8e07f5" Content-Length: 2460 Content-Type: text/xml; charset="utf-8" /caldav.php/user5/home/naltpirh2vfjfmplmsivuo30t8google.com.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT LAST-MODIFIED:20100812T161339Z SEQUENCE:5 UID:naltpirh2vfjfmplmsivuo30t8@google.com SUMMARY:Tango Night DESCRIPTION:Never will you see a space glow like a night of Tango at Tea se.\nAll dancers welcome!\n$5 suggested donation CREATED:20091221T033228Z DTSTAMP:20100812T161339Z DURATION:PT3H LOCATION: X-VENUE:Tease Restaurant & Bar, corner of 2nd & Main X-EMAIL-RSVP-UPDATES:true DTSTART:20100920T030000Z DURATION:PT3H RECURRENCE-ID:20100920T030000Z END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100812T161339Z SEQUENCE:5 UID:naltpirh2vfjfmplmsivuo30t8@google.com SUMMARY:Tango Night DESCRIPTION:Never will you see a space glow like a night of Tango at Tea se.\nAll dancers welcome!\n$5 suggested donation CREATED:20091221T033228Z DTSTAMP:20100812T161339Z DURATION:PT3H LOCATION: X-VENUE:Tease Restaurant & Bar, corner of 2nd & Main X-EMAIL-RSVP-UPDATES:true DTSTART:20101018T030000Z DURATION:PT3H RECURRENCE-ID:20101018T030000Z END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100812T161339Z SEQUENCE:5 UID:naltpirh2vfjfmplmsivuo30t8@google.com SUMMARY:Tango Night DESCRIPTION:Never will you see a space glow like a night of Tango at Tea se.\nAll dancers welcome!\n$5 suggested donation CREATED:20091221T033228Z DTSTAMP:20100812T161339Z DURATION:PT3H LOCATION: X-VENUE:Tease Restaurant & Bar, corner of 2nd & Main X-EMAIL-RSVP-UPDATES:true DTSTART:20101122T040000Z DURATION:PT3H RECURRENCE-ID:20101122T040000Z END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100812T161339Z SEQUENCE:5 UID:naltpirh2vfjfmplmsivuo30t8@google.com SUMMARY:Tango Night DESCRIPTION:Never will you see a space glow like a night of Tango at Tea se.\nAll dancers welcome!\n$5 suggested donation CREATED:20091221T033228Z DTSTAMP:20100812T161339Z DURATION:PT3H LOCATION: X-VENUE:Tease Restaurant & Bar, corner of 2nd & Main X-EMAIL-RSVP-UPDATES:true DTSTART:20101220T040000Z DURATION:PT3H RECURRENCE-ID:20101220T040000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK dav_name: >/user5/home/naltpirh2vfjfmplmsivuo30t8google.com.ics< dtstart: >2010-08-16 15:00:00+12< dtstart_utc: >2010-08-16 03:00:00< rrule: >FREQ=MONTHLY;WKST=MO;BYDAY=3SU< dav_name: >/user5/home/v3f2otajsto18em4rom3jd4238google.com.ics< dtstart: >2009-07-08 12:00:00+12< dtstart_utc: >2009-07-08 00:00:00< rrule: >FREQ=WEEKLY;WKST=SU;INTERVAL=2;UNTIL=20090921T065959Z;BYDAY=MO< davical-1.1.1/testing/tests/regression-suite/0501-iCal-PROPFIND.result0000644000000000000000000000243111732223033022037 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "566f3d4049b468c63b21a2c381ab500b" Content-Length: 989 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/ mailto:user1@example.net /caldav.php/user1/ /caldav.php/user1/.in/ /caldav.php/user1/.out/ /caldav.php/user1/.drop/ User 1 HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0016-Mulberry-MKCALENDAR-3.test0000644000000000000000000000021411446006434022755 0ustar # # Make a calendar for someone else who we are allowed to write to TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/resource2/mulberry/ HEAD davical-1.1.1/testing/tests/regression-suite/0245-Moz-POST-FB.test0000644000000000000000000000371211651212132021234 0ustar #--------- # POST to scheduling outbox for freebusy query on user2 # TYPE=POST URL=http://mycaldav/caldav.php/user1/.out/ HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20080917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/calendar; charset=utf-8 HEADER=Originator: mailto:user1@example.net HEADER=Recipient: mailto:user3@example.net HEAD REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ REPLACE=/^ETag: "[0-9a-f]+".?$/ETag: "some valid etag"/ BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 METHOD:REQUEST BEGIN:VFREEBUSY DTSTAMP:20081022T062945Z ORGANIZER:mailto:user1@example.net DTSTART:20081020T110000Z DTEND:20081105T110000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user3@example.net END:VFREEBUSY END:VCALENDAR ENDDATA QUERY SELECT calendar_item.rrule AS "c) RRule", calendar_item.status, to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "a) Start", to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "b) Finish", calendar_item.dtstart at time zone olson_name AS "d) Start", timezones.olson_name, class FROM caldav_data INNER JOIN calendar_item USING(dav_id,user_no,dav_name,collection_id) INNER JOIN collection USING(collection_id) LEFT JOIN timezones ON (tz_id=tzid) WHERE caldav_data.dav_name ~ '^/user3/' AND rrule_event_overlaps( dtstart, dtend, rrule, '20081020T110000Z', '20081105T110000Z') AND caldav_data.caldav_type IN ( 'VEVENT', 'VTODO' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) AND collection.is_calendar AND collection.schedule_transp = 'opaque' ENDQUERY davical-1.1.1/testing/tests/regression-suite/0104-Evo-PUT-1.result0000644000000000000000000000052011732222753021311 0ustar HTTP/1.1 100 Continue HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "c3658901fd4689d4a1e1d6f08601ef4f" Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0963-POST-freebusy-private.test0000644000000000000000000000352011633117640023512 0ustar # # POST to scheduling outbox for freebusy query of user4 for user1 # TYPE=POST URL=http://mycaldav/caldav.php/user4/.out/ AUTH=user4:user4 HEADER=User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18pre) Gecko/20100917 Sunbird/0.9 HEADER=Accept: text/xml HEADER=Accept-Language: en-us,en;q=0.5 HEADER=Accept-Charset: utf-8,*;q=0.1 HEADER=Content-Type: text/calendar; charset=utf-8 HEADER=Originator: mailto:user4@example.net HEADER=Recipient: mailto:user1@example.net # HEAD REPLACE=/^DTSTAMP:\d{4}[01]\d[0123]\dT[012]\d[0-5]\d[0-6]\dZ\r?$/DTSTAMP:yyyymmddThhmmssZ/ # REPLACE=/^ETag: "[[:hexdigit:]]+"\s$/ETag: "a fine looking etag"/ BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 METHOD:REQUEST BEGIN:VFREEBUSY DTSTAMP:20081022T062945Z ORGANIZER:mailto:user4@example.net DTSTART:20080730T110000Z DTEND:20080803T110000Z UID:c5bd82ea-cd89-4f58-8d31-336f47e44f97 ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL: mailto:user1@example.net END:VFREEBUSY END:VCALENDAR ENDDATA QUERY SELECT calendar_item.rrule, to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS start, to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS finish, class, calendar_item.dav_name FROM usr INNER JOIN collection USING (user_no) INNER JOIN caldav_data USING (collection_id) INNER JOIN calendar_item USING(dav_id) WHERE lower(usr.email) = 'user1@example.net' AND collection.is_calendar AND rrule_event_overlaps( dtstart, dtend, rrule, '20080730T110000Z', '20080803T110000Z' ) AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) ORDER BY dav_id ENDQUERY davical-1.1.1/testing/tests/regression-suite/0872-PROPFIND.result0000644000000000000000000000601011732223605021206 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "aebcb9df386edb20a7196bae7ee9f68c" Content-Length: 2763 Content-Type: text/xml; charset="utf-8" /caldav.php/user2/home/ "2b0f71bb9f856c9bb9a2b43bc777a3c9" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics "f2c974ff51cb52cde0668544deb36380" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/home/047871e3-6b70-4178-9af8-0ceb50f7b092.ics "58cba7e3fafb6080e85619ea77d08c7a" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/home/9429a973-2b13-4b1a-be09-948d75425c45.ics "13249ced6c7527191a003f54f7e3cd25" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/home/7d729xc0-0895-012d-124e-002421a2359e.ics "848df16c32fc3ce319083ae84c2603a3" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/home/bd262d20-1cdb-012d-1264-002421a2359e.ics "671d4ee904be6c16dd1be076619fe7c0" HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user2/home/56f0e0e0-f742-012d-680c-002421a2359e.ics "e18c0d539b6dcb56df2d266dd4305008" HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/regression-suite/0213-Moz-MKCALENDAR.result0000644000000000000000000000044611732222776022135 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/regression-suite/0007-Mulberry-1.test0000644000000000000000000000021211446006434021352 0ustar # # So we should now make a calendar that we will use for some # testing. TYPE=MKCALENDAR URL=http://mycaldav/caldav.php/user1/home/ HEAD davical-1.1.1/testing/tests/regression-suite/0205-Moz-PROPFIND-1.result0000644000000000000000000000122711732222766022111 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "334c8abc0ac73261cdbf963fc7269d76" Content-Length: 347 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/regression-suite/0599-REPORT-sync-changed.result0000644000000000000000000001071111743153374023361 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "9335d41975cdc0507f9c9e85a7e961ea" Content-Length: 4236 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/home/0544-gzip-PUT.ics "6ddd18264a9d40c1c9d37a005eeb7e4f" HTTP/1.1 200 OK /caldav.php/user1/home/0545-deflate-PUT.ics "4a3aa58a3e11487e87d87024465d4182" HTTP/1.1 200 OK /caldav.php/user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics "00ad5eb1eb5507884710b0b66aa5d5c4" HTTP/1.1 200 OK /caldav.php/user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics "5def8ae2b20893a1c7f4dbaeb008f2f1" HTTP/1.1 200 OK /caldav.php/user1/home/20061101T073004Z.ics "bcc402382688cb3e8e57379c757dbcb0" HTTP/1.1 200 OK /caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics "509b0f0d8a3363379f9f5727f5dd74a0" HTTP/1.1 200 OK /caldav.php/user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics "a1c6404d61190f9574e2bfd69383f144" HTTP/1.1 200 OK /caldav.php/user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics "257b9df4aaf573a578af4aadd033abf4" HTTP/1.1 200 OK /caldav.php/user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics "55f02f66966ee150320383803d1e0d34" HTTP/1.1 200 OK /caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics "cb3d9dc3e8c157f53eba3ea0e1e0f146" HTTP/1.1 200 OK /caldav.php/user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics "08a435c2abaf38f4a50a997343c098a7" HTTP/1.1 200 OK /caldav.php/user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics "efd0257efbc898d059c200d1391af060" HTTP/1.1 200 OK /caldav.php/user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics "a2990674708634a311bb98a59865ca50" HTTP/1.1 200 OK /caldav.php/user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics "6f16959eee5c920b45548840b1e9ea19" HTTP/1.1 200 OK /caldav.php/user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics "8f581a053df6d833254756dfd7553d37" HTTP/1.1 200 OK /caldav.php/user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics "e8060931f30c1798ac58ffbe4ec0bffc" HTTP/1.1 200 OK /caldav.php/user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics "ac90acd649c25070b1a2a17fb31a105a" HTTP/1.1 200 OK data:,27 davical-1.1.1/testing/tests/regression-suite/0916-PROPFIND-supported-stuff.test0000644000000000000000000000077411446006434024032 0ustar # # PROPFIND looking for supported-methods supported-reports etc # TYPE=PROPFIND URL=http://regression.host/caldav.php/ HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/regression-suite/0945-ACL.test0000644000000000000000000000310011446006434020024 0ustar # # ACL setting default privileges on a collection to nothing, and # specific privileges to include read-acl. # TYPE=ACL URL=http://regression.host/caldav.php/user1/ HEADER=User-Agent: RFC3744 Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA /caldav.php/user4/ ENDDATA QUERY SELECT by_principal, by_collection, privileges, p_to.displayname, to_principal FROM grants JOIN dav_principal p_to ON (to_principal=principal_id) LEFT JOIN collection ON (by_collection=collection.collection_id) LEFT JOIN dav_principal p_by ON (by_principal=p_by.principal_id) WHERE p_by.username = 'user1' ORDER BY by_principal, to_principal ENDQUERY davical-1.1.1/testing/tests/binding/0000755000000000000000000000000011776303360014242 5ustar davical-1.1.1/testing/tests/binding/1027-PROPFIND.test0000644000000000000000000000076411446006434016756 0ustar # # PROPFIND on a collection in which we have binds & collections # # In this case we're doing Depth: 0 # TYPE=PROPFIND URL=http://regression.host/caldav.php/user4/base/ AUTH=user4:user4 HEADER=User-Agent: BIND Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 BEGINDATA ENDDATA # davical-1.1.1/testing/tests/binding/1020-MKCOL-base.result0000644000000000000000000000076311732477032017645 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >A normal collection< is_addressbook: >0< is_calendar: >0< parent_container: >/user4/< public_events_onl: >0< resourcetypes: >< user_no: >13< davical-1.1.1/testing/tests/binding/1031-MKTICKET-admin.test0000644000000000000000000000213011751121047020013 0ustar # # MKTICKET request for a read/write ticket on a collection # - ticket should have no expiry # TYPE=MKTICKET URL=http://regression.host/caldav.php/user3/home/ HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD AUTH=admin:nimda BEGINDATA infinity ENDDATA QUERY SELECT access_ticket.dav_owner_id, date_trunc( 'minute', ('55 seconds' + access_ticket.expires - current_timestamp)::interval(0)) AS timeout, access_ticket.privileges, target_collection_id, target_resource_id, collection.dav_name FROM access_ticket INNER JOIN collection ON (collection_id = target_collection_id) WHERE collection.dav_name = '/user3/home/' ENDQUERY # WHERE target_collection = 161 REPLACE=!ETag: "\S+"!ETag: "Some good etag"! REPLACE=!\S{8}!Good Ticket ID! REPLACE=!Ticket: \S{8}!Ticket:Good Ticket ID! davical-1.1.1/testing/tests/binding/1028-PROPFIND.result0000644000000000000000000000124511633117640017311 0ustar /caldav.php/user4/ /caldav.php/user4/ /caldav.php/user4/base/ /caldav.php/.resources/1005 / caldav.php HTTP/1.1 200 OK davical-1.1.1/testing/tests/binding/1033-PROPPATCH-admin-bound.result0000644000000000000000000000146611750220562021622 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 358 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/base/user3/ All requested changes were made. HTTP/1.1 200 OK dav_displayname: >Updated user4-base-user3 displayname with PROPPATCH< property_name: >http://xmlns.dotcal.com/dotcal:icon_uri< property_value: >http://eventful.com/favicon.ico< davical-1.1.1/testing/tests/binding/1102-PROPFIND-bound.result0000644000000000000000000000665511755671446020437 0ustar /caldav.php/user4/boundbase/ A normal collection /caldav.php/.resources/1605 /caldav.php user4 HTTP/1.1 200 OK /caldav.php/user4/boundbase/user1/ User 1's Calendaranza /caldav.php/.resources/160 /caldav.php user4 /caldav.php/user4 base /caldav.php user1 /caldav.php/user4 boundbase HTTP/1.1 200 OK /caldav.php/user4/boundbase/user2/ User 2's Calendar, as uploaded by Admin /caldav.php/.resources/161 /caldav.php user4 /caldav.php/user4 base /caldav.php user2 /caldav.php/user4 boundbase HTTP/1.1 200 OK /caldav.php/user4/boundbase/calendar/ A sub collection /caldav.php/.resources/1606 /caldav.php/user4 base /caldav.php/user4 boundbase HTTP/1.1 200 OK /caldav.php/user4/boundbase/newcalendar/ newcalendar /caldav.php/.resources/1619 /caldav.php/user4 base /caldav.php/user4 boundbase HTTP/1.1 200 OK davical-1.1.1/testing/tests/binding/1022-BIND.result0000644000000000000000000000156011751130032016565 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Location: /caldav.php/user4/base/user1/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1602< bound_source_id: >161< dav_displayname: >Updated Displayname with PROPPATCH< dav_name: >/user4/user2/< length: >8< parent_container: >/user4/< bind_id: >1603< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/user1/< length: >8< parent_container: >/user4/< bind_id: >1607< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/base/user1/< length: >8< parent_container: >/user4/base/< davical-1.1.1/testing/tests/binding/1032-BIND-admin.test0000644000000000000000000000201611751127774017335 0ustar # # BIND a collection into an additional location # also applying a ticket during the bind # TYPE=BIND URL=http://regression.host/caldav.php/user4/base/ AUTH=admin:nimda # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 162 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEAD BEGINDATA user3 /caldav.php/user3/home ENDDATA QUERY SELECT bind_id, bound_source_id, dav_binding.dav_owner_id AS bind_owner, access_ticket.dav_owner_id AS ticket_owner, length(access_ticket_id), parent_container, dav_name, dav_displayname, target_collection_id, target_resource_id, privileges FROM dav_binding LEFT JOIN access_ticket ON ( access_ticket_id = ticket_id ) ENDQUERY davical-1.1.1/testing/tests/binding/1009-REPORT-bound.result0000644000000000000000000001273211633117640020212 0ustar /caldav.php/user4/user2/33169d69-2969-4a96-a3e1-2e312b7614e6.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081019T220000Z DURATION:PT30M END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081021T220000Z DURATION:PT30M RECURRENCE-ID:20081021T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081023T220000Z DURATION:PT30M RECURRENCE-ID:20081023T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081026T220000Z DURATION:PT30M RECURRENCE-ID:20081026T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081028T220000Z DURATION:PT30M RECURRENCE-ID:20081028T220000Z END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting X-MOZ-GENERATION:2 DTSTART:20081030T220000Z DURATION:PT30M RECURRENCE-ID:20081030T220000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/user2/047871e3-6b70-4178-9af8-0ceb50f7b092.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting X-MOZ-GENERATION:2 DTSTART:20081019T200000Z DURATION:PT1H END:VEVENT BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting X-MOZ-GENERATION:2 DTSTART:20081026T200000Z DURATION:PT1H RECURRENCE-ID:20081026T200000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/user2/9429a973-2b13-4b1a-be09-948d75425c45.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up X-MOZ-GENERATION:2 DTSTART:20081024T010000Z DURATION:PT1H END:VEVENT BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up X-MOZ-GENERATION:2 DTSTART:20081031T010000Z DURATION:PT1H RECURRENCE-ID:20081031T010000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/user2/7d729xc0-0895-012d-124e-002421a2359e.ics BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday DESCRIPTION:An all day event on various days. CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D DTSTART:20081006T070000Z DURATION:P1D END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday DESCRIPTION:An all day event on various days. CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D DTSTART:20081014T070000Z DURATION:P1D RECURRENCE-ID:20081014T070000Z END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday DESCRIPTION:An all day event on various days. CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D DTSTART:20081016T070000Z DURATION:P1D RECURRENCE-ID:20081016T070000Z END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday DESCRIPTION:An all day event on various days. CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D DTSTART:20081031T070000Z DURATION:P1D RECURRENCE-ID:20081031T070000Z END:VEVENT END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/binding/1200-BIND-to-BIND.result0000644000000000000000000000316611751212264017731 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Location: /caldav.php/user4/bind2bind/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1602< bound_source_id: >161< dav_displayname: >Updated Displayname with PROPPATCH< dav_name: >/user4/user2/< length: >8< parent_container: >/user4/< bind_id: >1603< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/user1/< length: >8< parent_container: >/user4/< bind_id: >1607< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/base/user1/< length: >8< parent_container: >/user4/base/< bind_id: >1608< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/base/user2/< length: >8< parent_container: >/user4/base/< bind_id: >1630< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/boundbase/< length: >NULL< parent_container: >/user4/< bind_id: >1631< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/boundbase2/< length: >NULL< parent_container: >/user4/< bind_id: >1632< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/bind2bind/< length: >NULL< parent_container: >/user4/< davical-1.1.1/testing/tests/binding/1029-PUT-subcalendar.test0000644000000000000000000000265011651212132020454 0ustar # # Attempt to put an event into a bound location, where # the binding does confer write privileges # TYPE=PUT URL=http://regression.host/caldav.php/user4/base/calendar/anothergoodleopard.ics HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user4:user4 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 BEGIN:VEVENT CREATED:20100319T103247Z LAST-MODIFIED:20100319T105620Z DTSTAMP:20100319T105620Z UID:70399cd7-50a4-4be4-a665-af593e19a7fd SUMMARY:An invited event. Black tie with pink polka dots is essential. D o not bring a leopard. Any leopards which do attend will be forcibly chai ned to a nearby fence. ORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user4@example.net ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user2 @example.net ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user3 @example.net ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user1 @example.net ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user5 @example.net DTSTART:20100322T160000 DTEND:20100322T170000 X-MOZ-GENERATION:3 TRANSP:OPAQUE X-MOZ-SEND-INVITATIONS:TRUE SEQUENCE:1 END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, dtstart, summary FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '/user4/base/calendar/' ENDQUERY davical-1.1.1/testing/tests/binding/1009-REPORT-bound.test0000644000000000000000000000130311446006434017643 0ustar # # Test REPORT access to a bound calendar using a ticket. # TYPE=REPORT URL=http://regression.host/caldav.php/user4/user2/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" BEGINDATA ENDDATA davical-1.1.1/testing/tests/binding/1008-GET-bound.result0000644000000000000000000000222111732477025017613 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Etag: "f2c974ff51cb52cde0668544deb36380" Content-Length: 858 Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR DTSTART;TZID=Pacific/Auckland:20081020T110000 DTEND;TZID=Pacific/Auckland:20081020T113000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/binding/1000-BIND.test0000644000000000000000000000152611751120723016232 0ustar # # BIND a collection into an additional location # also applying a ticket during the bind # TYPE=BIND URL=http://regression.host/caldav.php/user4/ AUTH=user4:user4 # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 161 AND target_resource_id is null; ENDSQL HEADER=X-DAViCal-Flush-Cache: true HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEAD BEGINDATA user2 /caldav.php/user2/home ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id), dav_owner_id, parent_container, dav_name, dav_displayname FROM dav_binding ENDQUERY davical-1.1.1/testing/tests/binding/1005-PROPFIND-bound.test0000644000000000000000000000066411446006434020056 0ustar # # PROPFIND on a collection which we have bound into user4's home # TYPE=PROPFIND URL=http://regression.host/caldav.php/user4/user2/ AUTH=user4:user4 HEADER=User-Agent: BIND Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/binding/1000-BIND.result0000644000000000000000000000102411751121054016560 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Location: /caldav.php/user4/user2/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1602< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/user2/< dav_owner_id: >1005< length: >8< parent_container: >/user4/< davical-1.1.1/testing/tests/binding/1008-GET-bound.test0000644000000000000000000000034411446006434017252 0ustar # # Test GET access to a bound calendar # TYPE=GET URL=http://regression.host/caldav.php/user4/user2/33169d69-2969-4a96-a3e1-2e312b7614e6.ics AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/binding/1023-BIND.test0000644000000000000000000000144411751121031016227 0ustar # # BIND a collection into an additional location # also applying a ticket during the bind # TYPE=BIND URL=http://regression.host/caldav.php/user4/base/ AUTH=user4:user4 # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 161 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEAD BEGINDATA user2 /caldav.php/user2/home/ ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id), parent_container, dav_name, dav_displayname FROM dav_binding ENDQUERY davical-1.1.1/testing/tests/binding/1012-BIND.test0000644000000000000000000000146211751127766016252 0ustar # # BIND a collection into an additional location # also applying a ticket during the bind # TYPE=BIND URL=http://regression.host/caldav.php/user4/ AUTH=user4:user4 # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 160 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEAD BEGINDATA user1 /caldav.php/user1/home ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id) AS ticket_id_length, parent_container, dav_name, dav_displayname FROM dav_binding ENDQUERY davical-1.1.1/testing/tests/binding/1035-GET-mashup.test0000644000000000000000000000020511446006434017434 0ustar # # Doing a GET on a collection of collections. # TYPE=GET URL=http://regression.host/caldav.php/user4/base/ HEAD AUTH=user4:user4 davical-1.1.1/testing/tests/binding/1006-REPORT-bound.result0000644000000000000000000000737111732477021020214 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "1906d52bec5b04408739a88cd9d6dd97" Content-Length: 3516 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/user2/33169d69-2969-4a96-a3e1-2e312b7614e6.ics "f2c974ff51cb52cde0668544deb36380" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR DTSTART;TZID=Pacific/Auckland:20081020T110000 DTEND;TZID=Pacific/Auckland:20081020T113000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/user2/047871e3-6b70-4178-9af8-0ceb50f7b092.ics "58cba7e3fafb6080e85619ea77d08c7a" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081020T090000 DTEND;TZID=Pacific/Auckland:20081020T100000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK /caldav.php/user4/user2/9429a973-2b13-4b1a-be09-948d75425c45.ics "13249ced6c7527191a003f54f7e3cd25" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081024T140000 DTEND;TZID=Pacific/Auckland:20081024T150000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE END:VCALENDAR HTTP/1.1 200 OK davical-1.1.1/testing/tests/binding/1100-BIND.test0000644000000000000000000000152611446006434016236 0ustar # # Here we are binding against a collection containing further # bindings, at the same level in the same collection. # # Before: # /user4/base a collection containing two bindings and a collection # # After: # /user4/boundbase is bound to /user4/base, so it should also appear # to contain two bindings and a collection # TYPE=BIND URL=http://regression.host/caldav.php/user4/ AUTH=user4:user4 HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA boundbase /caldav.php/user4/base ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id), parent_container, dav_name, dav_displayname FROM dav_binding ORDER BY bind_id ENDQUERY davical-1.1.1/testing/tests/binding/1022-BIND.test0000644000000000000000000000144311751121103016225 0ustar # # BIND a collection into an additional location # also applying a ticket during the bind # TYPE=BIND URL=http://regression.host/caldav.php/user4/base/ AUTH=user4:user4 # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 160 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEAD BEGINDATA user1 /caldav.php/user1/home ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id), parent_container, dav_name, dav_displayname FROM dav_binding ENDQUERY davical-1.1.1/testing/tests/binding/1025-PROPFIND.test0000644000000000000000000000071611446006434016751 0ustar # # PROPFIND on a collection in which we have binds & collections # TYPE=PROPFIND URL=http://regression.host/caldav.php/user4/base/ AUTH=user4:user4 HEADER=User-Agent: BIND Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 1 BEGINDATA ENDDATA # davical-1.1.1/testing/tests/binding/1034-DELETE-admin-bind.result0000644000000000000000000000125111751121173021021 0ustar HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1607< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/base/user1/< dav_owner_id: >1005< parent_container: >/user4/base/< bind_id: >1608< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/base/user2/< dav_owner_id: >1005< parent_container: >/user4/base/< davical-1.1.1/testing/tests/binding/1101-PROPFIND-normal.result0000644000000000000000000000574711755671443020615 0ustar /caldav.php/user4/base/ A normal collection /caldav.php/.resources/1605 /caldav.php user4 HTTP/1.1 200 OK /caldav.php/user4/base/user1/ User 1's Calendaranza /caldav.php/.resources/160 /caldav.php user4 /caldav.php/user4 base /caldav.php user1 HTTP/1.1 200 OK /caldav.php/user4/base/user2/ User 2's Calendar, as uploaded by Admin /caldav.php/.resources/161 /caldav.php user4 /caldav.php/user4 base /caldav.php user2 HTTP/1.1 200 OK /caldav.php/user4/base/calendar/ A sub collection /caldav.php/.resources/1606 /caldav.php/user4 base HTTP/1.1 200 OK /caldav.php/user4/base/newcalendar/ newcalendar /caldav.php/.resources/1619 /caldav.php/user4 base HTTP/1.1 200 OK davical-1.1.1/testing/tests/binding/1024-BIND.result0000644000000000000000000000224011751130040016562 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 133 Content-Type: text/xml; charset="utf-8" A resource already exists at the destination. bind_id: >1602< bound_source_id: >161< dav_displayname: >Updated Displayname with PROPPATCH< dav_name: >/user4/user2/< length: >8< parent_container: >/user4/< bind_id: >1603< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/user1/< length: >8< parent_container: >/user4/< bind_id: >1607< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/base/user1/< length: >8< parent_container: >/user4/base/< bind_id: >1608< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/base/user2/< length: >8< parent_container: >/user4/base/< davical-1.1.1/testing/tests/binding/1001-BIND.test0000644000000000000000000000146311751120736016237 0ustar # # BIND a collection into an additional location # also applying a ticket during the bind # TYPE=BIND URL=http://regression.host/caldav.php/user4/ AUTH=user4:user4 # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 161 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEAD BEGINDATA user2 /caldav.php/user2/home ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id), dav_owner_id, parent_container, dav_name, dav_displayname FROM dav_binding ENDQUERY davical-1.1.1/testing/tests/binding/1036-REPORT-sync-initial-bound.result0000644000000000000000000000507311743162317022616 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "4024ce3f5ccba7c419bf247a4632801e" Content-Length: 2302 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/user2/33169d69-2969-4a96-a3e1-2e312b7614e6.ics "f2c974ff51cb52cde0668544deb36380" HTTP/1.1 200 OK /caldav.php/user4/user2/047871e3-6b70-4178-9af8-0ceb50f7b092.ics "58cba7e3fafb6080e85619ea77d08c7a" HTTP/1.1 200 OK /caldav.php/user4/user2/9429a973-2b13-4b1a-be09-948d75425c45.ics "13249ced6c7527191a003f54f7e3cd25" HTTP/1.1 200 OK /caldav.php/user4/user2/7d729xc0-0895-012d-124e-002421a2359e.ics "848df16c32fc3ce319083ae84c2603a3" HTTP/1.1 200 OK /caldav.php/user4/user2/bd262d20-1cdb-012d-1264-002421a2359e.ics "671d4ee904be6c16dd1be076619fe7c0" HTTP/1.1 200 OK /caldav.php/user4/user2/56f0e0e0-f742-012d-680c-002421a2359e.ics "e18c0d539b6dcb56df2d266dd4305008" HTTP/1.1 200 OK /caldav.php/user4/user2/thiswillworkfine.ics "9a8d7696ee2e0a0f1f4170fe4f094a3a" HTTP/1.1 200 OK /caldav.php/user4/user2/thiswillalsobegood.ics "1c7895f11787e71fd6dbe3260d72d4a0" HTTP/1.1 200 OK /caldav.php/user4/user2/70399cd7-50a4-4be4-a665-af593e19a7fd.ics "ea6b316ca24db20f5eb37d1abd60f8c1" HTTP/1.1 200 OK data:,40 davical-1.1.1/testing/tests/binding/1010-PROPPATCH-bound.result0000644000000000000000000000144011750220131020507 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 353 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/user2/ All requested changes were made. HTTP/1.1 200 OK dav_displayname: >Updated Displayname with PROPPATCH< property_name: >http://xmlns.dotcal.com/dotcal:icon_uri< property_value: >http://eventful.com/favicon.ico< davical-1.1.1/testing/tests/binding/1100-BIND.result0000644000000000000000000000237511751130075016576 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Location: /caldav.php/user4/boundbase/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1602< bound_source_id: >161< dav_displayname: >Updated Displayname with PROPPATCH< dav_name: >/user4/user2/< length: >8< parent_container: >/user4/< bind_id: >1603< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/user1/< length: >8< parent_container: >/user4/< bind_id: >1607< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/base/user1/< length: >8< parent_container: >/user4/base/< bind_id: >1608< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/base/user2/< length: >8< parent_container: >/user4/base/< bind_id: >1630< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/boundbase/< length: >NULL< parent_container: >/user4/< davical-1.1.1/testing/tests/binding/1029-PUT-subcalendar.result0000644000000000000000000000115211732477040021022 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_etag: >ea6b316ca24db20f5eb37d1abd60f8c1< dav_name: >/user4/base/calendar/anothergoodleopard.ics< dtstart: >2010-03-22 16:00:00+13< summary: >An invited event. Black tie with pink polka dots is essential. Do not bring a leopard. Any leopards which do attend will be forcibly chained to a nearby fence.< davical-1.1.1/testing/tests/binding/1102-PROPFIND-bound.test0000644000000000000000000000077111446006434020053 0ustar # # PROPFIND on a collection in which we have binds & collections # # In this case we're doing Depth: 0 # TYPE=PROPFIND URL=http://regression.host/caldav.php/user4/boundbase/ AUTH=user4:user4 HEADER=User-Agent: BIND Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 1 BEGINDATA ENDDATA # davical-1.1.1/testing/tests/binding/1032-BIND-admin.result0000644000000000000000000000373211751130064017664 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Location: /caldav.php/user4/base/user3/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1602< bind_owner: >1005< bound_source_id: >161< dav_displayname: >Updated Displayname with PROPPATCH< dav_name: >/user4/user2/< length: >8< parent_container: >/user4/< privileges: >000000000001001011100111< target_collection: >161< target_resource_i: >NULL< ticket_owner: >1003< bind_id: >1603< bind_owner: >1005< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/user1/< length: >8< parent_container: >/user4/< privileges: >000000000001001000100001< target_collection: >160< target_resource_i: >NULL< ticket_owner: >1002< bind_id: >1607< bind_owner: >1005< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/base/user1/< length: >8< parent_container: >/user4/base/< privileges: >000000000001001000100001< target_collection: >160< target_resource_i: >NULL< ticket_owner: >1002< bind_id: >1608< bind_owner: >1005< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/base/user2/< length: >8< parent_container: >/user4/base/< privileges: >000000000001001011100111< target_collection: >161< target_resource_i: >NULL< ticket_owner: >1003< bind_id: >1629< bind_owner: >1< bound_source_id: >162< dav_displayname: >user3 home< dav_name: >/user4/base/user3/< length: >8< parent_container: >/user4/base/< privileges: >000000000001001011100111< target_collection: >162< target_resource_i: >NULL< ticket_owner: >1< davical-1.1.1/testing/tests/binding/1200-BIND-to-BIND.test0000644000000000000000000000162211751075441017371 0ustar # # Here we are binding against a collection which is itself a binding # bindings, at the same level in the same collection. # # Before: # /user4/boundbase a binding to a collection containing two bindings # and a real collection # # After: # /user4/bind2bind is bound to /user4/boundbase, so it should also # appear to contain two bindings and a collection # TYPE=BIND URL=http://regression.host/caldav.php/user4/ AUTH=user4:user4 HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA bind2bind /caldav.php/user4/boundbase/ ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id), parent_container, dav_name, dav_displayname FROM dav_binding ORDER BY bind_id ENDQUERY davical-1.1.1/testing/tests/binding/1021-MKCOL-subcal.result0000644000000000000000000000155711732477033020210 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >A normal collection< dav_name: >/user4/base/< is_addressbook: >0< is_calendar: >0< parent_container: >/user4/< public_events_onl: >0< resourcetypes: >< schedule_transp: >opaque< user_no: >13< dav_displayname: >A sub collection< dav_name: >/user4/base/calendar/< is_addressbook: >0< is_calendar: >1< parent_container: >/user4/base/< public_events_onl: >0< resourcetypes: >< schedule_transp: >opaque< user_no: >13< davical-1.1.1/testing/tests/binding/1031-MKTICKET-admin.result0000644000000000000000000000177411751121165020370 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Ticket:Good Ticket ID ETag: "Some good etag" Content-Length: 521 Content-Type: text/xml; charset="utf-8" Good Ticket ID /caldav.php/admin/ infinity infinity dav_name: >/user3/home/< dav_owner_id: >1< privileges: >000000000001001011100111< target_collection: >162< target_resource_i: >NULL< timeout: >NULL< davical-1.1.1/testing/tests/binding/1013-PUT-bound-succeed.test0000644000000000000000000000245511446006434020715 0ustar # # Attempt to put an event into a bound location, where # the binding does confer write privileges # TYPE=PUT URL=http://regression.host/caldav.php/user4/user2/thiswillworkfine.ics HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user4:user4 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20100318T044409Z LAST-MODIFIED:20100318T044451Z DTSTAMP:20100318T044451Z UID:9f81cd8a-b1c2-4f72-9f12-1ddbddd69342 SUMMARY:Test adding an event to a bound collection RRULE:FREQ=WEEKLY;INTERVAL=2 DTSTART;TZID=Pacific/Auckland:20100322T180000 DTEND;TZID=Pacific/Auckland:20100322T190000 LOCATION:Somewhere else DESCRIPTION:This event is being added to a bound collection. END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, dtstart, summary FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '/user2/.*thiswill' ENDQUERY davical-1.1.1/testing/tests/binding/1004-PROPFIND-bound.result0000644000000000000000000000754411751121061020411 0ustar /caldav.php/user4/ User 4 /caldav.php/.resources/1005 / caldav.php HTTP/1.1 200 OK /caldav.php/user4/user2/ User 2's Calendar, as uploaded by Admin /caldav.php/.resources/161 /caldav.php user4 /caldav.php user2 HTTP/1.1 200 OK /caldav.php/user4/home/ mir-test /caldav.php/.resources/163 /caldav.php user4 HTTP/1.1 200 OK /caldav.php/user4/addresses/ user4 addresses /caldav.php/.resources/463 /caldav.php user4 HTTP/1.1 200 OK /caldav.php/user4/nz_holidays/ New Zealand Public Holidays /caldav.php/.resources/1014 /caldav.php user4 HTTP/1.1 200 OK /caldav.php/user4/us_holidays/ US Holidays /caldav.php/.resources/1466 /caldav.php user4 HTTP/1.1 200 OK /caldav.php/user4/.out/ User 4 Outbox /caldav.php/.resources/1600 /caldav.php user4 HTTP/1.1 200 OK /caldav.php/user4/calendar-proxy-read/ /user4/calendar-proxy-read/ /caldav.php user4 HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user4/calendar-proxy-write/ /user4/calendar-proxy-write/ /caldav.php user4 HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/binding/1014-PUT-bound-fail.result0000644000000000000000000000044411732477032020555 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 19 Content-Type: text/plain; charset="utf-8" No write permission davical-1.1.1/testing/tests/binding/1201-BIND-to-BIND.test0000644000000000000000000000163111751076505017374 0ustar # # Here we are binding against a collection which is itself a binding # bindings, at the same level in the same collection. # # Before: # /user4/boundbase a binding to a collection containing two bindings # and a real collection # # After: # /user4/bind2bind is bound to /user4/boundbase, so it should also # appear to contain two bindings and a collection # TYPE=BIND URL=http://regression.host/caldav.php/user4/ AUTH=user4:user4 HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA bind2bind-noslash /caldav.php/user4/boundbase ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id), parent_container, dav_name, dav_displayname FROM dav_binding ORDER BY bind_id ENDQUERY davical-1.1.1/testing/tests/binding/1027-PROPFIND.result0000644000000000000000000000104411651212132017275 0ustar /caldav.php/user4/base/ A normal collection /caldav.php/.resources/1605 /caldav.php user4 HTTP/1.1 200 OK davical-1.1.1/testing/tests/binding/1025-PROPFIND.result0000644000000000000000000000477111755671432017326 0ustar /caldav.php/user4/base/ A normal collection /caldav.php/.resources/1605 /caldav.php user4 HTTP/1.1 200 OK /caldav.php/user4/base/user1/ User 1's Calendaranza /caldav.php/.resources/160 /caldav.php user4 /caldav.php/user4 base /caldav.php user1 HTTP/1.1 200 OK /caldav.php/user4/base/user2/ User 2's Calendar, as uploaded by Admin /caldav.php/.resources/161 /caldav.php user4 /caldav.php/user4 base /caldav.php user2 HTTP/1.1 200 OK /caldav.php/user4/base/calendar/ A sub collection /caldav.php/.resources/1606 /caldav.php/user4 base HTTP/1.1 200 OK davical-1.1.1/testing/tests/binding/Restore-Database.result0000644000000000000000000000043011743162157020625 0ustar setval -------- 1601 (1 row) setval -------- 1 (1 row) setval -------- 10 (1 row) setval -------- 10 (1 row) setval -------- 1 (1 row) setval -------- 36 (1 row) setval -------- 14 (1 row) setval -------- 1000 (1 row) davical-1.1.1/testing/tests/binding/1006-REPORT-bound.test0000644000000000000000000000126711446006434017651 0ustar # # Test multiget REPORT access to a bound calendar # TYPE=REPORT URL=http://regression.host/caldav.php/user4/user2/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA /caldav.php/user4/user2/33169d69-2969-4a96-a3e1-2e312b7614e6.ics /caldav.php/user4/user2/047871e3-6b70-4178-9af8-0ceb50f7b092.ics /caldav.php/user4/user2/9429a973-2b13-4b1a-be09-948d75425c45.ics ENDDATA davical-1.1.1/testing/tests/binding/1106-BIND.result0000644000000000000000000000267311751212262016604 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Location: /caldav.php/user4/boundbase2/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1602< bound_source_id: >161< dav_displayname: >Updated Displayname with PROPPATCH< dav_name: >/user4/user2/< length: >8< parent_container: >/user4/< bind_id: >1603< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/user1/< length: >8< parent_container: >/user4/< bind_id: >1607< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/base/user1/< length: >8< parent_container: >/user4/base/< bind_id: >1608< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/base/user2/< length: >8< parent_container: >/user4/base/< bind_id: >1630< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/boundbase/< length: >NULL< parent_container: >/user4/< bind_id: >1631< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/boundbase2/< length: >NULL< parent_container: >/user4/< davical-1.1.1/testing/tests/binding/1011-PROPPATCH-bound-fail.test0000644000000000000000000000121411446006434021073 0ustar # # Test PROPPATCH to change the displayname on a bind # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user4/user2/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA Again set displayname with PROPPATCH Updated Displayname with PROPPATCH ENDDATA QUERY SELECT dav_displayname FROM dav_binding WHERE dav_name = '/user4/user2/' ENDQUERY davical-1.1.1/testing/tests/binding/1005-PROPFIND-bound.result0000644000000000000000000001362011651212132020401 0ustar /caldav.php/user4/user2/ User 2's Calendar, as uploaded by Admin /caldav.php/user2/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user4/user2/33169d69-2969-4a96-a3e1-2e312b7614e6.ics "f2c974ff51cb52cde0668544deb36380" Near Daily Action Meeting /caldav.php/user2/ HTTP/1.1 200 OK /caldav.php/user4/user2/047871e3-6b70-4178-9af8-0ceb50f7b092.ics "58cba7e3fafb6080e85619ea77d08c7a" Weekly Project Meeting /caldav.php/user2/ HTTP/1.1 200 OK /caldav.php/user4/user2/9429a973-2b13-4b1a-be09-948d75425c45.ics "13249ced6c7527191a003f54f7e3cd25" Weekly catch-up /caldav.php/user2/ HTTP/1.1 200 OK /caldav.php/user4/user2/7d729xc0-0895-012d-124e-002421a2359e.ics "848df16c32fc3ce319083ae84c2603a3" 1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday /caldav.php/user2/ HTTP/1.1 200 OK /caldav.php/user4/user2/bd262d20-1cdb-012d-1264-002421a2359e.ics "671d4ee904be6c16dd1be076619fe7c0" Afternoon run /caldav.php/user2/ HTTP/1.1 200 OK /caldav.php/user4/user2/56f0e0e0-f742-012d-680c-002421a2359e.ics "e18c0d539b6dcb56df2d266dd4305008" Willamette Valley Vineyards at the Oregon Truffle Festival /caldav.php/user2/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/binding/1106-BIND.test0000644000000000000000000000153011751076371016245 0ustar # # Here we are binding against a collection containing further # bindings, at the same level in the same collection. # # Before: # /user4/base a collection containing two bindings and a collection # # After: # /user4/boundbase is bound to /user4/base, so it should also appear # to contain two bindings and a collection # TYPE=BIND URL=http://regression.host/caldav.php/user4/ AUTH=user4:user4 HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA boundbase2 /caldav.php/user4/base/ ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id), parent_container, dav_name, dav_displayname FROM dav_binding ORDER BY bind_id ENDQUERY davical-1.1.1/testing/tests/binding/1010-PROPPATCH-bound.test0000644000000000000000000000133511446006434020165 0ustar # # Test PROPPATCH to change the displayname on a bind # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user4/user2/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA Updated Displayname with PROPPATCH http://eventful.com/favicon.ico ENDDATA QUERY SELECT dav_displayname FROM dav_binding WHERE dav_name = '/user4/user2/' ENDQUERY QUERY SELECT property_name, property_value FROM property WHERE dav_name = '/user4/user2/' ENDQUERY davical-1.1.1/testing/tests/binding/1011-PROPPATCH-bound-fail.result0000644000000000000000000000166311750220206021433 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 615 Content-Type: text/xml; charset="utf-8" /caldav.php/user4/user2/ Some properties were not able to be changed. HTTP/1.1 409 Conflict calendar-timezone property is only valid for a calendar. HTTP/1.1 424 Failed Dependency dav_displayname: >Updated Displayname with PROPPATCH< davical-1.1.1/testing/tests/binding/1021-MKCOL-subcal.test0000644000000000000000000000142711446006434017640 0ustar # # Extended MKCOL test - Sub collection to create off a normal collection # TYPE=MKCOL URL=http://regression.host/caldav.php/user4/base/calendar/ HEADER=Content-Type: text/xml AUTH=user4:user4 HEAD BEGINDATA A sub collection ENDDATA QUERY SELECT user_no, parent_container, dav_displayname, dav_name, is_calendar, public_events_only, is_addressbook, resourcetypes, schedule_transp FROM collection WHERE dav_name ~ '/user4/base/'; ENDQUERY davical-1.1.1/testing/tests/binding/1020-MKCOL-base.test0000644000000000000000000000111711446006434017274 0ustar # # Extended MKCOL test - Normal collection to create off a principal-URL # TYPE=MKCOL URL=http://regression.host/caldav.php/user4/base/ HEADER=Content-Type: text/xml AUTH=user4:user4 HEAD BEGINDATA A normal collection ENDDATA QUERY SELECT user_no, parent_container, dav_displayname, is_calendar, public_events_only, is_addressbook, resourcetypes FROM collection WHERE dav_name ~ '/user4/base/'; ENDQUERY davical-1.1.1/testing/tests/binding/1024-BIND.test0000644000000000000000000000144311751121035016233 0ustar # # BIND a collection into an additional location # also applying a ticket during the bind # TYPE=BIND URL=http://regression.host/caldav.php/user4/base/ AUTH=user4:user4 # Get the ticket we created earlier in 948... GETSQL=ticket SELECT ticket_id FROM access_ticket WHERE target_collection_id = 161 AND target_resource_id is null; ENDSQL HEADER=User-Agent: Ticket Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Ticket: ##ticket## HEAD BEGINDATA user2 /caldav.php/user2/home ENDDATA QUERY SELECT bind_id, bound_source_id, length(access_ticket_id), parent_container, dav_name, dav_displayname FROM dav_binding ENDQUERY davical-1.1.1/testing/tests/binding/1013-PUT-bound-succeed.result0000644000000000000000000000102111732477031021243 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "9a8d7696ee2e0a0f1f4170fe4f094a3a" Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_etag: >9a8d7696ee2e0a0f1f4170fe4f094a3a< dav_name: >/user2/home/thiswillworkfine.ics< dtstart: >2010-03-22 18:00:00+13< summary: >Test adding an event to a bound collection< davical-1.1.1/testing/tests/binding/1014-PUT-bound-fail.test0000644000000000000000000000246711446006434020221 0ustar # # Attempt to put an event into a bound location, where # the binding does not confer write privileges # TYPE=PUT URL=http://regression.host/caldav.php/user4/user1/thiswillnotwork.ics HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user4:user4 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20100318T044409Z LAST-MODIFIED:20100318T044451Z DTSTAMP:20100318T044451Z UID:9f81cd8a-b1c2-4f72-9f12-1ddbddd69342 SUMMARY:Test adding an event to a bound collection RRULE:FREQ=WEEKLY;INTERVAL=2 DTSTART;TZID=Pacific/Auckland:20100322T180000 DTEND;TZID=Pacific/Auckland:20100322T190000 LOCATION:Somewhere else DESCRIPTION:This event is being added to a bound collection. END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, dtstart, summary FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '/user1/.*willnotwork.ics' ENDQUERY davical-1.1.1/testing/tests/binding/1026-PUT-bound-succeed.test0000644000000000000000000000231411446006434020713 0ustar # # Attempt to put an event into a bound location, where # the binding does confer write privileges # TYPE=PUT URL=http://regression.host/caldav.php/user4/base/user2/thiswillalsobegood.ics HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user4:user4 HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:19901007T020000 RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU TZNAME:NZDT END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO PRIORITY:0 SEQUENCE:4 DTSTART;TZID=Pacific/Auckland:20040101T120000 UID:A51AC037-E6F9-4E03-872C-7DFE0B67D1FF DTSTAMP:20100318T210557Z SUMMARY:Release DAViCal 0.9.9 CREATED:20100318T210457Z X-APPLE-SORT-ORDER:2147483647 DUE;VALUE=DATE:20100326 END:VTODO END:VCALENDAR ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, dtstart, summary FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '/user2/.*thiswill' ORDER BY dav_etag ENDQUERY davical-1.1.1/testing/tests/binding/1001-BIND.result0000644000000000000000000000116711751121056016573 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 133 Content-Type: text/xml; charset="utf-8" A resource already exists at the destination. bind_id: >1602< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/user2/< dav_owner_id: >1005< length: >8< parent_container: >/user4/< davical-1.1.1/testing/tests/binding/1028-PROPFIND.test0000644000000000000000000000110511446006434016745 0ustar # # PROPFIND calendar-home-set where we have a calendar in # another collection somewhere. # # In this case we're doing Depth: 0 on the principal # TYPE=PROPFIND URL=http://regression.host/caldav.php/user4/ AUTH=user4:user4 HEADER=User-Agent: BIND Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 0 BEGINDATA ENDDATA # davical-1.1.1/testing/tests/binding/1101-PROPFIND-normal.test0000644000000000000000000000077111446006434020233 0ustar # # PROPFIND on a real collection in which we have binds & collections # # In this case we're doing Depth: 0 # TYPE=PROPFIND URL=http://regression.host/caldav.php/user4/base/ AUTH=user4:user4 HEADER=User-Agent: BIND Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 1 BEGINDATA ENDDATA # davical-1.1.1/testing/tests/binding/1201-BIND-to-BIND.result0000644000000000000000000000350211751212265017725 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Location: /caldav.php/user4/bind2bind-noslash/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1602< bound_source_id: >161< dav_displayname: >Updated Displayname with PROPPATCH< dav_name: >/user4/user2/< length: >8< parent_container: >/user4/< bind_id: >1603< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/user1/< length: >8< parent_container: >/user4/< bind_id: >1607< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/base/user1/< length: >8< parent_container: >/user4/base/< bind_id: >1608< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/base/user2/< length: >8< parent_container: >/user4/base/< bind_id: >1630< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/boundbase/< length: >NULL< parent_container: >/user4/< bind_id: >1631< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/boundbase2/< length: >NULL< parent_container: >/user4/< bind_id: >1632< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/bind2bind/< length: >NULL< parent_container: >/user4/< bind_id: >1633< bound_source_id: >1605< dav_displayname: >A normal collection< dav_name: >/user4/bind2bind-noslash/< length: >NULL< parent_container: >/user4/< davical-1.1.1/testing/tests/binding/1026-PUT-bound-succeed.result0000644000000000000000000000132711732477036021265 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "1c7895f11787e71fd6dbe3260d72d4a0" Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_etag: >1c7895f11787e71fd6dbe3260d72d4a0< dav_name: >/user2/home/thiswillalsobegood.ics< dtstart: >2004-01-01 12:00:00+13< summary: >Release DAViCal 0.9.9< dav_etag: >9a8d7696ee2e0a0f1f4170fe4f094a3a< dav_name: >/user2/home/thiswillworkfine.ics< dtstart: >2010-03-22 18:00:00+13< summary: >Test adding an event to a bound collection< davical-1.1.1/testing/tests/binding/1007-PROPFIND-bound.result0000644000000000000000000000467011651212132020410 0ustar /caldav.php/user4/user2/ httpd/unix-directory HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user4/user2/33169d69-2969-4a96-a3e1-2e312b7614e6.ics text/calendar "f2c974ff51cb52cde0668544deb36380" HTTP/1.1 200 OK /caldav.php/user4/user2/047871e3-6b70-4178-9af8-0ceb50f7b092.ics text/calendar "58cba7e3fafb6080e85619ea77d08c7a" HTTP/1.1 200 OK /caldav.php/user4/user2/9429a973-2b13-4b1a-be09-948d75425c45.ics text/calendar "13249ced6c7527191a003f54f7e3cd25" HTTP/1.1 200 OK /caldav.php/user4/user2/7d729xc0-0895-012d-124e-002421a2359e.ics text/calendar "848df16c32fc3ce319083ae84c2603a3" HTTP/1.1 200 OK /caldav.php/user4/user2/bd262d20-1cdb-012d-1264-002421a2359e.ics text/calendar "671d4ee904be6c16dd1be076619fe7c0" HTTP/1.1 200 OK /caldav.php/user4/user2/56f0e0e0-f742-012d-680c-002421a2359e.ics text/calendar "e18c0d539b6dcb56df2d266dd4305008" HTTP/1.1 200 OK davical-1.1.1/testing/tests/binding/1030-PUT-whole-subcalendar.test0000644000000000000000000001356211446006434021574 0ustar # # Attempt to put an event into a bound location, where # the binding does confer write privileges # TYPE=PUT URL=http://regression.host/caldav.php/user4/base/newcalendar/ HEADER=Content-Type: text/calendar; charset=utf-8 AUTH=user4:user4 HEAD BEGINDATA BEGIN:VCALENDAR PRODID:-//Open Source Applications Foundation//NONSGML Chandler Server//E N VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:America/Los_Angeles X-TZINFO:America/Los_Angeles[2007g/Partial@883612800000] BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:19980405T020000 RRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:19981025T020000 RRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE BEGIN:VEVENT LAST-MODIFIED:20100125T214235Z SEQUENCE:1 UID:73d1f980-ec28-012c-11f9-002421a2359e SUMMARY:HELLO DESCRIPTION: DTSTART;VALUE=DATE-TIME;TZID=America/Los_Angeles:20100105T140000 CREATED:20100125T214226Z DTSTAMP:20100125T214235Z DURATION:PT1H LOCATION: END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T220844Z SEQUENCE:18 URL;VALUE=URI:http://www.macwfc.org UID:939afe30-0f86-012d-1259-002421a2359e SUMMARY:Youngberg Hill @ McMinniville Wine & Food Festival DESCRIPTION:March 12-14th McMinniville Wine & Food Festival\nCome visit Y oungberg Hill at this wonderful festival. \nwww.macwfc.org\n\n DTSTART;TZID=America/Los_Angeles:20100312T110000 CREATED:20100311T215422Z DTSTAMP:20100311T220844Z DURATION:P2DT5H LOCATION: X-VENUE:Evergreen Aviation\, McMnnville OR END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T222451Z SEQUENCE:11 URL;VALUE=URI:http://www.theoregonwineandartauction.org/ UID:12cbff90-0f8a-012d-1259-002421a2359e SUMMARY:Youngberg Hill @ Uncorked\, Oregon Wine & Art Auction DESCRIPTION:July 10th - Uncorked\, Oregon Wine & Art Auction\n\nCome join Youngberg Hill for this wonderful event. DTSTART;TZID=America/Los_Angeles:20100710T160000 CREATED:20100311T221924Z DTSTAMP:20100311T222451Z DURATION:PT4H30M LOCATION:11400 Westland Lane\, Dayton OR X-VENUE:The Methven Family Vineyards END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T231118Z SEQUENCE:7 UID:242afc80-0f8c-012d-1259-002421a2359e SUMMARY:Pre- IPNC Winemaker Dinner @ Youngberg Hill DESCRIPTION:July 22nd - PRE-IPNC Winemaker Dinner @ Youngberg Hill.\n\nDe tails to follow. DTSTART;TZID=America/Los_Angeles:20100722T183000 CREATED:20100311T223412Z DTSTAMP:20100311T231118Z DURATION:PT30M LOCATION: END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T220308Z SEQUENCE:8 URL;VALUE=URI:http://www.stephanie-inn.com UID:950ca060-0f87-012d-1259-002421a2359e SUMMARY:Youngberg Hill Winemaker Dinner @ The Stephanie Inn DESCRIPTION:May 2 - Stephanie Inn Winemaker Dinner @ Cannon Beach\nCome j oin Youngberg Hill Vineyards & Inn for this wonderful experience. Detail s at \nwww.stephanie-inn.com\n\n DTSTART;TZID=America/Los_Angeles:20100502T180000 CREATED:20100311T220134Z DTSTAMP:20100311T220308Z DURATION:PT3H30M LOCATION:Cannon Beach\, OR X-VENUE:The Stephanie Inn END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T231101Z SEQUENCE:0 UID:4887b3b0-0f91-012d-1259-002421a2359e SUMMARY:New Event DESCRIPTION: DTSTART;TZID=America/Los_Angeles:20100716T150000 CREATED:20100311T231101Z DTSTAMP:20100311T231101Z DURATION:PT1H LOCATION: END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T223312Z SEQUENCE:9 URL;VALUE=URI:http://www.mcminnvilleava.org/event.htm UID:ed3beb90-0f8a-012d-1259-002421a2359e SUMMARY:Discover McMinnville AVA DESCRIPTION:July 17th - Discover McMinnville AVA\n\nParticipating Winerie s Include:\nBrittan Vineyards\, Coeur de Terre Vineyard\, Coleman Vineya rd\, Maysara Vineyard\, Seufert Winery\, Stony Mountain Vineyard\, Yamhi ll Valley Vineyards and Youngberg Hill Vineyard DTSTART;TZID=America/Los_Angeles:20100717T100000 CREATED:20100311T222531Z DTSTAMP:20100311T223312Z DURATION:PT7H LOCATION:16250 SW Oldsville Rd\, McMinnville OR X-VENUE:Yamhill Valley Vineyards END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100312T064055Z SEQUENCE:9 URL;VALUE=URI:http://www.youngberghill.com UID:626c1f10-0f91-012d-1259-002421a2359e SUMMARY:Linfield Chamber Benefit @ Youngberg Hill DESCRIPTION:August 12th - Linfield Chamber Benefit @ Youngberg Hill\n\nDe tails to follow DTSTART;TZID=America/Los_Angeles:20100812T180000 CREATED:20100311T231144Z DTSTAMP:20100312T064055Z DURATION:PT2H30M LOCATION:10660 SW Youngberg Hill Road\, McMinniville OR X-VENUE:Youngberg Hill END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T221206Z SEQUENCE:8 URL;VALUE=URI:http://www.youngberghill.com UID:b0362430-0f88-012d-1259-002421a2359e SUMMARY:Youngberg Hill Vineyard & Inn - Memorial Weekend DESCRIPTION:Memorial Weekend\nYoungberg Hill will be open from 11:00 to 5 :00 on Saturday\, Sunday\, & Monday. We will be highlighting our 2007 Jo rdan & Natasha Block Pinot Noir as well as our newly released 2009 Pinot Gris. We will have cheeses\, breads\, and treats available\, plus the g reatest view.\n\nTasting fee of $5\, complimentary tastings for our Wine Club members. \n DTSTART;TZID=America/Los_Angeles:20100529T110000 CREATED:20100311T220929Z DTSTAMP:20100311T221206Z DURATION:P2DT6H LOCATION:10660 SW Youngberg Hill Road X-VENUE:McMinnville\, OR END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, dtstart, summary FROM caldav_data JOIN calendar_item USING(dav_name) WHERE caldav_data.dav_name ~ '/user4/base/newcalendar/' ENDQUERY davical-1.1.1/testing/tests/binding/1007-PROPFIND-bound.test0000644000000000000000000000063611446006434020057 0ustar # # PROPFIND on a collection which we have bound into user4's home # TYPE=PROPFIND URL=http://regression.host/caldav.php/user4/user2/ AUTH=user4:user4 HEADER=User-Agent: BIND Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 1 BEGINDATA ENDDATA davical-1.1.1/testing/tests/binding/1035-GET-mashup.result0000644000000000000000000005250311754163753020015 0ustar HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Etag: "ae93907cb03bc025b8e733eb61f3a09e" Content-Length: 21514 Content-Type: text/calendar; charset="utf-8" BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN X-WR-CALNAME:A normal collection BEGIN:VEVENT CREATED:20081023T054934Z LAST-MODIFIED:20081023T055059Z DTSTAMP:20081023T054934Z UID:047871e3-6b70-4178-9af8-0ceb50f7b092 SUMMARY:Weekly Project Meeting RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081020T090000 DTEND;TZID=Pacific/Auckland:20081020T100000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT CREATED:20111004T153507Z UID:0544-gzip-PUT TRANSP:OPAQUE SUMMARY:In Central Europe, 2pm, Oct 5th for 1 hour DTSTART;TZID=Somewhere_in_Central_Europe:20111005T140000 DTEND;TZID=Somewhere_in_Central_Europe:20111005T150000 DTSTAMP:20111004T153507Z SEQUENCE:1 END:VEVENT BEGIN:VEVENT CREATED:20111004T153507Z UID:0545-deflate-PUT TRANSP:OPAQUE SUMMARY:In Prague, 10am, Oct 7th for 1 hour DTSTART;TZID=Prague_in_Central_Europe:20111007T100000 DURATION:PT1H DTSTAMP:20111004T153507Z SEQUENCE:1 END:VEVENT BEGIN:VTODO CREATED:20070805T201647Z LAST-MODIFIED:20070805T201834Z DTSTAMP:20070805T201647Z UID:0575d895-a006-4ed8-9be6-0d1b6b6b1f96 SUMMARY:Due 7/8/7 16:30\, completed STATUS:COMPLETED DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070807T163000 COMPLETED:20070805T201737Z PERCENT-COMPLETE:100 X-MOZ-LOCATIONPATH:0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics DESCRIPTION:Due on 7/8/7 at 4:30pm\, but completed alread on 6/8/7 CATEGORIES:Projects END:VTODO BEGIN:VEVENT LAST-MODIFIED:20100311T222451Z SEQUENCE:11 URL;VALUE=URI:http://www.theoregonwineandartauction.org/ UID:12cbff90-0f8a-012d-1259-002421a2359e SUMMARY:Youngberg Hill @ Uncorked\, Oregon Wine & Art Auction DESCRIPTION:July 10th - Uncorked\, Oregon Wine & Art Auction\n\nCome joi n Youngberg Hill for this wonderful event. DTSTART;TZID=America/Los_Angeles:20100710T160000 CREATED:20100311T221924Z DTSTAMP:20100311T222451Z DURATION:PT4H30M LOCATION:11400 Westland Lane\, Dayton OR X-VENUE:The Methven Family Vineyards END:VEVENT BEGIN:VEVENT CREATED:20061223T031415Z LAST-MODIFIED:20061223T032305Z DTSTAMP:20061223T032305Z UID:1906b3ca-4890-468a-9b58-1de74bf2c716 SUMMARY:Private Event PRIORITY:0 STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T130000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T150000 X-MOZ-LOCATIONPATH:1906b3ca-4890-468a-9b58-1de74bf2c716.ics LOCATION:At a private location DESCRIPTION:Private and Confirmed END:VEVENT BEGIN:VEVENT UID:20061101T073000Z-10468-1000-1-7@ubu DTSTAMP:20061101T073000Z DTSTART;TZID=Pacific/Auckland:20061101T100000 DTEND;TZID=Pacific/Auckland:20061101T110000 SUMMARY:A Changed Meeting BEGIN:VALARM X-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu ACTION:DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M DESCRIPTION:A Meeting END:VALARM END:VEVENT BEGIN:VTODO CREATED:20070805T200215Z LAST-MODIFIED:20070805T201531Z DTSTAMP:20070805T200215Z UID:2178279a-aec2-471f-832d-1f6df6203f2f SUMMARY:Incomplete\, uncancelled X-MOZ-LOCATIONPATH:2178279a-aec2-471f-832d-1f6df6203f2f.ics DESCRIPTION:This task is incomplete and has not been cancelled (has no s tatus at all) END:VTODO BEGIN:VEVENT LAST-MODIFIED:20100311T231118Z SEQUENCE:7 UID:242afc80-0f8c-012d-1259-002421a2359e SUMMARY:Pre- IPNC Winemaker Dinner @ Youngberg Hill DESCRIPTION:July 22nd - PRE-IPNC Winemaker Dinner @ Youngberg Hill.\n\nD etails to follow. DTSTART;TZID=America/Los_Angeles:20100722T183000 CREATED:20100311T223412Z DTSTAMP:20100311T231118Z DURATION:PT30M LOCATION: END:VEVENT BEGIN:VEVENT CREATED:20081023T054958Z LAST-MODIFIED:20081023T055044Z DTSTAMP:20081023T054958Z UID:33169d69-2969-4a96-a3e1-2e312b7614e6 SUMMARY:Near Daily Action Meeting RRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR DTSTART;TZID=Pacific/Auckland:20081020T110000 DTEND;TZID=Pacific/Auckland:20081020T113000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T231101Z SEQUENCE:0 UID:4887b3b0-0f91-012d-1259-002421a2359e SUMMARY:New Event DESCRIPTION: DTSTART;TZID=America/Los_Angeles:20100716T150000 CREATED:20100311T231101Z DTSTAMP:20100311T231101Z DURATION:PT1H LOCATION: END:VEVENT BEGIN:VEVENT CREATED:20061120T041336Z LAST-MODIFIED:20061120T041709Z DTSTAMP:20061120T041709Z UID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 SUMMARY:Weekly Project Meeting PRIORITY:0 CLASS:PUBLIC RRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH DTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000 DTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000 CATEGORIES:Projects X-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20110101T005414Z SEQUENCE:12 URL;VALUE=URI:http://www.oregontrufflefestival.com UID:56f0e0e0-f742-012d-680c-002421a2359e SUMMARY:Willamette Valley Vineyards at the Oregon Truffle Festival DESCRIPTION:The 6th Annual Oregon Truffle Festival will be held in and a round Eugene Oregon over three brisk winter days from January 28-30\, 20 11. Created to celebrate the magnificent Oregon truffles as they reach t he peak of ripeness in their native soil\, it is the first festival of i ts kind in North America\, dedicated to sharing the experience of the ch efs\, foragers and fans of Oregon\\'s wild truffles\, from their hidden source in the forest to their glory on the table.\n\nThe theme for 2011 is "Slow Food"\, and Willamette Valley Vineyards will be hosting a gourm et wine luncheon during the festival. Please visit www.oregontrufflefest ival.com for more info and to purchase tickets.\n\n DTSTART;TZID=America/Los_Angeles:20110128 CREATED:20101231T193025Z DTSTAMP:20110101T005414Z DURATION:P1D LOCATION:Eugene Oregon X-VENUE: X-EMAIL-RSVP-UPDATES:true RRULE:FREQ=DAILY;COUNT=3;INTERVAL=1 END:VEVENT BEGIN:VEVENT DTSTAMP:20061102T090217Z DTSTART;TZID=New Zealand Standard Time:20061102T123000 DURATION:PT1H LAST-MODIFIED:20061104T002921Z SEQUENCE:1 SUMMARY:Lunch with David UID:5A55230C8866CA8D3D325F3A@CA1CBED546AAE36FF3BC722E END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100312T064055Z SEQUENCE:9 URL;VALUE=URI:http://www.youngberghill.com UID:626c1f10-0f91-012d-1259-002421a2359e SUMMARY:Linfield Chamber Benefit @ Youngberg Hill DESCRIPTION:August 12th - Linfield Chamber Benefit @ Youngberg Hill\n\nD etails to follow DTSTART;TZID=America/Los_Angeles:20100812T180000 CREATED:20100311T231144Z DTSTAMP:20100312T064055Z DURATION:PT2H30M LOCATION:10660 SW Youngberg Hill Road\, McMinniville OR X-VENUE:Youngberg Hill END:VEVENT BEGIN:VEVENT CREATED:20100319T103247Z LAST-MODIFIED:20100319T105620Z DTSTAMP:20100319T105620Z UID:70399cd7-50a4-4be4-a665-af593e19a7fd SUMMARY:An invited event. Black tie with pink polka dots is essential. Do not bring a leopard. Any leopards which do attend will be forcibly chained to a nearby fence. ORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user4@example.ne t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S TATUS=1.2:mailto:user2@example.net ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S TATUS=1.2:mailto:user3@example.net ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S TATUS=3.8:mailto:user1@example.net ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S TATUS=1.2:mailto:user5@example.net DTSTART:20100322T160000 DTEND:20100322T170000 X-MOZ-GENERATION:3 TRANSP:OPAQUE X-MOZ-SEND-INVITATIONS:TRUE SEQUENCE:1 END:VEVENT BEGIN:VEVENT CREATED:20091006T225807Z UID:70D23799-4A68-4905-AB9F-4D47BA693CFD DTEND;TZID=Europe/Prague:20091005T150000 TRANSP:OPAQUE SUMMARY:New Event DTSTART;TZID=Europe/Prague:20091005T140000 DTSTAMP:20091006T225808Z SEQUENCE:1 END:VEVENT BEGIN:VEVENT UID:71e2ae82-7870-11db-c6d6-f6927c144649 DTSTAMP:20060511T043751Z DTSTART;TZID=Pacific/Auckland:20061103T160000 DTEND;TZID=Pacific/Auckland:20061103T174500 DESCRIPTION: LOCATION:Level 3 RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900 STATUS:CONFIRMED SUMMARY:Beer O'Clock END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100125T214235Z SEQUENCE:1 UID:73d1f980-ec28-012c-11f9-002421a2359e SUMMARY:HELLO DESCRIPTION: DTSTART;VALUE=DATE-TIME;TZID=America/Los_Angeles:20100105T140000 CREATED:20100125T214226Z DTSTAMP:20100125T214235Z DURATION:PT1H LOCATION: END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20080303T015422Z SEQUENCE:5 UID:7d729xc0-0895-012d-124e-002421a2359e SUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday RRULE:FREQ=MONTHLY;BYDAY=1MO,2TU,3TH,-1FR;INTERVAL=1 DESCRIPTION:An all day event on various days. DTSTART;TZID=America/Los_Angeles:20081006T000000 CREATED:20080303T015329Z DTSTAMP:20080303T015422Z DURATION:P1D END:VEVENT BEGIN:VTODO CREATED:20070805T201557Z LAST-MODIFIED:20070805T201643Z DTSTAMP:20070805T201557Z UID:917b9e47-b748-4550-a566-657fbe672447 SUMMARY:50% Complete\, uncancelled STATUS:IN-PROCESS PERCENT-COMPLETE:50 X-MOZ-LOCATIONPATH:917b9e47-b748-4550-a566-657fbe672447.ics DESCRIPTION:This task is in progress (50% complete) and has not been can celled. END:VTODO BEGIN:VEVENT LAST-MODIFIED:20100311T220844Z SEQUENCE:18 URL;VALUE=URI:http://www.macwfc.org UID:939afe30-0f86-012d-1259-002421a2359e SUMMARY:Youngberg Hill @ McMinniville Wine & Food Festival DESCRIPTION:March 12-14th McMinniville Wine & Food Festival\nCome visit Youngberg Hill at this wonderful festival. \nwww.macwfc.org\n\n DTSTART;TZID=America/Los_Angeles:20100312T110000 CREATED:20100311T215422Z DTSTAMP:20100311T220844Z DURATION:P2DT5H LOCATION: X-VENUE:Evergreen Aviation\, McMnnville OR END:VEVENT BEGIN:VEVENT CREATED:20081023T055115Z LAST-MODIFIED:20081023T055139Z DTSTAMP:20081023T055115Z UID:9429a973-2b13-4b1a-be09-948d75425c45 SUMMARY:Weekly catch-up RRULE:FREQ=WEEKLY;INTERVAL=1 DTSTART;TZID=Pacific/Auckland:20081024T140000 DTEND;TZID=Pacific/Auckland:20081024T150000 X-MOZ-GENERATION:2 END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T220308Z SEQUENCE:8 URL;VALUE=URI:http://www.stephanie-inn.com UID:950ca060-0f87-012d-1259-002421a2359e SUMMARY:Youngberg Hill Winemaker Dinner @ The Stephanie Inn DESCRIPTION:May 2 - Stephanie Inn Winemaker Dinner @ Cannon Beach\nCome join Youngberg Hill Vineyards & Inn for this wonderful experience. Detai ls at \nwww.stephanie-inn.com\n\n DTSTART;TZID=America/Los_Angeles:20100502T180000 CREATED:20100311T220134Z DTSTAMP:20100311T220308Z DURATION:PT3H30M LOCATION:Cannon Beach\, OR X-VENUE:The Stephanie Inn END:VEVENT BEGIN:VEVENT CREATED:20061223T032350Z LAST-MODIFIED:20061223T033144Z DTSTAMP:20061223T033144Z UID:9d050be7-8a02-4355-8ed3-02a9fc5f473f SUMMARY:Confidential Event PRIORITY:0 STATUS:CONFIRMED CLASS:CONFIDENTIAL DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T160000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T180000 X-MOZ-LOCATIONPATH:9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics LOCATION:In a confidential place END:VEVENT BEGIN:VEVENT CREATED:20100318T044409Z LAST-MODIFIED:20100318T044451Z DTSTAMP:20100318T044451Z UID:9f81cd8a-b1c2-4f72-9f12-1ddbddd69342 SUMMARY:Test adding an event to a bound collection RRULE:FREQ=WEEKLY;INTERVAL=2 DTSTART;TZID=Pacific/Auckland:20100322T180000 DTEND;TZID=Pacific/Auckland:20100322T190000 LOCATION:Somewhere else DESCRIPTION:This event is being added to a bound collection. END:VEVENT BEGIN:VTODO PRIORITY:0 SEQUENCE:4 DTSTART;TZID=Pacific/Auckland:20040101T120000 UID:A51AC037-E6F9-4E03-872C-7DFE0B67D1FF DTSTAMP:20100318T210557Z SUMMARY:Release DAViCal 0.9.9 CREATED:20100318T210457Z X-APPLE-SORT-ORDER:2147483647 DUE;VALUE=DATE:20100326 END:VTODO BEGIN:VEVENT SEQUENCE:6 TRANSP:OPAQUE UID:AAA9318E-37D9-4319-8626-95ECD3D3B243 DTSTART;TZID=Pacific/Auckland:20071125T130000 DTSTAMP:20071124T224850Z SUMMARY:BBQ @ ML's CREATED:20071123T093048Z DTEND;TZID=Pacific/Auckland:20071125T190000 LOCATION:ML's House BEGIN:VALARM X-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62 ACTION:AUDIO TRIGGER:-PT15M ATTACH;VALUE=URI:Basso END:VALARM END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T221206Z SEQUENCE:8 URL;VALUE=URI:http://www.youngberghill.com UID:b0362430-0f88-012d-1259-002421a2359e SUMMARY:Youngberg Hill Vineyard & Inn - Memorial Weekend DESCRIPTION:Memorial Weekend\nYoungberg Hill will be open from 11:00 to 5:00 on Saturday\, Sunday\, & Monday. We will be highlighting our 2007 J ordan & Natasha Block Pinot Noir as well as our newly released 2009 Pino t Gris. We will have cheeses\, breads\, and treats available\, plus the greatest view.\n\nTasting fee of $5\, complimentary tastings for our Win e Club members. \n DTSTART;TZID=America/Los_Angeles:20100529T110000 CREATED:20100311T220929Z DTSTAMP:20100311T221206Z DURATION:P2DT6H LOCATION:10660 SW Youngberg Hill Road X-VENUE:McMinnville\, OR END:VEVENT BEGIN:VTODO CREATED:20070806T223244Z LAST-MODIFIED:20070806T223411Z DTSTAMP:20070806T223244Z UID:b1679f77-673d-4f46-b3eb-2420e1bba301 SUMMARY:A Cancelled Task\, with a start and due date STATUS:CANCELLED DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500 DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500 X-MOZ-LOCATIONPATH:b1679f77-673d-4f46-b3eb-2420e1bba301.ics DESCRIPTION:This is a task with a Start and a Due date\, but it has been cancelled. END:VTODO BEGIN:VEVENT LAST-MODIFIED:20081123T210725Z SEQUENCE:6 UID:bd262d20-1cdb-012d-1264-002421a2359e SUMMARY:Afternoon run DESCRIPTION: DTSTART;TZID=America/Los_Angeles:20081123T150000 CREATED:20081123T210644Z DTSTAMP:20081123T210725Z DURATION:PT1H LOCATION: RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU END:VEVENT BEGIN:VEVENT UID:da81c0ee-7871-11db-c6d6-f6927c144649 DTSTAMP:20061024T115217Z DTSTART:20061103T073000 DTEND:20061103T093000 DESCRIPTION: LOCATION:Olivia's RRULE:FREQ=MONTHLY STATUS:CONFIRMED SUMMARY:Morning Mgmt Mtg END:VEVENT BEGIN:VEVENT DESCRIPTION:Have a party. All the best parties are monthly! UID:DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74 DTSTAMP:20081024T220925Z SUMMARY:Party all day! CREATED:20081024T220749Z DTSTART;TZID=Pacific/Auckland;VALUE=DATE:20081114 RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR END:VEVENT BEGIN:VTODO CREATED:20071203T202915Z LAST-MODIFIED:20071203T203021Z DTSTAMP:20071203T202915Z UID:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08 SUMMARY:Release 0.9.3 STATUS:IN-PROCESS DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 DUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000 PERCENT-COMPLETE:95 X-MOZ-LOCATIONPATH:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics BEGIN:VALARM TRIGGER;VALUE=DURATION:-P2D DESCRIPTION:Mozilla Alarm: Release 0.9.3 ACTION:DISPLAY END:VALARM END:VTODO BEGIN:VEVENT CREATED:20071203T202630Z LAST-MODIFIED:20071203T202834Z DTSTAMP:20071203T202630Z UID:e70576e9-c1e0-431e-a507-0386fd82f223 SUMMARY:Morning Meeting RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH DTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T074500 DTEND;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T083000 X-MOZ-LOCATIONPATH:e70576e9-c1e0-431e-a507-0386fd82f223.ics LOCATION:Suzies Coffee Lounge DESCRIPTION:Twice-weekly breakfast meeting CATEGORIES:Business BEGIN:VALARM TRIGGER;VALUE=DURATION:-PT10M DESCRIPTION:Mozilla Alarm: Morning Meeting ACTION:DISPLAY END:VALARM END:VEVENT BEGIN:VEVENT LAST-MODIFIED:20100311T223312Z SEQUENCE:9 URL;VALUE=URI:http://www.mcminnvilleava.org/event.htm UID:ed3beb90-0f8a-012d-1259-002421a2359e SUMMARY:Discover McMinnville AVA DESCRIPTION:July 17th - Discover McMinnville AVA\n\nParticipating Wineri es Include:\nBrittan Vineyards\, Coeur de Terre Vineyard\, Coleman Viney ard\, Maysara Vineyard\, Seufert Winery\, Stony Mountain Vineyard\, Yamh ill Valley Vineyards and Youngberg Hill Vineyard DTSTART;TZID=America/Los_Angeles:20100717T100000 CREATED:20100311T222531Z DTSTAMP:20100311T223312Z DURATION:PT7H LOCATION:16250 SW Oldsville Rd\, McMinnville OR X-VENUE:Yamhill Valley Vineyards END:VEVENT BEGIN:VEVENT CREATED:20061223T051646Z LAST-MODIFIED:20061223T051713Z DTSTAMP:20061223T051713Z UID:fbd57454-d966-4a14-8341-abe1edb1ae66 SUMMARY:Tentative Event STATUS:TENTATIVE CLASS:PUBLIC DTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T190000 DTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T210000 X-MOZ-LOCATIONPATH:fbd57454-d966-4a14-8341-abe1edb1ae66.ics LOCATION:Never never land END:VEVENT BEGIN:VEVENT DESCRIPTION:Have a microparty. All the best parties are monthly! UID:MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74 DTSTAMP:20081027T074326Z SUMMARY:Woohoo! Time to Par-tay! CREATED:20081024T220749Z DTSTART;TZID=Pacific/Auckland:20081121T160000 DURATION:PT3H RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=3FR END:VEVENT BEGIN:VEVENT UID:PUT-eastern-time DTSTAMP:20101009T214524Z SUMMARY;LANGUAGE=en-US:Psychic's Anonymous Meeting DTSTART;TZID="(UTC-05:00) Eastern Time (US & Canada)":20110912T110000 DTEND;TZID="(UTC-05:00) Eastern Time (US & Canada)":20110912T113000 LOCATION:You will know when you arrive CREATED:20101010T014639 LAST-MODIFIED:20101010T014639 END:VEVENT BEGIN:VTIMEZONE TZID:Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:Somewhere_in_Central_Europe X-MICROSOFT-CDO-TZID:4 BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:Prague_in_Central_Europe X-MICROSOFT-CDO-TZID:4 BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:/mozilla.org/20070129_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:America/Los_Angeles X-TZINFO:America/Los_Angeles[2007g/Partial@883612800000] BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:19980405T020000 RRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:19981025T020000 RRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETTO:-0700 TZOFFSETFROM:-0800 TZNAME:America/Los_Angeles(DST) DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETTO:-0800 TZOFFSETFROM:-0700 TZNAME:America/Los_Angeles(STD) DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:New Zealand Standard Time X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:NZDT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10 TZNAME:NZST TZOFFSETFROM:+1300 TZOFFSETTO:+1200 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Prague BEGIN:DAYLIGHT TZOFFSETFROM:+0100 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU DTSTART:19810329T020000 TZNAME:GMT+02:00 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU DTSTART:19961027T030000 TZNAME:GMT+01:00 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:/mozilla.org/20050126_1/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700315T030000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19701004T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10 END:DAYLIGHT END:VTIMEZONE END:VCALENDAR davical-1.1.1/testing/tests/binding/1030-PUT-whole-subcalendar.result0000644000000000000000000000465511732477042022143 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_etag: >228540edb5690f6e8adb855aaa98ee98< dav_name: >/user4/base/newcalendar/73d1f980-ec28-012c-11f9-002421a2359e.ics< dtstart: >2010-01-06 11:00:00+13< summary: >HELLO< dav_etag: >83516c50151ea62ca04fd02f4f6af695< dav_name: >/user4/base/newcalendar/939afe30-0f86-012d-1259-002421a2359e.ics< dtstart: >2010-03-13 08:00:00+13< summary: >Youngberg Hill @ McMinniville Wine & Food Festival< dav_etag: >d7773e205d1992a23af9840dcf944e3b< dav_name: >/user4/base/newcalendar/12cbff90-0f8a-012d-1259-002421a2359e.ics< dtstart: >2010-07-11 11:00:00+12< summary: >Youngberg Hill @ Uncorked, Oregon Wine & Art Auction < dav_etag: >7387e025ed4fb1f0ec39e0dfca36942d< dav_name: >/user4/base/newcalendar/242afc80-0f8c-012d-1259-002421a2359e.ics< dtstart: >2010-07-23 13:30:00+12< summary: >Pre- IPNC Winemaker Dinner @ Youngberg Hill< dav_etag: >7054218fa2a9e561b9e0ac0f1f8a6e0e< dav_name: >/user4/base/newcalendar/950ca060-0f87-012d-1259-002421a2359e.ics< dtstart: >2010-05-03 13:00:00+12< summary: >Youngberg Hill Winemaker Dinner @ The Stephanie Inn< dav_etag: >0e091d7cf1ea4f613199a2a60090a7e1< dav_name: >/user4/base/newcalendar/4887b3b0-0f91-012d-1259-002421a2359e.ics< dtstart: >2010-07-17 10:00:00+12< summary: >New Event< dav_etag: >a5972f272523b97d6cade1486a8b1c40< dav_name: >/user4/base/newcalendar/ed3beb90-0f8a-012d-1259-002421a2359e.ics< dtstart: >2010-07-18 05:00:00+12< summary: >Discover McMinnville AVA< dav_etag: >29665951ecbafebf365e664ecc7eb25f< dav_name: >/user4/base/newcalendar/626c1f10-0f91-012d-1259-002421a2359e.ics< dtstart: >2010-08-13 13:00:00+12< summary: >Linfield Chamber Benefit @ Youngberg Hill< dav_etag: >e9bdeacf16eb2b71f9625ab01113bb6b< dav_name: >/user4/base/newcalendar/b0362430-0f88-012d-1259-002421a2359e.ics< dtstart: >2010-05-30 06:00:00+12< summary: >Youngberg Hill Vineyard & Inn - Memorial Weekend< davical-1.1.1/testing/tests/binding/1033-PROPPATCH-admin-bound.test0000644000000000000000000000137611446006434021265 0ustar # # Test PROPPATCH to change the displayname on a bind # TYPE=PROPPATCH URL=http://regression.host/caldav.php/user4/base/user3/ AUTH=user4:user4 HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml; charset="UTF-8" HEAD BEGINDATA Updated user4-base-user3 displayname with PROPPATCH http://eventful.com/favicon.ico ENDDATA QUERY SELECT dav_displayname FROM dav_binding WHERE dav_name = '/user4/base/user3/' ENDQUERY QUERY SELECT property_name, property_value FROM property WHERE dav_name = '/user4/base/user3/' ENDQUERY davical-1.1.1/testing/tests/binding/1004-PROPFIND-bound.test0000644000000000000000000000067011507455065020060 0ustar # # PROPFIND on a collection which we have bound into user4's home # TYPE=PROPFIND URL=http://regression.host/caldav.php/user4/ AUTH=user4:user4 HEADER=User-Agent: BIND Spec Tests HEADER=Content-Type: text/xml; charset="UTF-8" HEADER=Depth: 1 BEGINDATA ENDDATA # davical-1.1.1/testing/tests/binding/1023-BIND.result0000644000000000000000000000210211751130035016562 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Location: /caldav.php/user4/base/user2/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1602< bound_source_id: >161< dav_displayname: >Updated Displayname with PROPPATCH< dav_name: >/user4/user2/< length: >8< parent_container: >/user4/< bind_id: >1603< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/user1/< length: >8< parent_container: >/user4/< bind_id: >1607< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/base/user1/< length: >8< parent_container: >/user4/base/< bind_id: >1608< bound_source_id: >161< dav_displayname: >User 2's Calendar, as uploaded by Admin< dav_name: >/user4/base/user2/< length: >8< parent_container: >/user4/base/< davical-1.1.1/testing/tests/binding/1034-DELETE-admin-bind.test0000644000000000000000000000041411446006434020465 0ustar # # Do a DELETE on a BIND TYPE=DELETE URL=http://mycaldav/caldav.php/user4/base/user3/ AUTH=user4:user4 HEAD QUERY SELECT dav_name, bind_id, bound_source_id, dav_owner_id, parent_container, dav_displayname FROM dav_binding WHERE dav_name ~ '/user4/base/' ENDQUERY davical-1.1.1/testing/tests/binding/1012-BIND.result0000644000000000000000000000125311751130024016564 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Location: /caldav.php/user4/user1/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" bind_id: >1602< bound_source_id: >161< dav_displayname: >Updated Displayname with PROPPATCH< dav_name: >/user4/user2/< parent_container: >/user4/< ticket_id_length: >8< bind_id: >1603< bound_source_id: >160< dav_displayname: >User 1's Calendaranza< dav_name: >/user4/user1/< parent_container: >/user4/< ticket_id_length: >8< davical-1.1.1/testing/tests/binding/1036-REPORT-sync-initial-bound.test0000644000000000000000000000065111446006434022251 0ustar # # Check for support of REPORT sync-collection with no sync-token # on a bound resource # TYPE=REPORT URL=http://mycaldav/caldav.php/user4/user2/ HEADER=User-agent: sync-collection initial REPORT HEADER=Content-type: text/xml HEAD AUTH=user4:user4 BEGINDATA ENDDATA davical-1.1.1/testing/tests/carddav/0000755000000000000000000000000011776303360014234 5ustar davical-1.1.1/testing/tests/carddav/2034-REPORT-addressbook-query.result0000644000000000000000000000313011654060440022525 0ustar /caldav.php/user1/addressbook/andrew_mcmillan.vcf BEGIN:VCARD VERSION:3.0 REV:2010-03-29T09:23:34Z UID:pas-id-4BB0719600000000 X-SKYPE;X-EVOLUTION-UI-SLOT=1;TYPE=HOME:karora__ X-JABBER;X-EVOLUTION-UI-SLOT=3;TYPE=HOME:karora@irc.oftc.net TEL;X-EVOLUTION-UI-SLOT=3;TYPE=CELL:+64 22 123 4567 TEL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME,VOICE:+64 4 123 4567 TEL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK,VOICE:+64 22 123 4567 EMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:andrew@mcmillan.net.nz EMAIL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK:andrew@morphoss.com LABEL;TYPE=HOME:16 Kaka Place\nPorikana\n4173\nNew Zealand ADR;TYPE=HOME:;;16 Kaka Place;Porikana;;4173;New Zealand X-MOZILLA-HTML:FALSE X-EVOLUTION-VIDEO-URL: FBURL:https://davical.morphoss.com/freebusy.php/andrew@morphoss.com CALADRURI:mailto:andrew@morphoss.com CALURI:https://dotcal.com/karora X-EVOLUTION-BLOG-URL:http://andrew.mcmillan.net.nz/ CATEGORIES:Developer,Personal,Debian, X-EVOLUTION-FILE-AS:McMillan\, Andrew N:McMillan;Andrew;Watson;; FN:Andrew Watson McMillan NOTE:Primary author of DAViCal CalDAV Server. X-EVOLUTION-SPOUSE:Heather Buchanan X-EVOLUTION-ANNIVERSARY:1989-04-22 BDAY:1958-07-26 NICKNAME:karora X-EVOLUTION-ASSISTANT: X-EVOLUTION-MANAGER: ROLE:Geek ORG:dotCal;;Porirua TITLE:Chief Technology Officer URL:http://andrew.mcmillan.net.nz/ END:VCARD HTTP/1.1 200 OK davical-1.1.1/testing/tests/carddav/2022-OPTIONS_well-known_carddav_noauth.result0000644000000000000000000000025411651212132024416 0ustar HTTP/1.1 301 Moved Permanently Date: Dow, 01 Jan 2000 00:00:00 GMT Location: http://mycaldav/caldav.php/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/carddav/2002-PUT-arbitrary.result0000644000000000000000000000071411732477131020524 0ustar HTTP/1.1 412 Precondition Failed Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 178 Content-Type: text/xml; charset="utf-8" Incorrect content type for addressbook: text/plain davical-1.1.1/testing/tests/carddav/2016-PUT-vcard.result0000644000000000000000000000214711732477151017635 0ustar HTTP/1.1 100 Continue HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >NULL< caluri: >NULL< dav_name: >/user1/addressbook/mustrmahn.vcf< fburl: >NULL< fn: >Überwerbung GmbH< n: >Mustermann;Anton;Karl;Dr.;< nickname: >Boss< note: >Test vCard< org: >Überwerbung GmbH;Marketing< url: >NULL< version: >3.0< box_no: >NULL< country: >NULL< locality: >NULL< postcode: >NULL< property: >NULL< region: >NULL< street_address: >NULL< type: >NULL< unit_no: >NULL< tel: >+49 172 1234567< type: >CELL< tel: >+49 30 1234567< type: >WORK~|~pref< email: >karl@mustermann.de< type: >INTERNET~|~WORK~|~pref< davical-1.1.1/testing/tests/carddav/2024-MKCOL-addressbook.result0000644000000000000000000000103711732477157021235 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >User 2's Addresses< is_addressbook: >1< is_calendar: >0< parent_container: >/user2/< public_events_onl: >0< resourcetypes: >< user_no: >11< davical-1.1.1/testing/tests/carddav/2003-PUT-vcard.result0000644000000000000000000000310611732477132017624 0ustar HTTP/1.1 100 Continue HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "24bae2a7f81c0a79413a656c06d8326b" Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >mailto:andrew@morphoss.com< caluri: >https://dotcal.com/karora< dav_etag: >24bae2a7f81c0a79413a656c06d8326b< dav_name: >/user1/addressbook/andrew_mcmillan.vcf< fburl: >https://davical.morphoss.com/freebusy.php/andrew@morphoss.com< fn: >Andrew Watson McMillan< n: >McMillan;Andrew;Watson;;< nickname: >karora< note: >Primary author of DAViCal CalDAV Server.< org: >dotCal;;Porirua< uid: >pas-id-4BB0719600000000< url: >http://andrew.mcmillan.net.nz/< version: >3.0< box_no: >< country: >New Zealand< locality: >Porikana< postcode: >4173< property: >ADR;TYPE=HOME:;;16 Kaka Place;Porikana;;4173;New Zealand< region: >< street_address: >16 Kaka Place< type: >HOME< unit_no: >< tel: >+64 22 123 4567< type: >WORK,VOICE< tel: >+64 4 123 4567< type: >HOME,VOICE< tel: >+64 22 123 4567< type: >CELL< email: >andrew@morphoss.com< type: >WORK< email: >andrew@mcmillan.net.nz< type: >HOME< davical-1.1.1/testing/tests/carddav/2000-MKCOL-addressbook.result0000644000000000000000000000103711732477126021223 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Cache-Control: no-cache Content-Length: 0 Content-Type: text/plain; charset="utf-8" dav_displayname: >User 1's Addresses< is_addressbook: >1< is_calendar: >0< parent_container: >/user1/< public_events_onl: >0< resourcetypes: >< user_no: >10< davical-1.1.1/testing/tests/carddav/2001-PUT-fail.test0000644000000000000000000000126611446006434017077 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/ HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEAD BEGINDATA begin:vcard fn:Donald Kelly n:Kelly;Donald org:Esposo Designs Ltd adr:Newtown;;25 Rintoul St;Wellington;;;New Zealand email;internet:donald@example.co.nz title:Proprietor tel;work:+64 4 347 4747 tel;cell:+64 2 1234-4321 x-mozilla-html:TRUE url:www.example.co.nz version:2.1 end:vcard ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, fn, n FROM caldav_data JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/' ENDQUERY davical-1.1.1/testing/tests/carddav/2023-PROPFIND.test0000644000000000000000000000057311446006434016743 0ustar # # PROPFIND on addressbook resource # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/ HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml HEADER=Depth: 0 HEAD BEGINDATA ENDDATA davical-1.1.1/testing/tests/carddav/2020-PUT-vcard.result0000644000000000000000000000273311732477154017634 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >NULL< caluri: >NULL< dav_name: >/user1/addressbook/Jörg_Test-Roßdeutscher_3_0.vcf< fburl: >NULL< fn: >Jörg Test-Roßdeutscher< n: >Test-Roßdeutscher;Jörg;;;< nickname: >NULL< note: >Technik, Web, DTP, SysAdmin, €-Vermögensverwalter< org: >Factor Design AG;< url: >NULL< version: >3.0< box_no: >NULL< country: >NULL< locality: >NULL< postcode: >NULL< property: >NULL< region: >NULL< street_address: >NULL< type: >NULL< unit_no: >NULL< tel: >17799999978200< type: >CELL< tel: >40999999793017< type: >HOME< tel: >040 999999432571-43< type: >WORK~|~pref< email: >joerg.rossdeutscher@gesindel.foo< type: >INTERNET~|~HOME< email: >raettchen@gmail.bar< type: >INTERNET~|~HOME< email: >joerg@factordesign.foo< type: >INTERNET~|~WORK< email: >joerg.rossdeutscher@factordesign.foo< type: >INTERNET~|~WORK~|~pref< davical-1.1.1/testing/tests/carddav/2019-PUT-vcard.test0000644000000000000000000000414111704134640017265 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/Jörg_Test-Roßdeutscher_2_0.vcf HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEADER=If-None-Match: * HEAD BEGINDATA BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8:Test-Roßdeutscher;Jörg;;; FN;CHARSET=UTF-8:Jörg Test-Roßdeutscher ORG:Factor Design AG; EMAIL;INTERNET;WORK:joerg.rossdeutscher@factordesign.foo EMAIL;INTERNET;WORK:joerg@factordesign.foo EMAIL;INTERNET;HOME:joerg.rossdeutscher@gesindel.foo EMAIL;INTERNET;HOME:raettchen@gmail.bar TEL;WORK:040 999999432571-43 TEL;CELL:017799999978200 TEL;HOME:040999999793017 ADR;WORK;CHARSET=UTF-8:;;abcStraße 58;Hamburg;;20357;Deutschland ADR;HOME:;;Gayens Weg 9;Hamburg;;22761;Deutschland NOTE;CHARSET=UTF-8:Technik\, Web\, DTP\, SysAdmin\, €-Vermögensverwalter URL;type=pref:www.gesindel.baz URL:www.factordesign.foo BDAY;value=date:1969-06-20 END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, version, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/Jörg_Test-Roßdeutscher_2_0.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/Jörg_Test-Roßdeutscher_2_0.vcf' ORDER BY dav_id, property, 1, 2 ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/Jörg_Test-Roßdeutscher_2_0.vcf' ORDER BY dav_id, property, 1, 2 ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/Jörg_Test-Roßdeutscher_2_0.vcf' ORDER BY dav_id, property, 1, 2 ENDQUERY davical-1.1.1/testing/tests/carddav/2034-REPORT-addressbook-query.test0000644000000000000000000000113711654060112022167 0ustar # # Request a REPORT # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=Accept: text/xml,application/xml HEADER=Content-Type: text/xml HEADER=Depth: 1 # HEAD BEGINDATA karora ENDDATA davical-1.1.1/testing/tests/carddav/2005-PUT-arbitrary.test0000644000000000000000000000136111446006434020163 0ustar # # PUT arbitrary text into a collection (in this case an addressbook) # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/strumar_and_beren.txt HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/plain; charset=utf-8 HEAD BEGINDATA Once upon a time there was an old, old man who lived with a great white wolf. As is often the habit with men, he had not always been quite as old as he was now. Beren had not always been this white, either, he thought, lying across the porch and looking out at all the youthful energy visible in the springtime forest. ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag FROM caldav_data WHERE caldav_data.dav_name ~ '/user1/addressbook/strumar_and_beren.txt' ENDQUERY davical-1.1.1/testing/tests/carddav/2024-MKCOL-addressbook.test0000644000000000000000000000130111446006434020654 0ustar # # Extended MKCOL test - create an addressbook # TYPE=MKCOL URL=http://mycaldav/caldav.php/user2/addressbook/ HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml HEAD AUTH=user2:user2 BEGINDATA User 2's Addresses ENDDATA QUERY SELECT user_no, parent_container, dav_displayname, is_calendar, public_events_only, is_addressbook, resourcetypes FROM collection WHERE dav_name = '/user2/addressbook/'; ENDQUERY davical-1.1.1/testing/tests/carddav/2033-REPORT-addressbook-query.result0000644000000000000000000000132411633117640022531 0ustar /caldav.php/user1/addressbook/andrew_mcmillan.vcf "24bae2a7f81c0a79413a656c06d8326b" BEGIN:VCARD VERSION:3.0 UID:pas-id-4BB0719600000000 EMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:andrew@mcmillan.net.nz EMAIL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK:andrew@morphoss.com N:McMillan;Andrew;Watson;; FN:Andrew Watson McMillan NICKNAME:karora END:VCARD Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK davical-1.1.1/testing/tests/carddav/2007-GET-arbitrary.result0000644000000000000000000000044411732477136020505 0ustar HTTP/1.1 404 Not Found Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 19 Content-Type: text/plain; charset="utf-8" Resource Not Found. davical-1.1.1/testing/tests/carddav/2002-PUT-arbitrary.test0000644000000000000000000000116011446006434020155 0ustar # # PUT arbitrary text into a collection (in this case an addressbook) # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/strumar_and_beren.txt HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/plain; charset=utf-8 HEAD BEGINDATA Once upon a time there was an old, old man who lived with a great white wolf. As is often the habit with men, he had not always been quite as old as he was now, and Beren had not always been this white, either. ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag FROM caldav_data WHERE caldav_data.dav_name ~ '/user1/addressbook/' ENDQUERY davical-1.1.1/testing/tests/carddav/2004-PUT-principal.test0000644000000000000000000000115411446006434020144 0ustar # # PUT an arbitrary text file into a principal collection. # TYPE=PUT URL=http://regression.host/caldav.php/user1/strumar_and_beren_also.txt HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/plain; charset=utf-8 HEAD BEGINDATA Once upon a time there was an old, old man who lived with a great white wolf. As is often the habit with men, he had not always been quite as old as he was now, and Beren had not always been this white, either. ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag FROM caldav_data WHERE caldav_data.dav_name ~ '/user1/strumar_and_beren_also.txt' ENDQUERY davical-1.1.1/testing/tests/carddav/2025-PROPFIND.test0000644000000000000000000000103311651212132016725 0ustar # # PROPFIND on addressbook resource # TYPE=PROPFIND URL=http://regression.host/caldav.php/user3/addresses/ HEADER=User-Agent: cadaver/0.23.3 neon/0.29.6 HEADER=Content-Type: application/xml HEADER=Depth: 1 HEAD AUTH=user3:user3 BEGINDATA ENDDATA davical-1.1.1/testing/tests/carddav/2006-PUT-vcard.result0000644000000000000000000000222611732477135017634 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >NULL< caluri: >NULL< dav_name: >/user1/addressbook/donald_kelly.vcf< etag_not_null: >1< fburl: >NULL< fn: >Donald Kelly< n: >Kelly;Donald;;;< nickname: >NULL< note: >NULL< org: >Esposo Designs Ltd< uid_not_null: >1< url: >www.example.co.nz< version: >2.1< box_no: >< country: >New Zealand< locality: >Newtown< postcode: >< property: >adr:;;25 Rintoul St;Newtown;Wellington;;New Zealand< region: >Wellington< street_address: >25 Rintoul St< type: >NULL< unit_no: >< tel: >+64 2 1234-4321< type: >cell< tel: >+64 4 347 4747< type: >work< email: >donald@example.co.nz< type: >internet< davical-1.1.1/testing/tests/carddav/2016-PUT-vcard.test0000644000000000000000000002362211704134640017267 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/mustrmahn.vcf HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEADER=If-None-Match: * HEAD BEGINDATA BEGIN:VCARD VERSION:3.0 N:Mustermann;Anton;Karl;Dr.; FN:Überwerbung GmbH NICKNAME:Boss X-MAIDENNAME:Müller X-PHONETIC-FIRST-NAME:Anto X-PHONETIC-MIDDLE-NAME:Carl X-PHONETIC-LAST-NAME:Mustrmahn ORG:Überwerbung GmbH;Marketing TITLE:CEO EMAIL;type=INTERNET;type=WORK;type=pref:karl@mustermann.de TEL;type=WORK;type=pref:+49 30 1234567 TEL;type=CELL:+49 172 1234567 item1.ADR;type=WORK;type=pref:;;Musterweg 1a;Musterhausen;;12345;DE item1.X-ABADR:de NOTE:Test vCard item2.URL;type=pref:mustermann.de item2.X-ABLabel:_$!!$_ BDAY;value=date:1969-08-16 X-AIM;type=WORK;type=pref:bethel69 X-JABBER;type=HOME;type=pref:bethel69@foo.com PHOTO;BASE64: /9j/4AAQSkZJRgABAQAAAQABAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAA AqACAAQAAAABAAAAS6ADAAQAAAABAAAASwAAAAD/2wBDAAIBAQIBAQICAQICAgICAwUDAwMDAwYE BAMFBwYHBwcGBgYHCAsJBwgKCAYGCQ0JCgsLDAwMBwkNDg0MDgsMDAv/2wBDAQICAgMCAwUDAwUL CAYICwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwv/wAAR CABLAEsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol JicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW l5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3 +Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5 OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan qKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIR AxEAPwDmrj9qzxB4q8F3MniG/uYdSubhYYxa+U9zJGkYJQQNMpbgKwZV4KeormNe+MXiG90sWN/d 6Zql/qN1NcTzRW6EMXAVV2sg3SKwfPHGW5PU/NXgq90/xwJo9KS61eSaGSUyWqMGjKqQs8kxJWDG TydpcEqo5yf11/4Ji/8ABJXw38XP2d9J+In7SN94qkuvFVlLceHdJhvjB/wj1pKCIrre0Yk+0FPm G8lIw6jYWBY/u9XinDYCEXtFaJRtt2SWiPiaeRYjHSc5Xb6uTf66s8//AOCc37dE3wl+P1t4X8Tv byeB/H17a2d5Yr5cENlLegRwyxRgbV/eyRIyqACkgJ6V3f8AwVQ/4Ja+FfjN4Pvrn4F6nL8NdY04 Y1WDR1EVjrFsALjDWzHZBOB5bCQFFycMGFfKv/BTD/gnv47/AGEfiLYv8B9Q8ReOfB2qrBa6ZqUM fm6noV1BKk8VrflFwCbdNyXRCBwjZAIWvXfiB+2Pb+A/Duup4N1e9Hh+9n86S7vbybUNQuSURRDD NcO5jDFGG4scbSVTawr53G5vg54qONg2lOPvJdWu6vvbT5I9illmIp0fYJWs9G9jz34JfG/4c/sr fCK60rTtP8Q6x4V0tDfX+vaRYlNaSVUZ3h1C0mI8uQkvP58D7JI7hXhjYJKU8x/Z2+NGvftT/tDe Evhx+zv4LvdMXVtWj1CHSYIpLa00m1VjNc3Ny8iARxKhLPIByzhUBMsYLtX/AGpEstYuLnRLSz0X TnhWeC00yFYINUgMkrlmZcHzlkklIduI2kkwF3kV9V/8Et/+Chvhb4WfEQ+DfFt5frB49lgms9Vu L15okIAWOBQ5xCrO3zgYVnkU45NfL8RY1cQ06dDncYRafLZa+r3Vrnt5Vl0sJX9pJpy73Z+mXwM/ Z70T4DaYl0n2bVPEbQeRc6rMu1wDtLRxK2TFFlF+TPJQFsnms342ftC2Fl4ZA0LU9Jg1G6uTp3l3 F3DBIrgB8RtK4TOzc4z/AAhvQVyP7Yvxqv8A4S/sv/EDXvCMkQ1TQtEnubFrltsfmgqEMn96PLYG PvHg1/N7+2f8V/iN8UvElhoX7U/j2W40HxVfm8xZwSx2kl0EMRieGVikLR5K7gPujjg15tHC1MNB 4ijR54Qdm+idtLndmc4yt9Yn+8lt/wAA/e/9k/8AaB079ofTLjxPptzp17b60S8NzplwbmxvVt2a 3MsErcshdJR/tcnoa0PFmiJrniS9uo3nZJJSFZXIDAfKD+IGa+ff+CWvw+8VeAP2Jf2e9d8UXYuU 8Q+DLcAmNTsgR5BZJkdSLKO359c19c+HLSFtFgMyxu2DlnQbjyetffYR/u1NrXb7m0fN4iSp1OVb Dda/4KE+Cvgzby2/iTwv4x8EWcL+WG1HwtJptupHQK4TY/XtwK821T/gr94O8R6tFo/geeHVdZ1t nttEgs3+0S6rdDGLYQg8kqpbII2bdx4VhXu/g742Q6hZm3u7hrceXsdCG2jtjJ+U1xHiv9lD4VfF nxveXet+EdE0zxJDaxyWesaXaRw3ce5jsukeJRtuIpVVklTEi4GW8suD+Z4vK8YqfNQraLyV38/0 t8z6vA5rhfaf7TR+ab/I8K/4LBfETxl8Hv2LNH0q10wXkPi/XoZfHeq27iT+x7WL/TG2xn5nLPHH CJT8qLETjL1+MfxN/a3tfEDSyST2sUcyNG0JYsgh2/djYHCAAcHGCBuxgMD+qn7VfxOuj8KLjQf2 ifF2i23iMajceDdanuRBBp9xcpFG4ZxLlUW5iaGZAoXBkG0jAr4Q1r9j/wCA3wFuoZPFF38OP7Tm uJp0g1e7jmkZFxwyzuwUBgcyEBT0LV81VzqpQfJCm3/wD2MZllV83LHmW91trsfFl/8AHqa+04W+ h3s89xYuZbdLUedgNjKsiqdxIC54zwM5IzW9ongr44fE+HzPhR8OPiRqYf8Ae+ZbaHdKquAWcLvj +bh0bAK45wa+x/Cv/BQjUPAHhDVYfhP8KfDsem6JI9jFq6+IZIvC8BkHmRBUsFSA3EuJWSJ503fN txsctleEv+Cy3xE8Z/C69YJ4S0Z7ixuLK+u9K0IvqWkxyq0R+xSXU8qS7Hj3/OjttDfNuZTSp4/F Yl+7C3rJX+655To16TSdO3rp+Vz9DP2s/HvijX/+COuo2d9A3i74iXvgrS9L1fSdMK6jqY1WT7It xBJbW++QOsjsrLw3BJPFfk38ItK0j4p/tIaX8Mfi74bsfEs+tasPDM+ieITJYmz1S7X7PbyRvC6S RYkZIGY4eNt25T5YY/d2h/ts+G/28f8Agmn8SY/HJ0Lwx+0J4R0GTXFufD1vHpOp362ZM/2zSbzA l3GGBkePLSJghlPmHP5L6h+07ZfGeS58U/ErTru18b6vAJrzVNLmWGDU7tSomurm2kjISSZN7yTQ uB56RuIxvOP0jhbF+0o1cPXceWT9Xtb7tjzuJqTqeyrNarsf1N638H7X4T/Afwt4W8H2UVpZfDnT LHT7G3iZpYoobO2S12IWJZlEanBb5iACecivG9N/ap8G2tr5V9rAhmid0eOd3jkQhiCCo6D09sV8 Ufsof8HJY8B+B/DGkfto6DqfifRooF0u88V6M3m39gpUIlxc2hbF1G6nLSRFZF8tvlY/KPqnT/ij +zZ8U9OtvENp47+Fetw6vDHcRXw8U2cDXKFRtZ4pXWSN8AbkdVZWDBgCCK+hwcZYJPC1baWaa2af Y+UlONV+0a3Ifhx8Z73+2bO21qeJYbskQNcBm8xPTyVyWf6K2PavWPjR8a9R+G2jaDfeCtEiku70 fZDcanqCW1vabyqb5UiQuFPykAn+FsgHIHyr4W+KukaRqrvYiKNvODPJGxEjuQBnJ5PQjPpXpX7Q 37Q2if8ADPus/FXVpJLKD4QDb4htVCrDqljcQmS1HLKglFyyIhYhf3kisSHxXysKyjScr7Hvzpvn SaPD/wBrDx7ceA9bk0rQ0sPEVh47sb298RaPdSi4j1+WKSG2uLYLMrIzoL6xntmZVSL7Iof5JmZc r9oK/wBH/Z90vVND+L/wV/4Wdpnifw2tpomuaYotdb0/W7S3EKzSSwyLcfZJIvs8rPbFmgkhbbCw nUJ4N4B8E3Xx3vYr/wCL3j3w9Z3XhXTry41Tw7aak8N5bmQxPPFfagBItohWGJSkaNI27hirZq7o 3x60a4+IetXPwqv/AA7JqFxc/Yrq31ia7ub63fzDgNbIvlqjISsbpIjFUOADvFfndZYrB0PrVSNl dq/XXX0/G/kfouWPLc2rPL+a8+VO17fD0v8AoR/tE/GqXwN+wZpWn/GPR10m7EEqabpMWkwxwf2j Kju11LZW4Cm8k3yPNO48w/MGIA2j8rPCvxck8L6VdWejRyWf2u2uIjL5h3qHfaCe4P3yfbiv1Q/a t8XXHxJ+Ekq6Dp0lzqmnea9tE0WdzvFJExHZgwZ1z/EvXOa+Ik/4JLeLfEHhK61Sx1vRNNvo5Jrm 4t7vdBHb2qx/PKWTd84JC7SANpB6mufCYunL45auxWeYapFxWFjaMen5/wDBPN/A/wARNVv73wvo fwue2uPEWp6pFFYwblSGN2EkTv8A9MI1IiYvwm1CSMK2ej/aF/Yn+Jnww8c+Nr2y+H+uX/hzQ9dv 9NuNY0LTZrjR/tFq8a3DxOqH9yskmFfhDuZR9w12f7EHwoi8PePpPHNpbafFaWDSrayxx74JLeG3 eANHuJLG5ncgDPIT3xX2xovxd8VJ4rudQ8O3d7YC2sfIJEsc1wXilEs0kYkYnKiTygf3e7bIVYEH P3mTZdGMY1pSak+lloflOccRSpzlh4wUkut3o/8Agn5geEfFMmoaFcxaYzTTWuJCYlZ5IW+bcCpO fm2sTnjDMuAGxXc6P+zn4Z+IWnprTwTacdQLS/ZorqIpH8xHGITjOM4ycZxX3H4++MnwJ/a+17Wt K+PXw312CfQpEttS+J3h3w+bq9tT5asuozXFmkSyIsqvDLE0VzuePIlRDuT4y+LH7JfxA/Z48fX3 hHSfDWv+N9P0wRS2Ov8AhvWjDpesWs8SXEFxDGYWMe+KaNmQklXLA9K+1w+Z0KdNQqrnS8jyaU/r Ert+zdr6tar+vmfX3w++Lnib4n3V8fh1pFzqEenAySu08cNpYKpOGuJ952YHRWxkdOtekfBP9t/Q /hXrl/qHxw0zwx4gi04Rajpk0Wo2c9v4f1C0VpF1N7eWWX7WbeITSxI0RaOSPzIkLqrL1vh/9kC7 8TazpsH7Rc+t2vgW5uFt4LTSNItrjT7SRw7LKp0x5LO7iXCgqXQgdlbICW/7Vnw9+AOq3cJ8O6L/ AMKt1ELaaR8QfDOmmbUL1ysvmWzaOiGSFN8Uqbg5BG1vvMa/Nfr0cI4xqTS5tubZ9fTp3Pq61ZSf JbX7vz6ng37Vf7ct94/8U69eXlzrZ8OaPaQ3Fva3qSwXWrXl2m23a7LYMzyxb5zPycKWznFfEXw0 +OXjr4W6/wCIvGXwk18W+qa9rRtLmJ41ktNRWLOyPyWGAI1kO1h0BIFfbX/BXfwTrXxY8LeFfiB8 NZ1uvCdtZJCyWkBhnslnBaGZ967ijJJtww/c8g/eFfJ2i+BrPRvBej6faRSR21szklgPnYtuLMRz tLseD0wAeldTxbziHvWt2X9eR5NXDyyDEOpCT5pWs3vY+hP2RvB3xQ/bD8OTeKvH2rre6fa6nPaX Ftp8T2c0flOu2QtITkEs42r24q5+3Np83h650v4OfD13lu/FbWy+JdQIeSa3sZZPMis1kzwZRG8r EcAKAetfWX/BG/wJbaL+yPpOq/KZ9dmuNRuV+8GdrqVwRnvtUDNfOf7c2v2tj/wUK8eQ6ne6Z4Zj ENhAuoahKkVnYq2nWq72Zm2hiWfgr2rxsDk1CWLVSWy18tD7bNM5rUsnUr/vJJa97/qca1xbXXxX 8B/D74fWqwWcV3FdX0UJCLBa2EfmJEB90OZfK5PACe9cb+1t8Stf+CPxVv49C1S1srix0a6WO4lQ YWC5uNsAEX3GJkjJKgYG0N2zWX8evCOlfCGxtdH8IeJTrPirxvbT6asenSC7kMNyYmuJYViAzvRX +Yv/ABAdsDJ8afsMfFT4lXJ8f+M9OjuNNQWmm6XFd3gl3W4EdqkkoQnHyuSwz1znnNfSY3MYYWLi 3Z36P/I/NsBlVbMmpU4N730/zPoD9lme3+CHhrw82oa82gazLYAS6e97HLJZRzItxPcvcKdsAWV3 cg4bEx5YsFHrHg3/AIK7eFPC/hq1sNC1b4lala2wZUuobOK2inyxJaKOa4WQRkk7d6hiu0kc1u/s /f8ABule6n8Ira/8efEK+t/Eh23Mdvp9pFNpKyhi6vJFOn79gcfeY4IOMcVynif/AIJb/teeHNfu rLwt4F+H/ibT7d8QapBcG0S8U87vJyQjckMAcbgcYHFdVLN3FJSjZdLxcr/cddfg/Ey96VnfopJW 9dV+Z+o/hr9n74XfDP4SP4j/AGE4rfNx5cNpY3us3iWVp5j70W5gMgkZVbG1SwxuOSydeC/a+/Yq 1r49x2etfCSHTZrnStFXS9Q8Nx6VBptzDH5yTLPpt3bJGruJIm24ffGHbynQuwf4M1f4w+IPBf7S Og+HvDV1bW+kX+qNFcwGwt5DOvkyS/NI8ZcneAck56jOCRX2Z4t+OvjD4O/syazd/DTxDqWkzvf2 0QMUm5YldV3eWrZWMnJBZADjjOOK8auoVMP7KrH7nY9TEUFjLxm21030/Fo+a/B0t/4Z+HuoaV8U H1S41S2uLjSpm1m2CXbRoybVuFCIwYIwR3dQXZGbGDXzjrfgnw3+0L4m1b4XWF9p/hPx5ZD+1fCX iCKyilg8Q2iL++sbqLbmTy8krs/eFfKKn91Jn0n4v+MNW8QXF3rPiPU7/U9W1LVpLi7u724e5muX TyUQu0hJYKgCgHgKAAMCvnzwb/pn7T3w7up8+eniGyCsvy7fkc8AcA/Owz1wcdABX59LMHgMV7Gk 3ZO2+uuuve1z9MynKaeKyymq9paW1R+m/wDwT6/Z/T4M/s7aJ4fub6O5mtLaNBceWUMgKFshWJKZ 3fd7ZxX5Zf8ABfz4V3a/t0XOoaTcxR6d4i0LTLqQTymKKQpB5Dt83y7g0OcgdTk81+tHwZvZbCx8 qzby44Y2aNVAwmBxj0HJ46du1fAX/By7otq3hP4Ya00KnVLS9OkxXHO5bWSJZGix0I3ksCRlSzFS Nxz9tRq89BSkjwc4wvuunB2Stb8jwr/gi18KNJ1Xxh4v8SeILV7x9NvLaK2e6mVmDrE0kmGHX59o 47AZr9R/jt8V/APhb4I6jpN/fWMF1Fp3mBHOyN9rFo44iQBIwdFO0ZYZ4IHFfnh+yR4ftPBX7M3g PU/Csb2WoeI7ZLzUp45W33cpdgXbJ64AHGOAB0r7Q8N3kknga484iQm3dcyKHIB3ZAJ6Z9q8atiW lJJanpZTho0qUFJtrfsfor+z/wCKLfW/hno1ygB+1WUUyue4dQ3QgEDnof1616IbLzsMZbJcgcPa F2/E7xn8q8D/AGLYwPBvhi3O4wvZQgoSSAAqYAz0HJ4FeH+Pfjl4suPGWotLrd2T5xHAUAAcAAAc AACv0nhTLKvEkZWmoqKW6ueHxPmdLh5Qm4uXO3s7H//Z item3.X-ABDATE;type=pref:2000-12-31 item3.X-ABLabel:_$!!$_ X-ABShowAs:COMPANY X-ABUID:73FD0F46-DE18-4F1F-AA2C-59E8738B4249\:ABPerson END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, version, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/mustrmahn.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/mustrmahn.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/mustrmahn.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/mustrmahn.vcf' ORDER BY dav_id, property ENDQUERY davical-1.1.1/testing/tests/carddav/2017-PUT-vcard.test0000644000000000000000000005736511704134640017303 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/andresenesq.vcf HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEADER=If-None-Match: * HEAD BEGINDATA BEGIN:VCARD VERSION:4.0 PRODID:-//ALAB//NOSGML Version 0.9//DE REV;VALUE=date-time:20100623071522Z UID:uid=andresenesq.1209158007\,ou=Contacts\,dc=andresen\,dc=de X-ABUID:ADDEEFEF-162A-260A-DEA3-1DA8-8A913187\:ABPerson FN:Sven Joseph Klaus Michael Andresen\, Esq. SORT-STRING:Andresen\, Esq.\, Sven Joseph Klaus Michael N:Andresen,Esq.;Sven;Joseph,Klaus,Michael;;Dr.,Prof.;Esq. X-DISPLAYNAME:Svenni X-INITIALS:SA X-INITIALS:SHA NICKNAME:Svenny,Sveny PHOTO;ENCODING=b;TYPE=jpeg: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkS Ew8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJ CQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjL/wAARCAFQATYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3 +iiigAooooAKKKKACiiigAooooAKKKKACiiigAoorM17xBpnhnSZdT1a7S2tY/4m 6seyqOpJ9BQBp1zuvePPC/hkMNW1q1glXrCrb5f++Fy36V5Hf+L/ABr8SXkj0hz4 d8PMSFnOfPnX6jn8FwO2TU2i/DfwxpKq89r/AGjc9WluzuBP+7938wfrQBr3X7Q+ gGRotK0XVr+QdPkVA305J/Ssyb45eKWbdb/D67WI9PMMrE/iIxXXQSQWsKxW8UcM S9EjUKB+AqT7b70AeeXP7Q3iGxkUXnhKKDP8MryIT+Yq/Y/tLWDlRf8Ahu5hHcwX KyfoVX+ddk9ykiFHCsp6qwyDXJa54B8Ma4Hd7BbS4b/lta/uzn1IHyn8RQB3WgfF zwX4iZI7fWI7a4fgQXo8ls+mT8pP0Jrt6+K/FngLUvCxM5YXVgWwtxGMbfQMP4f1 HvWt4F+LniDwbPDbyTvqGkKcNZzNnav/AEzY8r9OntQB9fUVjeGPFOk+L9Gj1PSL kSwsdrqRh4m7qw7H/IyK2aACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooArahf22l6dcX95KIra3jaWV26KoGSa+ fbm6n+I2vr4j1pGTSYSRpmnP02Z++47k4z78dgM9b8Ztba6u9L8HwPiO6/0zUMHn yUPyr9GYH/vkVzC3SoiomFVRgAcACgDohdhQAMADgAUfbPeue+2+9H2z3oA6H7Z7 0fbfeue+2e9H233oA6D7b70fbPeue+2+9H233oA3pp4riF4ZkWSJ1KsjDIYHsRXh XjPw6PD+sEQZNlcZeA/3fVfwz+RFer/bPeuW8fKl34d80jLwSqyn0B4P8x+VAHN/ D7x1feA/ESXsBaSylIS8ts8Sp6j/AGhyQf6E19lWN9banYW99ZyrLbXEayxSL0ZS Mg18EV9Gfs7eLWutOvfC91KWe1/0i0DH/lmTh1HsGIP/AAM0Ae50UUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFVdTvB p+lXl62NtvA8pz6KpP8ASgD5h1nXf7a+J/ibUDJuSOX7NDzx5aEqMex25/GpPtvv Xneh3rRX8m9iTMDknuev+NdH9t96AOg+2+9H2z3rn/tvvSfbfegDoftnvR9t9657 7Z70fbfegDoPtvvR9s965/7b70n233oA6H7Z71ieK7//AIkbxZ/1rqv5HP8ASoft nvXNa1qH225VFOY4+B7nuaAMyuq+G+vf8I38QdG1Fn2wicRTHt5b/IxP0Bz+FcrR QB9/0VkeFdU/trwlpGpk5a6s4pX/AN4qN365rXoAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5v4gzeR8OfEj/8AUNnUfihH 9a6SuW+JIz8NPEY/6cJT/wCO0AfFSsVYMpwRyDXe+FPCOs+Krf7TCqW9qDt8+bID EddoHJ/l71yWhaVLrmu2WmQ53XMyxkj+Edz+Ayfwr6us9PgsLOG0tYljghQJGi9A B0oA8P174ea3oto93E0d7BGMv5OQ6j12nqPpmuI+2+9fVvlV85/FLwz/AMI54paW 3QJZXwM0QXgK38aj6E5+jCgDnvtnvV3Sba81vUobCxjMk8pwB2A7knsBXN5PrXvH wY8OLa+HpNblQG4vWKRseqxKcfqwP5CgDT0T4b6Pp0Ctfp9uuiPmaQkID7L/AI5r SvvA/h2+hMbabHCT0eD92w/Lj862NX1jTdCt1n1K6WBHJCDBZnI5OFAJP4Co9D17 SfEds0+k3sdyiEBwAQyE+qkAii4WPBvHnhbUPCcy7XM1hOcR3IGCD/db0P8AP88c NX1p4g0G38QaHd6ZcKNs6EKxH3G/hYfQ4NfKFzbyWl1NbTLtlido3HoQcGgCKiii gD7D+DN39r+E+hsTlo1kiPttkYD9MV3leUfs9XJn+GskZ6QahLGP++Ub/wBmr1eg AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig ArmviGhf4ceJAP8AoGzn8kJrpax/FkP2jwbrkGM+Zp9wn5xsKAPlX4Owed8R7I/8 84pn/wDHCP61658QdcOn3OmaUszxJd+ZLO0blGKJjChhyAS3OOykd68S+GepJpXx F0a4kcJG8xhck4GHUpz+LCvSPj9ZXFtJoerQ7hGvmwMwHCk4I/MbvyqW/eKWxo+C /Egj8WDQvOkks72FpLZZHLmKROWUEnO0rzjsRx1qr8ebBT4b0u943xXZiH0dCT/6 AK4L4aRajd+NdP1UxO9rZMxkkHAGVIwPUnI4r2zXNLTxhFFbahZrJbxSeakQJ4bB GTgjPBNctfF06MrPV9kdFHC1KsbrRHyrX1r4HtVg8CaCiAAGxhfj1ZAx/UmsGX4b 6ME+fRbcDHURD+lb2m3M2j2VvZQwo9pboI40BO5VAwBn6Vh/adJu0k0bf2fO14tM 851HxUs/iTU7ksN0c72sXOdscZ24H1ILfj7VzWi66NL+Ldjc2mFi1B0guUU4VvMO 3J/HDfUVieKtE1rRNUvZzBIbGW4eSOZfmADMSM+h571U8EWU+teP9FgAZ2a8jkfH ZEO5j+Cqa9CM4zjeLujilCUZWkrH1h5VfKfxGt1tfiHrcaYwbkvx6sAx/U19c+VX xz4x1JNX8ZaxfxMGimupDGw7oDhT+QFKDuElYxKKKK0IPp39nB8+AtST01Nz+cUf +FexV4v+zdn/AIQ3VvT+0P8A2mle0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFU9VTzNHvk/vW8g/8dNXKo61crZaFqF0/ 3YbaSQ59ApP9KAPg8EggjrX0rpWtQePvhlBYa5ps0l1Igjdn+XcygbZlb36/XI6d fLvhf4Og1yeTUr1BJBC+yONhlWYDJJHcDI4759q92htY4Iwsa4FeHmeZqi/Zw+I9 PCYRSXPPbsVdA8O2um2cVvBEsNvGMBV/z+tdNGUiQKgCqOwqlDJhAvQipPMryqeL ivevqzsqJy06Fzzaq3FrDcZONr/3hTfMo8yrli4yVpExi4u6Me709clJVDAjGfUV k6P4d07w7rb6vp2nWwunQxsQCuFJycDOAeOuK6WdvNIHYVDsriWNlSk/ZvQ6Wo1I ++rmN4/8XX0Hgu9TStPuDqEy+USoz5SEfM47njgYHBOe1fLJGDzX140UU6FTtYdO O1eBfFTw9Do+uR3VumxLvcXA6bxjJ9sgg/nX0GWZl7eXsprU8vGYVRXPA4Ciiivb PNPpn9m4f8UTqh/6iJ/9FpXs1eIfs13G7w5rdtn/AFd2kmP95Mf+y17fQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVyfxOv PsHwy8RTZxusniz/AL/yf+zV1leP/tEa0LHwPa6Ur4l1G6GV9Y4/mP8A49soA4f4 L6vALK5052AljlL4PdWA5/MfqK9XeCS2JkiBeM8tH3HuP8K+TtK1W70bUYr6zk2S xnvyGHcEdwa+ofD2rXVz4d07UruAiC6gWQMp3bMjofavlc6wFVTdemrp7o9fCYhS goPdGxEUmQPGwZT6VJtNMNpHN+/tZdjNzuXkN9RRm9j4a3SX/aR8foa+Wc9fdf3n VzD9ppNnrTfNuj92yI/3pAP5UfZbqb/XTCNf7sX+Jpc7XxMXMRSzxxtsUF5T0ReT +PpTBayz83DYX/nmh4/E96vxWsUC7Y0Cjv6moJr63hfy1Jll6BIxk1UKkpvlpK7H z9hvlxW8ROFRBycDFfP3xd1lb/xDFYoCPsqlnz6uAQP++Qv519AxWNxfSCS9XyoF ORB3P1rxH48aMLPxPY6pGgWO9t9jYH8cfH/oJT8q+uyXL6lKXtau5w4uunDkR5RR RRX0h5h7V+zhrItfFGqaO7ALe2wlTPd4z0/75dj+FfStfDfg/wAQy+FPFum63EC3 2WYF1H8SH5XH4qSK+37W5hvbSG6tpBJBPGskbr0ZSMgj8DQBLRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXyR8bvFC+I/iDPB bvutNMX7IhB4ZwSXP/fXH/ARX0H8UfGieCfB1xdxOP7QuMwWan++R97Hoo5+uB3r 41ZmdyzMWZjkknJJoASvs/wlphtPDGl2U6D/AEeziidSOrBADXyR4U006x4t0qw2 7lmukDj/AGAct+gNfZ9owFuPcmpkk9GUtDHu9Lm02U3OnIZIG5kt/T3WnWt7bXY+ RwH7o3DD8K3d9UbvS7C9YvPbqXP8a/Kf0r5zMuH6WKfPTfLI7KeK0tP7yLYKp3Oo 2tsdpffJ0CR8k1N/wjmn9/OI9DIcVetLCzsf+PeBEP8Ae6n8zzXmUOFZ8372eho8 RTW12ZUOn32qHfclrS2PSNfvt9fStqz0+1sE228Kp6t1J+pqXzKN9fU4TAUMLHlp o5alec9NkRXceV8wdR1ry740aOdU8BS3KJul0+VbgYHO37rfhhs/8Br1SR8xOPUG sS8tob6yns7hd8M8bRSL6qwwR+Rrr2dzLofF9FXtZ0ybRdavdMn/ANZazNETjrg8 H8Rz+NUa0ICvpP4A+OxqWlN4Uv5R9qslL2bMf9ZDnlfqpP5H2r5srV8N3OqWXiC0 u9Fdl1GBjLDt6sVBJGO+RkY79O9AH3VRXM+BfGVl448NQ6pbYjnH7u6t88wyDqPp 3B9PxrpqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAq tqF/a6Xp89/fTpBa26GSWV+iqOpqzXgnjbxDN8SvET6Dp07J4W06X/S7iM/8fko/ hB7qO3b+Ln5aAPLfiR4zvvHPiI6rJFNFpilorCNxgKgPJ9NxyCcZ6gdAK42uj8Z6 tb6nrQhsESPT7JPs9sqfdIB5b8T+mK5ygD1P4G6P9r8UXequuUsYNqH0kfgf+Oh/ zr6LtpP3ZHoa83+E2h/2L4GtpJF23F+ftT564P3B/wB8gH8TXeRybG68Goe5XQ0v Mo8yqfm0eb70AXPMo8yqfm+9J5tAFzzKPMqn5tHm0AWpJcRtz2qjuokl3DGajzQB 4J8cdC+x+I7XWYkxHfRbJCP+eiYH6qV/I15XX1L8RfD/APwkngy9tY03XMI+0W/r vXsPqMj8a+WqpCYVPZ3c1hewXdu22aFxIh9wc1BRTEey6V4gl8K6nbeOtEjaTSr4 BdWsUPvywHqDnn19mNfR+l6nZa1pdtqWnXCXFpcoJIpE6EH+R7EHkEEGvkb4da0k VxPod3hra7BKK/I3Y5H4j+XvXe+A/FMnw18U/wBgalMT4Z1KTdbTSHi1kPqf7vQH 8G45yAfQ9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFYHjPx Va+DfDNzq9yPMZPkghBwZpT91R/M+wNAHHfFjxfcwJF4P0KXbq2pJm4mX/l1t+jN nszcgd8Z6Eqa8p8ValbeEfCsWi6adk8yFAQfmC/xOfc/19q0bR5LCC/8Q67P5mpX ZM93Kf4fSNfYcAD8PSvOLlpPED6r4g1FmS2hXy4lB6yNkRxj6csfZT3NAHOVs+FN DfxH4msdLXOyaQeaw/hjHLH8gfxxWNXtnwS8P+RZXevzJ885+z25P9wHLH8Tgf8A ATQB67GqRRJHGoVEAVVHQAdBTs1Huqzb2NxcgFVwp/ibgVNhke8+tG8+tasWjxKM yuzH24FW0sraMcQof94Z/nTsFzn959aN59a6QRRL0jQfRRQYYm6xIfqoosFzm959 aN59a3pLC1k6wqP93iqk2jqRmGQg+jc0WC5l5ozTp7aa2P7xCB2Yciod1KwXJN1f MHxG8P8A/CO+M7yCNNttcH7RBjptY8gfQ5H4V9N7q89+Lvhv+2fC/wDaMCZu9OzJ wOWiP3x+GA34H1poDwKxtTfX0FqJooTM4QSTNtRSe5PYUuoafdaXfTWV7A0NxE21 0bt/iPeq1drptzH400qPQ77b/bVshGm3THBmUc+Q5/8AQSfp9WI42GaS3njmiYpJ GwZWHUEcg165utfGfhZPNwrSL1HWKUf5/EGvI5YpIJnhlRkkRirIwwVI6giuo8D6 ybHUWsZWxDc/dz2ft+fT8qAPcvgx48uLgP4K15wup2C4tJGPM0QH3fcqOR6r9CT7 FXyh4jt7mGa21/SpGi1LT2EiunUgHP44/lmvorwJ4utvG3hS11eHakxHl3MQ/wCW co+8Pp0I9iKAOlooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvnfxb4i /wCE68ctLE+7Q9FcxW2CCs8/8UnuB29gD3Nei/GDxdJ4c8KCwsXI1XVmNtb4PKKe Hf2wDge7A9q8Ykmg8OeHjswRBHhc/wAbn1+pNAGL411abU9Qg0KxDSNvUOqdXkP3 V/DP5n2rN8YvFpv2TwzaOrRaapNy69Jblsbz744UfQ1d8Gj+zrXVvGV4vmNZqUtd 4/1ly/APvjOT9c1xcsjzSvLIxeR2LMxOSSepoAn0+xn1PUbextl3T3EixoPcnFfV +jaZFpOk2el2ikx28axrgcsR1P1Jyfxrxr4M+HvtOp3GvTpmO1HlQZHWQj5j+CnH /Aq+h9MtRDGJnHzsOPYUAS2WmJEA84Dv/d7D/GtLIqHdRuoAn3Ubqg3UbqAJ91G6 oN9G+gCfdSbqh30b6AJm2spVgCD1BrIvtMABkth9U/wrR30b6AOYzTXCyIyOoZGG GUjII9K0dUtdp+0IOCfnHv61mZosB8v+NPDreGPFF3YbT9nJ8y3Y9426flyPqKwo pZIJkmidkkjYMjqcFSOQRXvfxc8OjVfDX9pwpm60/LkgctEfvD8OD+B9a8BoA7rx LbR+KPDMPi+0iVbuNhb6rGnA38YlA7A5Gfcj3NcMrMjBlJDA5BHY12fw11iGz199 Jvfm0/V0+yzITxuPCn8yR/wKuf8AEWjS+H9fvNLmOTA+Fb+8p5U/iCDQB3+j6qNS 0uG4ON5G2Qf7Q6/4/jVz4f8AiX/hAPiEtvK4TQ9XISTJwsTZ+VvbaT/3y1cJ4Svj Fcy2jH5ZBvX/AHh/9b+VbmuWo1DTXUD97H88ZHXI7fjQB9f0V578HPGJ8W+B4Rcy btQ08i2uMnJYAfI5+o4yepU16FQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVw 3xc8S/8ACM/DvUZ4323V2PskH+84IJ9sKGOfUCgDxbxLr48Z/Ea/1hW36fYf6JY+ hAzlh9SSf+BD0rkfGd80j21gh/6aMPU9B/WtLR4fsWlwRHhiu5vqeaq+GdPPiL4n W8bDdDDN5knGRtj5wfYkAfjQBN49jHh/Q9D8KR4DQxfbLvH8Uz5HP0+YfQiuFije aVIo1LSOwVVHUk9BXQ+P9QbUvHWrzE8RzmBfonyf0z+Nafwp0P8AtjxtbyyLmCxU 3L5/vDhB/wB9EH8DQB7v4O8PRaFomn6SuCY1zKw/ic8sfzz+GK7fNZFiMXIPsa08 0ASbqN1R7qN1AEm6jdUe6jdQBJuo3VHuo3UASbqN1R7qN1AEm6jdUe6jdQA6RRLG yN0YYrnmQqxU9QcVv7qx7gZuJD/tGi4FSWGOeF4pUDxupVlPQg8EV8seKNFbw94l vtLbJWGQ+WT/ABIeVP5EV9Xba8Z+N+h7J9P1yNeHBtpiPUZZP03fkKAPIo5HilSS NiroQysOoI6GvTvijbLquh6D4riUA3UCxT46Biu4fjnePwFeX17DYwf2x8ApYtoe W0DupPbZIW/9BJFAHk1jOba+hmBxscE/Tv8ApXd+d7155XX21wXtYmJ5KAn8qAOq +EniD/hFfigtg7FbHVsQFecB2OYzj/e+X6Ma+pq+H9XkeGe1vYWKSxONrKcEEcj+ VfZfhrWY/EPhrTdXiK7bu3SUhTkKxHzL+ByPwoA1aKKKACiiigAooooAKKKKACii igAooooAK+cf2gdY/tHxnpHh9JAYbSMSyqOzyHof+Aqp/wCBV9HV8Z+KtWbXPijr GoM+9TdSLGf9hfkT9AKAL/m+9bfwSsxNq+taiT8yIsQH++xY/wDoArlvNruvgcq/ Ztex98Txg/TDY/rQB43qc5utVvLg9ZZ3f82Jr234IaT9n8O32psuGu5xGp9UQf4s 35V4trVq1lruoWrfehuZIz+DEV9OeAtP/s7wJotvjBNsspHu/wA5/VqTGjo7Y7Z1 P4Vo5rOAIOR2q6rblBHelcCTNGaZmjNMB+aM0zNGaAH5ozTM0ZoAfmjNMzRmgB2a M03NGaAHFsDJrLb5mLepzV6Z8R47mqm2lcCPbXK/EfSv7V8BapEFzJDH9oT2KHcf 0BH41122mywpNC8UihkdSrKe4PBouB8a17r4Etnb4OXikcTxXW33GGX+YNeV6r4K 8Q6Zd3CNo2oNBFIyrMtuxVlBIByBjnrXukGnt4d+FElo52S2+mSF88YkKFiP++ia oR81VvWcuLSIei1g1pxSbYUX0AoAsai3mWbj0IIr6R+AGqG++Gq2rkbrG6khAHXa cOP1dvyr5lmk3QuPavcP2Z5v3XiOAsfvW7hf+/gJ/lQB77RRRQAUUUUAFFFFABRR RQAUUUUAFFFFAFXU71dO0q8vnGVtoHmI9lUn+lfDFhLnUGkPVtx5r7X8YHb4J18+ mnXB/wDIbV8P2z7LhG98UAdD5td98FrxYfEOtadgf6RElwp/3SQR/wCP/pXmfm1f 0DXH8PeJbDWEBIt5MSqvVozww/ImkBt/Fzw9Jp3jlrmOPEGpgSxkdN/CuPrnB/4F X0XDAlvBHDGMJGoRR6ADArnvEGg6f420OyljkVwkkd3azr+Bx9COPy9K6jFS2UkM xUkTY+U0m2jFK47E1FMB9aWi4rDqKbRRcLDqKbRRcLDqKbRRcdh1ITgZpM01st9K LhYjc7mzSYp+2jbRcLDNtcp4w8f6N4NVI7syT3kg3JbQ4LY/vMT90f5ANdeFrwHw 7dQ654u1vxLeATSG5KW2/ny17Y9wu0D8aa1E9DYb45yxMGn8KzRwnoxuj/WPFa0X xM8FeL9Pl0rVjPZJcLsdbnKqec8Op4/HFTPqiSIUfayMMFWGQa5PW/CWhasjNDCt jcdpIBhT9V6fliqsK5V8TfBu4hg/tHwtcjUrJhvEJcGTHqrDhx+R+teaTCW2meGe N4pUO1kdSrKfQg9K6e01jxP8OtR2Wl4fs7HcEOXglH+6eh+mD713yT+HvjJpjwyR JpviiCMmNs8OB7/xL7Hle3ubAeKtLlSM17Z+zV5n9u67j/VfZo93+9uOP614vf2N zpmoXFjdxmO4t5DHIh7EHFe8/szw/u/Ek5U9bdA3/fwkfypiPfaKKKACiiigAooo oAKKKKACiiigAoopGZUUsxAUDJJ7UAUNdW2k0K+gu3CQTQPE5Poylf618/8Ah34Z 6XYxK95EL656s0n+rU+gXv8Aj+lem67qz61feTCSLSI/L/tH+9/hVvS9MR4xJKvy fwr6+9eHisZUq1PZUXoexh8NCjD2lVanHSeE9LkjKNplgQRjAgUfriuM8RfDO3lj aTSSbaYDPkuxZH+hPI/l9K94aytWXaYE/AYrG1LSxEhZctF+q1zXxGH99Suje9Ct 7so2PFfh149m8I3p8Oa+HisA5CM45tmJ6H/ZPX8c173DLHPCk0MiSROoZHQ5DA9C COorx34g+DhrFk11bJ/xMLdSUIH+tUfw/X0/LvXBeC/iRq/g6QQA/a9NJ+a0kb7v uh/hP6e1e1h68cRDmW55WIoOhPlex9R4pcVheF/F+jeLbPz9LuQZFH723f5ZI/qP T3GRW+K1MRuKMVJto20XCxHRUm2jbRcZHRUm2jbRcCOipNtG2i4EeKMVJto20XAj xTJHSGNpJCFVRkk1PtrC8Q3BAitEP3/mb+lY16vsqbka0KXtJqJQur241J2RCY4B 2H9fWvn/AMLXxsY7y1b5XWXJH6f0r6LsLMPhT9xevua+ePiBpMvhbx7foiFbe5Y3 EPoUc5wPo2R+FceWVp1JSc+p1ZhTjGMVHobn9r/7VJ/a/wDtVwn9qt6mkOqt717B 5Z0nibUI7jRnjfBYupT2Of8ADNcxoV9c6Zr1he2bEXEM6MmO5z0/Hp+NVbi6kuXB c8DoPSu8+HHgi61W/h1i7QxWNu4eIsOZXHTHsD1P4euMq1aNKDnM0pUpVZKMQ+NE cKfEW4MQG5oImlwP4tuP5Ba9u+Auk/2d8M4Llsb7+4kuOnIAOwD/AMcJ/Gs288P2 d8Wa6tba4ZupliDE/iRXSeHNdGi29vpc0CR2USiOLYuPLUdPqP1+tcNHNKU3yvQ7 auXVILmi7ne0UisrqGUgqRkEd6WvTPOCiiigAooooAKKKKACimu6xozuQqqMknsK 4XVvEl3qMzQWLNFbjjcOGb3z2HtXPiMTChG8jehh51pWidde6xYWGRcXKKw/gHLf kK5DWfEsuqqbSzRo4D94nqw/oKyUtFBy5LGtSx08SDew2x+g714lXMatf3IKx61P BUqHvz1ZDptgZGC4+Qcu3rXSLhVCjgAYFQoqxqFQAKOwp26nRpqkvMmrN1H5Em6k bDKVYZB4INR7qN1auRnynOalZ7HZAOnKH2rwH4keGv7K1X+0raPFpdsSwA4STuPx 6/n6V9K6hEJYNwHzJz+FcL4r0SPWtIubJ8DzlyjH+FxyD+f9a5sPV+rV7fZZ01af 1ijbqj5303U73R9QhvtPuZLe5ibckiHBH+I9u9fRfw6+KVr4sC6bqQS11dRwAcJc D1X0b1X8R6D5tngktriSCZCkkbFHU9QRwRSRSyQSpLC7RyIwZXU4KkdCDX0jSkjw LtM+2wKdtrzX4VfEdfFVoNJ1SQLrMC5DHj7Sg/iH+0O4/H1x6aBWL0NFqM20baft o20rjGbaNtP20baLgM20bafto20XAZto20/bRtouAzbXJ6k3m69J3CYH5D/Guv21 xQbzdSuZD3dv515uZztTSPRy6N5tm3aAJbr6nmub8d+CrXxppKwl1hvoMtbzkZxn qrf7J/Tr7Ho0OEUegp+6uOlUdOzj0OipBTumfKmreB/Emi3DRXekXRA6SRRmRGHq GXI/rS6Z4F8T6vIEtdFu8H+OWMxJ/wB9NgV9V7qXdXof2lK22pxfUY33PLPB/wAG LPTpUvfEUkd7OvK2qZ8pT/tE8t9OB9a9GubJIIwYVCxjjYOij2q8DTZzmB8+lefi qzrJuZ10YKk/dMkCmTwCWEjHzAZFWAtOC14vtLO53uR0Hg++a50toHbL27bR/unp /UfhXRVwnhab7J4glticLMpAHuOR+ma7uvtMBV9rQTPncbT5Kzt11Ciiiu05Qooo oAKKKKAOf8YXLW+i7FODM4Qn25J/lXIW6BIV9SMmuq8bJu0iFv7sw/ka5uIboIz6 qK+ZzibVWzPey2yo38xK30wqKo4AHFYZWtK1m8yIKT8y8GuPCVEm0dGIV0mW91G6 os0m6u7nOXlJd1JuqPdSbqOYfKSFsjFYd9bYLx491rX3VDcxiZOPvDpWFZcy03Rr SfKz55+KHh82eprq8KYhufllwPuyD/ED8wa8+r6c8QaNb6rp89pcoTDMNrY6qexH uDXzprmjXOg6rNYXS/Mhyr44dezCvZy7FKrT5Hujzcfh+SfOtmRaVqd3o2q22o2U pjubeQSIw9R2PqD0Ir7F8N61D4k8OWGrwABLqIOVBzsboy/gwI/Cvi6vpv4Dec3w 6bzc7BfSiLP93C9Px3V3VFpc4oPWx6ZijFSYoxWFzUjxRipMUYouFiPFGKkxRii4 WI8UYqTFGKLhYjIwCa4KzO55W9TXd3TiKzmkP8EbN+QrhrEfIx9TivJzSWiR6eXL 4mbAbil3VCDTwa872ljraJQacDUYp4qXVIaJBUdw3yBfWng1A53vnt2rnrV7RsKK 1IgtPC04LTwtedKZo5GdPI1hqdteqMhWBI9cdR+Ir0WCaO4gSaJgyOAykdxXEzW6 3ELRv0Pf0p3h3VZNLvP7Nuz+5dvkY9FJ/oa+iyTMIr91I4sZR9rHmjujuKKKK+rP GCiiigAooooAxfFcXmeH5zjJQqw/MVyVl89nGfTj9a6/xPMsWgXOerAKB7kiuU06 MixQnvk/rXy2ftRkmezl7apP1HFaFLRtuXg1OUppSvn41bao7ua5YjlEi5HXuKca qAFTkcGpkl3cNwa76eLvozJxtsPNNyacaaa6VWBCbqN1IaaaftENIr3UQYFgOD94 VwfjTwhF4hsBECsd1HzBMw4Hqrex/wDr16Eao3EIYFCOD0PpSjVdKanA15VUi4SP MdD/AGfNSuZ4pdW1e0jszhiLTc7uPQEgAZ9efpXvWkaRZaHpNtpmnxCK1tk2Iv8A Mn1JOST6muf8Pao1pP8AYLhvkY/uyex9Poa6zdX0NLEe3gpHiVaHsZcouKXFN3Ub q0Mx2KMU3dRuoAdijFN3UbqAHYoxTd1IzhFLMQqgZJPAAoAzPEc/2fRpQDhpCEH4 9f0zXMWce2BPfmjU/Elh4im8jS7hbmC3lMbzJyjPgcKe4Geo45q0qAAAdBXz2aVf 3nL2PYwceWlfuOFPFNC04CvIdU3Y8U8UwCngVk6xmxWPGKQLTgtOC1zzq3ZN7DQt PC04LTgtYSmS5DQtUtVtBNamRR88Yz+HetILUN9KlvZyu5H3SAPU0UaslVi47iUn fQ2/DWoNqGjxtI2ZYz5bk9yO/wCWK165rwVC8elSyNkLJKSvuAAM/wCfSulr9Rws pSoxct7HjYiKjVko7BRRRW5iFFFBOKAOQ8bTsxs7NT95i5Hv0H8zUUcIjjVB0UYF N8V8eILKRvubV5PThjmre2vguIqr+sWZ7VD3aMbFcpTSlWClNKV4SqmqkVylNKVZ KU0pWqqlKRCGK8HkU7IPSnFKaVrohiGh3QhFMNP5pCK3WIGiMiopVyKnIpjDNX7a 6NEzNvLffHvA+Zf1Fc4PilceD9ZGm+I4pbrTZhvtb2MZkQd1cfxY9euMZyTXZFK8 v+K2kJP4ekuAP3llIHU/7LEAj9Qfwr1spxNqvI9mYYyHPSbW6PZ9E8SaP4jtftOk ahBdx/xeW3zL/vKeV/EVqZr4ctL260+4W4srma2nX7skMhRh9COa7bSfjH400oBW 1FL6MdEvIw//AI8MMfzr6d0ux4an3Pq3NGa+d7b9oXWlx9q0Wwl9fKd0/mWqSX9o fVD/AKrQbNf9+Zm/oKn2bHzo+g91I8qRozyMqooyWY4AFfMeofHXxheZFsbGxHYw wbj/AOPlh+lcVrPinXfEL7tW1W6uhnIR5DsH0UcD8BVKkwc0fSXif4x+FvDoeKC4 /tS8HSK0YMoP+0/3R+GT7V4X4y+KHiDxkWgml+x6celnbkhT/vnq348e1cVViwtz d6hbWw6yyqn5nFWoqKuTdydj6E+H2mCx8OadEVw3k+c/+83P9cfhXahaz9HhVYnK gADCgegFaoWvgcdWc60mfRL3YqK6DAtPC04LTwtedKZLkNC04LTgtPC1jKZDkNC0 4LTgtPC1lKZDkNC07GKo3uqQWeVB8yX+6p6fU1Uis9U1kgyN5FufXgEew6muzCZd XxT91aA1Zc0nZFi71m3t8rF+9k/2TwPxpbDRL/W51uL4tDbA8LjBI9h/U1r6boll YEOE82Yf8tH5x9B2rbR6+vy/IaVC0p6s46uMS0pfeSQwx28KQxKFRBhQOwqSmq2a dX0KVlZHnN3CiiimAU1qdSEZFAGD4h0k6paDy8CeIkpnv6iubg1eWzP2a/hcMnG7 HP4+v1rvHWqdzaQ3K7Z4UkHYMucV5OYZVSxmstzsoYrkjySV0c8mq2MnSdQf9oEV Os0En3JY2+jA1JN4b0587YWQ/wCy5/rVCTwtb/8ALOeVf94A/wCFfO1OGJr4JHUs RQfVovFaaVrKbw/dQ8wXnP4r/LNMKa3a9/NUe4b/AOvXHUyDFQ21NYzpy+GSNYpT StZsWuFH2XcBQ9yo/oa1IZ4bld0MiuPY9K8urRrUX76LalHcYVppWrBWmlKzVUFI rlKaUqwUppStVVKUiuUrzv4oXCxeF9TzjLCOMe5LL/8AXr0W6mS2haR/wHqa8/8A FHhs+K7SO3mu3giEvmvsUEucEDr06mvdyWnKpWUuiFWny0pM+eKK9og+FGhQkGWS 8nPcPIAP0ArWtvBOgWePK0q3JHeQeZ/6Fmvt3UR4XKzwGp1srpl3LbTFfURnFfRM Wl21v/qbeKP/AHEC/wAqm+y+1T7TyHyHzbJBNF/rInT/AHlIqOvpb7KCCCoIPYiq s3hzSrn/AF+mWkhPdoFJ/PFHtPIOQ+c61vDGB4r0jIyPtkX/AKGK9ok+H/hqc5fS Yx/uO6fyIp9v8PPDdtcRXEOmlJYnDowuJOGByD96iU04tDgrSTO40gZtG/3z/IVp BayNHm2TPbucbuV+tbYWvzfGp06zTPenLW40LTwtOC04LXnymZOQ0LTgtPC07GBk 1i5kOQ3GKxLzUZruf7JYAnPBcd/8B70ahfyXs32Ky5B4Zh3/APrVpadpyWUW0cuf vN6//Wr6TJ8ndZ+1qrQVSoqMby36Ij07RILbEk2JZevPQfQVtLUaLU6LX3FKlCnH lgrHl1KsqjvJkiGrCVEi1Mi1sZkyVKKjRakpiCiiigAooooAQqDUTR1NRQBSeOoW irRKg0xoc0rDMtovaoWirVaH2qFoPalYLmNcWUU6bZY1ce46Vjz6E8beZZzMjDoC f611jQe1RNB7Vz1sNTqq00b08RUp/CzlBf6pZjFxB5ij+Ij+o4qVPEFuQPMhkU+2 DXQtb+1VpNOgkJLwRsfUqDXiVuHcPN3jodSxkH8UfuMs65Z4ziQ+22q0uu7vlt4G LH+9/gK1jpFqDkW8f/fNOWyjj+5Gq/7oxWNPhulF3kyvrlNbROdNvdXknmXJIHZf /rdqmNrgYA4rcNt7Uw23tXu4fCU6EeWCOWriJVXrsYZtvamm19q3Da+1N+y+1dHK Y3MQ2vtSfZfatv7L7UfZfajlC5i/ZfanC19q2Ra+1L9l9qLBcyBbe1PW29q1hbe1 OFt7UWC5g3NlIMTQ53rzx1q/YarFOoSYiOX34BrSFt7VWudEgustgxyH+Je/1FeN mWURxS5o6M7aGKSjyVPvLgFPArFGg6hH8sF7he3zMv8AKlGg6nNxPejb/vM36V80 +HMS5WOjnpfzmhc6ja2YIkkBb+4vJrIe4vdbkMVupjtx94/4n+lalp4YtojumLTH 0PA/KtmO1WNQqIFUdABgCvYwHDkKTU6urMZ4qnD4NWZen6XFYx4T5nP3nPU1orF7 VaWD2qVYPavqIU4wXLFaHBObm+aRWWKpljqwsNSiMCrsQQrHUypingYopiCiiigA ooooA//Z X-SPOUSE:Manuela Graf X-EVOLUTION-SPOUSE:Manuela Graf item1.X-ABRELATEDNAMES:Manuela Graf item1.X-ABLabel:_$!!$_ item2.X-ABRELATEDNAMES:Manager item2.X-ABLabel:_$!!$_ item3.X-ABRELATEDNAMES:Aufsichtsrat item3.X-ABLabel:_$!!$_ item4.X-ABRELATEDNAMES:Barbara Jonas item4.X-ABLabel:_$!!$_ item5.X-ABRELATEDNAMES:Dominik Maller item5.X-ABLabel:_$!!$_ ROLE:CTO ROLE:Vorstand X-MANAGER:Manager X-MANAGER:Aufsichtsrat X-EVOLUTION-MANAGER:Manager X-EVOLUTION-MANAGER:Aufsichtsrat X-ASSISTANT:Babsi X-ASSISTANT:Dominik X-EVOLUTION-ASSISTANT:Barbara Jonas X-EVOLUTION-ASSISTANT:Dominik Müller BDAY;VALUE=date:1971-06-21 X-ANNIVERSARY:2000-01-01\, Testfeier X-ANNIVERSARY:2003-2-2\, Blafeier X-EVOLUTION-ANNIVERSARY:2000-01-01\, Testfeier X-EVOLUTION-ANNIVERSARY:2003-2-2\, Blafeier IMPP:aim:balbala IMPP:aim:hakunamatata X-AIM:balbala X-AIM:hakunamatata EMAIL;TYPE=INTERNET:sven@andresen.de EMAIL;TYPE=INTERNET:andresen@andresen.de TEL;TYPE=WORK,VOICE:+49 89 11 11 111 TEL;TYPE=WORK,VOICE:+49 234 222 222 TEL;TYPE=WORK,FAX:+49 7373 73 TEL;TYPE=PAGER:+49 160 073 727 272 TEL;TYPE=PAGER:+49 2626 26 TEL;TYPE=CELL,VOICE:+49 39292 82 TEL;TYPE=CELL,VOICE:+49 7272 722 TEL;TYPE=PREF,VOICE:+49 12 34 567 TEL;TYPE=CAR,VOICE:+49 8292 38 383 TEL;TYPE=HOME,VOICE:+49 7327 272 727 TEL;TYPE=HOME,VOICE:+49 7272 7282 TEL;TYPE=HOME,FAX:+49 1010 1 item6.TEL;TYPE=VOICE:+49 8373 6262 item6.X-ABLabel:_$!!$_ item7.TEL;TYPE=VOICE:+61 27 28 73 246 item7.X-ABLabel:_$!!$_ item8.TEL;TYPE=FAX:+49 9382 3424 item8.X-ABLabel:_$!!$_ TEL;TYPE=ISDN:8797 TEL;TYPE=ISDN:98732947234 TEL;TYPE=X-EVOLUTION-RADIO:+49 88 298 723 498 32 TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 TEL;TYPE=X-EVOLUTION-TELEX:+49 2763 382 882 28 82 TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 TEL;TYPE=MAIN:+49 6237 623 723 84 76 TEL;TYPE=MAIN:+49 9324 32 479 234234 TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 TEL;X-EVOLUTION-CALLBACK:+49 7363 6363 TEL;TYPE=MODEM:+49 8383 73 723 TEL;TYPE=MODEM:+49 7363 6363 TEL;X-EVOLUTION-TTYTDD:+49 3377 37 373 TEL;X-EVOLUTION-TTYTDD:+49 8378 33 TEL;X-QUICKDIAL:13355 ADR;TYPE=WORK;CHARSET=utf-8:PO 373;Andresen AG\, R&D;Messegasse 7;Passau;Ba yern;94036;Deutschland ADR;TYPE=WORK;CHARSET=utf-8:6266 AA;andresen Holding\, Geschäftsleitung;Wei senstraße 13;Irgendwo;Niedersachsen;34332 ADR;TYPE=HOME;CHARSET=utf-8:;;Weisenstraße 13\r;Irgendwo;;34332 ADR;TYPE=X-OTHER:;;Irgendwo;Nirgendwo;Sonstwo;0000;Antarktis ORG:andresen AG;R&D;;XXX\, 033 ORG;CHARSET=utf-8:andresen Holding;Geschäftsleitung;;-\, 0223 X-HOUSE;TYPE=WORK:XXX X-HOUSE;TYPE=WORK:- X-ROOM;TYPE=WORK:033 X-ROOM;TYPE=WORK:0223 LABEL;TYPE=WORK:1. Stock\, links LABEL;TYPE=WORK:oder rechts URL;TYPE=WORK:http://www.andresen.de URL;TYPE=WORK:http://www.andresens.de item9.URL;TYPE=HOME:http://www.zuhause.de item9.X-ABLabel:_$!!$_ item10.URL;TYPE=HOME:http://www.andresen.de/~andresen item10.X-ABLabel:_$!!$_ X-BUSINESS-CATEGORY:IT X-BUSINESS-CATEGORY:Development KEY;ENCODING=b;TYPE=X-CERT: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXlXZ0F3SUJBZ0lK QUpUeXNHNDV0V3BZTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd0NRWUQKVlFR R0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFTk1Bc0dBMVVFQnhN RVEybDBlVEVoTUI4RwpBMVVFQ2hNWVNXNTBaWEp1WlhRZ1YybGtaMmwwY3lCUWRI a2dUSFJrTVF3d0NnWURWUVFMRkFOU0prUXhGakFVCkJnTlZCQU1URFZOMlpXNGdR VzVrY21WelpXNHhIekFkQmdrcWhraUc5dzBCQ1FFV0VITjJaVzVBWVc1a2NtVnoK Wlc0dVpHVXdIaGNOTVRBd05qSXpNRGd5T0RFNFdoY05NVEV3TmpJek1EZ3lPREU0 V2pDQm16RUxNQWtHQTFVRQpCaE1DUVZVeEV6QVJCZ05WQkFnVENsTnZiV1V0VTNS aGRHVXhEVEFMQmdOVkJBY1RCRU5wZEhreElUQWZCZ05WCkJBb1RHRWx1ZEdWeWJt VjBJRmRwWkdkcGRITWdVSFI1SUV4MFpERU1NQW9HQTFVRUN4UURVaVpFTVJZd0ZB WUQKVlFRREV3MVRkbVZ1SUVGdVpISmxjMlZ1TVI4d0hRWUpLb1pJaHZjTkFRa0JG aEJ6ZG1WdVFHRnVaSEpsYzJWdQpMbVJsTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVB QTRHTkFEQ0JpUUtCZ1FDdEtPWnJBOXBjdjJWUVpkSEg4YmhhCmZqMlZWMW9Hakxj Tkt3MktWVkJ6anphQVlyaU9HcnBNWDdhcW1oL3pjNHhBMTVDc1JJYjJoQXpPcDlT eldvQ00KbXhZcFN5eG8rbUJHUGRYOVcvTStYcStSYUtGSURpdHZyL0xBb2I5N0ov eWp5R0JDYU4vdExvdG9ZN3F5TjAxUQpWTkRYNkJkcS9GZTFjcUdhcnFvdzNRSURB UUFCbzRJQkJEQ0NBUUF3SFFZRFZSME9CQllFRkhNaFBPR255aENtCmxWcHlCZHhC TVczZ2drbS9NSUhRQmdOVkhTTUVnY2d3Z2NXQUZITWhQT0dueWhDbWxWcHlCZHhC TVczZ2drbS8Kb1lHaHBJR2VNSUdiTVFzd0NRWURWUVFHRXdKQlZURVRNQkVHQTFV RUNCTUtVMjl0WlMxVGRHRjBaVEVOTUFzRwpBMVVFQnhNRVEybDBlVEVoTUI4R0Ex VUVDaE1ZU1c1MFpYSnVaWFFnVjJsa1oybDBjeUJRZEhrZ1RIUmtNUXd3CkNnWURW UVFMRkFOU0prUXhGakFVQmdOVkJBTVREVk4yWlc0Z1FXNWtjbVZ6Wlc0eEh6QWRC Z2txaGtpRzl3MEIKQ1FFV0VITjJaVzVBWVc1a2NtVnpaVzR1WkdXQ0NRQ1U4ckJ1 T2JWcVdEQU1CZ05WSFJNRUJUQURBUUgvTUEwRwpDU3FHU0liM0RRRUJCUVVBQTRH QkFGcnVidGpoWVB1RERHVVpQRTQraUo2a3FmdEtXWDFJVzdmTXdtc3BRUWt5CitX UThSL3AxbURrc3ZEQ3hDYWp2YVduSVI2dGIwbmtCMTFFNmQ0dDhkMkxWTTE4M3dD UWJtMDRJS05mdkRKOXQKUE4vdHBVTkJrc0VkaXBlMEM1SEgyMnY0RitSSzVUK1lq M1J6VHZmOTdROVMzTzF3eE5lZkt0NXVUNFFxNUZtdAotLS0tLUVORCBDRVJUSUZJ Q0FURS0tLS0tCg== CALURI:http://caldav.andresen.local/sja FBURL:http://caldav.andresen.local/freebusy CAPURI:http://caldav.andresen.local/access CALADRURI:http://caldav.andresen.local/access X-DESCRIPTION:Beschreibung X-DESCRIPTION;CHARSET=utf-8:außerdem NOTE:Nur so ein Test! CATEGORIES:bla,blubb,test,hihi,oops END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, version, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/andresenesq.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/andresenesq.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/andresenesq.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/andresenesq.vcf' ORDER BY dav_id, property ENDQUERY davical-1.1.1/testing/tests/carddav/2039-REPORT-sync-changed.test0000644000000000000000000000104511743162561021104 0ustar # # We should see an updated sync token here. # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=User-agent: sync-collection changes REPORT HEADER=Content-type: text/xml HEAD BEGINDATA data:,41 ENDDATA REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ REPLACE=/^ETag: "[0-9a-f]+"\s$/ETag: "a fine looking etag"/ davical-1.1.1/testing/tests/carddav/2008-PUT-vcard.result0000644000000000000000000000204611732477137017640 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "70da8e376791d07c9fae3dbda0b40314" Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >NULL< caluri: >NULL< dav_etag: >70da8e376791d07c9fae3dbda0b40314< dav_name: >/user1/addressbook/PHRsMa4mvY.vcf< fburl: >NULL< fn: >zzz< n: >zzz;;;;< nickname: >NULL< note: >NULL< org: >NULL< uid: >PHRsMa4mvY< url: >NULL< version: >3.0< box_no: >NULL< country: >NULL< locality: >NULL< postcode: >NULL< property: >NULL< region: >NULL< street_address: >NULL< type: >NULL< unit_no: >NULL< tel: >NULL< type: >NULL< email: >zzz@xxx.ru< type: >NULL< davical-1.1.1/testing/tests/carddav/2006-PUT-vcard.test0000644000000000000000000000321511704134640017262 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/donald_kelly.vcf HEADER=Content-Type: text/vcard; charset=utf-8 HEAD BEGINDATA begin:vcard fn:Donald Kelly n:Kelly;Donald;;; org:Esposo Designs Ltd adr:;;25 Rintoul St;Newtown;Wellington;;New Zealand email;type=internet:donald@example.co.nz title:Proprietor tel;type=work:+64 4 347 4747 tel;type=cell:+64 2 1234-4321 x-mozilla-html:TRUE url:www.example.co.nz version:2.1 end:vcard ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag IS NOT NULL AS "etag_not_null", version, uid IS NOT NULL AS "uid_not_null", nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/donald_kelly.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/donald_kelly.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/donald_kelly.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/donald_kelly.vcf' ORDER BY dav_id, property ENDQUERY davical-1.1.1/testing/tests/carddav/2004-PUT-principal.result0000644000000000000000000000051411732477133020510 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 59 Content-Type: text/plain; charset="utf-8" A DAViCal principal collection may only contain collections davical-1.1.1/testing/tests/carddav/2018-PUT-vcard.test0000644000000000000000000001176011704134640017271 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/hans_dieter.vcf HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEADER=If-None-Match: * HEAD BEGINDATA BEGIN:VCARD VERSION:4.0 PRODID:-//ALAB//NOSGML Version 0.9//DE REV;VALUE=date-time:20090124123353Z UID:uid=schmidt.1208717693\,ou=Contacts\,dc=andresen\,dc=de X-ABUID:A93F52CB-C15F-1F34-2C49-7A67-0971277F\:ABPerson FN:Hans Dieter Schmidt SORT-STRING:Schmidt\, Hans Dieter N:Schmidt;Hans Dieter;;Dr.;Esq. X-DISPLAYNAME:HaDi Schmidt X-INITIALS:HW NICKNAME:HaWe X-SPOUSE:Maja Schultze X-EVOLUTION-SPOUSE:Maja Schultze item1.X-ABRELATEDNAMES:Maja Schultze item1.X-ABLabel:_$!!$_ item2.X-ABRELATEDNAMES:Barbara Jonas item2.X-ABLabel:_$!!$_ item3.X-ABRELATEDNAMES:Klaus Timm item3.X-ABLabel:_$!!$_ ROLE:Projektleiter X-ASSISTANT:Barbara Jonas X-ASSISTANT:Klaus Timm X-EVOLUTION-ASSISTANT:Barbara Jonas X-EVOLUTION-ASSISTANT:Klaus Timm BDAY;VALUE=date:1977-12-10 BDAY;VALUE=date:1975-11-11 DDAY;VALUE=date:2007-01-02 X-DDAY;VALUE=date:2007-01-02 X-ANNIVERSARY:2000-02-01\, X-ANNIVERSARY:2001-02-02\, X-EVOLUTION-ANNIVERSARY:2000-02-01\, X-EVOLUTION-ANNIVERSARY:2001-02-02\, X-EVOLUTION-BLOG-URL:blog.diesistmeineip.de item4.URL:blog.diesistmeineip.de item4.X-ABLabel:_$!!$_ URL;TYPE=WORK:http://www.tu-hh.de URL;TYPE=WORK:http://www.telekom.de item5.URL;TYPE=HOME:http://www.hadi-schmidt.de item5.X-ABLabel:_$!!$_ IMPP:aim:477826262 IMPP:aim:aaab3ttebb3 IMPP:icq:972398472394 IMPP:icq:8972364872634 IMPP:ymsgr:mailaddr@yahoo.co.uk IMPP:ymsgr:yahoo@yahootar.bla IMPP:xmpp:jabjab187383 IMPP:xmpp:jabberwookie@starwahrs.co.com IMPP:msn:blablubb@langedomain.org IMPP:msn:738246832746 IMPP:skype:hadi.schmidt-skype IMPP:skype:askjdhasd IMPP:ichat:ichatichat IMPP:ichat:second-ichat IMPP:nm:netnetmeetings IMPP:nm:vielleicht@eine.email.de IMPP:gtalk:gooogletalk IMPP:gtalk:googletalk2 IMPP:sip:ipphon-addr.woauchimmer.de X-AIM:balbala X-AIM:hakunamatata X-AIM;TYPE=WORK:972398472394 X-AIM;TYPE=WORK:8972364872634 X-ICQ:972398472394 X-ICQ:8972364872634 X-JABBER:jabjab187383 X-JABBER:jabberwookie@starwahrs.co.com X-MSN:blablubb@langedomain.org X-MSN:738246832746 X-SKYPE-USERNAME:hadi.schmidt-skype X-SKYPE-USERNAME:askjdhasd EMAIL;TYPE=INTERNET:ich@hadi-schmidt.de EMAIL;TYPE=INTERNET:hadi@telekom-d.de TEL;TYPE=WORK,VOICE:+49 9823 9084 TEL;TYPE=WORK,VOICE:+49 234 234 234 TEL;TYPE=WORK,FAX:+49 7373 73 TEL;TYPE=PAGER:+49 2626 26 TEL;TYPE=CELL,VOICE:+49 7272 722 TEL;TYPE=PREF,VOICE:+49 12 34 567 TEL;TYPE=CAR,VOICE:+49 8292 38 383 TEL;TYPE=HOME,VOICE:+49 7327 272 727 TEL;TYPE=HOME,FAX:+49 40 812 387 21 item6.TEL;TYPE=VOICE:+49 8373 6262 item6.X-ABLabel:_$!!$_ item7.TEL;TYPE=VOICE:+49 7272 72 item7.X-ABLabel:_$!!$_ TEL;TYPE=ISDN:4234234235 TEL;TYPE=ISDN:98732947234 TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 349 832 TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 TEL;TYPE=X-EVOLUTION-TELEX:+49 38 288 228 82 TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 TEL;TYPE=MAIN:+49 6237 623 723 84 76 TEL;TYPE=MAIN:+49 9324 32 479 234234 TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 TEL;TYPE=MODEM:+49 8383 73 723 TEL;X-EVOLUTION-TTYTDD:+49 7373 73 TEL;X-EVOLUTION-TTYTDD:+49 8378 33 ADR;TYPE=WORK;CHARSET=utf-8:;Uni Harburg\, -;Innstraße 71;Hamburg-Harburg; Hamburg;21373;Deutschland ADR;TYPE=HOME;CHARSET=utf-8:;;Weisestraße 13\r;Irgendwo;;33443 ADR;TYPE=X-OTHER:;;Nirgendwo ORG:Uni Harburg;;;033 X-ROOM;TYPE=WORK:033 LABEL;TYPE=WORK:1. Stock\, links LABEL;TYPE=WORK:oder rechts X-BUSINESS-CATEGORY:IT X-BUSINESS-CATEGORY:Development CALURI:http://davical.hadi-schmist.home/hadi FBURL:http://davical.hadi-schmist.home/freebusy CAPURI:http://davical.hadi-schmist.home/cap CALADRURI:http://davical.hadi-schmist.home/access X-DESCRIPTION:Beschreibung X-DESCRIPTION;CHARSET=utf-8:außerdem CATEGORIES:uni END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, version, uid, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/hans_dieter.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/hans_dieter.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/hans_dieter.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/hans_dieter.vcf' ORDER BY dav_id, property ENDQUERY davical-1.1.1/testing/tests/carddav/2030-REPORT-addressbook-query.result0000644000000000000000000000132411633117640022526 0ustar /caldav.php/user1/addressbook/andrew_mcmillan.vcf "24bae2a7f81c0a79413a656c06d8326b" BEGIN:VCARD VERSION:3.0 UID:pas-id-4BB0719600000000 EMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:andrew@mcmillan.net.nz EMAIL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK:andrew@morphoss.com N:McMillan;Andrew;Watson;; FN:Andrew Watson McMillan NICKNAME:karora END:VCARD Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK davical-1.1.1/testing/tests/carddav/2030-REPORT-addressbook-query.test0000644000000000000000000000151011633117640022164 0ustar # # Request a REPORT # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=Accept: text/xml,application/xml HEADER=Content-Type: text/xml HEADER=Depth: 1 # HEAD BEGINDATA karora ENDDATA davical-1.1.1/testing/tests/carddav/2014-PUT-vcard.test0000644000000000000000000006435611736745334017313 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEADER=If-Match: "3419498c6e5eae71dc1704f1787faf1c" HEAD BEGINDATA BEGIN:VCARD VERSION:3.0 N:McMillan;Andrew;;; FN:Morphoss Ltd ORG:Morphoss Ltd; EMAIL;type=INTERNET;type=WORK;type=pref:andrew+davical@morphoss.com TEL;type=WORK;type=pref:+64272332426 PHOTO;BASE64: /9j/4AAQSkZJRgABAQAAAQABAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAA AqACAAQAAAABAAAA2qADAAQAAAABAAAA2gAAAAD/2wBDAAIBAQIBAQICAQICAgICAwUDAwMDAwYE BAMFBwYHBwcGBgYHCAsJBwgKCAYGCQ0JCgsLDAwMBwkNDg0MDgsMDAv/2wBDAQICAgMCAwUDAwUL CAYICwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwv/wAAR CADaANoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol JicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW l5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3 +Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5 OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan qKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIR AxEAPwD6Nuf2mfHfju2aDwb488cWzx/6uf8At+6AY+/7zJFR2fxp+IXhvwg7a18U/Gmoar5x3+R4 kuXWL0UjzOOPXBr5s+FF9c/EnUp9GfUptK0bSxC2rtA5S5uWlz5dsjj7gKqWcj5sYA6mvdE/Zo8F eD7iGf4TW82lXd1bnzw0ZKSknuScsepyfwruhR5IObdj1YzVWoqcUi6/7TPxJzgfEHxx/wCD66/+ OUwftMfErP8AyULxz/4Pbr/45XOa3oF94akxrEOIz0nj5jP1/u/jVIR7lyvO78qyjKMlc3qYdxvd HdaN+1f8StJug7eO/F9yp6pNrNy4P5yV5t8eNG+LvxjuZtX/AGdf2gfjF4U8QyAltGn8b6mdNu2/ uxHz/wByT2xxWjHHnHr2q/o9jNdX0EdgG86RwECjkkmuiKUnoTQrTwdT2lPR+mn4mJ/wSb8eftBS a/8AFHUP2iviL8Ur650RY9MttP1nxTfXsUM+Gd3RZZWCnhBkdj719g6b8VvGlhpdrBP4u8TzTIix s76pOS7dyTvye9VNC8OQ+HPDkjiKOO+1N42vJFHM8ioAWb1OEUUxIPMu0DAYUFzj/PvUVYq6ujqq VvrlWeIlFJvolotDWf4t+Ln+VvFniZWB4xqk/P8A4/Ug+MXi9WVp/FPiJGXgMNRmKN/vLu/WsWS3 8wncAcfpQLd05ALr6d6zi+RidGEuh0bfFnxVdFQfFPiOCU/dxqc2x/od9Zmp/EbxvExNv4u8Uq2f unVZ8H6HfVBLcoD9mIIPWNvun/CrNrNkeVKpcH/lk/3h/unvW6cJoydFRW2hRb41eNoXKTeLfFAY dc6pP/8AF1Inxt8ZZw3i3xP/AODWf/4up7/w9DqcZa3+bHVejpWBfaDJZFiQWQHrjkfUU+VLoR7J PVI34fjV4w7+LPEx/wC4pOf/AGerEXxp8X8Z8V+JD/3E5v8A4uuNCkdPpUsUhU80WRm6S7Hbw/GP xaw+bxT4jz/2E5v/AIqrEPxf8WHk+KfEJ+upTf8AxVcRFcDHB5q7a3fQtzVLl7Gcqa7HaRfFrxUe vifxCf8AuJTf/FVZi+K/ik9fEviD/wAGE3/xVclBIp+7VuCQE/N+dXyx7GMoHVR/FLxPj/kZNf8A /BhN/wDFVYh+KPiZ/wDmYtd9P+P+X/4quYj6DPSrERyevWqjGNjNxTOoi+JviQn5vEGt/X7fL/8A FVdtviV4hB/ea9rR/wC32X/4quWgPTPrV2AZaq5Y9jNrodXB8RdfOM65q5/7fJP/AIqr9t491xvv 6zq343kn/wAVXMWw5BxzWhaL0zVKMX0IsdFB441pz/yF9UP/AG9Sf41dHjDWMf8AIW1P/wACn/xr DtFwcVc2j0rVQj2GnY/OHVP2YdL8S+K9X1fwlqV3obaldRy3EMKgxTPEuI5MdmCtjivUPC3hFPDO mpF58t1MFAaaQ5Zq+dP+CbPxj8bfFjwdf/8AC2rGSwmsHEZSY5dyABkd8GvqWKIk5HcdK8HFe0pS dKTvY+mwcKbgqkI2Kc9ms6lZVDAjBBGQa5HXfhTBNK0uhk2kpySnWNj9O34V3XkEnLUNB5gOBXKp OOx6TSkrNHjd7oN7os23VoWT+645U/Q16d+zx4Xh1DVbi7lQSS2ygcjiInoPrjn2zWpdWMX2Vjcq rKoJIIyK7L9n7w4tv4PF15YWTUJWnOBjIJ4/SvSwdR1JO62PLx1CNFKUXubmux+UbaH/AJ5xmRh7 scD9BVG0hy87nsFQfz/wpbXV28Satq8xCiC3vntICP4liAUn/vsP+VXbe3H2BWI5lZm/XA/lVVZc zuYULOKt1Kiwk47U9bc9+lWktznnr0p4t+fasWdKKTWYPQEHsRSSW2VxcqWBPDDtWkLbdinfZwRg jr2qLlLYzdkkBBfdKqjhwf3i/j/EPrU4Md9HuusMBx5qDAHsw7VZax7xnn0PSoXtlMv7tjDORgEf xfh3FWqzjuQ6S6GTq/hMffhCoTyCPun/AArDudPktZNtwpUn9a662vXiupYHAjZAGOeYnB6e6Hg+ 1Sz6XDqSFCoWQjPlN391P+FbxkpK6MXE4kRnrTo5Cg4Na2p+HZbJ8wgso7H7w/xrNKYb09qG7EOH cfFetGPmq5a6wA2HNZjdajdypOKpTM5UvI6u01RXxzxWjBOGHymuCjvGjbIY8e9XLPxRJbt8+SB3 rRTMHQfQ723lGcVo2pyRj1rjdP8AF8MoxI20j1rX0fxlY3GrW9nFMrXFw21FHOTWikcs4NdDsLUE 4FaVmmG96q29o6kAjB/lV61gKkE1Sepm4GhZrk1dC8dTUFlEABV8R8VvF32Iasfin4F+Mviz4KeG NGk+H6x+IIZbqSDUPPP+lS7chTGf4x8jNj0ZcZJr6y+Dn7QmifFDwVYajcXEOmXt1K1q1ncOEl89 eGRVPJ618XeJLa5l1vwzofhNngmskikiGcOssxQw5PYiMWIP/XRq9A+GusmPxHqt34Us7Fl8PJLN Y30sQeYqWSKIZPeQ/Zj/ANtmrPHYenWjzJa738r2V/Xp1sZ5bmtWg+WWq2/C/wArep9qIgYZ7HpT lgBA7V4X4C/bIiuLaYeM7Tb5MHnrJEcb0yApIPdt0Z/4GK7o/tSeB9K0ywn8a+INM0Ga+IUW19Os csTEKcOP4eHXk4HzCvCq0J03aUT7Khj6FZXU0dT4oZotNaOHO+4IiXHqxx/WvbPBmmp4f8O2yHCp Zwbj+AzXjHhyW28c+NNCTRrm3vLORzdCWGQSI6qOCGBIIya941Rfsfh6bYELTAQqGGQc9f0BrtwU eWm5PqcmYz55qKfQ4/S9HXSNHWGyXH3pCOu53Jdj+LMavwxr9miSM58tAv6VmrFdaTwrEoP4JGLI fo/Vfo2frV2z1CK6lEcwaCY/wPwW/wB09G/CokiadtEWRDzzUq2xxU0cZ/j+Ye3Wp0jDdOahnQkV RbZ+7Tzb46iraRYwAPxp6w57VDKSKYtSBk44rPurbzPEFqP7kbsf0H9a3GiwORXLeJvHOl+D9cNz 4ou4rS3WDYHc9WznAHU9KiWhVuhctbbN/ftIMhSi/kuf601rMqn+j42/e8tugPqD1U/SrOg39vrl hNeaRKJ4Lli0bjIBGAO/0q7NYrJz0Ydx1ojJrVCSUlqZf2oSjZdo0g9D/rU+n94frWfqnh2O8iMt kQ4/vKOR9RWvdWIYf6Qu4Kchh1FU5kkt28xSx/6aJ97/AIEOjfzreNW/xESpNbHGajZS2Tfvhlex HQ1nTXOMktiut17UopoSJlQMeN68o31HY/WuG8QWcltuaJsL125/kacpWBUXJXHT6moB3NVKfXVQ nJFc5qWvi3cqzfN0x3rLudVMsJk1GQRxDnk4/OodRomVFHTXXiySQlLQjjqx7f41q/CHxhZ6b8UN J+3O00gnyyj5mYYNeSan4vkv3MGhkxx9DLjk/wC6K2/g8v2H4g6Q7kkm6QMxOc5OOv41yyx3K+WJ r/Z/uuU9D74tLa18RWS3GjSK6n07exHaozYNDJtkXDVyOkzXOjXXnaVIY37gj5XHoRXeaB4ks/FK rDeKLe8A+6T191PevTw+LhiFyvSR5OKwUqGq1RFbQlT7VcGcd6ln017A/P8AMh6MOn4+lHk/Wu5X WjR50j8kdH8T/Dj4va02rarDL4T8SSROq3cTb7fzWjKLIVPdSVYdOUX0q7c/s9at4G+GV4vhWW31 UareoBdWJ3rFAikRFsdMPJGx9BbD1FfKUvh3xF4P+PieA9A+0a3eSaWmprmLaVBRJPKPPLBZYsnj lj6V6Z8Kv2mNT8E6jHFYXl3p1ypAe1mBAI90Pak17WOj00+7p6Hnxw0FLnirPXbbXd22v59ToTpE N8jxuDDBf3KwjcMeXbQqGc/grj8bc+lfLPxE8L6v+0J8TfE+tw38tuxuTGtu0IljfZl2DDrwZNnB H+rHpX3lF8WvBvxn057T4macdMvpYZLddS08BSgkVlYlehyHYf8AAjXndn+xHrvw5tJtQ+EWo2vj HTpvMkeS3G26G9izF4ick5P8Oa7MG17VuTtppfv6/wDDGeLpclDkaum1e2rUVe+nm30PO/2I/iHr /wCzJNa3HgXVXvrq3R1u9PnkY20pZiflQ8x44AxxgfjX6wW3iLUfF1j4EfXbQadeXemNrN/ao5dY HaNEWPdgZwZH7fw1+fn7GnwktvFnxxbRtcgCXWryRwuHj+ZERi8gwRw3A/I1+m2vWytr8/kooW3R LZOPuhRkj82P5Us2jy8seTll18/61N8jptuShV56d9PLuvyMSSIlm2oXVU3Ed+uP8aqHSLe+RhAQ ATkxsuVz9O31GK3I7YpHKx6swUfgM/1qCewSc5cYYdGHBFeFdp6H1qSluZEX2rSXAB3Rj+GViVx7 SdR9G/OtO11GO4kCNmKYj7j8E/T1HuKjlml0xHN0BNEP4h97H071yni/4haZpVkDFdwQvJIUW2kX JY4znacbfqMUpW6jV4bHb31/DpFlLc6pNFBbQKXkkdgFQAZJJPQVx2h/tLeDfEOrrYaTqqy3EpIh JgkRJ8dTGzKA4A5yCa+Ov2t/245hpmr6KmV02yeGK9dwZVILKZArj+Hy88EEnJ9K8W8a/tpTvpmn DwO9nYOBvjvrhzJ5mekrL0XGfU5z2qGmmS6rufoV8X/2xfBHw8e7sLzxDp39o2S77i3WYGWBcEkk Dp06V8I/FL/gojH8Q/Gd5DpKxX1lbzRyC3dWdn43Abh04+nPrXwT8cf2ttQ8K/EvVYvFN4ur3l4j JNNHhI5VLMygBc8EuxOf6V4NN+07rei3k62Ny9rDOACI3OSoOVBPfHvV+yja8tjOWJSXxWufvR+y r+1Nc/EbxPFENRl02xihE0Vi0gJmLMCxYjgjB6HHJB7V9gaB4lsfEtuW02aOR1JV1DAlSOxxX83f wf8A25byw02wNxqE9pc2S7VklzjHbkc49vevtP8AZc/4KKeIW1bTyusWZ3EbjaQlVfngMp+979Kz lh/ZJtbGscRe3+W6P17ltwVyAD71QvLTZkxcZ7V4R4G/bot/FWmWokSFbl5PLkEf7wg9ztyOPzr3 Lwz4ih8W6LHdWjI6yruBUEBh6gHkVDi46s6ozUjkfE0eLolD5Uh68ZDfUd643xBftBG0cwEe7sT+ 7b6H+H6Hiu/8TW4ac+YM/WuB8WWhIZc5Ujoa5XNwZ3xgpRPLfHviy00m9UbWe4wQI9vP5+lcrJe3 fiObdqTAIOViXIVf8TW78Q9OV3tGAztkdCfTpxVHTbbaBtyccVx4qtJy5U9Dow9GKjzLclsbMRqM D61veFGNj4jsJo+PKuEb6YYVn28JA5XNXbRjDcowAypB/KsqOjQq12mfbkMO4ZxwwzTmstxVo8qy nKkHBB9Qak0c/adKtZRyJIlYe+QDVsR4H0rqSsea1ojY8LeOntALbxKPNiPyiXGf++h/WurSw0yV AyTJtYZGJeMV555IYncKT7IO3HtnpXo0swnTXLLU82tl8KkuaDsfjt+zxqsnxU/aP+JPiyX91JbG LQoXA/1ElwxklVT/ALEc8i+32celW774IaD8Tf22fF2teJDJFpXhrTLeG+USfItw2JJOv3QkZlGO P9Sa+gf2bvgx8OvDWmy/8Kr1c6gt/q82t3iXTATzySH5l/75eZR0++PSvKV+Gfifwr8CvFf/AAsW wnsfGnxX8Tz2rw4yYxez+UoUrn5Vga7bI7MK75c1NtR00SPnOV72PP8A4Y/A7xj43+F1r428AWkV 1p2qvLc2+lpNm9gtS7eUxRuWDJtYYycEVteAfinrXgrWgIZL3TL2BsNGwKMD6Mpr6J0fwJeeBdDs oLW3ls4LSNY7eSL7iKoAADA4HQcZB9q0dRi0zxqkafFLR7LVmiIKXuzZcRqP9scn8ciu1Jvrc6lQ a2Z7R+yF4Ai+MOu+HPinrmlxadqtla3NndTImxdSOFWObb/eCmUFu/HpXsUcZuY2ncEG4dpjn/aJ I/QgUfCLxOuu/AeK80uwTS7J4zZ6dGihA8IIiR9oPGTuIHoAe9XbuMQwFY8AAbR/KssS72X9ehvg KMaTk4rr+JmG3K26D+9lvzqhq95FpFq812dqKMk1uXUW18L/AAjA/CvFf2zviJN4E+FV7/YiySah Iu6IxttaIDktn6ZFcTV9j1XLlVzzj9qf9tuD4TweXplncXUkMu2cx4PljB4/3uOlflX+2J/wUa+I +seNNZv/AAT4uuItFd2W2gi0+JWgQ4+QyFSSeOSD1H0r6H+Jsmr6zoWoQ65NqH2+4GYYZYSY8MnS Qjq3OSRmvjH42Q6NoPg29efVFEMCPm1aZZSk4bBL9O44XnpnnIqoW5tjCs1zas8/+GX7XviW+8Wy x+OtUlv7a4cSyQ3LkoeMHgnk4x+Vc38Xfj63hq6vLf4d6kXtnMkawyR5EKsQTsbPTsOOlef+DPAO pfEPWJrjSVeC08wlZNuAR7V39p+yrNqcDfblm8wnhvWtJuC6HoYXLcZmFO9OHo3+Z4TrPiC48Q3s s93IXlf5yx/lULIbpPOib5j95T2r3Zf2MrkM7tKY1Xr8pxipNO/Ywvb19sDuT3OzrzWN01dsS4Qz B3cl+J5tompQad9meaIXS4ACbiN3HTjtX0h4G8R6Kh0d9ImS0uvIZJlQ8BvlwPfv1xjArD0v9iTU dPzLZShZkX92JV3oT7is/wAOfATxT4M103N9pjRy26yOMy7ophg8KMdec1q60ZWRU8lxeFsqkfuP tf8AZ98U3hlsJtF1HyNQmcQoYmyQmQDx64yc+2O9fXPwB/aG8Q/DTxpbaLqGvDWrC8Ls0d7AElic EAhWXrnp3HBr8sfgX8VvEvwo8X2qzRCOSbDB2G5kU9NpzgDmvq3wH+0Zp194zsZ9eivNtmPN3uAZ EbI7gYxjPH+NZSiptKxzSUqV0/kfqdc6umqFCHQtLGH2g/Mn1/Oua8U2u7JHoa4n4U/G/SfiHaWt 5pWoWzyugTarhW/EZ/T2rv8AW0JiUsOSK8qrFp6ntUJKUVZni3jrSPscEW9ifNuZnHsCRxWbaL5e 0LXT/EyLNlZMcE+fMufyrnrZMgZAzXDiF+8+R1YXWl95YjJB+Xj1qZPvjp+FNVdp7D8acMbz14NT DdNBUR9v/Dhv7T8AaLOOfNsoW/8AHBW2bQha5v8AZ8uvt/wd0Bic7bYJ/wB8kj+ldutvvU8V22ue Yo+6jMW2/P3pfJx2rR+xkrkDmmm1bPQ0WMZKx+A2mX/jv4WRWF9cWd9LZ3lst7FcW5LOkbM4Uvt6 E+WxA9CD3Fe5fCD/AIKH6nor20fiV4dTjt3DpHeIPMjYcZUnow55616bDYR2WkW7RwpNYRqLi2iI 4a2tUHkD/gf2K3Hv9p968X/4KIfDXRfBPws0i30azT/hIrk2mnW86JiQzyMXkk46ny7aU8/89s19 GsSp2jKP9f12Z8ZHSV1ofXnwy/bN8D/FKJYdRmGi6hMNp34COffsw+tdr468DaInhN9WWezitHG2 O5t3ESu5HyrtPyFj2AKk9ga/Kz4W+ANfbxjouh+G7s3f2+8uIhPMScxRSLEHGPVzx7MK/S39hz4f a5Jd3fh3xFEmteF5ozDqcU+WgO1soyk9G3KGXHIxmtuRN+49dzoVWfLe3kfVWquPB2jeCvDemxIg dT5ijpHHbwgE4/32Srkv7yaNXA5bJ+gGab4o0k3nxJS/lkLfYtNFoqH+FpJPMdvxCxinRYN028/d j49SSf8A61c1Z3k/uO/Cq0SvK3zYY/Svjb9s/wCLhvNTvoPDmp6TEunCWKYSHzJG5wy4+6OmOa+z Lq3Ei4cZ9a/Fj/gq58R/EH7L/iPxdp3gvxTPZxX12b9o5lWWKQSMfkUEZDgjkZIJ578YqPM7I6qk mle2h5b+3x/wUv1Hwbpq6P4VuI/t7ECaMWrxowwQDuLYxjHCnnvXwz4MPiH9qf4kPc+L7uSSxifz Jwo2RL6KqDAz7+leffE3xtf+PvFEt3rV/d6jcztlnmfc2T29vwr6s/Zq8CQeCvBNrEqqLmVd8x7s 5/zitHJUV7u5tk+GeYYr3vgjv59j0XwN4I03w9aw21hbKiRLtA28Cu1stJiZM26qMnnArDsm+zRI zHORjGOldDoVwWQgnv27159Rtn67l9KLSS6Ej2kCIwlQN2PHFdN8PNDtZrxVu4kCdeBWVBpHmlTK uVfnGeldX4Wsi17CsKgpjDc4K1F0j6KlKnCJ6XpPgHTdQsszW8TuThTjoK15v2b7DxFphjlhB342 sAMqfasPw1rn2W+WMlkBO1RnvX0t8HPBEviAQlA8nmAEhRn9KuPvaI4cVGl7N+0St5nyD4+/4Jxy eI/C14loxt9Qs1aSzcIdr9Tt9gTXx58Pfi1c6B8RLzQ/HhuLKaycwSxOv+qdDjbj3P5g1+/OmfDl YNKeO5hV14XDivxL/wCC8HwIj/Z8/ai0/wASeHbVrW18XWLFwowrXMLAN+JV0P4V2Qbtys/LuIcJ Spr29NaXs/8AP9D1L4U/En/hHvEEjaB4nSxv9SgGLZosAtnAzv8Aug+tfbn7PXxv1jxoq6f8QXga /Vf4F2grjCkc98c5r8cP2Y/G8nifWreC0sby+uJmBu2aQMwA6DJ+6o49q/U/9hp5bjw/qs+oLE81 sUSNWkDPbwgk7F7/AHhnP0FY14JwfNujw8LWm6istD1z4ihZtMtyjZ2Xcqn6+lc3bR8DvW54ztjb 6QxY5WXUZXU56ggGsS2YZG2vDxK9/wCR9Bgr+yu+7LCLjhiaeOW5HOeTTUUk8fnSoTkjoRWKKqO5 9h/snXP2v4Kabg58mSWP8nP+Nep2q7+2K8Z/Ys1AT/COWPvb38ox9Qp/rXtNkcqN3Nd55mys+7LM MOcAVN9gB7fpSQD5uRxVsNgU0jJ6H5x3Hw4uf+EztLEWMtrYReTbW6yLx5MI83H1P2bTk+rsPWvk f9vHxoPEn7SWi6Pp7ebH4cs7nXiBypI/cW2T/tC1jIH/AE3961vgj/wVB13RkhtPEdxFqsKYXy7l dsgH41315c/BX9o7X7jV9UjvfCHii9hht2vIm82BliZGjUxk7doMadCMhRmvoHhJRlZ6/wBfefEU 5X/qxyn7JHgR7H4l3lxJEzReGbCLTUJHPnKglk/EvND+Vfq78DfACeBfAekaesapMsCNOQOXkIyx PvnNfI/7Hv7Lf/COTpGviDTPE6ahqpv7m7gHlvIrSGVt0ZPBJEa4GQAor7tCCws5ZXOBFGSSe3Fd OFg4OU5eh1yklCMV5s4e/wDF2kaj4z1Gy0jU7OTUIpR59oZR5sZ2rjjOR8u386fdTCJsX0bRejMP l/766V+WvxZ+KV34k+NXiTxBpl3NBLe6nNLFLE5VggfamCP9lVr0L4Yf8FBfHXgWNbbWruLxBYgA NFfAmTHtIOfzzUzpRqa9S6OM5NJLQ+3/AIg/EFPBrWMEbxPd6nP9ntEkfCu2xmPPsEJ9+B3r+cH/ AILVfG6++KP7ZfieM6ot9o1hdNbWrx/6vcoHmAAddrEqD3xnvX6Kf8FRP+CmsXh/4M6B4j8D6Ze2 eq6feSRtCHAEEkkeElVwMEAqwIKjO6vxT+M/7QeqfGG0tbbxHDYA6fPcSx3EUGyZ/Ok3srkfeAbO OmMmsacHSbk/Q0r4pSjo9DkvCWnrqHjCyjPCvMpOTyBnrX2z8PiFsYVUZCgAc9RXyH8A9AbxL8SL SPqq5d++AP8AIr7H8IRQ2wRnLKiMBXNXezsfUcLQtSlLuztIZkuLbGM7cZOOtbXhyMCZWj3HecAe lcxDqlvJcEWU0ZPQgHGa3vDc88dwAVJSTkcg4NcUr2ufpOB/dJOWzPR9F0P7R+9fkR8le5q94fv1 tb6aSQkAAgDH86zNF8RL9jLuQoC/Mc+1Q+GLs6zeSR4ByxYkdwK57NJntdLt6HrPw80FdZ1QPcnK jawPevtH4K3h0PRVihi+YqqqwHOTXy7+zjoUeqZChdh43E56da+qPhtd20SwKpHlxHO/d9444I+l duHukeZmlSM4ci1sfQXw7tf+EliWPbmKBAc471+UX/B0/wCDUX4a/Di9g2I1rrd0Ax+9tMKgj9Af wr9eP2cdOXWzP9j+6FAGP4q/MX/g6J8Lz33hHwBodjB59zeXN3dLtXeYyFABxXpOnzcrW5+cZxXX s5Um+x+W37Jt9FqUMdqsn2K9sD9qstQjH7xeu63fjDoxGQD0Nfqj+wv4lvfFrXMPiC0hivo7YFZo ovKjvIA3Lbf4Tlun86/Pj4Efs6PCNBl8KLcww3YSSaQj5Y7xAwKj1RgM/ifSv04/YN0tNS+G0erX dt5Vy6vEjHkqu750J74ZePbFcmISim2eFhXzyjFd/wCvM7f4kRpFoFusYchLpgcnPODmuUhAA7c8 Vv8Aja5mm0a58wkrFqkir7DBrnoDnH0rwMUrzXofTYP+F82W4+Op7UPKF6dKjBJGfzpC27gnpWMY 9WVNn0/+wbc/avCGuwZOYrxHx6bk/wDsa+g7aEgZ7Gvmv/gnveCW88S2rHjZBL+rj+tfUlvZbkBF dyWh5j+0vNkdswEnzdKvADHSq72JRjjNJ+8HrVpGLPxLtvg/4D+JerfE/wAe+OdPiHh7RJ5jZi3J h22ljbSSuVK4wWWK0jz/ANNz3rzz4MfA/Vte8E+DtQhv/KvNf0w6rc28gwtpEWmZBnr/AKq3kc59 vWu//aehf4T/ALBmh+EtJhkGsfEnUbDw5DHg73a8kF9cfiLaKzQ/XFeqeGNCttIvdSygW3gt7bw9 Zqg42FhajH1isrtv+2+e9fQYeUnonu7L8O/rf5bnwtRtWS6l/wDZg8K+LE8Y6fZ/DKS8k1MMrjym ICjg7n7BR3Jr9BP2iPH178MP2W/Ees+JpoW1W10lw8kfyo85TauPq7LXN/sS+BNP8KfDUXmmWqR3 OosWlmI+eQA8ZPp7VwX/AAV18cnQ/wBnSz0S1YibXtRijYDqY48yt+qIPxr0cRZJpbGibS956n5s fayAVLZ24GSetMkvjHHuRuR2qoztGSsgPB5zVe6nfqn3T2rj5uoJM8m/bW1LS9Y+C+s2fi8ExCHf F/eRwflYfjX5fXqeXdOFfeATz61+pP7UHwTb45/DufSY7qWynJDpLGu48c7SMjIPpmvzb+Kfwrvv hV4qudL1lhI0bfI4UrvXPUg8qeOlZSvPbcubvoemfsXaHDI2salKy+dEUgUHqAQSf1Fev6j4k8yb yIJNuXwyg8n8a8c+A/hK9sfAE+q+Hr+S1uGlZZo9u5ZYxjIHcN1wRXZ+OfAc99qbp4etoLUOq7pX UOwGOozyT71zpK75mfc5NOdHDw5I7a/edvfxXttatNoU1oZ9o+SV8FfeqnhT4zeI/Duqbbq1F2iH BMcqsvucZzXAXvwO1iSGx/sh5pCFKSiQuUcZJzlfr0rR17wVNpFlYQ2vkxtbxlbh1BQzEk5IPt0G fShxp9X/AF956tPHY2pN/u+W3no/wPdvCPxj/wCEwaS3tlZHYhJEU/dOea9Gm1C78FWklyI5NksK lcDGctg18s/swfb5viDNa+GY0uIojgmQEEsDg59K+8vjF4yv5/2a7PTNf8Nafo+tWzgw6i1ySl1G wKgLHs5bdwDuxuxmuepStU5Fse5SzWpHB+2n1dr9DjfAP7bdt8NlS3vY5toOAFPXsc5r6V+Bf7Xm mfEPWbKHTGk2zEKybuF9s1+ZPiG41iCS4fbNK9oRtT7PGfNHcnKkg17f+xf8TfEF3erd+HvDwuBb SrF5JQJLPIT92Ncjd1HOO9bU6SWt9Ec7z2Sm4VYtf9u3/FXP6Jf2KtPW60cTmI+S9uHVuhU5wVP5 gg+h9q/M7/g5pmGhfEv4e20bj7RPDLLChXPmRrMpPT0B5PpX15+y5/wULtPh18E9CHiHQnklvLh7 aSG3mJuYGQcpJAyK6Nk8DLA84Jr47/4L863aftE/tM/ASTQ7qztbCbQ7rUA0U/nTSQTzIiytGB+7 RtpUB8HIbgba3hze15ls/wBEz4DH4idavUqfZlovl2/4B8XfBzU5dR1DTYtbu30+xjja5SFDtMMi qygDHsAPq3vX39+w9BewfB/Gs7VCzHygF253IrsSPXLn9a+d/Cv7NulfHj4zQRaLBJYWtxPE0cSY SSPAIdicEKCVU9OrHAr7h8OfCzT/AITaJHpegQNDHGMsWdneRu5LMSSTisswXs6fLbVjy6Lq1ebo jj/ibb7dAJUAFrzcf++TXDW7kgZyO1d58VDt8Ose32ofqDXBRNxkda+fxWkl6H1GHfuP1ZZ34Ppi mucnOTk881xfxb+LC/CaxsL68s3vLW4uDDN5bfPGoUtuA78A8e1aOmfEXTdZ8QLp2jzNczG1S7Zk HyRo/Kbj6kc4qOSVlKxlKpHmcE9f6/zPp/8A4J63234maxbMf9fp+7HrtkX/AOKNfY9ooQDOOtfD v7BWofZ/j9DESMXNhPHweuAG/wDZa+1tZmktLNngJDLzXXT+FM4J/FI09gaUDsR1p32FT1zXzf4G /az8W+M/27dd+EOgaPo80ej+F4/EsEs9w0Mt8hmWJ40OCoZS+eRggdRXup8caxEdtz4J8XiReGCW qOoPfDB8Ee4610xi2tDzJ4+jCTjKVmu5+ZPx6/Zq1T9oD47fC3xX4C1fw/q/hj4dDU9XNik4W4ut Tm2+QVjIxtSOC3iBzkc8YrY8MfB3WPDun6FZ+ILK7SVbma5uWljPUIttAM9OizSf9tfevlDw74Z+ Kfwh1toLlJ5vJcgT2UpdXClwWGOcfunPI6DNfVfwO/aV8Z+GmtF8TN/aMSEGS3u03fhzX0lOEcO4 7W/4f5dT5L2fM73dlb87n3z8JvDaeGvA+m2cahTHEuQB6ivi/wD4KseKT4h+KWkaNCS0Wk2LTN6B 5Wx+e2MfnX278OfHlp8RPAthremWUmniWAmSFjwGHGVz2OK+Jf2g7u28efFPXJ9SijuYhcNChYZ4 T5ev4H86WLnZXaKT50fFd7pPzHCkFiazrvTSDheDX0VrvwY0vU9zWDyWzen3l/I81wniT4I6jZMz WQjulH9zr+RrznU8zoVN9Dxq+t2jJ9hjnpXw9/wUA0Jrjxmt08Dy7IAqPj7oySfw4/Wv0E17QXsZ JI7yJkkU8qwwePavjX9sbwnN4z+JsGmRTi2t7i0dp5GXKwopHp3J/nWlKaclc0S11PJ/2X2/4oq4 juf9XJcPgn69Pxr0mXzrGywiQXaocAuTHIfYkAg/XivM/gfLHZaNNaWmd1rKQfqa9Bg1HzrkK3Qn p71z1ad6jufp3D+GhVowUux1Ona5Ppelri2nCkHIS4Rxn2Bxn8a4rxPqk9zdSTXdk8xI/dK8qbQf U7c/lXaabbx3UQClVQjkZ9q5rxfdpFqC2OlKklyx4Xsvqax5XF2PoMRlEKFO6k/w/wAjr/2UNCNj raXFzGBdXcgaTA/L8q/S7xh8DIPib+zJp9xNaR3934e23yR7Q5aIf6xAO525YDuQK/O34E6XMt1G wf51wTg96/Xf9mzR7rTPgVb3ktq9y6WxYxqM+aNucfyH40Jc05dzsxFGksBCC010/r1Pz7+L3wH8 OeHPGL3ngW7jvtHvsTiJx5dzbhucbHAYiveP2TfAvhnwtLbaqbG0nli/ebpI2DJ9FzjNef8Axl+M GhfEXxpJB4atTZpBK0XkSJyhBwVKn0IIruP2bvgTYeK9ci+02Ns3mnlGiU4z+FEIvntE5JZLV+rq cpJq3mtPlc+mQNN8VlJ9Igt7fVVZVs4VwJbu6Y4RQpJ3Z+X5uwBJOBxJ+3h+zT8KvAvxQ8KeB/DG iaLpGsQ+HFvdQvbeFI7zUZZJmG93I3SOXDSEZ6Oexr61/Zf/AGbvDfg3TdMXQ9G0+zu5Yi0ssNqi NtGMgsBmvnj/AIKffDXSvGH7Qk1x4jZY54raKG0kV/LkTCb9yv8A7Jweo6e9ddOMqdSzlrbp9x+a Zq+fEKC+zd2X9L+vU4T4IfAy4+Grw/YbxkhkUymURASysfViDgduDxXoXiK5e5cG4YuwULk9SAMf 0rL8Gateajo2mT38gRPsyxqUHykjKsfxK7uefmFXNcLYy2CPUV5uLqSnL3jswNKEKalDqedfFO4W TwlcbCCY7tMgc9q85FwAo9veuv8AiAkseh61uUgNexOn+0No6fjmuBW6H/1q4MRFcyO/Bz5oz9Wc z8dvB93468PWNvpEZnMV2GkUPsbYyMhIPsWBPsDTfgl8MW+GOhTw6hKbieWXarsdzLEowi5PXHJx 2ziuoF/ubH5EVKkxf3qVJqPJ0BxUZOXf+v0PXf2L9SFl+0j4cycee8kJ/wCBRN/9avvzWId9jKG/ u1+cP7M2q/2f8fvCcxO0DUolP/Ajt/rX6V6jbbrd+v3a7KELwOCo/wB40fEtndf8K+/4LkfCK+z5 UPjTwdrGhykf8tGiH2hAfxjFfpDz71+ZH7b10Ph9+3X+yt4vz5aWfjoaRM+cfJdp5JBPp8xr9OGO 1iOePenK8UrHx2aw5a7ufkL4egTUdamtbUeZPcL9lhYDqrkRFv8Avzbzt/22r0z9mL4L2Pj34oap qPjmE3H2Kbd9n/5Zljgjd6gDHFeT/st/F/wh438VXa6Xq1ms+mxO8dvO3lTnKrGpAb7wEcecju5r 6/8A2WPCg0zw7dag6kS6jMZWOPU5r36ELV+VrZXMopKjzPe56F8QPEVv4F+GmqXsaxwxWVsxRQAq gKpOB2HSvzduviwjarJH4lguNOvJWLstyhTcWOcgnqDnrX2j+3Zr76T8F10yF8Ta7eQWKgdSHkG7 /wAdD18n+NPjHrOoeI72z1xNO1zS45TDHaalarOiIpwArEbl/A1vVh7V8q/r8DJSjCKcupltq39r WrnRriASkfKThgD71TsL3Upp3+2xR+SnBfo3AGTj65xU9p4c8H6zN5ek6RqPhTUsNIn2G6Mtm+0b m+RwWXgHocVjeMNA8TWNml9oDO2mXCsF8yPGBnGd2MHNcdWjys6Kburp3Ll54etta0PZqUUU6yKZ PnUH7xz/AFr4q/bu8IeHfhZHqmsapugW8szbKinq2ScLnnnNfYR8eR6JpQh8QNGlwihCY/mjJxxg 9+K/L3/grh8cf+E1+IOm+HdDdjb6fEZ7hzxvdj8oA9AAx/GueEE3obcyW6PBPhDr/wBmv7qMsyLO wcjPP0/WvS9P1ZGycbUyeQOfyrwbwfqBs9SGWwe3vXq+neK7W1tIvOl2kL0Y9/StHPmvJH3WQ4qU aas9j0mXxJbaFo/n3cuFUAY7k15T4t+LP2PXpdTwRIU2CMNzj1+tcv8AE/4kG/lEdizeWp7NkNXG y3P9pSrG7ACcYLnOFb/P86yle19zuzXiH2i9lTd2j6L/AGdf2gZ1Mja7dR2fnNtSWUNsTnqQoJ/I V+gGg/8ABYnUPg/4H8IaB4MkstR0SyQtqt0ysbiYg/djUkBF24+Zs9+BX5GafLBbW0UF3OsVxG25 8kkBcDGMdx/WvQ/heYb/AFiyzcmCcAlt7fISuSOT0J7Z45rN6K7Wp5tLNJySp1KjaVvv/M+i/wDh ou68RfHTWfEUZigTX9Qm1BI0I2RGWQsVH03V+hX7CHxDbUdXsJXYN5rBTnkZr83vBPwgh8VWV81k Vt5EEctqA+dpMe4ggdBkdsYAr69/4Ju/FGPSpHtdcdIb3TnKyRSMBlweik9aVKoozTeh9dgs4p18 J7FK3KkkvK2n3H78/BZ7VPBdtfvLGALYPITx5Y7kn0wK/OX/AIKefEhdf8Xa3qDXBexwlqoAysKu +Cw+o8sn2Fe7/DP9pc2HwevJxdwiPUFWBInbO3apDjHpk18Tftg36+I9B1YX95I0EiPceSjZLSrH 8uR3Hy89sL+fVZKpJ3u3+B+aYuhKFepUk9W/6RwOqftZeIv2b9X0vR/COsJq1gtjHdSi6USxTNJk 7V5yqj7vB5xnuK9F8H/8FFvDHjC3jj8b2NzoNw3BmhPmwE+uOo/Kvhi8km1bU5WvJZDjCKgPCqOA B7DFbfh7Q1llXcOO+azqQhU0ZnSxFWkrJn354216z8RfDafUdAu4720uWjkjmj+643Yry8ahufmt b4cEQ/sv28S4CRRn/wBHsf61xkeo5k6/WvIxULTse/gKznSvLds6GO824wanjvSW4Pb61hW95vXI PJ6VcguyRg9qwUTeUjtfhZrB034l6BdJ8ph1GBsj08wV+r93H5tsxHda/H7Q9SNlq9rKpx5UyPn6 MDX7GaNANU0OynTlbi3jkz67lB/rXfhdInl4qpyTTPzp/wCC0sLeH/gv4Y8UW+Vl8HeMtM1UOOqh Jx/iK/UWwnj1WxhurVt0VzGsqEd1YZH6Gvjf/gpr+xxrX7Sn7Lvinw14IWNtS1BEltvMOAHSRXHP /Aa0Phn+3t4n8C/Dfw/onif4SeM7vUtH022sbueKWAxzTRRKjuuT0LKSPY1vDDTqK0e/dHzuaQVW opJXR+CGgeMPtV1DdWMpguoGykiNhgp6rkfnX1l+zJ/wVR8c/s5yW2m6vMniPw+rc2l4cyIvfy5f vL9DkV8F/DjWd00JJLKXOc+legT6kl8oLDIHy59D2r6lU3B2ep83SxEnFXP1M+KP7b/hL9rC/wDC F94SuXsLLR5H1DU4L0hGs2RMIC2cMMs3I/SvB3+Pfgm68XajbnxHphks7aTUZ5Ek8xPKX75BXOdo 5OO3NfDHi/XtOtdDvtO8U36WlpewmNn83YUBHUHPBHX8K+aNC/acT4S6jrdrHMmsNJpN5osEoPyg XEZheUe+xmwPU1hKHLdxZ1JqtZNaL+v61P2C8JftWfCDVtQlDfETSre8FtILOOS2m23TnHyBwh2k jOMjGepFe16N+3d8Gfhz8KbSPxj428OI1ral5YJLhd+dx+Xae/PSv5ttU+K2o3FyJ7C6a2xwojJD L+Nc5feJbvU5d9/cTTuerO5JrCfspvVs7MNiPY3VtD9bP21/+C2vwzj8RR2PwK8FWetRwyE3GoSk 26SH0RV+99SK/M749/F2P4x/FjWvE0EL2serSh4bZ38z7OoULt3YGehPTvXnUlwZ5Mhsgc4PapYf 33zgtn19K45xjO6iilVlUdnuX9P1No7wmRsuc7SOxrR1HXZUhCp80uMDPIGe1c3HPiQbcnb0q/p7 s98kc2TIflC4yV7/AJ1zJtO6Ouji5U4OMWTzWOpXJVpoiwzxk4LeuBV7QdGvNQv0hWP5ydwUD86n 0vzNNEFzqRfegZUTPPJ457d+fpUkHiqSK7jbTI5USJs7ZHyFA68kfzrb2adlexVKrBTUmaUnh20D xrf3ESyhtvzK2QK9F+G/gizntY7vT5ZbpbQFpGVfRSdvPPQV5zq/iSHUdWOoWax4DCTaw5Y8dMdQ PSu88LfF+DwndGzW1mQSr57xR8bmPTI6Dt9PenUpSULRPc+v0lH4I83fU9C8K/FbVNEjiudEt5ZY 7Z0VygJ3KMgrgnn7xHHY17P8I/GdvJ8QbvU7Kf5pyrNGG27WCjcMD0I6182+CvH8mra9ZrHHPY/Y 51MaTIBHIf4g+Bzk8c9a9b+Hs0+n6pJdaFbeUl8yGbYo+XHAJ7AE1y1KbvqOlilSmpx2P0S8A/HK 8j8IadaGcTW0jPHKjn54flBVj7E45z61Fr9/fWlwup6k0F5C8bQshOd28EDI9CA3P4V4x8JNYuvi BpsQ0+WS4vLKIiKNEA8zYpJBI6k7SPXgV6l4WZvGWhw2ksw/tEkeV5qna/yk4PoR/M9KvDrmqbE4 2tGULSZ4z8RPBMei61LLpkTrDI67k6hNwzj8wR+FT6BpskYQmNv3gyMDrWN+2rY+OtC0qe98JXUu nXCt5s+yMAsoiRWKnGOkYb8a+Hrn9rXxp4a8SPHLrurF45pAySzsdo4x7Z69K6nRs7s8ZVmk3LdH 7K+AJWX9m3DKQQr8fSU152l0TJhs9a+Rv2WP+Ci/iIrFp2r6kZlkygWb5o1zn7wNeq+C/wDgoN4a n8cf2H8Z9E+x75zCNRsW2hBnG5oz1H5Vz1sulUd4vU9DDZrGgvZzjt1Wp7pa3GBtJz9BV+G4yBnm quv6OmjywTaZOt3p99ELi0uV5SeM9CKjtbgkcnJ+leVKm4PlZ7EK0asVKLumbdtcksCG4/Wv2h+B d0ut/BvwlerhvtGlWz5/7ZrX4p2dxsOa/Yv9ijVv7a/ZR8Czltx/stIyf90lf6VadoaHh51U5IRl HzPT2iVlwygj0IrNk8H2TuxMEJyc/drUp26iMpQ2Z85RxEo394/jY8IeNIdFsxPeTRxRAbxlsYXG c1w/xT/bQur65ls/AX7i0U484/fcjuPSvHdU8VX+pabb2LzEwxrt68t9awTYOkhB5I5619dXrpfA jihQgnzM3vE3xH1XxbdtL4hvJ7tnPO5zwPYViz7Zw7x5OPWoyS3Ocn+VAkVMliR2OK5JVJNXZ0W7 EYYjrzzTCSxye9KxG4nt2pmfmP6Vxvey3NEhrt5bcGr1oxFucnhuvY4qtY2TahfJDCVDyHA3HAp4 uf3RC9+PwqYvl36mkdyS0AF1HuG4M2cHvW1ocmy6nlusRvKAobPzJk5P5jI/GsITmCdXQcpgj61u G5juo0k2JE0jHDqM7uOeOxHH50Qi5aMpS02NRbZ7aRLnzY7pGHykRkR/7ozya2YdIitorybWbaSQ FAURDjaxGST+n51tfDXTrWfQSLy1DpbxSSJM65ZicDgegJJPet3wtpV94pujYXIhmtLkBZJEA8sl ckcdcYyOO9dFrrbQ7KTaV5fLqeY6laQ2lzts42BjcCJmP31ZjtYjsa6X4cofEevf2fdyC3e52QAx 8kDIPPfA54rpfF/w8TVVnOmCET6evluQvXCkgDHsMDPOa5b4drep4wFxa2a+YjAKCdroT7dT1yK0 irK97F8zpO70PZT8H49KiljhAMrSZMomJlPoSvTk844PNdx4Blv/AA1plzba8PNW4tjBDcxPhGII Iyex9jU3w2nf4gW8DkpHdQLGswjbO4su1uOh7MD9fw9X+H3gC20q6/s/xKEMcLAOx+68LAjJI4B4 6fSs6kOfVot12o8tyx+z74gufB8LPo10ReLG3nqMhUByu7ce/wAy5Gf4vTNew/CzxTeX6Q6iha2Y TK6rI3ILZXIP4fhmvJtI0bTrXwrqz3NqPtkTLHD5CeX5y7lJDgEDIAH19a7m18drp3gTw8ttEZpk tmhKp8pSRnJLkH0DhRn0rJ0ZwfNEuNeM1GMo79/62PYodUX4ueBPEFhpkCXl8trJEJLlN4ilbgDG OQQGB9jX5f8A7VX7P+meE9fhuLoTWNpqEaS2zv8AfiyoZ0JH3grEjPtX6P8Aw18Zt4fiuTay26Tg JciUNtaTK7cfgSx985r5i/bf8IWFpo3iPU7VX1GxguHneCOI4wDnCnHCMzqMjGAtdT96PP8A1fQ4 nFwm/wCXz7Hw54UNx4H8TWcgkDJNiSJgwO9SxAyOx4/zmuy+MV9LYePLS8tnfF5Akob+Ek9SM+4r zK81e4v/ABJ9p1pkHmvvjRB8sajsB2AxivVfiPMur+FPDN3cRAhcxYwfkUjdye+Tmrpt6af1uVez 5ltsfo/+wp4yf4v/ALJ/2RpXnvPCOJFU8uIXOCPwIB/Ou0tbnawySBXhn/BGT4xW2har4u0qJYJV fS3ncOMhljZGKn6jP5V9R/F/wVZ6Iljrng5hJour5aIqSRG45ZD9M1zZlhHJ+2R1ZPjoxnLCy7u3 52MK0n6Z578V+uf/AATa1U6r+x34X3tuNs1xAfbbK2P0Ir8gLKff3r9WP+CSeqjUP2TFhySbPV7m P6ZCN/WvFatFnRnS/cfM+nKKKKk+UP4HzMwPBPAwOaVrkj7pI9ajU5BDZoA3n2HPvX0PM+Tsb2QB 8HK96aZDyFyc03JR+DS54znmuVzve+5VrDt+7ORx3ppXLfL9KQfKc/hTmGGJB5PepcdL9h7DD8kg 25GOfpU0UgZzI3GOo96gkG49c4pVPTJx3rFKWxXoTRL50wDdWPXtWhFBKFEahxzhARwc+lVLGMSM DkAL3NT6dc3IuVW0dlfPyjPAP4100Y2SBHuPh23l846XpM0SLZWcQbfF9xigLEnHqx49q9N+Gvhs Jo+oNdNC0jRuY3jBCFwowqgjjNeY+Gbu30Lwu73FxFFO0Q8133MpLL6V6x8N/E1lfaTBdWV0sUEK CExuCF3Dknbjrk10zg1H3f62/M7o2Sut+pmxyzS2D22qWoikv4wZC6FGkZWAyOOnI5964pPBqeA/ iPBZThp5J5DP9oZsKgXnC88NgHnrXrOqeHrnSIkeeQ3Xmv54lySY+/B9CO1QeIfBVr4pujfyr89o RIqBiGcdPlPuTz7elEHZ3T0KnK7v2G/C+S08KeMGjnf7MLkBYzI/DqeQw/E/pX0hp2mrNY/6VuWa 4nK253AmUBRnHqrKenqPrXhOueHbTxFNHcJFCbi1MYkQjZk7RgKfT5T+de1aRZRa7oNkNSmxHbEy W8gP3WU4KE5oi7yV2ZvVJs7PxD4Ku9V8Cx2GliJbm1mExQ8tKj7d5B9uOBzxXFDwtr/hj4kSaZPC ptLHU3e6Erjy5U5yVb+FSpOB/hXouj60+q2to9i8kd9axMZVzhZVUkHPrnKkfWsnW9YE2g2msyMi XF/K9nIpGBNFtz847MGJAPPFbWV72JUmtJdTZj1x9C0GCRbe3kexbyi0+Wea2c74Wb3Afbnvtpb3 Q28Z+HriC6hgtmuLK4syjODC6z4Q/iMg57VxHhpZbvTp7DWrpY72BURJgCYrkR5IBz0IU9uOK9J8 F6YukjTYIjMbi+mQxtcHj7y7kKdMA/Nu7g1k6dlYbqe7Zv8A4PU/Mn9oT4A3fgKK51W0EK2Vrqr2 kcK7t8YYSEYJHzL+5fn1qOO8e6+AEzzM0ptZUAyeYixYAD2619rf8FIPglfavZaXf+GrQS2c5e8n sUjJLPE8iSMNuGJCgk4zwTivjWe3Ft8MdVs2iNtFdXSqMHchxJgAE88ZroinL3r9iH7yUlu7Hrn/ AATb8fr8LYPGusagiTxS6FPbDe2F3NgAeueT/k19y/sMftKf8Lq0VPAPiYGaw1TC2b/x2TgcMPb1 9q/MnQb1vCXwt1OG2uf9IluhaL5Ywsi7uSPXOOtfQf8AwTm8Sy6F8S9EneWWNo5F3MvOFzxnHfIx +NdlOKmnCWz0+5HLiIunerHdar5I+3PF3hifwR4pvNLvyfMtJChOOuO9fpR/wRc1Rr74C+JrRjn7 LrAcc/34V/8Aia+Fv2j/ABD4W8ZfEFHivY9L1e+gjKPIw+z3UmAPLJ/gfjHPFfZ//BFK2vNC8PeP tL1qGWCaK4tJtkgweVkGfpwOa+cxmFdFSutND2KuNhjsInfXS6Pt8gqeaSp3TeKgryvh0PBnTcWf wOsvzEdfcUqEBhkZ/pSyjGcVFn5m+tfQvZF7oV05PIphHHSpB9+mt/rT9TWNaXI7FbCHG0Bs+tOP TrSN/Wm56/SlG62AG9R+NIvzjA5NJL96pLHm4XPrUWUpKJV7K5f0yMIpEqgpgZ55zWx4e0hdV1Sb yy3lxqGOxCCASAcntx3rIJwiY710ehOU8JXJUkFmUMQeSMjrXdTSUkOk7y19TuoZIr9Ht7NYfIim UAE58wbcDPsoGa9R+DNlazaQrTsjK11JGo+9yBggfXIOfavJvhzGr2zl1BJmbkj2FelfApinh692 EjbfNjHbKnNbVF+75l5fidEaj0a6ux6LpGp3bmf+1IWMEkXkBCMqjLldynvkEce1anhBFi06KVH8 6WxzBIf4kRm657kcf5zXOLO41i5QO+0yxEjPB5I6fTitbwMc+MNRQ/cMI+XtznPFcvKloa03eSNl IFsvEwsbdTPHqTnZlcIH2k/UA449DXR+HGfwj4TitYy19BaqdpVssxyxIPr1/SuasJGH9kMGO4Sq Ac89DXS6KojtpPLAX9/J0470Qlr9w5SvLbuekfDPxFHFoEsV3M5nYjDlfmUEc/X6VH8Q9NGn6Npd xcSzQxJeMI3UbwdwDqeOg4Ye2KqRoI7awZAFLRqSQOTz3q/4xjWTwzLHIoaMSK4UjI3DocevvXXC Xutoycrsx5pBqOh6imqB5LiSIH5G+XduAVgR0yMjFeieDdXk1Twvp7rNG15pBCxB1zlSp53dsHAz /wDWrznwSxk0OcOSwNlMSDzz8h/qa3LmVoNM0wQMyB7WQsFON33evrWtSSavYydR6pHbfFn7Vr3h bT7jSNQkjfSI5bmOK4OchsrJg9cbXP1r4/8Ajp8NrT/hDNei8OiO1FhcXWo2jScJMvkiSROeVKeW 5Ud8e9fbllZxT/CkvNFG7/a/K3MoJ2HqufT2r5X+Ocanwn4wjKjZHbTFVxwp2SLkDtwxH0JFYyl7 PVL+tC1FSSPlP4g3B0jwZ4fgsm3vcwecV/uHO3/69epfsweLG8OzJNFctHdJGDxwFxzn868b8Ykv JpYc5CcLn+EccCuv+GsjBuGI+Yjr2xXcpNRsVJ3iovrdnufxy+Od/wCIdASeC9lEsUu8lWO786/T b/g31/4KiR6n4vt/AHxbuPtFxqUC21nqDnL4UkojHuBk49AcV+Nfi+Rns2DsxGehPtXrv/BLe5kt v2mPCrW8jxsL+PBViD19qujCOLg6dRXUrr0IqUVDDuot1qj+t+k2g1Q8KSNL4W01pWLM1rESSckn YK0K+GkrOxC95XP/2Q== X-ABShowAs:COMPANY CATEGORIES:My Contacts X-ABUID:685FC9B6-8446-45B8-89AF-3F3BC70CA03A\:ABPerson UID:F26B8512-45DA-49ED-B285-23E64B0A68D1-ABSPlugin REV:2010-06-23T00:01:37Z END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, version, uid, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf' ORDER BY dav_id, property ENDQUERY davical-1.1.1/testing/tests/carddav/2025-PROPFIND.result0000644000000000000000000000167011750220641017277 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "ef3df689151fd487c9a178ab6d110e89" Content-Length: 636 Content-Type: text/xml; charset="utf-8" /caldav.php/user3/addresses/ Sun, 15 Mar 1998 12:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found davical-1.1.1/testing/tests/carddav/2015-PUT-vcard.test0000644000000000000000000000371211704134640017264 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/van_houtte.vcf HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEADER=If-None-Match: * HEAD BEGINDATA BEGIN:VCARD VERSION:3.0 PROFILE:VCARD FN:Vincent VAN HOUTTE N:VAN HOUTTE;Vincent;;Dhr.; BDAY:1978-12-31 TEL;TYPE=CELL,VOICE:0486 11 22 33 ADR;TYPE=HOME:;;Brusselsestraat 108;DENDERMONDE;;B-9200 LABEL;TYPE=HOME:Brusselsestraat 108\nB-9200 DENDERMONDE TEL;TYPE=HOME,VOICE:052 11 22 33 TEL;TYPE=HOME,FAX:052 44 55 66 EMAIL;TYPE=HOME:vvh@gmail.no ORG:Advocatenkantoor Suy, Van Baeveghem & Van Houtte;; TITLE:Advocaat ADR;TYPE=WORK:;;Brusselsestraat 108;DENDERMONDE;;B-9200 LABEL;TYPE=WORK:Brusselsestraat 108\nB-9200 DENDERMONDE TEL;TYPE=WORK,VOICE:052 11 22 33 TEL;TYPE=WORK,FAX:052 44 55 66 EMAIL;TYPE=WORK:vvh@gmail.no REV:2010-06-23TZ END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, version, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/van_houtte.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/van_houtte.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/van_houtte.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/van_houtte.vcf' ORDER BY dav_id, property ENDQUERY davical-1.1.1/testing/tests/carddav/Restore-Database.result0000644000000000000000000000043011751212311020602 0ustar setval -------- 1633 (1 row) setval -------- 1 (1 row) setval -------- 10 (1 row) setval -------- 10 (1 row) setval -------- 1 (1 row) setval -------- 40 (1 row) setval -------- 14 (1 row) setval -------- 1000 (1 row) davical-1.1.1/testing/tests/carddav/2023-PROPFIND.result0000644000000000000000000000125111750220633017271 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "32708ff7fcccea1b9719ff092405c0a0" Content-Length: 365 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/carddav/2031-REPORT-addressbook-multiget.test0000644000000000000000000000244211704134640022655 0ustar # # addressbook-multiget REPORT on addressbook resource # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml HEAD BEGINDATA /caldav.php/user1/addressbook/Jörg_Test-Roßdeutscher_3_0.vcf /caldav.php/user1/addressbook/andrew_mcmillan.vcf /caldav.php/user1/addressbook/donald_kelly.vcf /caldav.php/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf /caldav.php/user1/addressbook/van_houtte.vcf /caldav.php/user1/addressbook/mustrmahn.vcf /caldav.php/user1/addressbook/andresenesq.vcf /caldav.php/user1/addressbook/hans_dieter.vcf /caldav.php/user1/addressbook/Jörg_Test-Roßdeutscher_2_0.vcf ENDDATA REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ REPLACE=/^UID:.+/UID:excellent-looking-uid-string/ REPLACE=/^REV:\d{8}T\d{6}Z/REV:YYYYMMDDTHHMMSSZ/ REPLACE=/^ETag: "[0-9a-f]+"\s$/ETag: "a fine looking etag"/ davical-1.1.1/testing/tests/carddav/2011-PROPFIND.test0000644000000000000000000000116511704134640016734 0ustar # # PROPFIND on addressbook resource # Depth 1 this time, and looking for getetag # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml HEADER=Depth: 1 # HEAD BEGINDATA ENDDATA REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ QUERY SELECT count(1) FROM collection LEFT JOIN caldav_data USING(collection_id) WHERE collection.dav_name = '/user1/addressbook/' ENDQUERY davical-1.1.1/testing/tests/carddav/2005-PUT-arbitrary.result0000644000000000000000000000071411732477134020532 0ustar HTTP/1.1 412 Precondition Failed Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 178 Content-Type: text/xml; charset="utf-8" Incorrect content type for addressbook: text/plain davical-1.1.1/testing/tests/carddav/2003-PUT-vcard.test0000644000000000000000000000512211446006434017260 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/andrew_mcmillan.vcf HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEAD BEGINDATA BEGIN:VCARD VERSION:3.0 REV:2010-03-29T09:23:34Z UID:pas-id-4BB0719600000000 X-SKYPE;X-EVOLUTION-UI-SLOT=1;TYPE=HOME:karora__ X-JABBER;X-EVOLUTION-UI-SLOT=3;TYPE=HOME:karora@irc.oftc.net TEL;X-EVOLUTION-UI-SLOT=3;TYPE=CELL:+64 22 123 4567 TEL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME,VOICE:+64 4 123 4567 TEL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK,VOICE:+64 22 123 4567 EMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:andrew@mcmillan.net.nz EMAIL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK:andrew@morphoss.com LABEL;TYPE=HOME:16 Kaka Place\nPorikana\n4173\nNew Zealand ADR;TYPE=HOME:;;16 Kaka Place;Porikana;;4173;New Zealand X-MOZILLA-HTML:FALSE X-EVOLUTION-VIDEO-URL: FBURL:https://davical.morphoss.com/freebusy.php/andrew@morphoss.com CALADRURI:mailto:andrew@morphoss.com CALURI:https://dotcal.com/karora X-EVOLUTION-BLOG-URL:http://andrew.mcmillan.net.nz/ CATEGORIES:Developer,Personal,Debian, X-EVOLUTION-FILE-AS:McMillan\, Andrew N:McMillan;Andrew;Watson;; FN:Andrew Watson McMillan NOTE:Primary author of DAViCal CalDAV Server. X-EVOLUTION-SPOUSE:Heather Buchanan X-EVOLUTION-ANNIVERSARY:1989-04-22 BDAY:1958-07-26 NICKNAME:karora X-EVOLUTION-ASSISTANT: X-EVOLUTION-MANAGER: ROLE:Geek ORG:dotCal;;Porirua TITLE:Chief Technology Officer URL:http://andrew.mcmillan.net.nz/ END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, version, uid, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/andrew_mcmillan.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/andrew_mcmillan.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/andrew_mcmillan.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/andrew_mcmillan.vcf' ORDER BY dav_id, property ENDQUERY davical-1.1.1/testing/tests/carddav/2008-PUT-vcard.test0000644000000000000000000000260711633117640017272 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/PHRsMa4mvY.vcf HEADER=Content-Type: text/vcard HEAD BEGINDATA BEGIN:VCARD CLASS:PUBLIC EMAIL:zzz@xxx.ru FN:zzz N:zzz;;;; NAME:zzz REV:2010-11-18T14:27:41 UID:PHRsMa4mvY VERSION:3.0 END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, version, uid, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/PHRsMa4mvY.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/PHRsMa4mvY.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/PHRsMa4mvY.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/PHRsMa4mvY.vcf' ORDER BY dav_id, property ENDQUERY davical-1.1.1/testing/tests/carddav/2021-OPTIONS_well-known_carddav.result0000644000000000000000000000025411651212132023037 0ustar HTTP/1.1 301 Moved Permanently Date: Dow, 01 Jan 2000 00:00:00 GMT Location: http://mycaldav/caldav.php/ Content-Length: 0 Content-Type: text/plain; charset="utf-8" davical-1.1.1/testing/tests/carddav/2010-REPORT-sync-initial.test0000644000000000000000000000107511704134640021126 0ustar # # Check for support of REPORT sync-collection with no sync-token # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=User-agent: sync-collection initial REPORT HEADER=Content-type: text/xml HEAD BEGINDATA ENDDATA REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ REPLACE=/^ETag: "[0-9a-f]+"\s$/ETag: "a fine looking etag"/ davical-1.1.1/testing/tests/carddav/2007-GET-arbitrary.test0000644000000000000000000000051011446006434020127 0ustar # # GET the arbitrary text that we put there earlier # TYPE=GET URL=http://regression.host/caldav.php/user1/addressbook/strumar_and_beren.txt HEAD BEGINDATA ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag FROM caldav_data WHERE caldav_data.dav_name ~ '/user1/addressbook/strumar_and_beren.txt' ENDQUERY davical-1.1.1/testing/tests/carddav/2015-PUT-vcard.result0000644000000000000000000000326411732477150017634 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >NULL< caluri: >NULL< dav_name: >/user1/addressbook/van_houtte.vcf< fburl: >NULL< fn: >Vincent VAN HOUTTE< n: >VAN HOUTTE;Vincent;;Dhr.;< nickname: >NULL< note: >NULL< org: >Advocatenkantoor Suy, Van Baeveghem & Van Houtte;;< url: >NULL< version: >3.0< box_no: >< country: >NULL< locality: >DENDERMONDE< postcode: >B-9200< property: >ADR;TYPE=HOME:;;Brusselsestraat 108;DENDERMONDE;;B-9200< region: >< street_address: >Brusselsestraat 108< type: >HOME< unit_no: >< box_no: >< country: >NULL< locality: >DENDERMONDE< postcode: >B-9200< property: >ADR;TYPE=WORK:;;Brusselsestraat 108;DENDERMONDE;;B-9200< region: >< street_address: >Brusselsestraat 108< type: >WORK< unit_no: >< tel: >0486 11 22 33< type: >CELL,VOICE< tel: >052 44 55 66< type: >HOME,FAX< tel: >052 11 22 33< type: >HOME,VOICE< tel: >052 44 55 66< type: >WORK,FAX< tel: >052 11 22 33< type: >WORK,VOICE< email: >vvh@gmail.no< type: >HOME< email: >vvh@gmail.no< type: >WORK< davical-1.1.1/testing/tests/carddav/2010-PROPFIND.test0000644000000000000000000000070611446006434016735 0ustar # # PROPFIND on addressbook resource # TYPE=PROPFIND URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml HEADER=Depth: 0 HEAD BEGINDATA ENDDATA QUERY SELECT dav_etag FROM collection WHERE dav_name = '/user1/addressbook/'; ENDQUERY davical-1.1.1/testing/tests/carddav/2014-PUT-vcard.result0000644000000000000000000000233011736745571017635 0ustar HTTP/1.1 100 Continue HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "0ea4d7759e103090c6494505b5da0f11" Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >NULL< caluri: >NULL< dav_etag: >0ea4d7759e103090c6494505b5da0f11< dav_name: >/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf< fburl: >NULL< fn: >Morphoss Ltd< n: >McMillan;Andrew;;;< nickname: >NULL< note: >NULL< org: >Morphoss Ltd;< uid: >F26B8512-45DA-49ED-B285-23E64B0A68D1-ABSPlugin< url: >NULL< version: >3.0< box_no: >NULL< country: >NULL< locality: >NULL< postcode: >NULL< property: >NULL< region: >NULL< street_address: >NULL< type: >NULL< unit_no: >NULL< tel: >64272332426< type: >WORK~|~pref< email: >andrew+davical@morphoss.com< type: >INTERNET~|~WORK~|~pref< davical-1.1.1/testing/tests/carddav/2017-PUT-vcard.result0000644000000000000000000001014611732477152017635 0ustar HTTP/1.1 100 Continue HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >http://caldav.andresen.local/access< caluri: >http://caldav.andresen.local/sja< dav_name: >/user1/addressbook/andresenesq.vcf< fburl: >http://caldav.andresen.local/freebusy< fn: >Sven Joseph Klaus Michael Andresen, Esq.< n: >Andresen,Esq.;Sven;Joseph,Klaus,Michael;;Dr.,Prof.;Esq.< nickname: >Svenny,Sveny< note: >Nur so ein Test!< org: >andresen AG;R&D;;XXX, 033< url: >http://www.andresen.de< version: >4.0< box_no: >< country: >NULL< locality: >Irgendwo< postcode: >34332< property: >ADR;TYPE=HOME;CHARSET=utf-8:;;Weisenstraße 13\r;Irgendwo;;34332< region: >< street_address: >Weisenstraße 13\r< type: >HOME< unit_no: >< box_no: >6266 AA< country: >NULL< locality: >Irgendwo< postcode: >34332< property: >ADR;TYPE=WORK;CHARSET=utf-8:6266 AA;andresen Holding\, Geschäftsleitung; Weisenstraße 13;Irgendwo;Niedersachsen;34332< region: >Niedersachsen< street_address: >Weisenstraße 13< type: >WORK< unit_no: >andresen Holding, Geschäftsleitung< box_no: >PO 373< country: >Deutschland< locality: >Passau< postcode: >94036< property: >ADR;TYPE=WORK;CHARSET=utf-8: PO 373;Andresen AG\, R&D;Messegasse 7;Passau;Bayern;94036;Deutschland< region: >Bayern< street_address: >Messegasse 7< type: >WORK< unit_no: >Andresen AG, R&D< box_no: >< country: >Antarktis< locality: >Nirgendwo< postcode: >0< property: >ADR;TYPE=X-OTHER:;;Irgendwo;Nirgendwo;Sonstwo;0000;Antarktis< region: >Sonstwo< street_address: >Irgendwo< type: >X-OTHER< unit_no: >< tel: >+49 8292 38 383< type: >CAR,VOICE< tel: >+49 39292 82< type: >CELL,VOICE< tel: >+49 7272 722< type: >CELL,VOICE< tel: >+49 1010 1< type: >HOME,FAX< tel: >+49 7272 7282< type: >HOME,VOICE< tel: >+49 7327 272 727< type: >HOME,VOICE< tel: >8797< type: >ISDN< tel: >98732947234< type: >ISDN< tel: >+49 6237 623 723 84 76< type: >MAIN< tel: >+49 9324 32 479 234234< type: >MAIN< tel: >+49 7363 6363< type: >MODEM< tel: >+49 8383 73 723< type: >MODEM< tel: >+49 160 073 727 272< type: >PAGER< tel: >+49 2626 26< type: >PAGER< tel: >+49 12 34 567< type: >PREF,VOICE< tel: >+49 7373 73< type: >WORK,FAX< tel: >+49 234 222 222< type: >WORK,VOICE< tel: >+49 89 11 11 111< type: >WORK,VOICE< tel: >+49 88 298 723 498 32< type: >X-EVOLUTION-RADIO< tel: >+49 9872 394 872 34< type: >X-EVOLUTION-RADIO< tel: >+49 2763 382 882 28 82< type: >X-EVOLUTION-TELEX< tel: >+49 7722 88 28 282< type: >X-EVOLUTION-TELEX< tel: >+49 7363 6363< type: >voice< tel: >+49 8383 73 723< type: >voice< tel: >+49 3377 37 373< type: >voice< tel: >+49 8378 33< type: >voice< tel: >13355< type: >voice< email: >andresen@andresen.de< type: >INTERNET< email: >sven@andresen.de< type: >INTERNET< davical-1.1.1/testing/tests/carddav/2039-REPORT-sync-changed.result0000644000000000000000000000406211743162574021451 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "a fine looking etag" Content-Length: 1795 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/addressbook/andresenesq.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> HTTP/1.1 200 OK /caldav.php/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> HTTP/1.1 200 OK /caldav.php/user1/addressbook/hans_dieter.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> HTTP/1.1 200 OK /caldav.php/user1/addressbook/J%C3%B6rg_Test-Ro%C3%9Fdeutscher_2_0.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> HTTP/1.1 200 OK /caldav.php/user1/addressbook/J%C3%B6rg_Test-Ro%C3%9Fdeutscher_3_0.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> HTTP/1.1 200 OK /caldav.php/user1/addressbook/mustrmahn.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> HTTP/1.1 200 OK /caldav.php/user1/addressbook/van_houtte.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> HTTP/1.1 200 OK data:,42 davical-1.1.1/testing/tests/carddav/2012-REPORT-addressbook-multiget.result0000644000000000000000000000510411732477144023223 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "a fine looking etag" Content-Length: 2330 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/addressbook/andrew_mcmillan.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD VERSION:3.0 REV:2010-03-29T09:23:34Z UID:excellent-looking-uid-string X-SKYPE;X-EVOLUTION-UI-SLOT=1;TYPE=HOME:karora__ X-JABBER;X-EVOLUTION-UI-SLOT=3;TYPE=HOME:karora@irc.oftc.net TEL;X-EVOLUTION-UI-SLOT=3;TYPE=CELL:+64 22 123 4567 TEL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME,VOICE:+64 4 123 4567 TEL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK,VOICE:+64 22 123 4567 EMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:andrew@mcmillan.net.nz EMAIL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK:andrew@morphoss.com LABEL;TYPE=HOME:16 Kaka Place\nPorikana\n4173\nNew Zealand ADR;TYPE=HOME:;;16 Kaka Place;Porikana;;4173;New Zealand X-MOZILLA-HTML:FALSE X-EVOLUTION-VIDEO-URL: FBURL:https://davical.morphoss.com/freebusy.php/andrew@morphoss.com CALADRURI:mailto:andrew@morphoss.com CALURI:https://dotcal.com/karora X-EVOLUTION-BLOG-URL:http://andrew.mcmillan.net.nz/ CATEGORIES:Developer,Personal,Debian, X-EVOLUTION-FILE-AS:McMillan\, Andrew N:McMillan;Andrew;Watson;; FN:Andrew Watson McMillan NOTE:Primary author of DAViCal CalDAV Server. X-EVOLUTION-SPOUSE:Heather Buchanan X-EVOLUTION-ANNIVERSARY:1989-04-22 BDAY:1958-07-26 NICKNAME:karora X-EVOLUTION-ASSISTANT: X-EVOLUTION-MANAGER: ROLE:Geek ORG:dotCal;;Porirua TITLE:Chief Technology Officer URL:http://andrew.mcmillan.net.nz/ END:VCARD HTTP/1.1 200 OK /caldav.php/user1/addressbook/donald_kelly.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD fn:Donald Kelly n:Kelly;Donald;;; org:Esposo Designs Ltd adr:;;25 Rintoul St;Newtown;Wellington;;New Zealand email;type=internet:donald@example.co.nz title:Proprietor tel;type=work:+64 4 347 4747 tel;type=cell:+64 2 1234-4321 x-mozilla-html:TRUE url:www.example.co.nz version:2.1 UID:excellent-looking-uid-string REV:YYYYMMDDTHHMMSSZ END:VCARD HTTP/1.1 200 OK davical-1.1.1/testing/tests/carddav/2000-MKCOL-addressbook.test0000644000000000000000000000132411633117640020653 0ustar # # Extended MKCOL test - create an addressbook # TYPE=MKCOL URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml HEADER=X-DAViCal-Flush-Cache: true HEAD BEGINDATA User 1's Addresses ENDDATA QUERY SELECT user_no, parent_container, dav_displayname, is_calendar, public_events_only, is_addressbook, resourcetypes FROM collection WHERE dav_name = '/user1/addressbook/'; ENDQUERY davical-1.1.1/testing/tests/carddav/2013-PUT-vcard.test0000644000000000000000000000354311446006434017266 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEADER=If-None-Match: * HEAD BEGINDATA BEGIN:VCARD VERSION:3.0 N:McMillan;Andrew;;; FN:Morphoss Ltd ORG:Morphoss Ltd; EMAIL;type=INTERNET;type=WORK;type=pref:andrew+davical@morphoss.com TEL;type=WORK;type=pref:+64272332426 X-ABShowAs:COMPANY X-ABUID:3CF7BF91-2E75-462A-80DC-7845E8AAB985\:ABPerson UID:F26B8512-45DA-49ED-B285-23E64B0A68D1-ABSPlugin REV:2010-06-23T00:00:21Z END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, caldav_data.dav_etag, version, uid, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf' ORDER BY dav_id, property ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf' ORDER BY dav_id, property ENDQUERY davical-1.1.1/testing/tests/carddav/2010-PROPFIND.result0000644000000000000000000000130711732477137017304 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "e722f053aaa9eef890641a0ba88837e5" Content-Length: 339 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/addressbook/ "80a8bc51f0e0b0fdd2037f1e12f5ad47" HTTP/1.1 200 OK dav_etag: >80a8bc51f0e0b0fdd2037f1e12f5ad47< davical-1.1.1/testing/tests/carddav/2012-REPORT-addressbook-multiget.test0000644000000000000000000000155711704134640022662 0ustar # # addressbook-multiget REPORT on addressbook resource # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/xml HEAD BEGINDATA /caldav.php/user1/addressbook/strumar_and_beren.txt /caldav.php/user1/addressbook/andrew_mcmillan.vcf /caldav.php/user1/addressbook/donald_kelly.vcf ENDDATA REPLACE=/"[0-9a-f]{32}"<.get.tag>/"deadbeefcafef00ddeadbeefcafefeed"<.get?tag>/ REPLACE=/UID:.+/UID:excellent-looking-uid-string/ REPLACE=/REV:\d{8}T\d{6}Z/REV:YYYYMMDDTHHMMSSZ/ REPLACE=/^ETag: "[0-9a-f]+"\s$/ETag: "a fine looking etag"/ davical-1.1.1/testing/tests/carddav/2031-REPORT-addressbook-multiget.result0000644000000000000000000020447311732477162023236 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "a fine looking etag" Content-Length: 67715 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/addressbook/andrew_mcmillan.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD VERSION:3.0 REV:2010-03-29T09:23:34Z UID:excellent-looking-uid-string X-SKYPE;X-EVOLUTION-UI-SLOT=1;TYPE=HOME:karora__ X-JABBER;X-EVOLUTION-UI-SLOT=3;TYPE=HOME:karora@irc.oftc.net TEL;X-EVOLUTION-UI-SLOT=3;TYPE=CELL:+64 22 123 4567 TEL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME,VOICE:+64 4 123 4567 TEL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK,VOICE:+64 22 123 4567 EMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:andrew@mcmillan.net.nz EMAIL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK:andrew@morphoss.com LABEL;TYPE=HOME:16 Kaka Place\nPorikana\n4173\nNew Zealand ADR;TYPE=HOME:;;16 Kaka Place;Porikana;;4173;New Zealand X-MOZILLA-HTML:FALSE X-EVOLUTION-VIDEO-URL: FBURL:https://davical.morphoss.com/freebusy.php/andrew@morphoss.com CALADRURI:mailto:andrew@morphoss.com CALURI:https://dotcal.com/karora X-EVOLUTION-BLOG-URL:http://andrew.mcmillan.net.nz/ CATEGORIES:Developer,Personal,Debian, X-EVOLUTION-FILE-AS:McMillan\, Andrew N:McMillan;Andrew;Watson;; FN:Andrew Watson McMillan NOTE:Primary author of DAViCal CalDAV Server. X-EVOLUTION-SPOUSE:Heather Buchanan X-EVOLUTION-ANNIVERSARY:1989-04-22 BDAY:1958-07-26 NICKNAME:karora X-EVOLUTION-ASSISTANT: X-EVOLUTION-MANAGER: ROLE:Geek ORG:dotCal;;Porirua TITLE:Chief Technology Officer URL:http://andrew.mcmillan.net.nz/ END:VCARD HTTP/1.1 200 OK /caldav.php/user1/addressbook/donald_kelly.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD fn:Donald Kelly n:Kelly;Donald;;; org:Esposo Designs Ltd adr:;;25 Rintoul St;Newtown;Wellington;;New Zealand email;type=internet:donald@example.co.nz title:Proprietor tel;type=work:+64 4 347 4747 tel;type=cell:+64 2 1234-4321 x-mozilla-html:TRUE url:www.example.co.nz version:2.1 UID:excellent-looking-uid-string REV:YYYYMMDDTHHMMSSZ END:VCARD HTTP/1.1 200 OK /caldav.php/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD VERSION:3.0 N:McMillan;Andrew;;; FN:Morphoss Ltd ORG:Morphoss Ltd; EMAIL;type=INTERNET;type=WORK;type=pref:andrew+davical@morphoss.com TEL;type=WORK;type=pref:+64272332426 PHOTO;BASE64: /9j/4AAQSkZJRgABAQAAAQABAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAA AqACAAQAAAABAAAA2qADAAQAAAABAAAA2gAAAAD/2wBDAAIBAQIBAQICAQICAgICAwUDAwMDAwYE BAMFBwYHBwcGBgYHCAsJBwgKCAYGCQ0JCgsLDAwMBwkNDg0MDgsMDAv/2wBDAQICAgMCAwUDAwUL CAYICwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwv/wAAR CADaANoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol JicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW l5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3 +Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5 OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan qKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIR AxEAPwD6Nuf2mfHfju2aDwb488cWzx/6uf8At+6AY+/7zJFR2fxp+IXhvwg7a18U/Gmoar5x3+R4 kuXWL0UjzOOPXBr5s+FF9c/EnUp9GfUptK0bSxC2rtA5S5uWlz5dsjj7gKqWcj5sYA6mvdE/Zo8F eD7iGf4TW82lXd1bnzw0ZKSknuScsepyfwruhR5IObdj1YzVWoqcUi6/7TPxJzgfEHxx/wCD66/+ OUwftMfErP8AyULxz/4Pbr/45XOa3oF94akxrEOIz0nj5jP1/u/jVIR7lyvO78qyjKMlc3qYdxvd HdaN+1f8StJug7eO/F9yp6pNrNy4P5yV5t8eNG+LvxjuZtX/AGdf2gfjF4U8QyAltGn8b6mdNu2/ uxHz/wByT2xxWjHHnHr2q/o9jNdX0EdgG86RwECjkkmuiKUnoTQrTwdT2lPR+mn4mJ/wSb8eftBS a/8AFHUP2iviL8Ur650RY9MttP1nxTfXsUM+Gd3RZZWCnhBkdj719g6b8VvGlhpdrBP4u8TzTIix s76pOS7dyTvye9VNC8OQ+HPDkjiKOO+1N42vJFHM8ioAWb1OEUUxIPMu0DAYUFzj/PvUVYq6ujqq VvrlWeIlFJvolotDWf4t+Ln+VvFniZWB4xqk/P8A4/Ug+MXi9WVp/FPiJGXgMNRmKN/vLu/WsWS3 8wncAcfpQLd05ALr6d6zi+RidGEuh0bfFnxVdFQfFPiOCU/dxqc2x/od9Zmp/EbxvExNv4u8Uq2f unVZ8H6HfVBLcoD9mIIPWNvun/CrNrNkeVKpcH/lk/3h/unvW6cJoydFRW2hRb41eNoXKTeLfFAY dc6pP/8AF1Inxt8ZZw3i3xP/AODWf/4up7/w9DqcZa3+bHVejpWBfaDJZFiQWQHrjkfUU+VLoR7J PVI34fjV4w7+LPEx/wC4pOf/AGerEXxp8X8Z8V+JD/3E5v8A4uuNCkdPpUsUhU80WRm6S7Hbw/GP xaw+bxT4jz/2E5v/AIqrEPxf8WHk+KfEJ+upTf8AxVcRFcDHB5q7a3fQtzVLl7Gcqa7HaRfFrxUe vifxCf8AuJTf/FVZi+K/ik9fEviD/wAGE3/xVclBIp+7VuCQE/N+dXyx7GMoHVR/FLxPj/kZNf8A /BhN/wDFVYh+KPiZ/wDmYtd9P+P+X/4quYj6DPSrERyevWqjGNjNxTOoi+JviQn5vEGt/X7fL/8A FVdtviV4hB/ea9rR/wC32X/4quWgPTPrV2AZaq5Y9jNrodXB8RdfOM65q5/7fJP/AIqr9t491xvv 6zq343kn/wAVXMWw5BxzWhaL0zVKMX0IsdFB441pz/yF9UP/AG9Sf41dHjDWMf8AIW1P/wACn/xr DtFwcVc2j0rVQj2GnY/OHVP2YdL8S+K9X1fwlqV3obaldRy3EMKgxTPEuI5MdmCtjivUPC3hFPDO mpF58t1MFAaaQ5Zq+dP+CbPxj8bfFjwdf/8AC2rGSwmsHEZSY5dyABkd8GvqWKIk5HcdK8HFe0pS dKTvY+mwcKbgqkI2Kc9ms6lZVDAjBBGQa5HXfhTBNK0uhk2kpySnWNj9O34V3XkEnLUNB5gOBXKp OOx6TSkrNHjd7oN7os23VoWT+645U/Q16d+zx4Xh1DVbi7lQSS2ygcjiInoPrjn2zWpdWMX2Vjcq rKoJIIyK7L9n7w4tv4PF15YWTUJWnOBjIJ4/SvSwdR1JO62PLx1CNFKUXubmux+UbaH/AJ5xmRh7 scD9BVG0hy87nsFQfz/wpbXV28Satq8xCiC3vntICP4liAUn/vsP+VXbe3H2BWI5lZm/XA/lVVZc zuYULOKt1Kiwk47U9bc9+lWktznnr0p4t+fasWdKKTWYPQEHsRSSW2VxcqWBPDDtWkLbdinfZwRg jr2qLlLYzdkkBBfdKqjhwf3i/j/EPrU4Md9HuusMBx5qDAHsw7VZax7xnn0PSoXtlMv7tjDORgEf xfh3FWqzjuQ6S6GTq/hMffhCoTyCPun/AArDudPktZNtwpUn9a662vXiupYHAjZAGOeYnB6e6Hg+ 1Sz6XDqSFCoWQjPlN391P+FbxkpK6MXE4kRnrTo5Cg4Na2p+HZbJ8wgso7H7w/xrNKYb09qG7EOH cfFetGPmq5a6wA2HNZjdajdypOKpTM5UvI6u01RXxzxWjBOGHymuCjvGjbIY8e9XLPxRJbt8+SB3 rRTMHQfQ723lGcVo2pyRj1rjdP8AF8MoxI20j1rX0fxlY3GrW9nFMrXFw21FHOTWikcs4NdDsLUE 4FaVmmG96q29o6kAjB/lV61gKkE1Sepm4GhZrk1dC8dTUFlEABV8R8VvF32Iasfin4F+Mviz4KeG NGk+H6x+IIZbqSDUPPP+lS7chTGf4x8jNj0ZcZJr6y+Dn7QmifFDwVYajcXEOmXt1K1q1ncOEl89 eGRVPJ618XeJLa5l1vwzofhNngmskikiGcOssxQw5PYiMWIP/XRq9A+GusmPxHqt34Us7Fl8PJLN Y30sQeYqWSKIZPeQ/Zj/ANtmrPHYenWjzJa738r2V/Xp1sZ5bmtWg+WWq2/C/wArep9qIgYZ7HpT lgBA7V4X4C/bIiuLaYeM7Tb5MHnrJEcb0yApIPdt0Z/4GK7o/tSeB9K0ywn8a+INM0Ga+IUW19Os csTEKcOP4eHXk4HzCvCq0J03aUT7Khj6FZXU0dT4oZotNaOHO+4IiXHqxx/WvbPBmmp4f8O2yHCp Zwbj+AzXjHhyW28c+NNCTRrm3vLORzdCWGQSI6qOCGBIIya941Rfsfh6bYELTAQqGGQc9f0BrtwU eWm5PqcmYz55qKfQ4/S9HXSNHWGyXH3pCOu53Jdj+LMavwxr9miSM58tAv6VmrFdaTwrEoP4JGLI fo/Vfo2frV2z1CK6lEcwaCY/wPwW/wB09G/CokiadtEWRDzzUq2xxU0cZ/j+Ye3Wp0jDdOahnQkV RbZ+7Tzb46iraRYwAPxp6w57VDKSKYtSBk44rPurbzPEFqP7kbsf0H9a3GiwORXLeJvHOl+D9cNz 4ou4rS3WDYHc9WznAHU9KiWhVuhctbbN/ftIMhSi/kuf601rMqn+j42/e8tugPqD1U/SrOg39vrl hNeaRKJ4Lli0bjIBGAO/0q7NYrJz0Ydx1ojJrVCSUlqZf2oSjZdo0g9D/rU+n94frWfqnh2O8iMt kQ4/vKOR9RWvdWIYf6Qu4Kchh1FU5kkt28xSx/6aJ97/AIEOjfzreNW/xESpNbHGajZS2Tfvhlex HQ1nTXOMktiut17UopoSJlQMeN68o31HY/WuG8QWcltuaJsL125/kacpWBUXJXHT6moB3NVKfXVQ nJFc5qWvi3cqzfN0x3rLudVMsJk1GQRxDnk4/OodRomVFHTXXiySQlLQjjqx7f41q/CHxhZ6b8UN J+3O00gnyyj5mYYNeSan4vkv3MGhkxx9DLjk/wC6K2/g8v2H4g6Q7kkm6QMxOc5OOv41yyx3K+WJ r/Z/uuU9D74tLa18RWS3GjSK6n07exHaozYNDJtkXDVyOkzXOjXXnaVIY37gj5XHoRXeaB4ks/FK rDeKLe8A+6T191PevTw+LhiFyvSR5OKwUqGq1RFbQlT7VcGcd6ln017A/P8AMh6MOn4+lHk/Wu5X WjR50j8kdH8T/Dj4va02rarDL4T8SSROq3cTb7fzWjKLIVPdSVYdOUX0q7c/s9at4G+GV4vhWW31 UareoBdWJ3rFAikRFsdMPJGx9BbD1FfKUvh3xF4P+PieA9A+0a3eSaWmprmLaVBRJPKPPLBZYsnj lj6V6Z8Kv2mNT8E6jHFYXl3p1ypAe1mBAI90Pak17WOj00+7p6Hnxw0FLnirPXbbXd22v59ToTpE N8jxuDDBf3KwjcMeXbQqGc/grj8bc+lfLPxE8L6v+0J8TfE+tw38tuxuTGtu0IljfZl2DDrwZNnB H+rHpX3lF8WvBvxn057T4macdMvpYZLddS08BSgkVlYlehyHYf8AAjXndn+xHrvw5tJtQ+EWo2vj HTpvMkeS3G26G9izF4ick5P8Oa7MG17VuTtppfv6/wDDGeLpclDkaum1e2rUVe+nm30PO/2I/iHr /wCzJNa3HgXVXvrq3R1u9PnkY20pZiflQ8x44AxxgfjX6wW3iLUfF1j4EfXbQadeXemNrN/ao5dY HaNEWPdgZwZH7fw1+fn7GnwktvFnxxbRtcgCXWryRwuHj+ZERi8gwRw3A/I1+m2vWytr8/kooW3R LZOPuhRkj82P5Us2jy8seTll18/61N8jptuShV56d9PLuvyMSSIlm2oXVU3Ed+uP8aqHSLe+RhAQ ATkxsuVz9O31GK3I7YpHKx6swUfgM/1qCewSc5cYYdGHBFeFdp6H1qSluZEX2rSXAB3Rj+GViVx7 SdR9G/OtO11GO4kCNmKYj7j8E/T1HuKjlml0xHN0BNEP4h97H071yni/4haZpVkDFdwQvJIUW2kX JY4znacbfqMUpW6jV4bHb31/DpFlLc6pNFBbQKXkkdgFQAZJJPQVx2h/tLeDfEOrrYaTqqy3EpIh JgkRJ8dTGzKA4A5yCa+Ov2t/245hpmr6KmV02yeGK9dwZVILKZArj+Hy88EEnJ9K8W8a/tpTvpmn DwO9nYOBvjvrhzJ5mekrL0XGfU5z2qGmmS6rufoV8X/2xfBHw8e7sLzxDp39o2S77i3WYGWBcEkk Dp06V8I/FL/gojH8Q/Gd5DpKxX1lbzRyC3dWdn43Abh04+nPrXwT8cf2ttQ8K/EvVYvFN4ur3l4j JNNHhI5VLMygBc8EuxOf6V4NN+07rei3k62Ny9rDOACI3OSoOVBPfHvV+yja8tjOWJSXxWufvR+y r+1Nc/EbxPFENRl02xihE0Vi0gJmLMCxYjgjB6HHJB7V9gaB4lsfEtuW02aOR1JV1DAlSOxxX83f wf8A25byw02wNxqE9pc2S7VklzjHbkc49vevtP8AZc/4KKeIW1bTyusWZ3EbjaQlVfngMp+979Kz lh/ZJtbGscRe3+W6P17ltwVyAD71QvLTZkxcZ7V4R4G/bot/FWmWokSFbl5PLkEf7wg9ztyOPzr3 Lwz4ih8W6LHdWjI6yruBUEBh6gHkVDi46s6ozUjkfE0eLolD5Uh68ZDfUd643xBftBG0cwEe7sT+ 7b6H+H6Hiu/8TW4ac+YM/WuB8WWhIZc5Ujoa5XNwZ3xgpRPLfHviy00m9UbWe4wQI9vP5+lcrJe3 fiObdqTAIOViXIVf8TW78Q9OV3tGAztkdCfTpxVHTbbaBtyccVx4qtJy5U9Dow9GKjzLclsbMRqM D61veFGNj4jsJo+PKuEb6YYVn28JA5XNXbRjDcowAypB/KsqOjQq12mfbkMO4ZxwwzTmstxVo8qy nKkHBB9Qak0c/adKtZRyJIlYe+QDVsR4H0rqSsea1ojY8LeOntALbxKPNiPyiXGf++h/WurSw0yV AyTJtYZGJeMV555IYncKT7IO3HtnpXo0swnTXLLU82tl8KkuaDsfjt+zxqsnxU/aP+JPiyX91JbG LQoXA/1ElwxklVT/ALEc8i+32celW774IaD8Tf22fF2teJDJFpXhrTLeG+USfItw2JJOv3QkZlGO P9Sa+gf2bvgx8OvDWmy/8Kr1c6gt/q82t3iXTATzySH5l/75eZR0++PSvKV+Gfifwr8CvFf/AAsW wnsfGnxX8Tz2rw4yYxez+UoUrn5Vga7bI7MK75c1NtR00SPnOV72PP8A4Y/A7xj43+F1r428AWkV 1p2qvLc2+lpNm9gtS7eUxRuWDJtYYycEVteAfinrXgrWgIZL3TL2BsNGwKMD6Mpr6J0fwJeeBdDs oLW3ls4LSNY7eSL7iKoAADA4HQcZB9q0dRi0zxqkafFLR7LVmiIKXuzZcRqP9scn8ciu1Jvrc6lQ a2Z7R+yF4Ai+MOu+HPinrmlxadqtla3NndTImxdSOFWObb/eCmUFu/HpXsUcZuY2ncEG4dpjn/aJ I/QgUfCLxOuu/AeK80uwTS7J4zZ6dGihA8IIiR9oPGTuIHoAe9XbuMQwFY8AAbR/KssS72X9ehvg KMaTk4rr+JmG3K26D+9lvzqhq95FpFq812dqKMk1uXUW18L/AAjA/CvFf2zviJN4E+FV7/YiySah Iu6IxttaIDktn6ZFcTV9j1XLlVzzj9qf9tuD4TweXplncXUkMu2cx4PljB4/3uOlflX+2J/wUa+I +seNNZv/AAT4uuItFd2W2gi0+JWgQ4+QyFSSeOSD1H0r6H+Jsmr6zoWoQ65NqH2+4GYYZYSY8MnS Qjq3OSRmvjH42Q6NoPg29efVFEMCPm1aZZSk4bBL9O44XnpnnIqoW5tjCs1zas8/+GX7XviW+8Wy x+OtUlv7a4cSyQ3LkoeMHgnk4x+Vc38Xfj63hq6vLf4d6kXtnMkawyR5EKsQTsbPTsOOlef+DPAO pfEPWJrjSVeC08wlZNuAR7V39p+yrNqcDfblm8wnhvWtJuC6HoYXLcZmFO9OHo3+Z4TrPiC48Q3s s93IXlf5yx/lULIbpPOib5j95T2r3Zf2MrkM7tKY1Xr8pxipNO/Ywvb19sDuT3OzrzWN01dsS4Qz B3cl+J5tompQad9meaIXS4ACbiN3HTjtX0h4G8R6Kh0d9ImS0uvIZJlQ8BvlwPfv1xjArD0v9iTU dPzLZShZkX92JV3oT7is/wAOfATxT4M103N9pjRy26yOMy7ophg8KMdec1q60ZWRU8lxeFsqkfuP tf8AZ98U3hlsJtF1HyNQmcQoYmyQmQDx64yc+2O9fXPwB/aG8Q/DTxpbaLqGvDWrC8Ls0d7AElic EAhWXrnp3HBr8sfgX8VvEvwo8X2qzRCOSbDB2G5kU9NpzgDmvq3wH+0Zp194zsZ9eivNtmPN3uAZ EbI7gYxjPH+NZSiptKxzSUqV0/kfqdc6umqFCHQtLGH2g/Mn1/Oua8U2u7JHoa4n4U/G/SfiHaWt 5pWoWzyugTarhW/EZ/T2rv8AW0JiUsOSK8qrFp6ntUJKUVZni3jrSPscEW9ifNuZnHsCRxWbaL5e 0LXT/EyLNlZMcE+fMufyrnrZMgZAzXDiF+8+R1YXWl95YjJB+Xj1qZPvjp+FNVdp7D8acMbz14NT DdNBUR9v/Dhv7T8AaLOOfNsoW/8AHBW2bQha5v8AZ8uvt/wd0Bic7bYJ/wB8kj+ldutvvU8V22ue Yo+6jMW2/P3pfJx2rR+xkrkDmmm1bPQ0WMZKx+A2mX/jv4WRWF9cWd9LZ3lst7FcW5LOkbM4Uvt6 E+WxA9CD3Fe5fCD/AIKH6nor20fiV4dTjt3DpHeIPMjYcZUnow55616bDYR2WkW7RwpNYRqLi2iI 4a2tUHkD/gf2K3Hv9p968X/4KIfDXRfBPws0i30azT/hIrk2mnW86JiQzyMXkk46ny7aU8/89s19 GsSp2jKP9f12Z8ZHSV1ofXnwy/bN8D/FKJYdRmGi6hMNp34COffsw+tdr468DaInhN9WWezitHG2 O5t3ESu5HyrtPyFj2AKk9ga/Kz4W+ANfbxjouh+G7s3f2+8uIhPMScxRSLEHGPVzx7MK/S39hz4f a5Jd3fh3xFEmteF5ozDqcU+WgO1soyk9G3KGXHIxmtuRN+49dzoVWfLe3kfVWquPB2jeCvDemxIg dT5ijpHHbwgE4/32Srkv7yaNXA5bJ+gGab4o0k3nxJS/lkLfYtNFoqH+FpJPMdvxCxinRYN028/d j49SSf8A61c1Z3k/uO/Cq0SvK3zYY/Svjb9s/wCLhvNTvoPDmp6TEunCWKYSHzJG5wy4+6OmOa+z Lq3Ei4cZ9a/Fj/gq58R/EH7L/iPxdp3gvxTPZxX12b9o5lWWKQSMfkUEZDgjkZIJ578YqPM7I6qk mle2h5b+3x/wUv1Hwbpq6P4VuI/t7ECaMWrxowwQDuLYxjHCnnvXwz4MPiH9qf4kPc+L7uSSxifz Jwo2RL6KqDAz7+leffE3xtf+PvFEt3rV/d6jcztlnmfc2T29vwr6s/Zq8CQeCvBNrEqqLmVd8x7s 5/zitHJUV7u5tk+GeYYr3vgjv59j0XwN4I03w9aw21hbKiRLtA28Cu1stJiZM26qMnnArDsm+zRI zHORjGOldDoVwWQgnv27159Rtn67l9KLSS6Ej2kCIwlQN2PHFdN8PNDtZrxVu4kCdeBWVBpHmlTK uVfnGeldX4Wsi17CsKgpjDc4K1F0j6KlKnCJ6XpPgHTdQsszW8TuThTjoK15v2b7DxFphjlhB342 sAMqfasPw1rn2W+WMlkBO1RnvX0t8HPBEviAQlA8nmAEhRn9KuPvaI4cVGl7N+0St5nyD4+/4Jxy eI/C14loxt9Qs1aSzcIdr9Tt9gTXx58Pfi1c6B8RLzQ/HhuLKaycwSxOv+qdDjbj3P5g1+/OmfDl YNKeO5hV14XDivxL/wCC8HwIj/Z8/ai0/wASeHbVrW18XWLFwowrXMLAN+JV0P4V2Qbtys/LuIcJ Spr29NaXs/8AP9D1L4U/En/hHvEEjaB4nSxv9SgGLZosAtnAzv8Aug+tfbn7PXxv1jxoq6f8QXga /Vf4F2grjCkc98c5r8cP2Y/G8nifWreC0sby+uJmBu2aQMwA6DJ+6o49q/U/9hp5bjw/qs+oLE81 sUSNWkDPbwgk7F7/AHhnP0FY14JwfNujw8LWm6istD1z4ihZtMtyjZ2Xcqn6+lc3bR8DvW54ztjb 6QxY5WXUZXU56ggGsS2YZG2vDxK9/wCR9Bgr+yu+7LCLjhiaeOW5HOeTTUUk8fnSoTkjoRWKKqO5 9h/snXP2v4Kabg58mSWP8nP+Nep2q7+2K8Z/Ys1AT/COWPvb38ox9Qp/rXtNkcqN3Nd55mys+7LM MOcAVN9gB7fpSQD5uRxVsNgU0jJ6H5x3Hw4uf+EztLEWMtrYReTbW6yLx5MI83H1P2bTk+rsPWvk f9vHxoPEn7SWi6Pp7ebH4cs7nXiBypI/cW2T/tC1jIH/AE3961vgj/wVB13RkhtPEdxFqsKYXy7l dsgH41315c/BX9o7X7jV9UjvfCHii9hht2vIm82BliZGjUxk7doMadCMhRmvoHhJRlZ6/wBfefEU 5X/qxyn7JHgR7H4l3lxJEzReGbCLTUJHPnKglk/EvND+Vfq78DfACeBfAekaesapMsCNOQOXkIyx PvnNfI/7Hv7Lf/COTpGviDTPE6ahqpv7m7gHlvIrSGVt0ZPBJEa4GQAor7tCCws5ZXOBFGSSe3Fd OFg4OU5eh1yklCMV5s4e/wDF2kaj4z1Gy0jU7OTUIpR59oZR5sZ2rjjOR8u386fdTCJsX0bRejMP l/766V+WvxZ+KV34k+NXiTxBpl3NBLe6nNLFLE5VggfamCP9lVr0L4Yf8FBfHXgWNbbWruLxBYgA NFfAmTHtIOfzzUzpRqa9S6OM5NJLQ+3/AIg/EFPBrWMEbxPd6nP9ntEkfCu2xmPPsEJ9+B3r+cH/ AILVfG6++KP7ZfieM6ot9o1hdNbWrx/6vcoHmAAddrEqD3xnvX6Kf8FRP+CmsXh/4M6B4j8D6Ze2 eq6feSRtCHAEEkkeElVwMEAqwIKjO6vxT+M/7QeqfGG0tbbxHDYA6fPcSx3EUGyZ/Ok3srkfeAbO OmMmsacHSbk/Q0r4pSjo9DkvCWnrqHjCyjPCvMpOTyBnrX2z8PiFsYVUZCgAc9RXyH8A9AbxL8SL SPqq5d++AP8AIr7H8IRQ2wRnLKiMBXNXezsfUcLQtSlLuztIZkuLbGM7cZOOtbXhyMCZWj3HecAe lcxDqlvJcEWU0ZPQgHGa3vDc88dwAVJSTkcg4NcUr2ufpOB/dJOWzPR9F0P7R+9fkR8le5q94fv1 tb6aSQkAAgDH86zNF8RL9jLuQoC/Mc+1Q+GLs6zeSR4ByxYkdwK57NJntdLt6HrPw80FdZ1QPcnK jawPevtH4K3h0PRVihi+YqqqwHOTXy7+zjoUeqZChdh43E56da+qPhtd20SwKpHlxHO/d9444I+l duHukeZmlSM4ci1sfQXw7tf+EliWPbmKBAc471+UX/B0/wCDUX4a/Di9g2I1rrd0Ax+9tMKgj9Af wr9eP2cdOXWzP9j+6FAGP4q/MX/g6J8Lz33hHwBodjB59zeXN3dLtXeYyFABxXpOnzcrW5+cZxXX s5Um+x+W37Jt9FqUMdqsn2K9sD9qstQjH7xeu63fjDoxGQD0Nfqj+wv4lvfFrXMPiC0hivo7YFZo ovKjvIA3Lbf4Tlun86/Pj4Efs6PCNBl8KLcww3YSSaQj5Y7xAwKj1RgM/ifSv04/YN0tNS+G0erX dt5Vy6vEjHkqu750J74ZePbFcmISim2eFhXzyjFd/wCvM7f4kRpFoFusYchLpgcnPODmuUhAA7c8 Vv8Aja5mm0a58wkrFqkir7DBrnoDnH0rwMUrzXofTYP+F82W4+Op7UPKF6dKjBJGfzpC27gnpWMY 9WVNn0/+wbc/avCGuwZOYrxHx6bk/wDsa+g7aEgZ7Gvmv/gnveCW88S2rHjZBL+rj+tfUlvZbkBF dyWh5j+0vNkdswEnzdKvADHSq72JRjjNJ+8HrVpGLPxLtvg/4D+JerfE/wAe+OdPiHh7RJ5jZi3J h22ljbSSuVK4wWWK0jz/ANNz3rzz4MfA/Vte8E+DtQhv/KvNf0w6rc28gwtpEWmZBnr/AKq3kc59 vWu//aehf4T/ALBmh+EtJhkGsfEnUbDw5DHg73a8kF9cfiLaKzQ/XFeqeGNCttIvdSygW3gt7bw9 Zqg42FhajH1isrtv+2+e9fQYeUnonu7L8O/rf5bnwtRtWS6l/wDZg8K+LE8Y6fZ/DKS8k1MMrjym ICjg7n7BR3Jr9BP2iPH178MP2W/Ees+JpoW1W10lw8kfyo85TauPq7LXN/sS+BNP8KfDUXmmWqR3 OosWlmI+eQA8ZPp7VwX/AAV18cnQ/wBnSz0S1YibXtRijYDqY48yt+qIPxr0cRZJpbGibS956n5s fayAVLZ24GSetMkvjHHuRuR2qoztGSsgPB5zVe6nfqn3T2rj5uoJM8m/bW1LS9Y+C+s2fi8ExCHf F/eRwflYfjX5fXqeXdOFfeATz61+pP7UHwTb45/DufSY7qWynJDpLGu48c7SMjIPpmvzb+Kfwrvv hV4qudL1lhI0bfI4UrvXPUg8qeOlZSvPbcubvoemfsXaHDI2salKy+dEUgUHqAQSf1Fev6j4k8yb yIJNuXwyg8n8a8c+A/hK9sfAE+q+Hr+S1uGlZZo9u5ZYxjIHcN1wRXZ+OfAc99qbp4etoLUOq7pX UOwGOozyT71zpK75mfc5NOdHDw5I7a/edvfxXttatNoU1oZ9o+SV8FfeqnhT4zeI/Duqbbq1F2iH BMcqsvucZzXAXvwO1iSGx/sh5pCFKSiQuUcZJzlfr0rR17wVNpFlYQ2vkxtbxlbh1BQzEk5IPt0G fShxp9X/AF956tPHY2pN/u+W3no/wPdvCPxj/wCEwaS3tlZHYhJEU/dOea9Gm1C78FWklyI5NksK lcDGctg18s/swfb5viDNa+GY0uIojgmQEEsDg59K+8vjF4yv5/2a7PTNf8Nafo+tWzgw6i1ySl1G wKgLHs5bdwDuxuxmuepStU5Fse5SzWpHB+2n1dr9DjfAP7bdt8NlS3vY5toOAFPXsc5r6V+Bf7Xm mfEPWbKHTGk2zEKybuF9s1+ZPiG41iCS4fbNK9oRtT7PGfNHcnKkg17f+xf8TfEF3erd+HvDwuBb SrF5JQJLPIT92Ncjd1HOO9bU6SWt9Ec7z2Sm4VYtf9u3/FXP6Jf2KtPW60cTmI+S9uHVuhU5wVP5 gg+h9q/M7/g5pmGhfEv4e20bj7RPDLLChXPmRrMpPT0B5PpX15+y5/wULtPh18E9CHiHQnklvLh7 aSG3mJuYGQcpJAyK6Nk8DLA84Jr47/4L863aftE/tM/ASTQ7qztbCbQ7rUA0U/nTSQTzIiytGB+7 RtpUB8HIbgba3hze15ls/wBEz4DH4idavUqfZlovl2/4B8XfBzU5dR1DTYtbu30+xjja5SFDtMMi qygDHsAPq3vX39+w9BewfB/Gs7VCzHygF253IrsSPXLn9a+d/Cv7NulfHj4zQRaLBJYWtxPE0cSY SSPAIdicEKCVU9OrHAr7h8OfCzT/AITaJHpegQNDHGMsWdneRu5LMSSTisswXs6fLbVjy6Lq1ebo jj/ibb7dAJUAFrzcf++TXDW7kgZyO1d58VDt8Ose32ofqDXBRNxkda+fxWkl6H1GHfuP1ZZ34Ppi mucnOTk881xfxb+LC/CaxsL68s3vLW4uDDN5bfPGoUtuA78A8e1aOmfEXTdZ8QLp2jzNczG1S7Zk HyRo/Kbj6kc4qOSVlKxlKpHmcE9f6/zPp/8A4J63234maxbMf9fp+7HrtkX/AOKNfY9ooQDOOtfD v7BWofZ/j9DESMXNhPHweuAG/wDZa+1tZmktLNngJDLzXXT+FM4J/FI09gaUDsR1p32FT1zXzf4G /az8W+M/27dd+EOgaPo80ej+F4/EsEs9w0Mt8hmWJ40OCoZS+eRggdRXup8caxEdtz4J8XiReGCW qOoPfDB8Ee4610xi2tDzJ4+jCTjKVmu5+ZPx6/Zq1T9oD47fC3xX4C1fw/q/hj4dDU9XNik4W4ut Tm2+QVjIxtSOC3iBzkc8YrY8MfB3WPDun6FZ+ILK7SVbma5uWljPUIttAM9OizSf9tfevlDw74Z+ Kfwh1toLlJ5vJcgT2UpdXClwWGOcfunPI6DNfVfwO/aV8Z+GmtF8TN/aMSEGS3u03fhzX0lOEcO4 7W/4f5dT5L2fM73dlb87n3z8JvDaeGvA+m2cahTHEuQB6ivi/wD4KseKT4h+KWkaNCS0Wk2LTN6B 5Wx+e2MfnX278OfHlp8RPAthremWUmniWAmSFjwGHGVz2OK+Jf2g7u28efFPXJ9SijuYhcNChYZ4 T5ev4H86WLnZXaKT50fFd7pPzHCkFiazrvTSDheDX0VrvwY0vU9zWDyWzen3l/I81wniT4I6jZMz WQjulH9zr+RrznU8zoVN9Dxq+t2jJ9hjnpXw9/wUA0Jrjxmt08Dy7IAqPj7oySfw4/Wv0E17QXsZ JI7yJkkU8qwwePavjX9sbwnN4z+JsGmRTi2t7i0dp5GXKwopHp3J/nWlKaclc0S11PJ/2X2/4oq4 juf9XJcPgn69Pxr0mXzrGywiQXaocAuTHIfYkAg/XivM/gfLHZaNNaWmd1rKQfqa9Bg1HzrkK3Qn p71z1ad6jufp3D+GhVowUux1Ona5Ppelri2nCkHIS4Rxn2Bxn8a4rxPqk9zdSTXdk8xI/dK8qbQf U7c/lXaabbx3UQClVQjkZ9q5rxfdpFqC2OlKklyx4Xsvqax5XF2PoMRlEKFO6k/w/wAjr/2UNCNj raXFzGBdXcgaTA/L8q/S7xh8DIPib+zJp9xNaR3934e23yR7Q5aIf6xAO525YDuQK/O34E6XMt1G wf51wTg96/Xf9mzR7rTPgVb3ktq9y6WxYxqM+aNucfyH40Jc05dzsxFGksBCC010/r1Pz7+L3wH8 OeHPGL3ngW7jvtHvsTiJx5dzbhucbHAYiveP2TfAvhnwtLbaqbG0nli/ebpI2DJ9FzjNef8Axl+M GhfEXxpJB4atTZpBK0XkSJyhBwVKn0IIruP2bvgTYeK9ci+02Ns3mnlGiU4z+FEIvntE5JZLV+rq cpJq3mtPlc+mQNN8VlJ9Igt7fVVZVs4VwJbu6Y4RQpJ3Z+X5uwBJOBxJ+3h+zT8KvAvxQ8KeB/DG iaLpGsQ+HFvdQvbeFI7zUZZJmG93I3SOXDSEZ6Oexr61/Zf/AGbvDfg3TdMXQ9G0+zu5Yi0ssNqi NtGMgsBmvnj/AIKffDXSvGH7Qk1x4jZY54raKG0kV/LkTCb9yv8A7Jweo6e9ddOMqdSzlrbp9x+a Zq+fEKC+zd2X9L+vU4T4IfAy4+Grw/YbxkhkUymURASysfViDgduDxXoXiK5e5cG4YuwULk9SAMf 0rL8Gateajo2mT38gRPsyxqUHykjKsfxK7uefmFXNcLYy2CPUV5uLqSnL3jswNKEKalDqedfFO4W TwlcbCCY7tMgc9q85FwAo9veuv8AiAkseh61uUgNexOn+0No6fjmuBW6H/1q4MRFcyO/Bz5oz9Wc z8dvB93468PWNvpEZnMV2GkUPsbYyMhIPsWBPsDTfgl8MW+GOhTw6hKbieWXarsdzLEowi5PXHJx 2ziuoF/ubH5EVKkxf3qVJqPJ0BxUZOXf+v0PXf2L9SFl+0j4cycee8kJ/wCBRN/9avvzWId9jKG/ u1+cP7M2q/2f8fvCcxO0DUolP/Ajt/rX6V6jbbrd+v3a7KELwOCo/wB40fEtndf8K+/4LkfCK+z5 UPjTwdrGhykf8tGiH2hAfxjFfpDz71+ZH7b10Ph9+3X+yt4vz5aWfjoaRM+cfJdp5JBPp8xr9OGO 1iOePenK8UrHx2aw5a7ufkL4egTUdamtbUeZPcL9lhYDqrkRFv8Avzbzt/22r0z9mL4L2Pj34oap qPjmE3H2Kbd9n/5Zljgjd6gDHFeT/st/F/wh438VXa6Xq1ms+mxO8dvO3lTnKrGpAb7wEcecju5r 6/8A2WPCg0zw7dag6kS6jMZWOPU5r36ELV+VrZXMopKjzPe56F8QPEVv4F+GmqXsaxwxWVsxRQAq gKpOB2HSvzduviwjarJH4lguNOvJWLstyhTcWOcgnqDnrX2j+3Zr76T8F10yF8Ta7eQWKgdSHkG7 /wAdD18n+NPjHrOoeI72z1xNO1zS45TDHaalarOiIpwArEbl/A1vVh7V8q/r8DJSjCKcupltq39r WrnRriASkfKThgD71TsL3Upp3+2xR+SnBfo3AGTj65xU9p4c8H6zN5ek6RqPhTUsNIn2G6Mtm+0b m+RwWXgHocVjeMNA8TWNml9oDO2mXCsF8yPGBnGd2MHNcdWjys6Kburp3Ll54etta0PZqUUU6yKZ PnUH7xz/AFr4q/bu8IeHfhZHqmsapugW8szbKinq2ScLnnnNfYR8eR6JpQh8QNGlwihCY/mjJxxg 9+K/L3/grh8cf+E1+IOm+HdDdjb6fEZ7hzxvdj8oA9AAx/GueEE3obcyW6PBPhDr/wBmv7qMsyLO wcjPP0/WvS9P1ZGycbUyeQOfyrwbwfqBs9SGWwe3vXq+neK7W1tIvOl2kL0Y9/StHPmvJH3WQ4qU aas9j0mXxJbaFo/n3cuFUAY7k15T4t+LP2PXpdTwRIU2CMNzj1+tcv8AE/4kG/lEdizeWp7NkNXG y3P9pSrG7ACcYLnOFb/P86yle19zuzXiH2i9lTd2j6L/AGdf2gZ1Mja7dR2fnNtSWUNsTnqQoJ/I V+gGg/8ABYnUPg/4H8IaB4MkstR0SyQtqt0ysbiYg/djUkBF24+Zs9+BX5GafLBbW0UF3OsVxG25 8kkBcDGMdx/WvQ/heYb/AFiyzcmCcAlt7fISuSOT0J7Z45rN6K7Wp5tLNJySp1KjaVvv/M+i/wDh ou68RfHTWfEUZigTX9Qm1BI0I2RGWQsVH03V+hX7CHxDbUdXsJXYN5rBTnkZr83vBPwgh8VWV81k Vt5EEctqA+dpMe4ggdBkdsYAr69/4Ju/FGPSpHtdcdIb3TnKyRSMBlweik9aVKoozTeh9dgs4p18 J7FK3KkkvK2n3H78/BZ7VPBdtfvLGALYPITx5Y7kn0wK/OX/AIKefEhdf8Xa3qDXBexwlqoAysKu +Cw+o8sn2Fe7/DP9pc2HwevJxdwiPUFWBInbO3apDjHpk18Tftg36+I9B1YX95I0EiPceSjZLSrH 8uR3Hy89sL+fVZKpJ3u3+B+aYuhKFepUk9W/6RwOqftZeIv2b9X0vR/COsJq1gtjHdSi6USxTNJk 7V5yqj7vB5xnuK9F8H/8FFvDHjC3jj8b2NzoNw3BmhPmwE+uOo/Kvhi8km1bU5WvJZDjCKgPCqOA B7DFbfh7Q1llXcOO+azqQhU0ZnSxFWkrJn354216z8RfDafUdAu4720uWjkjmj+643Yry8ahufmt b4cEQ/sv28S4CRRn/wBHsf61xkeo5k6/WvIxULTse/gKznSvLds6GO824wanjvSW4Pb61hW95vXI PJ6VcguyRg9qwUTeUjtfhZrB034l6BdJ8ph1GBsj08wV+r93H5tsxHda/H7Q9SNlq9rKpx5UyPn6 MDX7GaNANU0OynTlbi3jkz67lB/rXfhdInl4qpyTTPzp/wCC0sLeH/gv4Y8UW+Vl8HeMtM1UOOqh Jx/iK/UWwnj1WxhurVt0VzGsqEd1YZH6Gvjf/gpr+xxrX7Sn7Lvinw14IWNtS1BEltvMOAHSRXHP /Aa0Phn+3t4n8C/Dfw/onif4SeM7vUtH022sbueKWAxzTRRKjuuT0LKSPY1vDDTqK0e/dHzuaQVW opJXR+CGgeMPtV1DdWMpguoGykiNhgp6rkfnX1l+zJ/wVR8c/s5yW2m6vMniPw+rc2l4cyIvfy5f vL9DkV8F/DjWd00JJLKXOc+legT6kl8oLDIHy59D2r6lU3B2ep83SxEnFXP1M+KP7b/hL9rC/wDC F94SuXsLLR5H1DU4L0hGs2RMIC2cMMs3I/SvB3+Pfgm68XajbnxHphks7aTUZ5Ek8xPKX75BXOdo 5OO3NfDHi/XtOtdDvtO8U36WlpewmNn83YUBHUHPBHX8K+aNC/acT4S6jrdrHMmsNJpN5osEoPyg XEZheUe+xmwPU1hKHLdxZ1JqtZNaL+v61P2C8JftWfCDVtQlDfETSre8FtILOOS2m23TnHyBwh2k jOMjGepFe16N+3d8Gfhz8KbSPxj428OI1ral5YJLhd+dx+Xae/PSv5ttU+K2o3FyJ7C6a2xwojJD L+Nc5feJbvU5d9/cTTuerO5JrCfspvVs7MNiPY3VtD9bP21/+C2vwzj8RR2PwK8FWetRwyE3GoSk 26SH0RV+99SK/M749/F2P4x/FjWvE0EL2serSh4bZ38z7OoULt3YGehPTvXnUlwZ5Mhsgc4PapYf 33zgtn19K45xjO6iilVlUdnuX9P1No7wmRsuc7SOxrR1HXZUhCp80uMDPIGe1c3HPiQbcnb0q/p7 s98kc2TIflC4yV7/AJ1zJtO6Ouji5U4OMWTzWOpXJVpoiwzxk4LeuBV7QdGvNQv0hWP5ydwUD86n 0vzNNEFzqRfegZUTPPJ457d+fpUkHiqSK7jbTI5USJs7ZHyFA68kfzrb2adlexVKrBTUmaUnh20D xrf3ESyhtvzK2QK9F+G/gizntY7vT5ZbpbQFpGVfRSdvPPQV5zq/iSHUdWOoWax4DCTaw5Y8dMdQ PSu88LfF+DwndGzW1mQSr57xR8bmPTI6Dt9PenUpSULRPc+v0lH4I83fU9C8K/FbVNEjiudEt5ZY 7Z0VygJ3KMgrgnn7xHHY17P8I/GdvJ8QbvU7Kf5pyrNGG27WCjcMD0I6182+CvH8mra9ZrHHPY/Y 51MaTIBHIf4g+Bzk8c9a9b+Hs0+n6pJdaFbeUl8yGbYo+XHAJ7AE1y1KbvqOlilSmpx2P0S8A/HK 8j8IadaGcTW0jPHKjn54flBVj7E45z61Fr9/fWlwup6k0F5C8bQshOd28EDI9CA3P4V4x8JNYuvi BpsQ0+WS4vLKIiKNEA8zYpJBI6k7SPXgV6l4WZvGWhw2ksw/tEkeV5qna/yk4PoR/M9KvDrmqbE4 2tGULSZ4z8RPBMei61LLpkTrDI67k6hNwzj8wR+FT6BpskYQmNv3gyMDrWN+2rY+OtC0qe98JXUu nXCt5s+yMAsoiRWKnGOkYb8a+Hrn9rXxp4a8SPHLrurF45pAySzsdo4x7Z69K6nRs7s8ZVmk3LdH 7K+AJWX9m3DKQQr8fSU152l0TJhs9a+Rv2WP+Ci/iIrFp2r6kZlkygWb5o1zn7wNeq+C/wDgoN4a n8cf2H8Z9E+x75zCNRsW2hBnG5oz1H5Vz1sulUd4vU9DDZrGgvZzjt1Wp7pa3GBtJz9BV+G4yBnm quv6OmjywTaZOt3p99ELi0uV5SeM9CKjtbgkcnJ+leVKm4PlZ7EK0asVKLumbdtcksCG4/Wv2h+B d0ut/BvwlerhvtGlWz5/7ZrX4p2dxsOa/Yv9ijVv7a/ZR8Czltx/stIyf90lf6VadoaHh51U5IRl HzPT2iVlwygj0IrNk8H2TuxMEJyc/drUp26iMpQ2Z85RxEo394/jY8IeNIdFsxPeTRxRAbxlsYXG c1w/xT/bQur65ls/AX7i0U484/fcjuPSvHdU8VX+pabb2LzEwxrt68t9awTYOkhB5I5619dXrpfA jihQgnzM3vE3xH1XxbdtL4hvJ7tnPO5zwPYViz7Zw7x5OPWoyS3Ocn+VAkVMliR2OK5JVJNXZ0W7 EYYjrzzTCSxye9KxG4nt2pmfmP6Vxvey3NEhrt5bcGr1oxFucnhuvY4qtY2TahfJDCVDyHA3HAp4 uf3RC9+PwqYvl36mkdyS0AF1HuG4M2cHvW1ocmy6nlusRvKAobPzJk5P5jI/GsITmCdXQcpgj61u G5juo0k2JE0jHDqM7uOeOxHH50Qi5aMpS02NRbZ7aRLnzY7pGHykRkR/7ozya2YdIitorybWbaSQ FAURDjaxGST+n51tfDXTrWfQSLy1DpbxSSJM65ZicDgegJJPet3wtpV94pujYXIhmtLkBZJEA8sl ckcdcYyOO9dFrrbQ7KTaV5fLqeY6laQ2lzts42BjcCJmP31ZjtYjsa6X4cofEevf2fdyC3e52QAx 8kDIPPfA54rpfF/w8TVVnOmCET6evluQvXCkgDHsMDPOa5b4drep4wFxa2a+YjAKCdroT7dT1yK0 irK97F8zpO70PZT8H49KiljhAMrSZMomJlPoSvTk844PNdx4Blv/AA1plzba8PNW4tjBDcxPhGII Iyex9jU3w2nf4gW8DkpHdQLGswjbO4su1uOh7MD9fw9X+H3gC20q6/s/xKEMcLAOx+68LAjJI4B4 6fSs6kOfVot12o8tyx+z74gufB8LPo10ReLG3nqMhUByu7ce/wAy5Gf4vTNew/CzxTeX6Q6iha2Y TK6rI3ILZXIP4fhmvJtI0bTrXwrqz3NqPtkTLHD5CeX5y7lJDgEDIAH19a7m18drp3gTw8ttEZpk tmhKp8pSRnJLkH0DhRn0rJ0ZwfNEuNeM1GMo79/62PYodUX4ueBPEFhpkCXl8trJEJLlN4ilbgDG OQQGB9jX5f8A7VX7P+meE9fhuLoTWNpqEaS2zv8AfiyoZ0JH3grEjPtX6P8Aw18Zt4fiuTay26Tg JciUNtaTK7cfgSx985r5i/bf8IWFpo3iPU7VX1GxguHneCOI4wDnCnHCMzqMjGAtdT96PP8A1fQ4 nFwm/wCXz7Hw54UNx4H8TWcgkDJNiSJgwO9SxAyOx4/zmuy+MV9LYePLS8tnfF5Akob+Ek9SM+4r zK81e4v/ABJ9p1pkHmvvjRB8sajsB2AxivVfiPMur+FPDN3cRAhcxYwfkUjdye+Tmrpt6af1uVez 5ltsfo/+wp4yf4v/ALJ/2RpXnvPCOJFU8uIXOCPwIB/Ou0tbnawySBXhn/BGT4xW2har4u0qJYJV fS3ncOMhljZGKn6jP5V9R/F/wVZ6Iljrng5hJour5aIqSRG45ZD9M1zZlhHJ+2R1ZPjoxnLCy7u3 52MK0n6Z578V+uf/AATa1U6r+x34X3tuNs1xAfbbK2P0Ir8gLKff3r9WP+CSeqjUP2TFhySbPV7m P6ZCN/WvFatFnRnS/cfM+nKKKKk+UP4HzMwPBPAwOaVrkj7pI9ajU5BDZoA3n2HPvX0PM+Tsb2QB 8HK96aZDyFyc03JR+DS54znmuVzve+5VrDt+7ORx3ppXLfL9KQfKc/hTmGGJB5PepcdL9h7DD8kg 25GOfpU0UgZzI3GOo96gkG49c4pVPTJx3rFKWxXoTRL50wDdWPXtWhFBKFEahxzhARwc+lVLGMSM DkAL3NT6dc3IuVW0dlfPyjPAP4100Y2SBHuPh23l846XpM0SLZWcQbfF9xigLEnHqx49q9N+Gvhs Jo+oNdNC0jRuY3jBCFwowqgjjNeY+Gbu30Lwu73FxFFO0Q8133MpLL6V6x8N/E1lfaTBdWV0sUEK CExuCF3Dknbjrk10zg1H3f62/M7o2Sut+pmxyzS2D22qWoikv4wZC6FGkZWAyOOnI5964pPBqeA/ iPBZThp5J5DP9oZsKgXnC88NgHnrXrOqeHrnSIkeeQ3Xmv54lySY+/B9CO1QeIfBVr4pujfyr89o RIqBiGcdPlPuTz7elEHZ3T0KnK7v2G/C+S08KeMGjnf7MLkBYzI/DqeQw/E/pX0hp2mrNY/6VuWa 4nK253AmUBRnHqrKenqPrXhOueHbTxFNHcJFCbi1MYkQjZk7RgKfT5T+de1aRZRa7oNkNSmxHbEy W8gP3WU4KE5oi7yV2ZvVJs7PxD4Ku9V8Cx2GliJbm1mExQ8tKj7d5B9uOBzxXFDwtr/hj4kSaZPC ptLHU3e6Erjy5U5yVb+FSpOB/hXouj60+q2to9i8kd9axMZVzhZVUkHPrnKkfWsnW9YE2g2msyMi XF/K9nIpGBNFtz847MGJAPPFbWV72JUmtJdTZj1x9C0GCRbe3kexbyi0+Wea2c74Wb3Afbnvtpb3 Q28Z+HriC6hgtmuLK4syjODC6z4Q/iMg57VxHhpZbvTp7DWrpY72BURJgCYrkR5IBz0IU9uOK9J8 F6YukjTYIjMbi+mQxtcHj7y7kKdMA/Nu7g1k6dlYbqe7Zv8A4PU/Mn9oT4A3fgKK51W0EK2Vrqr2 kcK7t8YYSEYJHzL+5fn1qOO8e6+AEzzM0ptZUAyeYixYAD2619rf8FIPglfavZaXf+GrQS2c5e8n sUjJLPE8iSMNuGJCgk4zwTivjWe3Ft8MdVs2iNtFdXSqMHchxJgAE88ZroinL3r9iH7yUlu7Hrn/ AATb8fr8LYPGusagiTxS6FPbDe2F3NgAeueT/k19y/sMftKf8Lq0VPAPiYGaw1TC2b/x2TgcMPb1 9q/MnQb1vCXwt1OG2uf9IluhaL5Ywsi7uSPXOOtfQf8AwTm8Sy6F8S9EneWWNo5F3MvOFzxnHfIx +NdlOKmnCWz0+5HLiIunerHdar5I+3PF3hifwR4pvNLvyfMtJChOOuO9fpR/wRc1Rr74C+JrRjn7 LrAcc/34V/8Aia+Fv2j/ABD4W8ZfEFHivY9L1e+gjKPIw+z3UmAPLJ/gfjHPFfZ//BFK2vNC8PeP tL1qGWCaK4tJtkgweVkGfpwOa+cxmFdFSutND2KuNhjsInfXS6Pt8gqeaSp3TeKgryvh0PBnTcWf wOsvzEdfcUqEBhkZ/pSyjGcVFn5m+tfQvZF7oV05PIphHHSpB9+mt/rT9TWNaXI7FbCHG0Bs+tOP TrSN/Wm56/SlG62AG9R+NIvzjA5NJL96pLHm4XPrUWUpKJV7K5f0yMIpEqgpgZ55zWx4e0hdV1Sb yy3lxqGOxCCASAcntx3rIJwiY710ehOU8JXJUkFmUMQeSMjrXdTSUkOk7y19TuoZIr9Ht7NYfIim UAE58wbcDPsoGa9R+DNlazaQrTsjK11JGo+9yBggfXIOfavJvhzGr2zl1BJmbkj2FelfApinh692 EjbfNjHbKnNbVF+75l5fidEaj0a6ux6LpGp3bmf+1IWMEkXkBCMqjLldynvkEce1anhBFi06KVH8 6WxzBIf4kRm657kcf5zXOLO41i5QO+0yxEjPB5I6fTitbwMc+MNRQ/cMI+XtznPFcvKloa03eSNl IFsvEwsbdTPHqTnZlcIH2k/UA449DXR+HGfwj4TitYy19BaqdpVssxyxIPr1/SuasJGH9kMGO4Sq Ac89DXS6KojtpPLAX9/J0470Qlr9w5SvLbuekfDPxFHFoEsV3M5nYjDlfmUEc/X6VH8Q9NGn6Npd xcSzQxJeMI3UbwdwDqeOg4Ye2KqRoI7awZAFLRqSQOTz3q/4xjWTwzLHIoaMSK4UjI3DocevvXXC Xutoycrsx5pBqOh6imqB5LiSIH5G+XduAVgR0yMjFeieDdXk1Twvp7rNG15pBCxB1zlSp53dsHAz /wDWrznwSxk0OcOSwNlMSDzz8h/qa3LmVoNM0wQMyB7WQsFON33evrWtSSavYydR6pHbfFn7Vr3h bT7jSNQkjfSI5bmOK4OchsrJg9cbXP1r4/8Ajp8NrT/hDNei8OiO1FhcXWo2jScJMvkiSROeVKeW 5Ud8e9fbllZxT/CkvNFG7/a/K3MoJ2HqufT2r5X+Ocanwn4wjKjZHbTFVxwp2SLkDtwxH0JFYyl7 PVL+tC1FSSPlP4g3B0jwZ4fgsm3vcwecV/uHO3/69epfsweLG8OzJNFctHdJGDxwFxzn868b8Ykv JpYc5CcLn+EccCuv+GsjBuGI+Yjr2xXcpNRsVJ3iovrdnufxy+Od/wCIdASeC9lEsUu8lWO786/T b/g31/4KiR6n4vt/AHxbuPtFxqUC21nqDnL4UkojHuBk49AcV+Nfi+Rns2DsxGehPtXrv/BLe5kt v2mPCrW8jxsL+PBViD19qujCOLg6dRXUrr0IqUVDDuot1qj+t+k2g1Q8KSNL4W01pWLM1rESSckn YK0K+GkrOxC95XP/2Q== X-ABShowAs:COMPANY CATEGORIES:My Contacts X-ABUID:685FC9B6-8446-45B8-89AF-3F3BC70CA03A\:ABPerson UID:excellent-looking-uid-string REV:2010-06-23T00:01:37Z END:VCARD HTTP/1.1 200 OK /caldav.php/user1/addressbook/van_houtte.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD VERSION:3.0 PROFILE:VCARD FN:Vincent VAN HOUTTE N:VAN HOUTTE;Vincent;;Dhr.; BDAY:1978-12-31 TEL;TYPE=CELL,VOICE:0486 11 22 33 ADR;TYPE=HOME:;;Brusselsestraat 108;DENDERMONDE;;B-9200 LABEL;TYPE=HOME:Brusselsestraat 108\nB-9200 DENDERMONDE TEL;TYPE=HOME,VOICE:052 11 22 33 TEL;TYPE=HOME,FAX:052 44 55 66 EMAIL;TYPE=HOME:vvh@gmail.no ORG:Advocatenkantoor Suy, Van Baeveghem & Van Houtte;; TITLE:Advocaat ADR;TYPE=WORK:;;Brusselsestraat 108;DENDERMONDE;;B-9200 LABEL;TYPE=WORK:Brusselsestraat 108\nB-9200 DENDERMONDE TEL;TYPE=WORK,VOICE:052 11 22 33 TEL;TYPE=WORK,FAX:052 44 55 66 EMAIL;TYPE=WORK:vvh@gmail.no UID:excellent-looking-uid-string REV:2010-06-23T000000Z END:VCARD HTTP/1.1 200 OK /caldav.php/user1/addressbook/mustrmahn.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD VERSION:3.0 N:Mustermann;Anton;Karl;Dr.; FN:Überwerbung GmbH NICKNAME:Boss X-MAIDENNAME:Müller X-PHONETIC-FIRST-NAME:Anto X-PHONETIC-MIDDLE-NAME:Carl X-PHONETIC-LAST-NAME:Mustrmahn ORG:Überwerbung GmbH;Marketing TITLE:CEO EMAIL;type=INTERNET;type=WORK;type=pref:karl@mustermann.de TEL;type=WORK;type=pref:+49 30 1234567 TEL;type=CELL:+49 172 1234567 item1.ADR;type=WORK;type=pref:;;Musterweg 1a;Musterhausen;;12345;DE item1.X-ABADR:de NOTE:Test vCard item2.URL;type=pref:mustermann.de item2.X-ABLabel:_$!<HomePage>!$_ BDAY;value=date:1969-08-16 X-AIM;type=WORK;type=pref:bethel69 X-JABBER;type=HOME;type=pref:bethel69@foo.com PHOTO;=ASE64: /9j/4AAQSkZJRgABAQAAAQABAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAA QAAAABAAAAGgAAAAAA AqACAAQAAAABAAAAS6ADAAQAAAABAAAASwAAAAD/2wBDAAIBAQIBA QICAQICAgICAwUDAwMDAwYE BAMFBwYHBwcGBgYHCAsJBwgKCAYGCQ0JCgsLDAwMBwkNDg0M DgsMDAv/2wBDAQICAgMCAwUDAwUL CAYICwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCws LCwsLCwsLCwsLCwsLCwsLCwsLCwv/wAAR CABLAEsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQ EAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE 1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol JicoKSo0NTY3ODk6Q0RFRkdISUpT VFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW l5iZmqKjpKWmp6ipqrKztLW 2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3 +Pn6/8QAHwEAAwEBAQ EBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 AAECAxEEBSExB hJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5 OkNERUZH SElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan qKm qsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAI R AxEAPwDmrj9qzxB4q8F3MniG/uYdSubhYYxa+U9zJGkYJQQNMpbgKwZV4KeormNe+MXiG9 0sWN/d 6Zql/qN1NcTzRW6EMXAVV2sg3SKwfPHGW5PU/NXgq90/xwJo9KS61eSaGSUyWqMGj KqQs8kxJWDG TydpcEqo5yf11/4Ji/8ABJXw38XP2d9J+In7SN94qkuvFVlLceHdJhvjB/wj 1pKCIrre0Yk+0FPm G8lIw6jYWBY/u9XinDYCEXtFaJRtt2SWiPiaeRYjHSc5Xb6uTf66s8/ /AOCc37dE3wl+P1t4X8Tv byeB/H17a2d5Yr5cENlLegRwyxRgbV/eyRIyqACkgJ6V3f8AwV Q/4Ja+FfjN4Pvrn4F6nL8NdY04 Y1WDR1EVjrFsALjDWzHZBOB5bCQFFycMGFfKv/BTD/gnv 47/AGEfiLYv8B9Q8ReOfB2qrBa6ZqUM fm6noV1BKk8VrflFwCbdNyXRCBwjZAIWvXfiB+2P b+A/Duup4N1e9Hh+9n86S7vbybUNQuSURRDD NcO5jDFGG4scbSVTawr53G5vg54qONg2lOP vJdWu6vvbT5I9illmIp0fYJWs9G9jz34JfG/4c/sr fCK60rTtP8Q6x4V0tDfX+vaRYlNaSV UZ3h1C0mI8uQkvP58D7JI7hXhjYJKU8x/Z2+NGvftT/tDe Evhx+zv4LvdMXVtWj1CHSYIpL a00m1VjNc3Ny8iARxKhLPIByzhUBMsYLtX/AGpEstYuLnRLSz0X TnhWeC00yFYINUgMkrlm ZcHzlkklIduI2kkwF3kV9V/8Et/+Chvhb4WfEQ+DfFt5frB49lgms9Vu L15okIAWOBQ5xCr O3zgYVnkU45NfL8RY1cQ06dDncYRafLZa+r3Vrnt5Vl0sJX9pJpy73Z+mXwM/ Z70T4DaYl0 n2bVPEbQeRc6rMu1wDtLRxK2TFFlF+TPJQFsnms342ftC2Fl4ZA0LU9Jg1G6uTp3l3 F3DBI rgB8RtK4TOzc4z/AAhvQVyP7Yvxqv8A4S/sv/EDXvCMkQ1TQtEnubFrltsfmgqEMn96PLYG PvHg1/N7+2f8V/iN8UvElhoX7U/j2W40HxVfm8xZwSx2kl0EMRieGVikLR5K7gPujjg15tHC 1MNB 4ijR54Qdm+idtLndmc4yt9Yn+8lt/wAA/e/9k/8AaB079ofTLjxPptzp17b60S8Nzpl wbmxvVt2a 3MsErcshdJR/tcnoa0PFmiJrniS9uo3nZJJSFZXIDAfKD+IGa+ff+CWvw+8VeA P2Jf2e9d8UXYuU 8Q+DLcAmNTsgR5BZJkdSLKO359c19c+HLSFtFgMyxu2DlnQbjyetffYR/ u1NrXb7m0fN4iSp1OVb Dda/4KE+Cvgzby2/iTwv4x8EWcL+WG1HwtJptupHQK4TY/XtwK82 1T/gr94O8R6tFo/geeHVdZ1t nttEgs3+0S6rdDGLYQg8kqpbII2bdx4VhXu/g742Q6hZm3u 7hrceXsdCG2jtjJ+U1xHiv9lD4VfF nxveXet+EdE0zxJDaxyWesaXaRw3ce5jsukeJRtuIp VVklTEi4GW8suD+Z4vK8YqfNQraLyV38/0 t8z6vA5rhfaf7TR+ab/I8K/4LBfETxl8Hv2LN H0q10wXkPi/XoZfHeq27iT+x7WL/TG2xn5nLPHH CJT8qLETjL1+MfxN/a3tfEDSyST2sUcy NG0JYsgh2/djYHCAAcHGCBuxgMD+qn7VfxOuj8KLjQf2 ifF2i23iMajceDdanuRBBp9xcpF G4ZxLlUW5iaGZAoXBkG0jAr4Q1r9j/wCA3wFuoZPFF38OP7Tm uJp0g1e7jmkZFxwyzuwUBg cyEBT0LV81VzqpQfJCm3/wD2MZllV83LHmW91trsfFl/8AHqa+04W+ h3s89xYuZbdLUedgN jKsiqdxIC54zwM5IzW9ongr44fE+HzPhR8OPiRqYf8Ae+ZbaHdKquAWcLvj +bh0bAK45wa+ x/Cv/BQjUPAHhDVYfhP8KfDsem6JI9jFq6+IZIvC8BkHmRBUsFSA3EuJWSJ503fN txsctle Ev+Cy3xE8Z/C69YJ4S0Z7ixuLK+u9K0IvqWkxyq0R+xSXU8qS7Hj3/OjttDfNuZTSp4/F Yl +7C3rJX+655To16TSdO3rp+Vz9DP2s/HvijX/+COuo2d9A3i74iXvgrS9L1fSdMK6jqY1WT7 It xBJbW++QOsjsrLw3BJPFfk38ItK0j4p/tIaX8Mfi74bsfEs+tasPDM+ieITJYmz1S7X7P byRvC6S RYkZIGY4eNt25T5YY/d2h/ts+G/28f8Agmn8SY/HJ0Lwx+0J4R0GTXFufD1vHpOp 362ZM/2zSbzA l3GGBkePLSJghlPmHP5L6h+07ZfGeS58U/ErTru18b6vAJrzVNLmWGDU7tS omurm2kjISSZN7yTQ uB56RuIxvOP0jhbF+0o1cPXceWT9Xtb7tjzuJqTqeyrNarsf1N638H 7X4T/Afwt4W8H2UVpZfDnT LHT7G3iZpYoobO2S12IWJZlEanBb5iACecivG9N/ap8G2tr5V 9rAhmid0eOd3jkQhiCCo6D09sV8 Ufsof8HJY8B+B/DGkfto6DqfifRooF0u88V6M3m39gpU Ilxc2hbF1G6nLSRFZF8tvlY/KPqnT/ij +zZ8U9OtvENp47+Fetw6vDHcRXw8U2cDXKFRtZ4 pXWSN8AbkdVZWDBgCCK+hwcZYJPC1baWaa2af Y+UlONV+0a3Ifhx8Z73+2bO21qeJYbskQN cBm8xPTyVyWf6K2PavWPjR8a9R+G2jaDfeCtEiku70 fZDcanqCW1vabyqb5UiQuFPykAn+F sgHIHyr4W+KukaRqrvYiKNvODPJGxEjuQBnJ5PQjPpXpX7Q 37Q2if8ADPus/FXVpJLKD4QD b4htVCrDqljcQmS1HLKglFyyIhYhf3kisSHxXysKyjScr7Hvzpvn SaPD/wBrDx7ceA9bk0r Q0sPEVh47sb298RaPdSi4j1+WKSG2uLYLMrIzoL6xntmZVSL7Iof5JmZc r9oK/wBH/Z90vV ND+L/wV/4Wdpnifw2tpomuaYotdb0/W7S3EKzSSwyLcfZJIvs8rPbFmgkhbbCw nUJ4N4B8E 3Xx3vYr/wCL3j3w9Z3XhXTry41Tw7aak8N5bmQxPPFfagBItohWGJSkaNI27hirZq7o 3x60 a4+IetXPwqv/AA7JqFxc/Yrq31ia7ub63fzDgNbIvlqjISsbpIjFUOADvFfndZYrB0PrVSNl dq/XXX0/G/kfouWPLc2rPL+a8+VO17fD0v8AoR/tE/GqXwN+wZpWn/GPR10m7EEqabpMWkw xwf2j Kju11LZW4Cm8k3yPNO48w/MGIA2j8rPCvxck8L6VdWejRyWf2u2uIjL5h3qHfaCe4P 3yfbiv1Q/a t8XXHxJ+Ekq6Dp0lzqmnea9tE0WdzvFJExHZgwZ1z/EvXOa+Ik/4JLeLfEHhK 61Sx1vRNNvo5Jrm 4t7vdBHb2qx/PKWTd84JC7SANpB6mufCYunL45auxWeYapFxWFjaMen5 /wDBPN/A/wARNVv73wvo fwue2uPEWp6pFFYwblSGN2EkTv8A9MI1IiYvwm1CSMK2ej/aF/Y n+Jnww8c+Nr2y+H+uX/hzQ9dv 9NuNY0LTZrjR/tFq8a3DxOqH9yskmFfhDuZR9w12f7EHwo i8PePpPHNpbafFaWDSrayxx74JLeG3 eANHuJLG5ncgDPIT3xX2xovxd8VJ4rudQ8O3d7YC2 sfIJEsc1wXilEs0kYkYnKiTygf3e7bIVYEH P3mTZdGMY1pSak+lloflOccRSpzlh4wUkut3 o/8Agn5geEfFMmoaFcxaYzTTWuJCYlZ5IW+bcCpO fm2sTnjDMuAGxXc6P+zn4Z+IWnprTwT acdQLS/ZorqIpH8xHGITjOM4ycZxX3H4++MnwJ/a+17Wt K+PXw312CfQpEttS+J3h3w+bq9 tT5asuozXFmkSyIsqvDLE0VzuePIlRDuT4y+LH7JfxA/Z48fX3 hHSfDWv+N9P0wRS2Ov8Ah vWjDpesWs8SXEFxDGYWMe+KaNmQklXLA9K+1w+Z0KdNQqrnS8jyaU/r Ert+zdr6tar+vmfX 3w++Lnib4n3V8fh1pFzqEenAySu08cNpYKpOGuJ952YHRWxkdOtekfBP9t/Q /hXrl/qHxw0 zwx4gi04Rajpk0Wo2c9v4f1C0VpF1N7eWWX7WbeITSxI0RaOSPzIkLqrL1vh/9kC7 8Tazps H7Rc+t2vgW5uFt4LTSNItrjT7SRw7LKp0x5LO7iXCgqXQgdlbICW/7Vnw9+AOq3cJ8O6L/ A MKt1ELaaR8QfDOmmbUL1ysvmWzaOiGSFN8Uqbg5BG1vvMa/Nfr0cI4xqTS5tubZ9fTp3Pq61 ZSf JbX7vz6ng37Vf7ct94/8U69eXlzrZ8OaPaQ3Fva3qSwXWrXl2m23a7LYMzyxb5zPycKW znFfEXw0 +OXjr4W6/wCIvGXwk18W+qa9rRtLmJ41ktNRWLOyPyWGAI1kO1h0BIFfbX/BXfw TrXxY8LeFfiB8 NZ1uvCdtZJCyWkBhnslnBaGZ967ijJJtww/c8g/eFfJ2i+BrPRvBej6faR SR21szklgPnYtuLMRz tLseD0wAeldTxbziHvWt2X9eR5NXDyyDEOpCT5pWs3vY+hP2RvB3x Q/bD8OTeKvH2rre6fa6nPaX Ftp8T2c0flOu2QtITkEs42r24q5+3Np83h650v4OfD13lu/F bWy+JdQIeSa3sZZPMis1kzwZRG8r EcAKAetfWX/BG/wJbaL+yPpOq/KZ9dmuNRuV+8GdrqV wRnvtUDNfOf7c2v2tj/wUK8eQ6ne6Z4Zj ENhAuoahKkVnYq2nWq72Zm2hiWfgr2rxsDk1CW LVSWy18tD7bNM5rUsnUr/vJJa97/qca1xbXXxX 8B/D74fWqwWcV3FdX0UJCLBa2EfmJEB90 OZfK5PACe9cb+1t8Stf+CPxVv49C1S1srix0a6WO4lQ YWC5uNsAEX3GJkjJKgYG0N2zWX8e vCOlfCGxtdH8IeJTrPirxvbT6asenSC7kMNyYmuJYViAzvRX +Yv/ABAdsDJ8afsMfFT4lXJ 8f+M9OjuNNQWmm6XFd3gl3W4EdqkkoQnHyuSwz1znnNfSY3MYYWLi 3Z36P/I/NsBlVbMmpU 4N730/zPoD9lme3+CHhrw82oa82gazLYAS6e97HLJZRzItxPcvcKdsAWV3 cg4bEx5YsFHrH g3/AIK7eFPC/hq1sNC1b4lala2wZUuobOK2inyxJaKOa4WQRkk7d6hiu0kc1u/s /f8ABule 6n8Ira/8efEK+t/Eh23Mdvp9pFNpKyhi6vJFOn79gcfeY4IOMcVynif/AIJb/teeHNfu rLw t4F+H/ibT7d8QapBcG0S8U87vJyQjckMAcbgcYHFdVLN3FJSjZdLxcr/cddfg/Ey96VnfopJ W 9dV+Z+o/hr9n74XfDP4SP4j/AGE4rfNx5cNpY3us3iWVp5j70W5gMgkZVbG1SwxuOSydeC /a+/Yq 1r49x2etfCSHTZrnStFXS9Q8Nx6VBptzDH5yTLPpt3bJGruJIm24ffGHbynQuwf4M 1f4w+IPBf7S Og+HvDV1bW+kX+qNFcwGwt5DOvkyS/NI8ZcneAck56jOCRX2Z4t+OvjD4O/s yazd/DTxDqWkzvf2 0QMUm5YldV3eWrZWMnJBZADjjOOK8auoVMP7KrH7nY9TEUFjLxm2103 0/Fo+a/B0t/4Z+HuoaV8U H1S41S2uLjSpm1m2CXbRoybVuFCIwYIwR3dQXZGbGDXzjrfgnw 3+0L4m1b4XWF9p/hPx5ZD+1fCX iCKyilg8Q2iL++sbqLbmTy8krs/eFfKKn91Jn0n4v+MNW 8QXF3rPiPU7/U9W1LVpLi7u724e5muX TyUQu0hJYKgCgHgKAAMCvnzwb/pn7T3w7up8+eni GyCsvy7fkc8AcA/Owz1wcdABX59LMHgMV7Gk 3ZO2+uuuve1z9MynKaeKyymq9paW1R+m/wD wT6/Z/T4M/s7aJ4fub6O5mtLaNBceWUMgKFshWJKZ 3fd7ZxX5Zf8ABfz4V3a/t0XOoaTcxR 6d4i0LTLqQTymKKQpB5Dt83y7g0OcgdTk81+tHwZvZbCx8 qzby44Y2aNVAwmBxj0HJ46du1 fAX/By7otq3hP4Ya00KnVLS9OkxXHO5bWSJZGix0I3ksCRlSzFS Nxz9tRq89BSkjwc4wvuu nB2Stb8jwr/gi18KNJ1Xxh4v8SeILV7x9NvLaK2e6mVmDrE0kmGHX59o 47AZr9R/jt8V/AP hb4I6jpN/fWMF1Fp3mBHOyN9rFo44iQBIwdFO0ZYZ4IHFfnh+yR4ftPBX7M3g PU/Csb2Woe I7ZLzUp45W33cpdgXbJ64AHGOAB0r7Q8N3kknga484iQm3dcyKHIB3ZAJ6Z9q8atiW lJJan pZTho0qUFJtrfsfor+z/wCKLfW/hno1ygB+1WUUyue4dQ3QgEDnof1616IbLzsMZbJcgcPa F2/E7xn8q8D/AGLYwPBvhi3O4wvZQgoSSAAqYAz0HJ4FeH+Pfjl4suPGWotLrd2T5xHAUAAc AAAc AACv0nhTLKvEkZWmoqKW6ueHxPmdLh5Qm4uXO3s7H//Z item3.X-ABDATE;type=pref:2000-12-31 item3.X-ABLabel:_$!<Anniversary>!$_ X-ABShowAs:COMPANY X-ABUID:73FD0F46-DE18-4F1F-AA2C-59E8738B4249\:ABPerson UID:excellent-looking-uid-string REV:YYYYMMDDTHHMMSSZ END:VCARD HTTP/1.1 200 OK /caldav.php/user1/addressbook/andresenesq.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD VERSION:4.0 PRODID:-//ALAB//NOSGML Version 0.9//DE UID:excellent-looking-uid-string X-ABUID:ADDEEFEF-162A-260A-DEA3-1DA8-8A913187\:ABPerson FN:Sven Joseph Klaus Michael Andresen\, Esq. SORT-STRING:Andresen\, Esq.\, Sven Joseph Klaus Michael N:Andresen,Esq.;Sven;Joseph,Klaus,Michael;;Dr.,Prof.;Esq. X-DISPLAYNAME:Svenni X-INITIALS:SA X-INITIALS:SHA NICKNAME:Svenny,Sveny PHOTO;ENCODING=b;TYPE=jpeg:/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHB wcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zN DL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM jIyMjIyMjIyMjIyMjIyMjL/wAARCAFQATYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAA AAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxF DKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZW mNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDx MXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAA AAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiM oEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYW VpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6w sPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiig AooooAKKKKACiiigAooooAKKKKACiiigAoorM17xBpnhnSZdT1a7S2tY/4m6seyqOpJ9BQBp 1zuvePPC/hkMNW1q1glXrCrb5f++Fy36V5Hf+L/ABr8SXkj0hz4d8PMSFnOfPnX6jn8FwO2T U2i/DfwxpKq89r/AGjc9WluzuBP+7938wfrQBr3X7Q+gGRotK0XVr+QdPkVA305J/Ssyb45e KWbdb/D67WI9PMMrE/iIxXXQSQWsKxW8UcMS9EjUKB+AqT7b70AeeXP7Q3iGxkUXnhKKDP8M ryIT+Yq/Y/tLWDlRf8Ahu5hHcwXKyfoVX+ddk9ykiFHCsp6qwyDXJa54B8Ma4Hd7BbS4b/lt a/uzn1IHyn8RQB3WgfFzwX4iZI7fWI7a4fgQXo8ls+mT8pP0Jrt6+K/FngLUvCxM5YXVgWwt xGMbfQMP4f1HvWt4F+LniDwbPDbyTvqGkKcNZzNnav/AEzY8r9OntQB9fUVjeGPFOk+L9Gj1 PSLkSwsdrqRh4m7qw7H/IyK2aACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooArahf22l6dcX95KIra3jaWV26KoGSa+fbm6n+I2vr4j1 pGTSYSRpmnP02Z++47k4z78dgM9b8Ztba6u9L8HwPiO6/0zUMHnyUPyr9GYH/vkVzC3Soiom FVRgAcACgDohdhQAMADgAUfbPeue+2+9H2z3oA6H7Z70fbfeue+2e9H233oA6D7b70fbPeue +2+9H233oA3pp4riF4ZkWSJ1KsjDIYHsRXhXjPw6PD+sEQZNlcZeA/3fVfwz+RFer/bPeuW8 fKl34d80jLwSqyn0B4P8x+VAHN/D7x1feA/ESXsBaSylIS8ts8Sp6j/AGhyQf6E19lWN9ban YW99ZyrLbXEayxSL0ZSMg18EV9Gfs7eLWutOvfC91KWe1/0i0DH/lmTh1HsGIP/AAM0Ae50U UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFVd TvBp+lXl62NtvA8pz6KpP8ASgD5h1nXf7a+J/ibUDJuSOX7NDzx5aEqMex25/GpPtvvXneh3 rRX8m9iTMDknuev+NdH9t96AOg+2+9H2z3rn/tvvSfbfegDoftnvR9t96577Z70fbfegDoPt vvR9s965/7b70n233oA6H7Z71ieK7//AIkbxZ/1rqv5HP8ASoftnvXNa1qH225VFOY4+B7nu aAMyuq+G+vf8I38QdG1Fn2wicRTHt5b/IxP0Bz+FcrRQB9/0VkeFdU/trwlpGpk5a6s4pX/A N4qN365rXoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAK5v4gzeR8OfEj/8AUNnUfihH9a6SuW+JIz8NPEY/6cJT/wCO0AfFSsVYMpwRyDXe+FPCO s+Krf7TCqW9qDt8+bIDEddoHJ/l71yWhaVLrmu2WmQ53XMyxkj+Edz+Ayfwr6us9PgsLOG0t YljghQJGi9AB0oA8P174ea3oto93E0d7BGMv5OQ6j12nqPpmuI+2+9fVvlV85/FLwz/AMI54 paW3QJZXwM0QXgK38aj6E5+jCgDnvtnvV3Sba81vUobCxjMk8pwB2A7knsBXN5PrXvHwY8OL a+HpNblQG4vWKRseqxKcfqwP5CgDT0T4b6Pp0Ctfp9uuiPmaQkID7L/AI5rSvvA/h2+hMbab HCT0eD92w/Lj862NX1jTdCt1n1K6WBHJCDBZnI5OFAJP4Co9D17SfEds0+k3sdyiEBwAQyE+ qkAii4WPBvHnhbUPCcy7XM1hOcR3IGCD/db0P8AP88cNX1p4g0G38QaHd6ZcKNs6EKxH3G/h YfQ4NfKFzbyWl1NbTLtlido3HoQcGgCKiiigD7D+DN39r+E+hsTlo1kiPttkYD9MV3leUfs9 XJn+GskZ6QahLGP++Ub/wBmr1egAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigArmviGhf4ceJAP8AoGzn8kJrpax/FkP2jwbrkGM+Zp9wn5xsKAPlX 4Owed8R7I/884pn/wDHCP61658QdcOn3OmaUszxJd+ZLO0blGKJjChhyAS3OOykd68S+GepJ pXxF0a4kcJG8xhck4GHUpz+LCvSPj9ZXFtJoerQ7hGvmwMwHCk4I/MbvyqW/eKWxo+C/Egj8 WDQvOkks72FpLZZHLmKROWUEnO0rzjsRx1qr8ebBT4b0u943xXZiH0dCT/6AK4L4aRajd+Nd P1UxO9rZMxkkHAGVIwPUnI4r2zXNLTxhFFbahZrJbxSeakQJ4bBGTgjPBNctfF06MrPV9kdF HC1KsbrRHyrX1r4HtVg8CaCiAAGxhfj1ZAx/UmsGX4b6ME+fRbcDHURD+lb2m3M2j2VvZQwo 9pboI40BO5VAwBn6Vh/adJu0k0bf2fO14tM851HxUs/iTU7ksN0c72sXOdscZ24H1ILfj7Vz Wi66NL+Ldjc2mFi1B0guUU4VvMO3J/HDfUVieKtE1rRNUvZzBIbGW4eSOZfmADMSM+h571U8 EWU+teP9FgAZ2a8jkfHZEO5j+Cqa9CM4zjeLujilCUZWkrH1h5VfKfxGt1tfiHrcaYwbkvx6 sAx/U19c+VXxz4x1JNX8ZaxfxMGimupDGw7oDhT+QFKDuElYxKKKK0IPp39nB8+AtST01Nz+ cUf+FexV4v+zdn/AIQ3VvT+0P8A2mle0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFU9VTzNHvk/vW8g/8dNXKo61crZaFqF0/3YbaSQ59ApP9K APg8EggjrX0rpWtQePvhlBYa5ps0l1Igjdn+XcygbZlb36/XI6dfLvhf4Og1yeTUr1BJBC+y ONhlWYDJJHcDI4759q92htY4Iwsa4FeHmeZqi/Zw+I9PCYRSXPPbsVdA8O2um2cVvBEsNvGM BV/z+tdNGUiQKgCqOwqlDJhAvQipPMryqeLivevqzsqJy06Fzzaq3FrDcZONr/3hTfMo8yrl i4yVpExi4u6Me709clJVDAjGfUVk6P4d07w7rb6vp2nWwunQxsQCuFJycDOAeOuK6WdvNIHY VDsriWNlSk/ZvQ6Wo1I++rmN4/8XX0Hgu9TStPuDqEy+USoz5SEfM47njgYHBOe1fLJGDzX1 40UU6FTtYdOO1eBfFTw9Do+uR3VumxLvcXA6bxjJ9sgg/nX0GWZl7eXsprU8vGYVRXPA4Cii ivbPNPpn9m4f8UTqh/6iJ/9FpXs1eIfs13G7w5rdtn/AFd2kmP95Mf+y17fQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVyfxOvPsHwy8RTZxusn iz/AL/yf+zV1leP/tEa0LHwPa6Ur4l1G6GV9Y4/mP8A49soA4f4L6vALK5052AljlL4PdWA5 /MfqK9XeCS2JkiBeM8tH3HuP8K+TtK1W70bUYr6zk2SxnvyGHcEdwa+ofD2rXVz4d07UruAi C6gWQMp3bMjofavlc6wFVTdemrp7o9fCYhSgoPdGxEUmQPGwZT6VJtNMNpHN+/tZdjNzuXkN 9RRm9j4a3SX/aR8foa+Wc9fdf3nVzD9ppNnrTfNuj92yI/3pAP5UfZbqb/XTCNf7sX+Jpc7X xMXMRSzxxtsUF5T0ReT+PpTBayz83DYX/nmh4/E96vxWsUC7Y0Cjv6moJr63hfy1Jll6BIxk 1UKkpvlpK7Hz9hvlxW8ROFRBycDFfP3xd1lb/xDFYoCPsqlnz6uAQP++Qv519AxWNxfSCS9X yoFORB3P1rxH48aMLPxPY6pGgWO9t9jYH8cfH/oJT8q+uyXL6lKXtau5w4uunDkR5RRRRX0h 5h7V+zhrItfFGqaO7ALe2wlTPd4z0/75dj+FfStfDfg/wAQy+FPFum63EC32WYF1H8SH5XH4 qSK+37W5hvbSG6tpBJBPGskbr0ZSMgj8DQBLRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABXyR8bvFC+I/iDPBbvutNMX7IhB4ZwSXP/fXH/ARX0H8U fGieCfB1xdxOP7QuMwWan++R97Hoo5+uB3r41ZmdyzMWZjkknJJoASvs/wlphtPDGl2U6D/A EeziidSOrBADXyR4U006x4t0qw27lmukDj/AGAct+gNfZ9owFuPcmpkk9GUtDHu9Lm02U3On IZIG5kt/T3WnWt7bXY+RwH7o3DD8K3d9UbvS7C9YvPbqXP8a/Kf0r5zMuH6WKfPTfLI7KeK0 tP7yLYKp3Oo2tsdpffJ0CR8k1N/wjmn9/OI9DIcVetLCzsf+PeBEP8Ae6n8zzXmUOFZ8372e ho8RTW12ZUOn32qHfclrS2PSNfvt9fStqz0+1sE228Kp6t1J+pqXzKN9fU4TAUMLHlpo5ale c9NkRXceV8wdR1ry740aOdU8BS3KJul0+VbgYHO37rfhhs/8Br1SR8xOPUGsS8tob6yns7hd 8M8bRSL6qwwR+Rrr2dzLofF9FXtZ0ybRdavdMn/ANZazNETjrg8H8Rz+NUa0ICvpP4A+OxqW lN4Uv5R9qslL2bMf9ZDnlfqpP5H2r5srV8N3OqWXiC0u9Fdl1GBjLDt6sVBJGO+RkY79O9AH 3VRXM+BfGVl448NQ6pbYjnH7u6t88wyDqPp3B9PxrpqACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAqtqF/a6Xp89/fTpBa26GSWV+iqOpqzXgnjbxDN8SvET6Dp 07J4W06X/S7iM/8fko/hB7qO3b+Ln5aAPLfiR4zvvHPiI6rJFNFpilorCNxgKgPJ9NxyCcZ6 gdAK42uj8Z6tb6nrQhsESPT7JPs9sqfdIB5b8T+mK5ygD1P4G6P9r8UXequuUsYNqH0kfgf+ Oh/zr6LtpP3ZHoa83+E2h/2L4GtpJF23F+ftT564P3B/wB8gH8TXeRybG68Goe5XQ0vMo8yq fm0eb70AXPMo8yqfm+9J5tAFzzKPMqn5tHm0AWpJcRtz2qjuokl3DGajzQB4J8cdC+x+I7XW YkxHfRbJCP+eiYH6qV/I15XX1L8RfD/APwkngy9tY03XMI+0W/rvXsPqMj8a+WqpCYVPZ3c1 hewXdu22aFxIh9wc1BRTEey6V4gl8K6nbeOtEjaTSr4BdWsUPvywHqDnn19mNfR+l6nZa1pd tqWnXCXFpcoJIpE6EH+R7EHkEEGvkb4da0kVxPod3hra7BKK/I3Y5H4j+XvXe+A/FMnw18U/ wBgalMT4Z1KTdbTSHi1kPqf7vQH8G45yAfQ9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFYHjPxVa+DfDNzq9yPMZPkghBwZpT91R/M+wNAHHfFjxfcwJF4P0KXbq2pJ m4mX/l1t+jNnszcgd8Z6Eqa8p8ValbeEfCsWi6adk8yFAQfmC/xOfc/19q0bR5LCC/8Q67P5 mpXZM93Kf4fSNfYcAD8PSvOLlpPED6r4g1FmS2hXy4lB6yNkRxj6csfZT3NAHOVs+FNDfxH4 msdLXOyaQeaw/hjHLH8gfxxWNXtnwS8P+RZXevzJ885+z25P9wHLH8Tgf8AATQB67GqRRJHG oVEAVVHQAdBTs1Huqzb2NxcgFVwp/ibgVNhke8+tG8+tasWjxKMyuzH24FW0sraMcQof94Z/ nTsFzn959aN59a6QRRL0jQfRRQYYm6xIfqoosFzm959aN59a3pLC1k6wqP93iqk2jqRmGQg+ jc0WC5l5ozTp7aa2P7xCB2Yciod1KwXJN1fMHxG8P8A/CO+M7yCNNttcH7RBjptY8gfQ5H4V 9N7q89+Lvhv+2fC/wDaMCZu9OzJwOWiP3x+GA34H1poDwKxtTfX0FqJooTM4QSTNtRSe5PYU uoafdaXfTWV7A0NxE210bt/iPeq1drptzH400qPQ77b/bVshGm3THBmUc+Q5/8AQSfp9WI42 GaS3njmiYpJGwZWHUEcg165utfGfhZPNwrSL1HWKUf5/EGvI5YpIJnhlRkkRirIwwVI6giuo 8D6ybHUWsZWxDc/dz2ft+fT8qAPcvgx48uLgP4K15wup2C4tJGPM0QH3fcqOR6r9CT7FXyh4 jt7mGa21/SpGi1LT2EiunUgHP44/lmvorwJ4utvG3hS11eHakxHl3MQ/wCWco+8Pp0I9iKAO looooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvnfxb4i/wCE68ctLE+7Q9FcxW2CC s8/8UnuB29gD3Nei/GDxdJ4c8KCwsXI1XVmNtb4PKKeHf2wDge7A9q8Ykmg8OeHjswRBHhc/ wAbn1+pNAGL411abU9Qg0KxDSNvUOqdXkP3V/DP5n2rN8YvFpv2TwzaOrRaapNy69Jblsbz7 44UfQ1d8Gj+zrXVvGV4vmNZqUtd4/1ly/APvjOT9c1xcsjzSvLIxeR2LMxOSSepoAn0+xn1P Ubextl3T3EixoPcnFfV+jaZFpOk2el2ikx28axrgcsR1P1Jyfxrxr4M+HvtOp3GvTpmO1HlQ ZHWQj5j+CnH/Aq+h9MtRDGJnHzsOPYUAS2WmJEA84Dv/d7D/GtLIqHdRuoAn3Ubqg3UbqAJ9 1G6oN9G+gCfdSbqh30b6AJm2spVgCD1BrIvtMABkth9U/wrR30b6AOYzTXCyIyOoZGGGUjII 9K0dUtdp+0IOCfnHv61mZosB8v+NPDreGPFF3YbT9nJ8y3Y9426flyPqKwopZIJkmidkkjYM jqcFSOQRXvfxc8OjVfDX9pwpm60/LkgctEfvD8OD+B9a8BoA7rxLbR+KPDMPi+0iVbuNhb6r GnA38YlA7A5Gfcj3NcMrMjBlJDA5BHY12fw11iGz199Jvfm0/V0+yzITxuPCn8yR/wKuf8AE WjS+H9fvNLmOTA+Fb+8p5U/iCDQB3+j6qNS0uG4ON5G2Qf7Q6/4/jVz4f8AiX/hAPiEtvK4T Q9XISTJwsTZ+VvbaT/3y1cJ4SvjFcy2jH5ZBvX/AHh/9b+VbmuWo1DTXUD97H88ZHXI7fjQB 9f0V578HPGJ8W+B4RcybtQ08i2uMnJYAfI5+o4yepU16FQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUVw3xc8S/8ACM/DvUZ4323V2PskH+84IJ9sKGOfUCgDxbxLr48Z/Ea/1hW36fYf6 JY+hAzlh9SSf+BD0rkfGd80j21gh/6aMPU9B/WtLR4fsWlwRHhiu5vqeaq+GdPPiL4nW8bDd DDN5knGRtj5wfYkAfjQBN49jHh/Q9D8KR4DQxfbLvH8Uz5HP0+YfQiuFijeaVIo1LSOwVVHU k9BXQ+P9QbUvHWrzE8RzmBfonyf0z+Nafwp0P8AtjxtbyyLmCxU3L5/vDhB/wB9EH8DQB7v4 O8PRaFomn6SuCY1zKw/ic8sfzz+GK7fNZFiMXIPsa080ASbqN1R7qN1AEm6jdUe6jdQBJuo3 VHuo3UASbqN1R7qN1AEm6jdUe6jdQA6RRLGyN0YYrnmQqxU9QcVv7qx7gZuJD/tGi4FSWGOe F4pUDxupVlPQg8EV8seKNFbw94lvtLbJWGQ+WT/ABIeVP5EV9Xba8Z+N+h7J9P1yNeHBtpiP UZZP03fkKAPIo5HilSSNiroQysOoI6GvTvijbLquh6D4riUA3UCxT46Biu4fjnePwFeX17DY wf2x8ApYtoeW0DupPbZIW/9BJFAHk1jOba+hmBxscE/Tv8ApXd+d7155XX21wXtYmJ5KAn8q AOq+EniD/hFfigtg7FbHVsQFecB2OYzj/e+X6Ma+pq+H9XkeGe1vYWKSxONrKcEEcj+VfZfh rWY/EPhrTdXiK7bu3SUhTkKxHzL+ByPwoA1aKKKACiiigAooooAKKKKACiiigAooooAK+cf2 gdY/tHxnpHh9JAYbSMSyqOzyHof+Aqp/wCBV9HV8Z+KtWbXPijrGoM+9TdSLGf9hfkT9AKAL /m+9bfwSsxNq+taiT8yIsQH++xY/wDoArlvNruvgcq/Ztex98Txg/TDY/rQB43qc5utVvLg9 ZZ3f82Jr234IaT9n8O32psuGu5xGp9UQf4s35V4trVq1lruoWrfehuZIz+DEV9OeAtP/s7wJ otvjBNsspHu/wA5/VqTGjo7Y7Z1P4Vo5rOAIOR2q6rblBHelcCTNGaZmjNMB+aM0zNGaAH5o zTM0ZoAfmjNMzRmgB2aM03NGaAHFsDJrLb5mLepzV6Z8R47mqm2lcCPbXK/EfSv7V8BapEFz JDH9oT2KHcf0BH41122mywpNC8UihkdSrKe4PBouB8a17r4Etnb4OXikcTxXW33GGX+YNeV6 r4K8Q6Zd3CNo2oNBFIyrMtuxVlBIByBjnrXukGnt4d+FElo52S2+mSF88YkKFiP++iaoR81V vWcuLSIei1g1pxSbYUX0AoAsai3mWbj0IIr6R+AGqG++Gq2rkbrG6khAHXacOP1dvyr5lmk3 QuPavcP2Z5v3XiOAsfvW7hf+/gJ/lQB77RRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFXU71dO0 q8vnGVtoHmI9lUn+lfDFhLnUGkPVtx5r7X8YHb4J18+mnXB/wDIbV8P2z7LhG98UAdD5td98 FrxYfEOtadgf6RElwp/3SQR/wCP/pXmfm1f0DXH8PeJbDWEBIt5MSqvVozww/ImkBt/Fzw9J p3jlrmOPEGpgSxkdN/CuPrnB/4FX0XDAlvBHDGMJGoRR6ADArnvEGg6f420OyljkVwkkd3az r+Bx9COPy9K6jFS2UkMxUkTY+U0m2jFK47E1FMB9aWi4rDqKbRRcLDqKbRRcLDqKbRRcdh1I TgZpM01st9KLhYjc7mzSYp+2jbRcLDNtcp4w8f6N4NVI7syT3kg3JbQ4LY/vMT90f5ANdeFr wHw7dQ654u1vxLeATSG5KW2/ny17Y9wu0D8aa1E9DYb45yxMGn8KzRwnoxuj/WPFa0XxM8Fe L9Pl0rVjPZJcLsdbnKqec8Op4/HFTPqiSIUfayMMFWGQa5PW/CWhasjNDCtjcdpIBhT9V6fl iqsK5V8TfBu4hg/tHwtcjUrJhvEJcGTHqrDhx+R+teaTCW2meGeN4pUO1kdSrKfQg9K6e01j xP8OtR2Wl4fs7HcEOXglH+6eh+mD713yT+HvjJpjwyRJpviiCMmNs8OB7/xL7Hle3ubAeKtL lSM17Z+zV5n9u67j/VfZo93+9uOP614vf2NzpmoXFjdxmO4t5DHIh7EHFe8/szw/u/Ek5U9b dA3/fwkfypiPfaKKKACiiigAooooAKKKKACiiigAoopGZUUsxAUDJJ7UAUNdW2k0K+gu3CQT QPE5Poylf618/8Ah34Z6XYxK95EL656s0n+rU+gXv8Aj+lem67qz61feTCSLSI/L/tH+9/hV vS9MR4xJKvyfwr6+9eHisZUq1PZUXoexh8NCjD2lVanHSeE9LkjKNplgQRjAgUfriuM8RfDO 3ljaTSSbaYDPkuxZH+hPI/l9K94aytWXaYE/AYrG1LSxEhZctF+q1zXxGH99Suje9Ct7so2P Ffh149m8I3p8Oa+HisA5CM45tmJ6H/ZPX8c173DLHPCk0MiSROoZHQ5DA9CCOorx34g+DhrF k11bJ/xMLdSUIH+tUfw/X0/LvXBeC/iRq/g6QQA/a9NJ+a0kb7vuh/hP6e1e1h68cRDmW55W IoOhPlex9R4pcVheF/F+jeLbPz9LuQZFH723f5ZI/qPT3GRW+K1MRuKMVJto20XCxHRUm2jb RcZHRUm2jbRcCOipNtG2i4EeKMVJto20XAjxTJHSGNpJCFVRkk1PtrC8Q3BAitEP3/mb+lY1 6vsqbka0KXtJqJQur241J2RCY4B2H9fWvn/AMLXxsY7y1b5XWXJH6f0r6LsLMPhT9xevua+e PiBpMvhbx7foiFbe5Y3EPoUc5wPo2R+FceWVp1JSc+p1ZhTjGMVHobn9r/7VJ/a/wDtVwn9q t6mkOqt717B5Z0nibUI7jRnjfBYupT2Of8ADNcxoV9c6Zr1he2bEXEM6MmO5z0/Hp+NVbi6k uXBc8DoPSu8+HHgi61W/h1i7QxWNu4eIsOZXHTHsD1P4euMq1aNKDnM0pUpVZKMQ+NEcKfEW 4MQG5oImlwP4tuP5Ba9u+Auk/2d8M4Llsb7+4kuOnIAOwD/AMcJ/Gs288P2d8Wa6tba4Zupl iDE/iRXSeHNdGi29vpc0CR2USiOLYuPLUdPqP1+tcNHNKU3yvQ7auXVILmi7ne0UisrqGUgq RkEd6WvTPOCiiigAooooAKKKKACimu6xozuQqqMknsK4XVvEl3qMzQWLNFbjjcOGb3z2HtXP iMTChG8jehh51pWidde6xYWGRcXKKw/gHLfkK5DWfEsuqqbSzRo4D94nqw/oKyUtFBy5LGtS x08SDew2x+g714lXMatf3IKx61PBUqHvz1ZDptgZGC4+Qcu3rXSLhVCjgAYFQoqxqFQAKOwp 26nRpqkvMmrN1H5Em6kbDKVYZB4INR7qN1auRnynOalZ7HZAOnKH2rwH4keGv7K1X+0raPFp dsSwA4STuPx6/n6V9K6hEJYNwHzJz+FcL4r0SPWtIubJ8DzlyjH+FxyD+f9a5sPV+rV7fZZ0 1af1ijbqj5303U73R9QhvtPuZLe5ibckiHBH+I9u9fRfw6+KVr4sC6bqQS11dRwAcJcD1X0b 1X8R6D5tngktriSCZCkkbFHU9QRwRSRSyQSpLC7RyIwZXU4KkdCDX0jSkjwLtM+2wKdtrzX4 VfEdfFVoNJ1SQLrMC5DHj7Sg/iH+0O4/H1x6aBWL0NFqM20bafto20rjGbaNtP20baLgM20b afto20XAZto20/bRtouAzbXJ6k3m69J3CYH5D/Guv21xQbzdSuZD3dv515uZztTSPRy6N5tm 3aAJbr6nmub8d+CrXxppKwl1hvoMtbzkZxnqrf7J/Tr7Ho0OEUegp+6uOlUdOzj0OipBTumf KmreB/Emi3DRXekXRA6SRRmRGHqGXI/rS6Z4F8T6vIEtdFu8H+OWMxJ/wB9NgV9V7qXdXof2 lK22pxfUY33PLPB/wAGLPTpUvfEUkd7OvK2qZ8pT/tE8t9OB9a9GubJIIwYVCxjjYOij2q8D TZzmB8+lefiqzrJuZ10YKk/dMkCmTwCWEjHzAZFWAtOC14vtLO53uR0Hg++a50toHbL27bR/ unp/UfhXRVwnhab7J4glticLMpAHuOR+ma7uvtMBV9rQTPncbT5Kzt11Ciiiu05QooooAKKK KAOf8YXLW+i7FODM4Qn25J/lXIW6BIV9SMmuq8bJu0iFv7sw/ka5uIboIz6qK+ZzibVWzPey 2yo38xK30wqKo4AHFYZWtK1m8yIKT8y8GuPCVEm0dGIV0mW91G6os0m6u7nOXlJd1JuqPdSb qOYfKSFsjFYd9bYLx491rX3VDcxiZOPvDpWFZcy03RrSfKz55+KHh82eprq8KYhufllwPuyD /ED8wa8+r6c8QaNb6rp89pcoTDMNrY6qexHuDXzprmjXOg6rNYXS/Mhyr44dezCvZy7FKrT5 Hujzcfh+SfOtmRaVqd3o2q22o2UpjubeQSIw9R2PqD0Ir7F8N61D4k8OWGrwABLqIOVBzsbo y/gwI/Cvi6vpv4Dec3w6bzc7BfSiLP93C9Px3V3VFpc4oPWx6ZijFSYoxWFzUjxRipMUYouF iPFGKkxRii4WI8UYqTFGKLhYjIwCa4KzO55W9TXd3TiKzmkP8EbN+QrhrEfIx9TivJzSWiR6 eXL4mbAbil3VCDTwa872ljraJQacDUYp4qXVIaJBUdw3yBfWng1A53vnt2rnrV7RsKK1IgtP C04LTwtedKZo5GdPI1hqdteqMhWBI9cdR+Ir0WCaO4gSaJgyOAykdxXEzW63ELRv0Pf0p3h3 VZNLvP7Nuz+5dvkY9FJ/oa+iyTMIr91I4sZR9rHmjujuKKKK+rPGCiiigAooooAxfFcXmeH5 zjJQqw/MVyVl89nGfTj9a6/xPMsWgXOerAKB7kiuU06MixQnvk/rXy2ftRkmezl7apP1HFaF LRtuXg1OUppSvn41bao7ua5YjlEi5HXuKcaqAFTkcGpkl3cNwa76eLvozJxtsPNNyacaaa6V WBCbqN1IaaaftENIr3UQYFgOD94VwfjTwhF4hsBECsd1HzBMw4Hqrex/wDr16Eao3EIYFCOD 0PpSjVdKanA15VUi4SPMdD/AGfNSuZ4pdW1e0jszhiLTc7uPQEgAZ9efpXvWkaRZaHpNtpmn xCK1tk2Iv8AMn1JOST6muf8Pao1pP8AYLhvkY/uyex9Poa6zdX0NLEe3gpHiVaHsZcouKXFN 3Ubq0Mx2KMU3dRuoAdijFN3UbqAHYoxTd1IzhFLMQqgZJPAAoAzPEc/2fRpQDhpCEH49f0zX MWce2BPfmjU/Elh4im8jS7hbmC3lMbzJyjPgcKe4Geo45q0qAAAdBXz2aVf3nL2PYwceWlfu OFPFNC04CvIdU3Y8U8UwCngVk6xmxWPGKQLTgtOC1zzq3ZN7DQtPC04LTgtYSmS5DQtUtVtB NamRR88Yz+HetILUN9KlvZyu5H3SAPU0UaslVi47iUnfQ2/DWoNqGjxtI2ZYz5bk9yO/wCWK 165rwVC8elSyNkLJKSvuAAM/wCfSulr9RwspSoxct7HjYiKjVko7BRRRW5iFFFBOKAOQ8bTs xs7NT95i5Hv0H8zUUcIjjVB0UYFN8V8eILKRvubV5PThjmre2vguIqr+sWZ7VD3aMbFcpTSl WClNKV4SqmqkVylNKVZKU0pWqqlKRCGK8HkU7IPSnFKaVrohiGh3QhFMNP5pCK3WIGiMiopV yKnIpjDNX7a6NEzNvLffHvA+Zf1Fc4PilceD9ZGm+I4pbrTZhvtb2MZkQd1cfxY9euMZyTXZ FK8v+K2kJP4ekuAP3llIHU/7LEAj9Qfwr1spxNqvI9mYYyHPSbW6PZ9E8SaP4jtftOkahBdx /xeW3zL/vKeV/EVqZr4ctL260+4W4srma2nX7skMhRh9COa7bSfjH400oBW1FL6MdEvIw//A I8MMfzr6d0ux4an3Pq3NGa+d7b9oXWlx9q0Wwl9fKd0/mWqSX9ofVD/AKrQbNf9+Zm/oKn2b Hzo+g91I8qRozyMqooyWY4AFfMeofHXxheZFsbGxHYwwbj/AOPlh+lcVrPinXfEL7tW1W6uh nIR5DsH0UcD8BVKkwc0fSXif4x+FvDoeKC4/tS8HSK0YMoP+0/3R+GT7V4X4y+KHiDxkWgml +x6celnbkhT/vnq348e1cVViwtzd6hbWw6yyqn5nFWoqKuTdydj6E+H2mCx8OadEVw3k+c/+ 83P9cfhXahaz9HhVYnKgADCgegFaoWvgcdWc60mfRL3YqK6DAtPC04LTwtedKZLkNC04LTgt PC1jKZDkNC04LTgtPC1lKZDkNC07GKo3uqQWeVB8yX+6p6fU1Uis9U1kgyN5FufXgEew6muz CZdXxT91aA1Zc0nZFi71m3t8rF+9k/2TwPxpbDRL/W51uL4tDbA8LjBI9h/U1r6bollYEOE8 2Yf8tH5x9B2rbR6+vy/IaVC0p6s46uMS0pfeSQwx28KQxKFRBhQOwqSmq2adX0KVlZHnN3Ci iimAU1qdSEZFAGD4h0k6paDy8CeIkpnv6iubg1eWzP2a/hcMnG7HP4+v1rvHWqdzaQ3K7Z4U kHYMucV5OYZVSxmstzsoYrkjySV0c8mq2MnSdQf9oEVOs0En3JY2+jA1JN4b0587YWQ/wCy5 /rVCTwtb/8ALOeVf94A/wCFfO1OGJr4JHUsRQfVovFaaVrKbw/dQ8wXnP4r/LNMKa3a9/NUe 4b/AOvXHUyDFQ21NYzpy+GSNYpTStZsWuFH2XcBQ9yo/oa1IZ4bld0MiuPY9K8urRrUX76La lHcYVppWrBWmlKzVUFIrlKaUqwUppStVVKUiuUrzv4oXCxeF9TzjLCOMe5LL/8AXr0W6mS2h aR/wHqa8/8AFHhs+K7SO3mu3giEvmvsUEucEDr06mvdyWnKpWUuiFWny0pM+eKK9og+FGhQk GWS8nPcPIAP0ArWtvBOgWePK0q3JHeQeZ/6Fmvt3UR4XKzwGp1srpl3LbTFfURnFfRMWl21v /qbeKP/AHEC/wAqm+y+1T7TyHyHzbJBNF/rInT/AHlIqOvpb7KCCCoIPYiqs3hzSrn/AF+mW khPdoFJ/PFHtPIOQ+c61vDGB4r0jIyPtkX/AKGK9ok+H/hqc5fSYx/uO6fyIp9v8PPDdtcRX EOmlJYnDowuJOGByD96iU04tDgrSTO40gZtG/3z/IVpBayNHm2TPbucbuV+tbYWvzfGp06zT PenLW40LTwtOC04LXnymZOQ0LTgtPC07GBk1i5kOQ3GKxLzUZruf7JYAnPBcd/8B70ahfyXs 32Ky5B4Zh3/APrVpadpyWUW0cufvN6//Wr6TJ8ndZ+1qrQVSoqMby36Ij07RILbEk2JZevPQ fQVtLUaLU6LX3FKlCnHlgrHl1KsqjvJkiGrCVEi1Mi1sZkyVKKjRakpiCiiigAooooAQqDUT R1NRQBSeOoWirRKg0xoc0rDMtovaoWirVaH2qFoPalYLmNcWUU6bZY1ce46Vjz6E8beZZzMj DoCf611jQe1RNB7Vz1sNTqq00b08RUp/CzlBf6pZjFxB5ij+Ij+o4qVPEFuQPMhkU+2DXQtb +1VpNOgkJLwRsfUqDXiVuHcPN3jodSxkH8UfuMs65Z4ziQ+22q0uu7vlt4GLH+9/gK1jpFqD kW8f/fNOWyjj+5Gq/7oxWNPhulF3kyvrlNbROdNvdXknmXJIHZf/rdqmNrgYA4rcNt7Uw23t Xu4fCU6EeWCOWriJVXrsYZtvamm19q3Da+1N+y+1dHKY3MQ2vtSfZfatv7L7UfZfajlC5i/Z fanC19q2Ra+1L9l9qLBcyBbe1PW29q1hbe1OFt7UWC5g3NlIMTQ53rzx1q/YarFOoSYiOX34 BrSFt7VWudEgustgxyH+Je/1FeNmWURxS5o6M7aGKSjyVPvLgFPArFGg6hH8sF7he3zMv8AK lGg6nNxPejb/vM36V80+HMS5WOjnpfzmhc6ja2YIkkBb+4vJrIe4vdbkMVupjtx94/4n+lal p4YtojumLTH0PA/KtmO1WNQqIFUdABgCvYwHDkKTU6urMZ4qnD4NWZen6XFYx4T5nP3nPU1o rF7VaWD2qVYPavqIU4wXLFaHBObm+aRWWKpljqwsNSiMCrsQQrHUypingYopiCiiigAooooA //Z X-SPOUSE:Manuela Graf X-EVOLUTION-SPOUSE:Manuela Graf item1.X-ABRELATEDNAMES:Manuela Graf item1.X-ABLabel:_$!<Spouse>!$_ item2.X-ABRELATEDNAMES:Manager item2.X-ABLabel:_$!<Manager>!$_ item3.X-ABRELATEDNAMES:Aufsichtsrat item3.X-ABLabel:_$!<Manager>!$_ item4.X-ABRELATEDNAMES:Barbara Jonas item4.X-ABLabel:_$!<Assistant>!$_ item5.X-ABRELATEDNAMES:Dominik Maller item5.X-ABLabel:_$!<Assistant>!$_ ROLE:CTO ROLE:Vorstand X-MANAGER:Manager X-MANAGER:Aufsichtsrat X-EVOLUTION-MANAGER:Manager X-EVOLUTION-MANAGER:Aufsichtsrat X-ASSISTANT:Babsi X-ASSISTANT:Dominik X-EVOLUTION-ASSISTANT:Barbara Jonas X-EVOLUTION-ASSISTANT:Dominik Müller BDAY;VALUE=date:1971-06-21 X-ANNIVERSARY:2000-01-01\, Testfeier X-ANNIVERSARY:2003-2-2\, Blafeier X-EVOLUTION-ANNIVERSARY:2000-01-01\, Testfeier X-EVOLUTION-ANNIVERSARY:2003-2-2\, Blafeier IMPP:aim:balbala IMPP:aim:hakunamatata X-AIM:balbala X-AIM:hakunamatata EMAIL;TYPE=INTERNET:sven@andresen.de EMAIL;TYPE=INTERNET:andresen@andresen.de TEL;TYPE=WORK,VOICE:+49 89 11 11 111 TEL;TYPE=WORK,VOICE:+49 234 222 222 TEL;TYPE=WORK,FAX:+49 7373 73 TEL;TYPE=PAGER:+49 160 073 727 272 TEL;TYPE=PAGER:+49 2626 26 TEL;TYPE=CELL,VOICE:+49 39292 82 TEL;TYPE=CELL,VOICE:+49 7272 722 TEL;TYPE=PREF,VOICE:+49 12 34 567 TEL;TYPE=CAR,VOICE:+49 8292 38 383 TEL;TYPE=HOME,VOICE:+49 7327 272 727 TEL;TYPE=HOME,VOICE:+49 7272 7282 TEL;TYPE=HOME,FAX:+49 1010 1 item6.TEL;TYPE=VOICE:+49 8373 6262 item6.X-ABLabel:_$!<Other>!$_ item7.TEL;TYPE=VOICE:+61 27 28 73 246 item7.X-ABLabel:_$!<Other>!$_ item8.TEL;TYPE=FAX:+49 9382 3424 item8.X-ABLabel:_$!<Other>!$_ TEL;TYPE=ISDN:8797 TEL;TYPE=ISDN:98732947234 TEL;TYPE=X-EVOLUTION-RADIO:+49 88 298 723 498 32 TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 TEL;TYPE=X-EVOLUTION-TELEX:+49 2763 382 882 28 82 TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 TEL;TYPE=MAIN:+49 6237 623 723 84 76 TEL;TYPE=MAIN:+49 9324 32 479 234234 TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 TEL;X-EVOLUTION-CALLBACK:+49 7363 6363 TEL;TYPE=MODEM:+49 8383 73 723 TEL;TYPE=MODEM:+49 7363 6363 TEL;X-EVOLUTION-TTYTDD:+49 3377 37 373 TEL;X-EVOLUTION-TTYTDD:+49 8378 33 TEL;X-QUICKDIAL:13355 ADR;TYPE=WORK;CHARSET=utf-8: PO 373;Andresen AG\, R&D;Messegasse 7;Passau;Bayern;94036;Deutschland ADR;TYPE=WORK;CHARSET=utf-8:6266 AA;andresen Holding\, Geschäftsleitung; Weisenstraße 13;Irgendwo;Niedersachsen;34332 ADR;TYPE=HOME;CHARSET=utf-8:;;Weisenstraße 13\r;Irgendwo;;34332 ADR;TYPE=X-OTHER:;;Irgendwo;Nirgendwo;Sonstwo;0000;Antarktis ORG:andresen AG;R&D;;XXX\, 033 ORG;CHARSET=utf-8:andresen Holding;Geschäftsleitung;;-\, 0223 X-HOUSE;TYPE=WORK:XXX X-HOUSE;TYPE=WORK:- X-ROOM;TYPE=WORK:033 X-ROOM;TYPE=WORK:0223 LABEL;TYPE=WORK:1. Stock\, links LABEL;TYPE=WORK:oder rechts URL;TYPE=WORK:http://www.andresen.de URL;TYPE=WORK:http://www.andresens.de item9.URL;TYPE=HOME:http://www.zuhause.de item9.X-ABLabel:_$!<HomePage>!$_ item10.URL;TYPE=HOME:http://www.andresen.de/~andresen item10.X-ABLabel:_$!<HomePage>!$_ X-BUSINESS-CATEGORY:IT X-BUSINESS-CATEGORY:Development KEY;ENCODING=b;TYPE=X-CERT:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2R ENDQXlXZ0F3SUJBZ0lKQUpUeXNHNDV0V3BZTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd 0NRWUQKVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFTk1Bc0dBMVVFQ nhNRVEybDBlVEVoTUI4RwpBMVVFQ2hNWVNXNTBaWEp1WlhRZ1YybGtaMmwwY3lCUWRIa2dUS FJrTVF3d0NnWURWUVFMRkFOU0prUXhGakFVCkJnTlZCQU1URFZOMlpXNGdRVzVrY21WelpXN HhIekFkQmdrcWhraUc5dzBCQ1FFV0VITjJaVzVBWVc1a2NtVnoKWlc0dVpHVXdIaGNOTVRBd 05qSXpNRGd5T0RFNFdoY05NVEV3TmpJek1EZ3lPREU0V2pDQm16RUxNQWtHQTFVRQpCaE1DU VZVeEV6QVJCZ05WQkFnVENsTnZiV1V0VTNSaGRHVXhEVEFMQmdOVkJBY1RCRU5wZEhreElUQ WZCZ05WCkJBb1RHRWx1ZEdWeWJtVjBJRmRwWkdkcGRITWdVSFI1SUV4MFpERU1NQW9HQTFVR UN4UURVaVpFTVJZd0ZBWUQKVlFRREV3MVRkbVZ1SUVGdVpISmxjMlZ1TVI4d0hRWUpLb1pJa HZjTkFRa0JGaEJ6ZG1WdVFHRnVaSEpsYzJWdQpMbVJsTUlHZk1BMEdDU3FHU0liM0RRRUJBU VVBQTRHTkFEQ0JpUUtCZ1FDdEtPWnJBOXBjdjJWUVpkSEg4YmhhCmZqMlZWMW9HakxjTkt3M ktWVkJ6anphQVlyaU9HcnBNWDdhcW1oL3pjNHhBMTVDc1JJYjJoQXpPcDlTeldvQ00KbXhZc FN5eG8rbUJHUGRYOVcvTStYcStSYUtGSURpdHZyL0xBb2I5N0oveWp5R0JDYU4vdExvdG9ZN 3F5TjAxUQpWTkRYNkJkcS9GZTFjcUdhcnFvdzNRSURBUUFCbzRJQkJEQ0NBUUF3SFFZRFZSM E9CQllFRkhNaFBPR255aENtCmxWcHlCZHhCTVczZ2drbS9NSUhRQmdOVkhTTUVnY2d3Z2NXQ UZITWhQT0dueWhDbWxWcHlCZHhCTVczZ2drbS8Kb1lHaHBJR2VNSUdiTVFzd0NRWURWUVFHR XdKQlZURVRNQkVHQTFVRUNCTUtVMjl0WlMxVGRHRjBaVEVOTUFzRwpBMVVFQnhNRVEybDBlV EVoTUI4R0ExVUVDaE1ZU1c1MFpYSnVaWFFnVjJsa1oybDBjeUJRZEhrZ1RIUmtNUXd3CkNnW URWUVFMRkFOU0prUXhGakFVQmdOVkJBTVREVk4yWlc0Z1FXNWtjbVZ6Wlc0eEh6QWRCZ2txa GtpRzl3MEIKQ1FFV0VITjJaVzVBWVc1a2NtVnpaVzR1WkdXQ0NRQ1U4ckJ1T2JWcVdEQU1CZ 05WSFJNRUJUQURBUUgvTUEwRwpDU3FHU0liM0RRRUJCUVVBQTRHQkFGcnVidGpoWVB1RERHV VpQRTQraUo2a3FmdEtXWDFJVzdmTXdtc3BRUWt5CitXUThSL3AxbURrc3ZEQ3hDYWp2YVduS VI2dGIwbmtCMTFFNmQ0dDhkMkxWTTE4M3dDUWJtMDRJS05mdkRKOXQKUE4vdHBVTkJrc0Vka XBlMEM1SEgyMnY0RitSSzVUK1lqM1J6VHZmOTdROVMzTzF3eE5lZkt0NXVUNFFxNUZtdAotL S0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== CALURI:http://caldav.andresen.local/sja FBURL:http://caldav.andresen.local/freebusy CAPURI:http://caldav.andresen.local/access CALADRURI:http://caldav.andresen.local/access X-DESCRIPTION:Beschreibung X-DESCRIPTION;CHARSET=utf-8:außerdem NOTE:Nur so ein Test! CATEGORIES:bla,blubb,test,hihi,oops REV:YYYYMMDDTHHMMSSZ END:VCARD HTTP/1.1 200 OK /caldav.php/user1/addressbook/hans_dieter.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD VERSION:4.0 PRODID:-//ALAB//NOSGML Version 0.9//DE UID:excellent-looking-uid-string X-ABUID:A93F52CB-C15F-1F34-2C49-7A67-0971277F\:ABPerson FN:Hans Dieter Schmidt SORT-STRING:Schmidt\, Hans Dieter N:Schmidt;Hans Dieter;;Dr.;Esq. X-DISPLAYNAME:HaDi Schmidt X-INITIALS:HW NICKNAME:HaWe X-SPOUSE:Maja Schultze X-EVOLUTION-SPOUSE:Maja Schultze item1.X-ABRELATEDNAMES:Maja Schultze item1.X-ABLabel:_$!<Spouse>!$_ item2.X-ABRELATEDNAMES:Barbara Jonas item2.X-ABLabel:_$!<Assistant>!$_ item3.X-ABRELATEDNAMES:Klaus Timm item3.X-ABLabel:_$!<Assistant>!$_ ROLE:Projektleiter X-ASSISTANT:Barbara Jonas X-ASSISTANT:Klaus Timm X-EVOLUTION-ASSISTANT:Barbara Jonas X-EVOLUTION-ASSISTANT:Klaus Timm BDAY;VALUE=date:1977-12-10 BDAY;VALUE=date:1975-11-11 DDAY;VALUE=date:2007-01-02 X-DDAY;VALUE=date:2007-01-02 X-ANNIVERSARY:2000-02-01\, X-ANNIVERSARY:2001-02-02\, X-EVOLUTION-ANNIVERSARY:2000-02-01\, X-EVOLUTION-ANNIVERSARY:2001-02-02\, X-EVOLUTION-BLOG-URL:blog.diesistmeineip.de item4.URL:blog.diesistmeineip.de item4.X-ABLabel:_$!<Other>!$_ URL;TYPE=WORK:http://www.tu-hh.de URL;TYPE=WORK:http://www.telekom.de item5.URL;TYPE=HOME:http://www.hadi-schmidt.de item5.X-ABLabel:_$!<HomePage>!$_ IMPP:aim:477826262 IMPP:aim:aaab3ttebb3 IMPP:icq:972398472394 IMPP:icq:8972364872634 IMPP:ymsgr:mailaddr@yahoo.co.uk IMPP:ymsgr:yahoo@yahootar.bla IMPP:xmpp:jabjab187383 IMPP:xmpp:jabberwookie@starwahrs.co.com IMPP:msn:blablubb@langedomain.org IMPP:msn:738246832746 IMPP:skype:hadi.schmidt-skype IMPP:skype:askjdhasd IMPP:ichat:ichatichat IMPP:ichat:second-ichat IMPP:nm:netnetmeetings IMPP:nm:vielleicht@eine.email.de IMPP:gtalk:gooogletalk IMPP:gtalk:googletalk2 IMPP:sip:ipphon-addr.woauchimmer.de X-AIM:balbala X-AIM:hakunamatata X-AIM;TYPE=WORK:972398472394 X-AIM;TYPE=WORK:8972364872634 X-ICQ:972398472394 X-ICQ:8972364872634 X-JABBER:jabjab187383 X-JABBER:jabberwookie@starwahrs.co.com X-MSN:blablubb@langedomain.org X-MSN:738246832746 X-SKYPE-USERNAME:hadi.schmidt-skype X-SKYPE-USERNAME:askjdhasd EMAIL;TYPE=INTERNET:ich@hadi-schmidt.de EMAIL;TYPE=INTERNET:hadi@telekom-d.de TEL;TYPE=WORK,VOICE:+49 9823 9084 TEL;TYPE=WORK,VOICE:+49 234 234 234 TEL;TYPE=WORK,FAX:+49 7373 73 TEL;TYPE=PAGER:+49 2626 26 TEL;TYPE=CELL,VOICE:+49 7272 722 TEL;TYPE=PREF,VOICE:+49 12 34 567 TEL;TYPE=CAR,VOICE:+49 8292 38 383 TEL;TYPE=HOME,VOICE:+49 7327 272 727 TEL;TYPE=HOME,FAX:+49 40 812 387 21 item6.TEL;TYPE=VOICE:+49 8373 6262 item6.X-ABLabel:_$!<Other>!$_ item7.TEL;TYPE=VOICE:+49 7272 72 item7.X-ABLabel:_$!<Other>!$_ TEL;TYPE=ISDN:4234234235 TEL;TYPE=ISDN:98732947234 TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 349 832 TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 TEL;TYPE=X-EVOLUTION-TELEX:+49 38 288 228 82 TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 TEL;TYPE=MAIN:+49 6237 623 723 84 76 TEL;TYPE=MAIN:+49 9324 32 479 234234 TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 TEL;TYPE=MODEM:+49 8383 73 723 TEL;X-EVOLUTION-TTYTDD:+49 7373 73 TEL;X-EVOLUTION-TTYTDD:+49 8378 33 ADR;TYPE=WORK;CHARSET=utf-8: ;Uni Harburg\, -;Innstraße 71;Hamburg-Harburg;Hamburg;21373;Deutschland ADR;TYPE=HOME;CHARSET=utf-8:;;Weisestraße 13\r;Irgendwo;;33443 ADR;TYPE=X-OTHER:;;Nirgendwo ORG:Uni Harburg;;;033 X-ROOM;TYPE=WORK:033 LABEL;TYPE=WORK:1. Stock\, links LABEL;TYPE=WORK:oder rechts X-BUSINESS-CATEGORY:IT X-BUSINESS-CATEGORY:Development CALURI:http://davical.hadi-schmist.home/hadi FBURL:http://davical.hadi-schmist.home/freebusy CAPURI:http://davical.hadi-schmist.home/cap CALADRURI:http://davical.hadi-schmist.home/access X-DESCRIPTION:Beschreibung X-DESCRIPTION;CHARSET=utf-8:außerdem CATEGORIES:uni REV:YYYYMMDDTHHMMSSZ END:VCARD HTTP/1.1 200 OK /caldav.php/user1/addressbook/J%C3%B6rg_Test-Ro%C3%9Fdeutscher_2_0.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8:Test-Roßdeutscher;Jörg;;; FN;CHARSET=UTF-8:Jörg Test-Roßdeutscher ORG:Factor Design AG; EMAIL;INTERNET;WORK:joerg.rossdeutscher@factordesign.foo EMAIL;INTERNET;WORK:joerg@factordesign.foo EMAIL;INTERNET;HOME:joerg.rossdeutscher@gesindel.foo EMAIL;INTERNET;HOME:raettchen@gmail.bar TEL;WORK:040 999999432571-43 TEL;CELL:017799999978200 TEL;HOME:040999999793017 ADR;WORK;CHARSET=UTF-8:;;abcStraße 58;Hamburg;;20357;Deutschland ADR;HOME:;;Gayens Weg 9;Hamburg;;22761;Deutschland NOTE;CHARSET=UTF-8: Technik\, Web\, DTP\, SysAdmin\, €-Vermögensverwalter URL;type=pref:www.gesindel.baz URL:www.factordesign.foo BDAY;value=date:1969-06-20 UID:excellent-looking-uid-string REV:YYYYMMDDTHHMMSSZ END:VCARD HTTP/1.1 200 OK /caldav.php/user1/addressbook/J%C3%B6rg_Test-Ro%C3%9Fdeutscher_3_0.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> BEGIN:VCARD VERSION:3.0 N:Test-Roßdeutscher;Jörg;;; FN:Jörg Test-Roßdeutscher ORG:Factor Design AG; EMAIL;TYPE=INTERNET;TYPE=WORK;TYPE=pref: joerg.rossdeutscher@factordesign.foo EMAIL;type=INTERNET;type=WORK:joerg@factordesign.foo EMAIL;type=INTERNET;type=HOME:joerg.rossdeutscher@gesindel.foo EMAIL;type=INTERNET;type=HOME:raettchen@gmail.bar TEL;type=WORK;type=pref:040 999999432571-43 TEL;type=CELL:017799999978200 TEL;type=HOME:040999999793017 item1.ADR;type=WORK;type=pref:;;abcStraße 58;Hamburg;;20357;Deutschland item1.X-ABADR:de item2.ADR;type=HOME:;;Gayens Weg 9;Hamburg;;22761;Deutschland item2.X-ABADR:de NOTE:Technik\, Web\, DTP\, SysAdmin\, €-Vermögensverwalter item3.URL;type=pref:www.gesindel.baz item3.X-ABLabel:_$!<HomePage>!$_ item4.URL:www.factordesign.foo item4.X-ABLabel:_$!<HomePage>!$_ BDAY;value=date:1969-06-20 X-ABUID:58AB933D-81D3-4095-8CB5-A63431AC934D\:ABPerson UID:excellent-looking-uid-string REV:YYYYMMDDTHHMMSSZ END:VCARD HTTP/1.1 200 OK davical-1.1.1/testing/tests/carddav/2022-OPTIONS_well-known_carddav_noauth.test0000644000000000000000000000026411446006434024070 0ustar # # Do an OPTIONS request on a /.well-known URL for CardDAV TYPE=OPTIONS URL=http://mycaldav/caldav.php/.well-known/carddav HEADER=User-Agent: DataAccess/1.0 (8A293) NOAUTH HEAD davical-1.1.1/testing/tests/carddav/2019-PUT-vcard.result0000644000000000000000000000342511732477153017642 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >NULL< caluri: >NULL< dav_name: >/user1/addressbook/Jörg_Test-Roßdeutscher_2_0.vcf< fburl: >NULL< fn: >Jörg Test-Roßdeutscher< n: >Test-Roßdeutscher;Jörg;;;< nickname: >NULL< note: >Technik, Web, DTP, SysAdmin, €-Vermögensverwalter< org: >Factor Design AG;< url: >www.gesindel.baz< version: >2.1< box_no: >< country: >Deutschland< locality: >Hamburg< postcode: >22761< property: >ADR;HOME:;;Gayens Weg 9;Hamburg;;22761;Deutschland< region: >< street_address: >Gayens Weg 9< type: >NULL< unit_no: >< box_no: >< country: >Deutschland< locality: >Hamburg< postcode: >20357< property: >ADR;WORK;CHARSET=UTF-8:;;abcStraße 58;Hamburg;;20357;Deutschland< region: >< street_address: >abcStraße 58< type: >NULL< unit_no: >< tel: >17799999978200< type: >voice< tel: >40999999793017< type: >voice< tel: >040 999999432571-43< type: >voice< email: >joerg.rossdeutscher@gesindel.foo< type: >NULL< email: >raettchen@gmail.bar< type: >NULL< email: >joerg@factordesign.foo< type: >NULL< email: >joerg.rossdeutscher@factordesign.foo< type: >NULL< davical-1.1.1/testing/tests/carddav/2010-REPORT-sync-initial.result0000644000000000000000000000234311743162344021471 0ustar HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "a fine looking etag" Content-Length: 949 Content-Type: text/xml; charset="utf-8" /caldav.php/user1/addressbook/andrew_mcmillan.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> text/vcard HTTP/1.1 200 OK /caldav.php/user1/addressbook/donald_kelly.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> text/vcard HTTP/1.1 200 OK /caldav.php/user1/addressbook/PHRsMa4mvY.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> text/vcard HTTP/1.1 200 OK data:,41 davical-1.1.1/testing/tests/carddav/2033-REPORT-addressbook-query.test0000644000000000000000000000151011633117640022167 0ustar # # Request a REPORT # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=Accept: text/xml,application/xml HEADER=Content-Type: text/xml HEADER=Depth: 1 # HEAD BEGINDATA karora ENDDATA davical-1.1.1/testing/tests/carddav/2032-REPORT-addressbook-query.result0000644000000000000000000000167111776303337022545 0ustar /caldav.php/user1/addressbook/andrew_mcmillan.vcf text/vcard 1286 User 1 Dow, 01 Jan 2000 00:00:00 GMT yyyymmddThhmmssZ "24bae2a7f81c0a79413a656c06d8326b" /caldav.php/user1/ /caldav.php/user1/ HTTP/1.1 200 OK davical-1.1.1/testing/tests/carddav/2032-REPORT-addressbook-query.test0000644000000000000000000000126011776303330022171 0ustar # # Request a REPORT # TYPE=REPORT URL=http://mycaldav/caldav.php/user1/addressbook/ HEADER=Accept: text/xml,application/xml HEADER=Content-Type: text/xml HEADER=Depth: 1 # HEAD BEGINDATA aro ENDDATA REPLACE=#\d{8}T\d{6}Z#yyyymmddThhmmssZ# davical-1.1.1/testing/tests/carddav/2020-PUT-vcard.test0000644000000000000000000000450011704134640017254 0ustar # # PUT a VCARD record into an addressbook # TYPE=PUT URL=http://regression.host/caldav.php/user1/addressbook/Jörg_Test-Roßdeutscher_3_0.vcf HEADER=User-Agent: DAViCalTester/public HEADER=Content-Type: text/vcard; charset=utf-8 HEADER=If-None-Match: * HEAD BEGINDATA BEGIN:VCARD VERSION:3.0 N:Test-Roßdeutscher;Jörg;;; FN:Jörg Test-Roßdeutscher ORG:Factor Design AG; EMAIL;type=INTERNET;type=WORK;type=pref:joerg.rossdeutscher@factordesign.foo EMAIL;type=INTERNET;type=WORK:joerg@factordesign.foo EMAIL;type=INTERNET;type=HOME:joerg.rossdeutscher@gesindel.foo EMAIL;type=INTERNET;type=HOME:raettchen@gmail.bar TEL;type=WORK;type=pref:040 999999432571-43 TEL;type=CELL:017799999978200 TEL;type=HOME:040999999793017 item1.ADR;type=WORK;type=pref:;;abcStraße 58;Hamburg;;20357;Deutschland item1.X-ABADR:de item2.ADR;type=HOME:;;Gayens Weg 9;Hamburg;;22761;Deutschland item2.X-ABADR:de NOTE:Technik\, Web\, DTP\, SysAdmin\, €-Vermögensverwalter item3.URL;type=pref:www.gesindel.baz item3.X-ABLabel:_$!!$_ item4.URL:www.factordesign.foo item4.X-ABLabel:_$!!$_ BDAY;value=date:1969-06-20 X-ABUID:58AB933D-81D3-4095-8CB5-A63431AC934D\:ABPerson END:VCARD ENDDATA QUERY SELECT caldav_data.dav_name, version, nickname, fn, n, note, org, url, fburl, caladruri, caluri FROM caldav_data LEFT JOIN addressbook_resource USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/Jörg_Test-Roßdeutscher_3_0.vcf' ENDQUERY QUERY SELECT type, box_no, unit_no, street_address, locality, region, postcode, country, property FROM caldav_data LEFT JOIN addressbook_address_adr USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/Jörg_Test-Roßdeutscher_3_0.vcf' ORDER BY dav_id, property, 1, 2 ENDQUERY QUERY SELECT addressbook_address_tel.type, addressbook_address_tel.tel FROM caldav_data LEFT JOIN addressbook_address_tel USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/Jörg_Test-Roßdeutscher_3_0.vcf' ORDER BY dav_id, property, 1, 2 ENDQUERY QUERY SELECT addressbook_address_email.type, addressbook_address_email.email FROM caldav_data LEFT JOIN addressbook_address_email USING(dav_id) WHERE caldav_data.dav_name ~ '/user1/addressbook/Jörg_Test-Roßdeutscher_3_0.vcf' ORDER BY dav_id, property, 1, 2 ENDQUERY davical-1.1.1/testing/tests/carddav/2018-PUT-vcard.result0000644000000000000000000000645111732477153017643 0ustar HTTP/1.1 100 Continue HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >http://davical.hadi-schmist.home/access< caluri: >http://davical.hadi-schmist.home/hadi< dav_name: >/user1/addressbook/hans_dieter.vcf< fburl: >http://davical.hadi-schmist.home/freebusy< fn: >Hans Dieter Schmidt< n: >Schmidt;Hans Dieter;;Dr.;Esq.< nickname: >HaWe< note: >NULL< org: >Uni Harburg;;;033< uid: >uid=schmidt.1208717693,ou=Contacts,dc=andresen,dc=de< url: >http://www.tu-hh.de< version: >4.0< box_no: >< country: >NULL< locality: >Irgendwo< postcode: >33443< property: >ADR;TYPE=HOME;CHARSET=utf-8:;;Weisestraße 13\r;Irgendwo;;33443< region: >< street_address: >Weisestraße 13\r< type: >HOME< unit_no: >< box_no: >< country: >Deutschland< locality: >Hamburg-Harburg< postcode: >21373< property: >ADR;TYPE=WORK;CHARSET=utf-8: ;Uni Harburg\, -;Innstraße 71;Hamburg-Harburg;Hamburg;21373;Deutschland< region: >Hamburg< street_address: >Innstraße 71< type: >WORK< unit_no: >Uni Harburg, -< box_no: >< country: >NULL< locality: >NULL< postcode: >NULL< property: >ADR;TYPE=X-OTHER:;;Nirgendwo< region: >NULL< street_address: >Nirgendwo< type: >X-OTHER< unit_no: >< tel: >+49 8292 38 383< type: >CAR,VOICE< tel: >+49 7272 722< type: >CELL,VOICE< tel: >+49 40 812 387 21< type: >HOME,FAX< tel: >+49 7327 272 727< type: >HOME,VOICE< tel: >4234234235< type: >ISDN< tel: >98732947234< type: >ISDN< tel: >+49 6237 623 723 84 76< type: >MAIN< tel: >+49 9324 32 479 234234< type: >MAIN< tel: >+49 8383 73 723< type: >MODEM< tel: >+49 2626 26< type: >PAGER< tel: >+49 12 34 567< type: >PREF,VOICE< tel: >+49 7373 73< type: >WORK,FAX< tel: >+49 234 234 234< type: >WORK,VOICE< tel: >+49 9823 9084< type: >WORK,VOICE< tel: >+49 9872 349 832< type: >X-EVOLUTION-RADIO< tel: >+49 9872 394 872 34< type: >X-EVOLUTION-RADIO< tel: >+49 38 288 228 82< type: >X-EVOLUTION-TELEX< tel: >+49 7722 88 28 282< type: >X-EVOLUTION-TELEX< tel: >+49 8383 73 723< type: >voice< tel: >+49 7373 73< type: >voice< tel: >+49 8378 33< type: >voice< email: >hadi@telekom-d.de< type: >INTERNET< email: >ich@hadi-schmidt.de< type: >INTERNET< davical-1.1.1/testing/tests/carddav/2021-OPTIONS_well-known_carddav.test0000644000000000000000000000027611446006434022514 0ustar # # Do an OPTIONS request on a /.well-known URL for CardDAV TYPE=OPTIONS URL=http://mycaldav/caldav.php/.well-known/carddav HEADER=User-Agent: DataAccess/1.0 (8A293) AUTH=user1:user1 HEAD davical-1.1.1/testing/tests/carddav/2001-PUT-fail.result0000644000000000000000000000055511732477127017447 0ustar HTTP/1.1 403 Forbidden Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy Content-Length: 92 Content-Type: text/plain; charset="utf-8" PUT on a collection is only allowed for text/vcard content against an addressbook collection davical-1.1.1/testing/tests/carddav/2013-PUT-vcard.result0000644000000000000000000000227411732477145017636 0ustar HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy ETag: "3419498c6e5eae71dc1704f1787faf1c" Content-Length: 0 Content-Type: text/plain; charset="utf-8" caladruri: >NULL< caluri: >NULL< dav_etag: >3419498c6e5eae71dc1704f1787faf1c< dav_name: >/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf< fburl: >NULL< fn: >Morphoss Ltd< n: >McMillan;Andrew;;;< nickname: >NULL< note: >NULL< org: >Morphoss Ltd;< uid: >F26B8512-45DA-49ED-B285-23E64B0A68D1-ABSPlugin< url: >NULL< version: >3.0< box_no: >NULL< country: >NULL< locality: >NULL< postcode: >NULL< property: >NULL< region: >NULL< street_address: >NULL< type: >NULL< unit_no: >NULL< tel: >64272332426< type: >WORK~|~pref< email: >andrew+davical@morphoss.com< type: >INTERNET~|~WORK~|~pref< davical-1.1.1/testing/tests/carddav/2011-PROPFIND.result0000644000000000000000000000246411704134640017276 0ustar /caldav.php/user1/addressbook/ Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK HTTP/1.1 404 Not Found /caldav.php/user1/addressbook/andrew_mcmillan.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/addressbook/donald_kelly.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK /caldav.php/user1/addressbook/PHRsMa4mvY.vcf "deadbeefcafef00ddeadbeefcafefeed"<.get?tag> Dow, 01 Jan 2000 00:00:00 GMT HTTP/1.1 200 OK count: >3< davical-1.1.1/testing/tests/ischedule/0000755000000000000000000000000011776303360014575 5ustar davical-1.1.1/testing/tests/ischedule/3051-PUT-with-attendees.result0000644000000000000000000001670611712322200022010 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "2f9bb75f51266683f713f8d382a67bff" Content-Length: 672 Content-Type: text/xml; charset="utf-8" mailto:user1@example.net 2.0;delivered mailto:user2@example.net 2.0;delivered mailto:user3@example.net 2.0;delivered mailto:user4@example.net 2.0;delivered caldav_type: >VEVENT< dav_name: >/user1/.in/iSchedule-POST-attendees.ics< logged_user: >10< summary: >Multiple Beard Meeting< user_no: >10< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:iSchedule-POST-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20111123T110000 DTEND;TZID=Pacific/Auckland:20111123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4MO;COUNT=4 ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user2/.in/iSchedule-POST-attendees.ics< logged_user: >11< summary: >Multiple Beard Meeting< user_no: >11< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:iSchedule-POST-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20111123T110000 DTEND;TZID=Pacific/Auckland:20111123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4MO;COUNT=4 ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user3/.in/iSchedule-POST-attendees.ics< logged_user: >12< summary: >Multiple Beard Meeting< user_no: >12< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:iSchedule-POST-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20111123T110000 DTEND;TZID=Pacific/Auckland:20111123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4MO;COUNT=4 ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < caldav_type: >VEVENT< dav_name: >/user4/.in/iSchedule-POST-attendees.ics< logged_user: >13< summary: >Multiple Beard Meeting< user_no: >13< vcalendar: >BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:iSchedule-POST-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20111123T110000 DTEND;TZID=Pacific/Auckland:20111123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4MO;COUNT=4 ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR < davical-1.1.1/testing/tests/ischedule/3051-PUT-with-attendees.test0000644000000000000000000000552211711704476021465 0ustar # # POST an event with attendees # TYPE=POST URL=http://regression.host/.well-known/ischedule HEADER=X-DAViCal-Flush-Cache: true HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEADER=iSchedule-version: 1.0 HEADER=Originator: mailto:user1@example.net HEADER=Recipient: mailto:user1@example.net, mailto:user2@example.net, mailto:user3@example.net, mailto:user4@example.net HEADER=Content-Type: text/calendar; component=VEVENT; method=REQUEST HEADER=DKIM-Signature: v=1; a=rsa-sha256; s=cal; d=caldav; c=simple-http; q=dns/txt; l=1486; t=1327610315; h=Host:Originator:Recipient:Content-Type:iSchedule-Version; bh=POpauoI0rLZ+cI0vmGXIj4xy43xmE5+CGnXoY3GRuyg=; b=WzlFXjRpv883+NOvPoAOvNok0vKMrHh36ayX60AKjNaHBQ68PAzwcd7ixrf9aZgZh6ossW6TJFh/nrBUx2MufwY6EFJWl1CMufXkoCcjitctIcnDhatRkksSdfzdU4lUElPGVNJL7QrMCsxoyVLwKbux1yGRYGOKetzLzQ9rPiRBQTfJTcrHevE0/NRcG7Iuhcw4xvdUlkwr4I0Xdnj9cLUdKLbgW04BWtkoXSCgMR/eqR2qNHfheIWW/0r2ab34Pzaj0L2hd26BoeukuBLSa77+lefckoewb1E1xlPMfqgGmuINPAbDbJYPAfs5Fz4kOZvfPGz8wUjz3wt2xDFgig== HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:iSchedule-POST-attendees TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20111123T110000 DTEND;TZID=Pacific/Auckland:20111123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4MO;COUNT=4 ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR ENDDATA QUERY SELECT caldav_data.user_no, caldav_data.dav_name, caldav_type, logged_user, caldav_data.caldav_data AS "vcalendar", summary FROM caldav_data JOIN calendar_item USING(dav_name) LEFT JOIN timezones ON (tz_id=tzid) WHERE calendar_item.uid = 'iSchedule-POST-attendees' ORDER BY caldav_data.dav_id ENDQUERY davical-1.1.1/testing/tests/ischedule/3050-PUT-with-attendees.test0000644000000000000000000000502311711704476021460 0ustar # # POST an event with attendees # TYPE=POST URL=http://regression.host/.well-known/ischedule HEADER=X-DAViCal-Flush-Cache: true HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEADER=iSchedule-version: 1.0 HEADER=Originator: mailto:user1@example.net HEADER=Recipient: mailto:user1@example.net, mailto:user2@example.net, mailto:user3@example.net, mailto:user4@example.net HEADER=Content-Type: text/calendar; component=VEVENT; method=REQUEST HEADER=DKIM-Signature: v=1; a=rsa-sha256; s=cal; d=caldav; c=simple-http; q=dns/txt; l=1490; t=1327612159; h=Host:Originator:Recipient:Content-Type:iSchedule-Version; bh=Ia4wocfwW5ODPH2L3hhT75mXSgFJKn7OaXxPxH7Lh+E=; b=KxcAvbZo7P3EPubdLkvP0SiTE/ayjRbVse2Ce6ECKydSf1wB5WX7ipc6ucXEJYwo5jIh3Q0M+GnV04YN7QUCjCrL7D8pCWvpthjenWCIuRllKimEoTqmHBWGyzUilZXEB/O2X++4V9DI//oPSPTqFsqZzpQ8cj7N61EvksJ64foBI+wJ9USvcCEOKameho567L9m43P/AUQ9niJyw/QoSmXxbqDEJcjjq+rrUQ0FKvdufQQGbcnn1FvINzBGusgg1ml92Fwemir9Vq+a/T0xZnPWiA+aFokw365WMw3h9loBXeGSdCosthZgUPnVXvDOMEUMulxPrGphbiAnbvUryg== HEAD BEGINDATA BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apple Inc.//iCal 3.0//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Pacific/Auckland BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:19900318T030000 RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU TZNAME:NZST END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 DTSTART:20070930T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU TZNAME:NZDT END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 DTSTART:20080406T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:NZST END:STANDARD END:VTIMEZONE BEGIN:VEVENT SEQUENCE:7 DESCRIPTION:Masses of Lunch will be needed UID:iSchedule-POST-attendees-ONE TRANSP:OPAQUE DTSTART;TZID=Pacific/Auckland:20111123T110000 DTEND;TZID=Pacific/Auckland:20111123T160000 DTSTAMP:20101124T221900Z SUMMARY:Multiple Beard Meeting CREATED:20071124T221521Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4MO;COUNT=4 ORGANIZER;CN=User 1:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 1;LANGUAGE=en:MAILTO:user1@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 2;LANGUAGE=en:MAILTO:user2@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 3;LANGUAGE=en:MAILTO:user3@example.net ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION; RSVP=TRUE;CN=User 4;LANGUAGE=en:MAILTO:user4@example.net END:VEVENT END:VCALENDAR ENDDATA davical-1.1.1/testing/tests/ischedule/Restore-Database.result0000644000000000000000000000043011711704476021161 0ustar setval -------- 1642 (1 row) setval -------- 1 (1 row) setval -------- 10 (1 row) setval -------- 10 (1 row) setval -------- 1 (1 row) setval -------- 8 (1 row) setval -------- 13 (1 row) setval -------- 1000 (1 row) davical-1.1.1/testing/tests/ischedule/3050-PUT-with-attendees.result0000644000000000000000000000153111712322200021775 0ustar HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "2f9bb75f51266683f713f8d382a67bff" Content-Length: 672 Content-Type: text/xml; charset="utf-8" mailto:user1@example.net 2.0;delivered mailto:user2@example.net 2.0;delivered mailto:user3@example.net 2.0;delivered mailto:user4@example.net 2.0;delivered davical-1.1.1/testing/tests/ischedule/initial.dbdump0000644000000000000000000341751111711704476017441 0ustar -- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; -- -- Name: rrule_instance; Type: TYPE; Schema: public; Owner: davical_dba -- CREATE TYPE rrule_instance AS ( dtstart timestamp with time zone, rrule text, instance timestamp with time zone ); ALTER TYPE public.rrule_instance OWNER TO davical_dba; -- -- Name: rrule_parts; Type: TYPE; Schema: public; Owner: davical_dba -- CREATE TYPE rrule_parts AS ( base timestamp with time zone, until timestamp with time zone, freq text, count integer, "interval" integer, bysecond integer[], byminute integer[], byhour integer[], bymonthday integer[], byyearday integer[], byweekno integer[], byday text[], bymonth integer[], bysetpos integer[], wkst text ); ALTER TYPE public.rrule_parts OWNER TO davical_dba; -- -- Name: alarm_changed(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION alarm_changed() RETURNS trigger LANGUAGE plpgsql AS $$ DECLARE oldcomponent TEXT; newcomponent TEXT; BEGIN -- in case we trigger on other events in future IF TG_OP = 'UPDATE' THEN IF NEW.component != OLD.component THEN UPDATE caldav_data SET caldav_data = replace( caldav_data, OLD.component, NEW.component ), dav_etag = md5(replace( caldav_data, OLD.component, NEW.component )) WHERE caldav_data.dav_id = NEW.dav_id; END IF; END IF; RETURN NEW; END; $$; ALTER FUNCTION public.alarm_changed() OWNER TO davical_dba; -- -- Name: apply_month_byday(timestamp with time zone, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION apply_month_byday(timestamp with time zone, text) RETURNS timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE in_time ALIAS FOR $1; byday ALIAS FOR $2; weeks INT; dow INT; temp_txt TEXT; dd INT; mm INT; yy INT; our_dow INT; our_answer TIMESTAMP WITH TIME ZONE; BEGIN dow := position(substring( byday from '..$') in 'SUMOTUWETHFRSA') / 2; temp_txt := substring(byday from '([0-9]+)'); weeks := temp_txt::int; -- RAISE NOTICE 'DOW: %, Weeks: %(%s)', dow, weeks, temp_txt; IF substring(byday for 1) = '-' THEN -- Last XX of month, or possibly second-to-last, but unlikely mm := extract( 'month' from in_time); yy := extract( 'year' from in_time); -- Start with the last day of the month our_answer := (yy::text || '-' || (mm+1)::text || '-01')::timestamp - '1 day'::interval; dd := extract( 'dow' from our_answer); dd := dd - dow; IF dd < 0 THEN dd := dd + 7; END IF; -- Having calculated the right day of the month, we now apply that back to in_time -- which contains the otherwise-unobtainable timezone detail (and the time) our_answer = our_answer - (dd::text || 'days')::interval; dd := extract( 'day' from our_answer) - extract( 'day' from in_time); our_answer := in_time + (dd::text || 'days')::interval; IF weeks > 1 THEN weeks := weeks - 1; our_answer := our_answer - (weeks::text || 'weeks')::interval; END IF; ELSE -- Shift our date to the correct day of week.. our_dow := extract( 'dow' from in_time); our_dow := our_dow - dow; dd := extract( 'day' from in_time); IF our_dow >= dd THEN our_dow := our_dow - 7; END IF; our_answer := in_time - (our_dow::text || 'days')::interval; dd = extract( 'day' from our_answer); -- Shift the date to the correct week... dd := weeks - ((dd+6) / 7); IF dd != 0 THEN our_answer := our_answer + ((dd::text || 'weeks')::interval); END IF; END IF; RETURN our_answer; END; $_$; ALTER FUNCTION public.apply_month_byday(timestamp with time zone, text) OWNER TO davical_dba; -- -- Name: bits_to_legacy_privilege(bit); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION bits_to_legacy_privilege(bit) RETURNS text LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE in_bits ALIAS FOR $1; out_priv TEXT; BEGIN out_priv := ''; IF in_bits = (~ 0::BIT(24)) THEN out_priv = 'A'; RETURN out_priv; END IF; -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- 1 DAV:read -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF (in_bits & 4609::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN out_priv := 'R'; ELSE out_priv := 'F'; END IF; END IF; -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- 2 DAV:write-properties -- 4 DAV:write-content -- 64 DAV:bind -- 128 DAV:unbind IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 6::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'W'; ELSE IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'B'; END IF; IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || 'U'; END IF; END IF; END IF; RETURN out_priv; END $_$; ALTER FUNCTION public.bits_to_legacy_privilege(bit) OWNER TO davical_dba; -- -- Name: bits_to_privilege(bit); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION bits_to_privilege(bit) RETURNS text[] LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE in_bits ALIAS FOR $1; out_priv TEXT[]; BEGIN IF in_bits = (~ 0::BIT(24)) THEN out_priv := out_priv || ARRAY['DAV:all']; END IF; IF (in_bits & 513::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 1::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read']; END IF; IF (in_bits & 512::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:read-free-busy']; END IF; END IF; IF (in_bits & 198::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 198::BIT(24)) = 198::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write']; ELSE IF (in_bits & 2::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-properties']; END IF; IF (in_bits & 4::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-content']; END IF; IF (in_bits & 64::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:bind']; END IF; IF (in_bits & 128::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:unbind']; END IF; END IF; END IF; IF (in_bits & 8::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:unlock']; END IF; IF (in_bits & 16::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read-acl']; END IF; IF (in_bits & 32::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:read-current-user-privilege-set']; END IF; IF (in_bits & 256::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['DAV:write-acl']; END IF; IF (in_bits & 7168::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 7168::BIT(24)) = 7168::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver']; ELSE IF (in_bits & 1024::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver-invite']; END IF; IF (in_bits & 2048::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-deliver-reply']; END IF; IF (in_bits & 4096::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-query-freebusy']; END IF; END IF; END IF; IF (in_bits & 57344::BIT(24)) != 0::BIT(24) THEN IF (in_bits & 57344::BIT(24)) = 57344::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send']; ELSE IF (in_bits & 8192::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-invite']; END IF; IF (in_bits & 16384::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-reply']; END IF; IF (in_bits & 32768::BIT(24)) != 0::BIT(24) THEN out_priv := out_priv || ARRAY['caldav:schedule-send-freebusy']; END IF; END IF; END IF; RETURN out_priv; END $_$; ALTER FUNCTION public.bits_to_privilege(bit) OWNER TO davical_dba; -- -- Name: calculate_later_timestamp(timestamp with time zone, timestamp with time zone, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION calculate_later_timestamp(timestamp with time zone, timestamp with time zone, text) RETURNS timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE earliest ALIAS FOR $1; basedate ALIAS FOR $2; repeatrule ALIAS FOR $3; frequency TEXT; temp_txt TEXT; length INT; count INT; byday TEXT; bymonthday INT; basediff INTERVAL; past_repeats INT8; units TEXT; dow TEXT; our_answer TIMESTAMP WITH TIME ZONE; loopcount INT; BEGIN IF basedate > earliest THEN RETURN basedate; END IF; temp_txt := substring(repeatrule from 'UNTIL=([0-9TZ]+)(;|$)'); IF temp_txt IS NOT NULL AND temp_txt::timestamp with time zone < earliest THEN RETURN NULL; END IF; frequency := substring(repeatrule from 'FREQ=([A-Z]+)(;|$)'); IF frequency IS NULL THEN RETURN NULL; END IF; past_repeats = 0; length = 1; temp_txt := substring(repeatrule from 'INTERVAL=([0-9]+)(;|$)'); IF temp_txt IS NOT NULL THEN length := temp_txt::int; basediff := earliest - basedate; -- RAISE NOTICE 'Frequency: %, Length: %(%), Basediff: %', frequency, length, temp_txt, basediff; -- Calculate the number of past periods between our base date and our earliest date IF frequency = 'WEEKLY' OR frequency = 'DAILY' THEN past_repeats := extract('epoch' from basediff)::INT8 / 86400; -- RAISE NOTICE 'Days: %', past_repeats; IF frequency = 'WEEKLY' THEN past_repeats := past_repeats / 7; END IF; ELSE past_repeats = extract( 'years' from basediff ); IF frequency = 'MONTHLY' THEN past_repeats = (past_repeats *12) + extract( 'months' from basediff ); END IF; END IF; IF length IS NOT NULL THEN past_repeats = (past_repeats / length) + 1; END IF; END IF; -- Check that we have not exceeded the COUNT= limit temp_txt := substring(repeatrule from 'COUNT=([0-9]+)(;|$)'); IF temp_txt IS NOT NULL THEN count := temp_txt::int; -- RAISE NOTICE 'Periods: %, Count: %(%), length: %', past_repeats, count, temp_txt, length; IF ( count <= past_repeats ) THEN RETURN NULL; END IF; ELSE count := NULL; END IF; temp_txt := substring(repeatrule from 'BYSETPOS=([0-9-]+)(;|$)'); byday := substring(repeatrule from 'BYDAY=([0-9A-Z,]+-)(;|$)'); IF byday IS NOT NULL AND frequency = 'MONTHLY' THEN -- Since this could move the date around a month we go back one -- period just to be extra sure. past_repeats = past_repeats - 1; IF temp_txt IS NOT NULL THEN -- Crudely hack the BYSETPOS onto the front of BYDAY. While this -- is not as per rfc2445, RRULE syntax is so complex and overblown -- that nobody correctly uses comma-separated BYDAY or BYSETPOS, and -- certainly not within a MONTHLY RRULE. byday := temp_txt || byday; END IF; END IF; past_repeats = past_repeats * length; units := CASE WHEN frequency = 'DAILY' THEN 'days' WHEN frequency = 'WEEKLY' THEN 'weeks' WHEN frequency = 'MONTHLY' THEN 'months' WHEN frequency = 'YEARLY' THEN 'years' END; temp_txt := substring(repeatrule from 'BYMONTHDAY=([0-9,]+)(;|$)'); bymonthday := temp_txt::int; -- With all of the above calculation, this date should be close to (but less than) -- the target, and we should only loop once or twice. our_answer := basedate + (past_repeats::text || units)::interval; IF our_answer IS NULL THEN RAISE EXCEPTION 'our_answer IS NULL! basedate:% past_repeats:% units:%', basedate, past_repeats, units; END IF; loopcount := 500; -- Desirable to stop an infinite loop if there is something we cannot handle LOOP -- RAISE NOTICE 'Testing date: %', our_answer; IF frequency = 'DAILY' THEN IF byday IS NOT NULL THEN LOOP dow = substring( to_char( our_answer, 'DY' ) for 2); EXIT WHEN byday ~* dow; -- Increment for our next time through the loop... our_answer := our_answer + (length::text || units)::interval; END LOOP; END IF; ELSIF frequency = 'WEEKLY' THEN -- Weekly repeats are only on specific days -- This is really not right, since a WEEKLY on MO,WE,FR should -- occur three times each week and this will only be once a week. dow = substring( to_char( our_answer, 'DY' ) for 2); ELSIF frequency = 'MONTHLY' THEN IF byday IS NOT NULL THEN -- This works fine, except that maybe there are multiple BYDAY -- components. e.g. 1TU,3TU might be 1st & 3rd tuesdays. our_answer := apply_month_byday( our_answer, byday ); ELSE -- If we did not get a BYDAY= then we kind of have to assume it is the same day each month our_answer := our_answer + '1 month'::interval; END IF; ELSIF bymonthday IS NOT NULL AND frequency = 'MONTHLY' AND bymonthday < 1 THEN -- We do not deal with this situation at present RAISE NOTICE 'The case of negative BYMONTHDAY is not handled yet.'; END IF; EXIT WHEN our_answer >= earliest; -- Give up if we have exceeded the count IF ( count IS NOT NULL AND past_repeats > count ) THEN RETURN NULL; ELSE past_repeats := past_repeats + 1; END IF; loopcount := loopcount - 1; IF loopcount < 0 THEN RAISE NOTICE 'Giving up on repeat rule "%" - after 100 increments from % we are still not after %', repeatrule, basedate, earliest; RETURN NULL; END IF; -- Increment for our next time through the loop... our_answer := our_answer + (length::text || units)::interval; END LOOP; RETURN our_answer; END; $_$; ALTER FUNCTION public.calculate_later_timestamp(timestamp with time zone, timestamp with time zone, text) OWNER TO davical_dba; -- -- Name: caldav_data_modified(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION caldav_data_modified() RETURNS trigger LANGUAGE plpgsql AS $$ DECLARE coll_id caldav_data.collection_id%TYPE; BEGIN IF TG_OP = 'UPDATE' THEN IF NEW.caldav_data = OLD.caldav_data AND NEW.collection_id = OLD.collection_id THEN -- Nothing for us to do RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN -- On insert or update modified, we set the NEW collection tag to the md5 of the -- etag of the updated row which gives us something predictable for our regression -- tests, but something different from the actual etag of the new event. UPDATE collection SET modified = current_timestamp, dav_etag = md5(NEW.dav_etag) WHERE collection_id = NEW.collection_id; IF TG_OP = 'INSERT' THEN RETURN NEW; END IF; END IF; IF TG_OP = 'DELETE' THEN -- On delete we set the OLD collection tag to the md5 of the old path & the old -- etag, which again gives us something predictable for our regression tests. UPDATE collection SET modified = current_timestamp, dav_etag = md5(OLD.dav_name::text||OLD.dav_etag) WHERE collection_id = OLD.collection_id; RETURN OLD; END IF; IF NEW.collection_id != OLD.collection_id THEN -- If we've switched the collection_id of this event, then we also need to update -- the etag of the old collection - as we do for delete. UPDATE collection SET modified = current_timestamp, dav_etag = md5(OLD.dav_name::text||OLD.dav_etag) WHERE collection_id = OLD.collection_id; END IF; RETURN NEW; END; $$; ALTER FUNCTION public.caldav_data_modified() OWNER TO davical_dba; -- -- Name: check_db_revision(integer, integer, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION check_db_revision(integer, integer, integer) RETURNS boolean LANGUAGE plpgsql AS $_$ DECLARE major ALIAS FOR $1; minor ALIAS FOR $2; patch ALIAS FOR $3; matching INT; BEGIN SELECT COUNT(*) INTO matching FROM awl_db_revision WHERE (schema_major = major AND schema_minor = minor AND schema_patch > patch) OR (schema_major = major AND schema_minor > minor) OR (schema_major > major) ; IF matching >= 1 THEN RAISE EXCEPTION 'Database revisions after %.%.% have already been applied.', major, minor, patch; RETURN FALSE; END IF; SELECT COUNT(*) INTO matching FROM awl_db_revision WHERE schema_major = major AND schema_minor = minor AND schema_patch = patch; IF matching >= 1 THEN RETURN TRUE; END IF; RAISE EXCEPTION 'Database has not been upgraded to %.%.%', major, minor, patch; RETURN FALSE; END; $_$; ALTER FUNCTION public.check_db_revision(integer, integer, integer) OWNER TO davical_dba; -- -- Name: collection_modified(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION collection_modified() RETURNS trigger LANGUAGE plpgsql AS $$ DECLARE BEGIN -- in case we trigger on other events in future IF TG_OP = 'UPDATE' THEN IF NEW.dav_name != OLD.dav_name THEN UPDATE caldav_data SET dav_name = replace( dav_name, OLD.dav_name, NEW.dav_name), user_no = NEW.user_no WHERE substring(dav_name from 1 for char_length(OLD.dav_name)) = OLD.dav_name; END IF; END IF; RETURN NEW; END; $$; ALTER FUNCTION public.collection_modified() OWNER TO davical_dba; -- -- Name: daily_set(timestamp with time zone, rrule_parts); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION daily_set(timestamp with time zone, rrule_parts) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; BEGIN IF rrule.bymonth IS NOT NULL AND NOT date_part('month',after) = ANY ( rrule.bymonth ) THEN RETURN; END IF; IF rrule.byweekno IS NOT NULL AND NOT date_part('week',after) = ANY ( rrule.byweekno ) THEN RETURN; END IF; IF rrule.byyearday IS NOT NULL AND NOT date_part('doy',after) = ANY ( rrule.byyearday ) THEN RETURN; END IF; IF rrule.bymonthday IS NOT NULL AND NOT date_part('day',after) = ANY ( rrule.bymonthday ) THEN RETURN; END IF; IF rrule.byday IS NOT NULL AND NOT substring( to_char( after, 'DY') for 2 from 1) = ANY ( rrule.byday ) THEN RETURN; END IF; -- Since we don't do BYHOUR, BYMINUTE or BYSECOND yet this becomes a trivial RETURN NEXT after; END; $_$; ALTER FUNCTION public.daily_set(timestamp with time zone, rrule_parts) OWNER TO davical_dba; -- -- Name: event_has_exceptions(text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION event_has_exceptions(text) RETURNS boolean LANGUAGE sql IMMUTABLE STRICT AS $_$ SELECT $1 ~ E'\nRECURRENCE-ID(;TZID=[^:]+)?:[[:space:]]*[[:digit:]]{8}(T[[:digit:]]{6})?' $_$; ALTER FUNCTION public.event_has_exceptions(text) OWNER TO davical_dba; -- -- Name: event_instances(timestamp with time zone, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION event_instances(timestamp with time zone, text) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; maxdate TIMESTAMP WITH TIME ZONE; BEGIN maxdate := current_date + '10 years'::interval; RETURN QUERY SELECT d FROM rrule_event_instances_range( basedate, repeatrule, basedate, maxdate, 300 ) d; END; $_$; ALTER FUNCTION public.event_instances(timestamp with time zone, text) OWNER TO davical_dba; -- -- Name: expand_members(bigint, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION expand_members(bigint, integer) RETURNS SETOF bigint LANGUAGE sql STABLE STRICT AS $_$ SELECT member_id FROM group_member WHERE group_id = $1 UNION SELECT expanded.m_id FROM (SELECT CASE WHEN $2 > 0 THEN expand_members( member_id, $2 - 1) END AS m_id FROM group_member WHERE group_id = $1) AS expanded WHERE expanded.m_id IS NOT NULL; $_$; ALTER FUNCTION public.expand_members(bigint, integer) OWNER TO davical_dba; -- -- Name: expand_memberships(bigint, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION expand_memberships(bigint, integer) RETURNS SETOF bigint LANGUAGE sql STABLE STRICT AS $_$ SELECT group_id FROM group_member WHERE member_id = $1 UNION SELECT expanded.g_id FROM (SELECT CASE WHEN $2 > 0 THEN expand_memberships( group_id, $2 - 1) END AS g_id FROM group_member WHERE member_id = $1) AS expanded WHERE expanded.g_id IS NOT NULL; $_$; ALTER FUNCTION public.expand_memberships(bigint, integer) OWNER TO davical_dba; -- -- Name: get_group_role_no(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION get_group_role_no() RETURNS integer LANGUAGE sql IMMUTABLE AS $$ SELECT role_no FROM roles WHERE role_name = 'Group' $$; ALTER FUNCTION public.get_group_role_no() OWNER TO davical_dba; -- -- Name: get_permissions(integer, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION get_permissions(integer, integer) RETURNS text LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE in_from ALIAS FOR $1; in_to ALIAS FOR $2; out_confers TEXT; bit_confers BIT(24); group_role_no INT; tmp_txt TEXT; dbg TEXT DEFAULT ''; r RECORD; counter INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN 'A'; END IF; -- dbg := 'S-'; SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 WHERE r1.from_user = in_from AND r1.to_user = in_to AND NOT usr_is_role(r1.to_user,'Group'); IF FOUND THEN RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No simple relationships between % and %', in_from, in_to; SELECT bit_or(r1.confers & r2.confers) INTO bit_confers FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user WHERE r1.from_user=in_from AND r2.to_user=in_to AND r2.from_user IN (SELECT user_no FROM roles LEFT JOIN role_member USING(role_no) WHERE role_name='Group'); IF bit_confers != 0::BIT(24) THEN RETURN dbg || bits_to_legacy_privilege(bit_confers); END IF; RETURN ''; -- RAISE NOTICE 'No complex relationships between % and %', in_from, in_to; SELECT bits_to_legacy_privilege(r1.confers) INTO out_confers FROM relationship r1 LEFT OUTER JOIN relationship r2 ON(r1.to_user = r2.to_user) WHERE r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) ; IF FOUND THEN -- dbg := 'H-'; -- RAISE NOTICE 'Permissions to shared group % ', out_confers; RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN ''; END; $_$; ALTER FUNCTION public.get_permissions(integer, integer) OWNER TO davical_dba; -- -- Name: get_usr_setting(integer, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION get_usr_setting(integer, text) RETURNS text LANGUAGE sql AS $_$SELECT setting_value FROM usr_setting WHERE usr_setting.user_no = $1 AND usr_setting.setting_name = $2 $_$; ALTER FUNCTION public.get_usr_setting(integer, text) OWNER TO davical_dba; -- -- Name: grants_modified(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION grants_modified() RETURNS trigger LANGUAGE plpgsql AS $$ DECLARE old_to_principal INT8; new_is_group BOOL; BEGIN -- in case we trigger on other events in future IF TG_OP = 'INSERT' THEN old_to_principal := NULL; ELSE old_to_principal := OLD.to_principal; END IF; IF TG_OP = 'INSERT' OR NEW.to_principal != old_to_principal THEN SELECT (type_id = 3) INTO new_is_group FROM principal WHERE principal_id = NEW.to_principal; IF NEW.is_group != new_is_group THEN NEW.is_group := new_is_group; END IF; END IF; RETURN NEW; END; $$; ALTER FUNCTION public.grants_modified() OWNER TO davical_dba; -- -- Name: grants_proxy_access_from_p(bigint, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION grants_proxy_access_from_p(bigint, integer) RETURNS SETOF bigint LANGUAGE sql STABLE STRICT AS $_$ SELECT DISTINCT by_principal FROM grants WHERE by_collection IS NULL AND by_principal != $1 AND by_principal IN (SELECT expand_members(g2.to_principal,$2) FROM grants g2 WHERE g2.by_principal = $1) ; $_$; ALTER FUNCTION public.grants_proxy_access_from_p(bigint, integer) OWNER TO davical_dba; -- -- Name: has_legacy_privilege(integer, text, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION has_legacy_privilege(integer, text, integer) RETURNS boolean LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE in_from ALIAS FOR $1; in_legacy_privilege ALIAS FOR $2; in_to ALIAS FOR $3; in_confers BIT(24); group_role_no INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN TRUE; END IF; SELECT get_group_role_no() INTO group_role_no; SELECT legacy_privilege_to_bits(in_legacy_privilege) INTO in_confers; IF EXISTS(SELECT 1 FROM relationship WHERE from_user = in_from AND to_user = in_to AND (in_confers & confers) = in_confers AND NOT EXISTS(SELECT 1 FROM role_member WHERE to_user = user_no AND role_no = group_role_no) ) THEN -- A direct relationship from A to B that grants sufficient -- RAISE NOTICE 'Permissions directly granted'; RETURN TRUE; END IF; IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.from_user WHERE (in_confers & r1.confers & r2.confers) = in_confers AND r1.from_user=in_from AND r2.to_user=in_to AND r2.from_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) ) THEN -- An indirect relationship from A to B via group G that grants sufficient -- RAISE NOTICE 'Permissions mediated via group'; RETURN TRUE; END IF; IF EXISTS( SELECT 1 FROM relationship r1 JOIN relationship r2 ON r1.to_user=r2.to_user WHERE (in_confers & r1.confers & r2.confers) = in_confers AND r1.from_user=in_from AND r2.from_user=in_to AND r2.to_user IN (SELECT user_no FROM role_member WHERE role_no=group_role_no) AND NOT EXISTS(SELECT 1 FROM relationship WHERE from_user=r2.to_user) ) THEN -- An indirect reflexive relationship from both A & B to group G which grants sufficient -- RAISE NOTICE 'Permissions to shared group'; RETURN TRUE; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN FALSE; END; $_$; ALTER FUNCTION public.has_legacy_privilege(integer, text, integer) OWNER TO davical_dba; -- -- Name: has_members_list(bigint); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION has_members_list(bigint) RETURNS text LANGUAGE plpgsql STRICT AS $_$ DECLARE in_member_id ALIAS FOR $1; m RECORD; mlist TEXT; BEGIN mlist := ''; FOR m IN SELECT displayname, group_id FROM group_member JOIN principal ON (member_id = principal_id) WHERE group_id = in_member_id LOOP mlist := mlist || CASE WHEN mlist = '' THEN '' ELSE ', ' END || COALESCE( m.displayname, m.group_id::text); END LOOP; RETURN mlist; END; $_$; ALTER FUNCTION public.has_members_list(bigint) OWNER TO davical_dba; -- -- Name: icalendar_interval_to_sql(text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION icalendar_interval_to_sql(text) RETURNS interval LANGUAGE sql IMMUTABLE STRICT AS $_$ SELECT CASE WHEN substring($1,1,1) = '-' THEN -1 ELSE 1 END * regexp_replace( regexp_replace($1, '[PT-]', '', 'g'), '([A-Z])', E'\\1 ', 'g')::interval; $_$; ALTER FUNCTION public.icalendar_interval_to_sql(text) OWNER TO davical_dba; -- -- Name: is_member_of_list(bigint); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION is_member_of_list(bigint) RETURNS text LANGUAGE plpgsql STRICT AS $_$ DECLARE in_member_id ALIAS FOR $1; m RECORD; mlist TEXT; BEGIN mlist := ''; FOR m IN SELECT displayname, group_id FROM group_member JOIN principal ON (group_id = principal_id) WHERE member_id = in_member_id LOOP mlist := mlist || CASE WHEN mlist = '' THEN '' ELSE ', ' END || COALESCE( m.displayname, m.group_id::text); END LOOP; RETURN mlist; END; $_$; ALTER FUNCTION public.is_member_of_list(bigint) OWNER TO davical_dba; -- -- Name: legacy_get_permissions(integer, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION legacy_get_permissions(integer, integer) RETURNS text LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE in_from ALIAS FOR $1; in_to ALIAS FOR $2; out_confers TEXT; tmp_confers1 TEXT; tmp_confers2 TEXT; tmp_txt TEXT; dbg TEXT DEFAULT ''; r RECORD; counter INT; BEGIN -- Self can always have full access IF in_from = in_to THEN RETURN 'A'; END IF; -- dbg := 'S-'; SELECT rt1.confers INTO out_confers FROM relationship r1 JOIN relationship_type rt1 USING ( rt_id ) WHERE r1.from_user = in_from AND r1.to_user = in_to AND NOT usr_is_role(r1.to_user,'Group'); IF FOUND THEN RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No simple relationships between % and %', in_from, in_to; out_confers := ''; FOR r IN SELECT rt1.confers AS r1, rt2.confers AS r2 FROM relationship r1 JOIN relationship_type rt1 USING(rt_id) JOIN relationship r2 ON r1.to_user=r2.from_user JOIN relationship_type rt2 ON r2.rt_id=rt2.rt_id WHERE r1.from_user=in_from AND r2.to_user=in_to AND EXISTS( SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_member.user_no=r1.to_user AND roles.role_name='Group') AND NOT EXISTS( SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_member.user_no=r2.to_user AND roles.role_name='Group') AND NOT EXISTS( SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_member.user_no=r1.from_user AND roles.role_name='Group') LOOP -- RAISE NOTICE 'Permissions to group % from group %', r.r1, r.r2; -- FIXME: This is an oversimplification -- dbg := 'C-'; tmp_confers1 := r.r1; tmp_confers2 := r.r2; IF tmp_confers1 != tmp_confers2 THEN IF tmp_confers1 ~* 'A' THEN -- Ensure that A is expanded to all supported privs before being used as a mask tmp_confers1 := 'AFBRWU'; END IF; IF tmp_confers2 ~* 'A' THEN -- Ensure that A is expanded to all supported privs before being used as a mask tmp_confers2 := 'AFBRWU'; END IF; -- RAISE NOTICE 'Expanded permissions to group % from group %', tmp_confers1, tmp_confers2; tmp_txt = ''; FOR counter IN 1 .. length(tmp_confers2) LOOP IF tmp_confers1 ~* substring(tmp_confers2,counter,1) THEN tmp_txt := tmp_txt || substring(tmp_confers2,counter,1); END IF; END LOOP; tmp_confers2 := tmp_txt; END IF; FOR counter IN 1 .. length(tmp_confers2) LOOP IF NOT out_confers ~* substring(tmp_confers2,counter,1) THEN out_confers := out_confers || substring(tmp_confers2,counter,1); END IF; END LOOP; END LOOP; IF out_confers ~* 'A' OR (out_confers ~* 'B' AND out_confers ~* 'F' AND out_confers ~* 'R' AND out_confers ~* 'W' AND out_confers ~* 'U') THEN out_confers := 'A'; END IF; IF out_confers != '' THEN RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No complex relationships between % and %', in_from, in_to; SELECT rt1.confers INTO out_confers, tmp_confers1 FROM relationship r1 JOIN relationship_type rt1 ON ( r1.rt_id = rt1.rt_id ) LEFT OUTER JOIN relationship r2 ON ( rt1.rt_id = r2.rt_id ) WHERE r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND r1.to_user = r2.to_user AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) AND usr_is_role(r1.to_user,'Group'); IF FOUND THEN -- dbg := 'H-'; -- RAISE NOTICE 'Permissions to shared group % ', out_confers; RETURN dbg || out_confers; END IF; -- RAISE NOTICE 'No common group relationships between % and %', in_from, in_to; RETURN ''; END; $_$; ALTER FUNCTION public.legacy_get_permissions(integer, integer) OWNER TO davical_dba; -- -- Name: legacy_privilege_to_bits(text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION legacy_privilege_to_bits(text) RETURNS bit LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE in_priv ALIAS FOR $1; out_bits BIT(24); BEGIN out_bits := 0::BIT(24); IF in_priv ~* 'A' THEN out_bits = ~ out_bits; RETURN out_bits; END IF; -- The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:read privilege. -- 1 DAV:read -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'R' THEN out_bits := out_bits | 4609::BIT(24); END IF; -- DAV:write => DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and DAV:write-content -- 2 DAV:write-properties -- 4 DAV:write-content -- 64 DAV:bind -- 128 DAV:unbind IF in_priv ~* 'W' THEN out_bits := out_bits | 198::BIT(24); END IF; -- 64 DAV:bind IF in_priv ~* 'B' THEN out_bits := out_bits | 64::BIT(24); END IF; -- 128 DAV:unbind IF in_priv ~* 'U' THEN out_bits := out_bits | 128::BIT(24); END IF; -- 512 CalDAV:read-free-busy -- 4096 CALDAV:schedule-query-freebusy IF in_priv ~* 'F' THEN out_bits := out_bits | 4608::BIT(24); END IF; RETURN out_bits; END $_$; ALTER FUNCTION public.legacy_privilege_to_bits(text) OWNER TO davical_dba; -- -- Name: max_roles(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION max_roles() RETURNS integer LANGUAGE sql AS $$SELECT max(role_no) FROM roles$$; ALTER FUNCTION public.max_roles() OWNER TO davical_dba; -- -- Name: max_session(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION max_session() RETURNS integer LANGUAGE sql AS $$SELECT max(session_id) FROM session$$; ALTER FUNCTION public.max_session() OWNER TO davical_dba; -- -- Name: max_usr(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION max_usr() RETURNS integer LANGUAGE sql AS $$SELECT max(user_no) FROM usr$$; ALTER FUNCTION public.max_usr() OWNER TO davical_dba; -- -- Name: monthly_set(timestamp with time zone, rrule_parts); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION monthly_set(timestamp with time zone, rrule_parts) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; valid_date TIMESTAMP WITH TIME ZONE; curse REFCURSOR; setpos INT; i INT; BEGIN /** * Need to investigate whether it is legal to set both of these, and whether * we are correct to UNION the results, or whether we should INTERSECT them. * So at this point, we refer to the specification, which grants us this * wonderfully enlightening vision: * * If multiple BYxxx rule parts are specified, then after evaluating the * specified FREQ and INTERVAL rule parts, the BYxxx rule parts are * applied to the current set of evaluated occurrences in the following * order: BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY, BYHOUR, * BYMINUTE, BYSECOND and BYSETPOS; then COUNT and UNTIL are evaluated. * * My guess is that this means 'INTERSECT' */ IF rrule.byday IS NOT NULL AND rrule.bymonthday IS NOT NULL THEN OPEN curse SCROLL FOR SELECT r FROM rrule_month_byday_set(after, rrule.byday ) r INTERSECT SELECT r FROM rrule_month_bymonthday_set(after, rrule.bymonthday ) r ORDER BY 1; ELSIF rrule.bymonthday IS NOT NULL THEN OPEN curse SCROLL FOR SELECT r FROM rrule_month_bymonthday_set(after, rrule.bymonthday ) r ORDER BY 1; ELSE OPEN curse SCROLL FOR SELECT r FROM rrule_month_byday_set(after, rrule.byday ) r ORDER BY 1; END IF; RETURN QUERY SELECT d FROM rrule_bysetpos_filter(curse,rrule.bysetpos) d; END; $_$; ALTER FUNCTION public.monthly_set(timestamp with time zone, rrule_parts) OWNER TO davical_dba; -- -- Name: new_db_revision(integer, integer, integer, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION new_db_revision(integer, integer, integer, text) RETURNS void LANGUAGE plpgsql AS $_$ DECLARE major ALIAS FOR $1; minor ALIAS FOR $2; patch ALIAS FOR $3; blurb ALIAS FOR $4; new_id INT; BEGIN SELECT MAX(schema_id) + 1 INTO new_id FROM awl_db_revision; IF NOT FOUND OR new_id IS NULL THEN new_id := 1; END IF; INSERT INTO awl_db_revision (schema_id, schema_major, schema_minor, schema_patch, schema_name) VALUES( new_id, major, minor, patch, blurb ); RETURN; END; $_$; ALTER FUNCTION public.new_db_revision(integer, integer, integer, text) OWNER TO davical_dba; -- -- Name: new_sync_token(bigint, bigint); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION new_sync_token(bigint, bigint) RETURNS bigint LANGUAGE plpgsql STRICT AS $_$ DECLARE in_old_sync_token ALIAS FOR $1; in_collection_id ALIAS FOR $2; tmp_int INT8; old_modification_time sync_tokens.modification_time%TYPE; BEGIN IF in_old_sync_token > 0 THEN SELECT modification_time INTO old_modification_time FROM sync_tokens WHERE sync_token = in_old_sync_token; IF NOT FOUND THEN -- They are in an inconsistent state: we return NULL so they can re-start the process RETURN NULL; END IF; SELECT 1 INTO tmp_int FROM sync_changes WHERE collection_id = in_collection_id AND sync_time > old_modification_time LIMIT 1; IF NOT FOUND THEN -- Ensure we return the latest sync_token we have for this collection, since there are -- no changes. SELECT sync_token INTO tmp_int FROM sync_tokens WHERE collection_id = in_collection_id ORDER BY modification_time DESC LIMIT 1; RETURN tmp_int; END IF; END IF; SELECT nextval('sync_tokens_sync_token_seq') INTO tmp_int; INSERT INTO sync_tokens(collection_id, sync_token) VALUES( in_collection_id, tmp_int ); RETURN tmp_int; END $_$; ALTER FUNCTION public.new_sync_token(bigint, bigint) OWNER TO davical_dba; -- -- Name: p_has_proxy_access_to(bigint, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION p_has_proxy_access_to(bigint, integer) RETURNS SETOF bigint LANGUAGE sql STABLE STRICT AS $_$ SELECT by_principal FROM ( SELECT by_principal FROM grants WHERE to_principal IN (SELECT $1 UNION SELECT expand_memberships($1,$2)) AND (privileges & 5::BIT(24)) != 0::BIT(24) AND by_collection IS NULL AND by_principal != $1 UNION SELECT principal_id AS by_principal FROM principal WHERE (default_privileges & 5::BIT(24)) != 0::BIT(24) AND principal_id != $1 ) subquery; $_$; ALTER FUNCTION public.p_has_proxy_access_to(bigint, integer) OWNER TO davical_dba; -- -- Name: parse_rrule_parts(timestamp with time zone, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION parse_rrule_parts(timestamp with time zone, text) RETURNS rrule_parts LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; result rrule_parts%ROWTYPE; tempstr TEXT; BEGIN result.base := basedate; result.until := substring(repeatrule from 'UNTIL=([0-9TZ]+)(;|$)'); result.freq := substring(repeatrule from 'FREQ=([A-Z]+)(;|$)'); result.count := substring(repeatrule from 'COUNT=([0-9]+)(;|$)'); result.interval := COALESCE(substring(repeatrule from 'INTERVAL=([0-9]+)(;|$)')::int, 1); result.wkst := substring(repeatrule from 'WKST=(MO|TU|WE|TH|FR|SA|SU)(;|$)'); result.byday := string_to_array( substring(repeatrule from 'BYDAY=(([+-]?[0-9]{0,2}(MO|TU|WE|TH|FR|SA|SU),?)+)(;|$)'), ','); result.byyearday := string_to_array(substring(repeatrule from 'BYYEARDAY=([0-9,+-]+)(;|$)'), ','); result.byweekno := string_to_array(substring(repeatrule from 'BYWEEKNO=([0-9,+-]+)(;|$)'), ','); result.bymonthday := string_to_array(substring(repeatrule from 'BYMONTHDAY=([0-9,+-]+)(;|$)'), ','); result.bymonth := string_to_array(substring(repeatrule from 'BYMONTH=(([+-]?[0-1]?[0-9],?)+)(;|$)'), ','); result.bysetpos := string_to_array(substring(repeatrule from 'BYSETPOS=(([+-]?[0-9]{1,3},?)+)(;|$)'), ','); result.bysecond := string_to_array(substring(repeatrule from 'BYSECOND=([0-9,]+)(;|$)'), ','); result.byminute := string_to_array(substring(repeatrule from 'BYMINUTE=([0-9,]+)(;|$)'), ','); result.byhour := string_to_array(substring(repeatrule from 'BYHOUR=([0-9,]+)(;|$)'), ','); RETURN result; END; $_$; ALTER FUNCTION public.parse_rrule_parts(timestamp with time zone, text) OWNER TO davical_dba; -- -- Name: path_privs(bigint, text, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION path_privs(bigint, text, integer) RETURNS bit LANGUAGE plpgsql STABLE STRICT AS $_$ DECLARE in_accessor ALIAS FOR $1; in_path ALIAS FOR $2; in_depth ALIAS FOR $3; alt1_path TEXT; alt2_path TEXT; grantor_collection INT8; grantor_principal INT8; collection_path TEXT; collection_privileges BIT(24); out_conferred BIT(24); BEGIN out_conferred := 0::BIT(24); IF in_path ~ '^/?$' THEN -- RAISE NOTICE 'Collection is root: Collection: %', in_path; RETURN 1; -- basic read privileges on root directory END IF; -- We need to canonicalise the path, so: -- If it matches '/' + some characters (+ optional '/') => a principal URL IF in_path ~ '^/[^/]+/?$' THEN alt1_path := replace(in_path, '/', ''); SELECT pprivs(in_accessor,principal_id, in_depth) INTO out_conferred FROM usr JOIN principal USING(user_no) WHERE username = alt1_path; -- RAISE NOTICE 'Path is Principal: Principal: %, Collection: %, Permissions: %', in_accessor, in_path, out_conferred; RETURN out_conferred; END IF; -- Otherwise look for the longest segment matching up to the last '/', or if we append one, or if we replace a final '.ics' with one. alt1_path := in_path; IF alt1_path ~ E'\\.ics$' THEN alt1_path := substr(alt1_path, 1, length(alt1_path) - 4) || '/'; END IF; alt2_path := regexp_replace( in_path, '[^/]*$', ''); SELECT collection.collection_id, grantor.principal_id, collection.dav_name, collection.default_privileges INTO grantor_collection, grantor_principal, collection_path, collection_privileges FROM collection JOIN principal grantor USING (user_no) WHERE dav_name = in_path || '/' OR dav_name = alt1_path OR dav_name = alt2_path ORDER BY LENGTH(collection.dav_name) DESC LIMIT 1; -- Self will always need full access to their own collections! IF grantor_principal = in_accessor THEN -- RAISE NOTICE 'Principal IS owner: Principal: %, Collection: %', in_accessor, in_path; RETURN ~ out_conferred; END IF; SELECT privileges INTO out_conferred FROM grants WHERE by_collection = grantor_collection AND (to_principal=in_accessor OR to_principal IN (SELECT expand_memberships(in_accessor,in_depth))); IF out_conferred IS NULL THEN IF collection_privileges IS NULL THEN IF grantor_principal IS NULL THEN alt1_path := regexp_replace( in_path, '/[^/]+/?$', '/'); SELECT path_privs(in_accessor,alt1_path,in_depth) INTO out_conferred; -- RAISE NOTICE 'Collection is NULL: Principal: %, Collection: %, Permissions: %', in_accessor, in_path, out_conferred; ELSE SELECT pprivs(in_accessor,grantor_principal,in_depth) INTO out_conferred; -- RAISE NOTICE 'Collection priveleges are NULL: Principal: %, Collection: %, Permissions: %', in_accessor, in_path, out_conferred; END IF; ELSE out_conferred := collection_privileges; -- RAISE NOTICE 'Default Collection priveleges apply: Principal: %, Collection: %, Permissions: %', in_accessor, in_path, out_conferred; END IF; END IF; RETURN out_conferred; END; $_$; ALTER FUNCTION public.path_privs(bigint, text, integer) OWNER TO davical_dba; -- -- Name: pprivs(bigint, bigint, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION pprivs(bigint, bigint, integer) RETURNS bit LANGUAGE plpgsql STABLE STRICT AS $_$ DECLARE in_accessor ALIAS FOR $1; in_grantor ALIAS FOR $2; in_depth ALIAS FOR $3; out_conferred BIT(24); BEGIN out_conferred := 0::BIT(24); -- Self can always have full access IF in_grantor = in_accessor THEN RETURN ~ out_conferred; END IF; SELECT bit_or(subquery.privileges) INTO out_conferred FROM ( SELECT privileges FROM grants WHERE by_principal=in_grantor AND by_collection IS NULL AND (to_principal=in_accessor OR to_principal IN (SELECT expand_memberships(in_accessor,in_depth))) UNION SELECT bit_or(sq2.privileges) FROM ( SELECT 32::BIT(24) AS privileges FROM expand_memberships(in_accessor,in_depth) WHERE expand_memberships = in_grantor UNION SELECT default_privileges AS privileges FROM principal WHERE principal_id = in_grantor ) AS sq2 ) AS subquery ; IF out_conferred IS NULL THEN SELECT default_privileges INTO out_conferred FROM principal WHERE principal_id = in_grantor; END IF; RETURN out_conferred; END; $_$; ALTER FUNCTION public.pprivs(bigint, bigint, integer) OWNER TO davical_dba; -- -- Name: principal_modified(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION principal_modified() RETURNS trigger LANGUAGE plpgsql AS $$ DECLARE BEGIN -- in case we trigger on other events in future IF TG_OP = 'UPDATE' THEN IF NEW.type_id != OLD.type_id THEN UPDATE grants SET is_group = (NEW.type_id = 3) WHERE grants.to_principal = NEW.principal_id; END IF; END IF; RETURN NEW; END; $$; ALTER FUNCTION public.principal_modified() OWNER TO davical_dba; -- -- Name: privilege_to_bits(text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION privilege_to_bits(text) RETURNS bit LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE raw_priv ALIAS FOR $1; in_priv TEXT; BEGIN in_priv := trim(lower(regexp_replace(raw_priv, '^.*:', ''))); IF in_priv = 'all' THEN RETURN ~ 0::BIT(24); END IF; RETURN (CASE WHEN in_priv = 'read' THEN 4609 -- 1 + 512 + 4096 WHEN in_priv = 'write' THEN 198 -- 2 + 4 + 64 + 128 WHEN in_priv = 'write-properties' THEN 2 WHEN in_priv = 'write-content' THEN 4 WHEN in_priv = 'unlock' THEN 8 WHEN in_priv = 'read-acl' THEN 16 WHEN in_priv = 'read-current-user-privilege-set' THEN 32 WHEN in_priv = 'bind' THEN 64 WHEN in_priv = 'unbind' THEN 128 WHEN in_priv = 'write-acl' THEN 256 WHEN in_priv = 'read-free-busy' THEN 4608 -- 512 + 4096 WHEN in_priv = 'schedule-deliver' THEN 7168 -- 1024 + 2048 + 4096 WHEN in_priv = 'schedule-deliver-invite' THEN 1024 WHEN in_priv = 'schedule-deliver-reply' THEN 2048 WHEN in_priv = 'schedule-query-freebusy' THEN 4096 WHEN in_priv = 'schedule-send' THEN 57344 -- 8192 + 16384 + 32768 WHEN in_priv = 'schedule-send-invite' THEN 8192 WHEN in_priv = 'schedule-send-reply' THEN 16384 WHEN in_priv = 'schedule-send-freebusy' THEN 32768 ELSE 0 END)::BIT(24); END $_$; ALTER FUNCTION public.privilege_to_bits(text) OWNER TO davical_dba; -- -- Name: privilege_to_bits(text[]); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION privilege_to_bits(text[]) RETURNS bit LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE raw_privs ALIAS FOR $1; in_priv TEXT; out_bits BIT(24); i INT; all_privs BIT(24); start INT; finish INT; BEGIN out_bits := 0::BIT(24); all_privs := ~ out_bits; SELECT array_lower(raw_privs,1) INTO start; SELECT array_upper(raw_privs,1) INTO finish; FOR i IN start .. finish LOOP SELECT out_bits | privilege_to_bits(raw_privs[i]) INTO out_bits; IF out_bits = 65535::BIT(24) THEN RETURN all_privs; END IF; END LOOP; RETURN out_bits; END $_$; ALTER FUNCTION public.privilege_to_bits(text[]) OWNER TO davical_dba; -- -- Name: privileges_list(bit); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION privileges_list(bit) RETURNS text LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE in_privileges ALIAS FOR $1; privileges TEXT[]; plist TEXT; start INT; finish INT; i INT; BEGIN plist := ''; privileges := bits_to_privilege(in_privileges); SELECT array_lower(privileges,1) INTO start; IF start IS NOT NULL THEN SELECT array_upper(privileges,1) INTO finish; FOR i IN start .. finish LOOP plist := plist || CASE WHEN plist = '' THEN '' ELSE ', ' END || privileges[i]; END LOOP; END IF; RETURN plist; END; $_$; ALTER FUNCTION public.privileges_list(bit) OWNER TO davical_dba; -- -- Name: real_path_exists(text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION real_path_exists(text) RETURNS boolean LANGUAGE plpgsql AS $_$ DECLARE in_path ALIAS FOR $1; tmp BOOLEAN; BEGIN IF in_path = '/' THEN RETURN TRUE; END IF; IF in_path ~ '^/[^/]+/$' THEN SELECT TRUE INTO tmp FROM usr WHERE username = substring( in_path from 2 for length(in_path) - 2); IF FOUND THEN RETURN TRUE; END IF; ELSE IF in_path ~ '^/.*/$' THEN SELECT TRUE INTO tmp FROM collection WHERE dav_name = in_path; IF FOUND THEN RETURN TRUE; END IF; END IF; END IF; RETURN FALSE; END; $_$; ALTER FUNCTION public.real_path_exists(text) OWNER TO davical_dba; -- -- Name: relationship_list(bigint); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION relationship_list(bigint) RETURNS text LANGUAGE plpgsql AS $_$ DECLARE user ALIAS FOR $1; r RECORD; rlist TEXT; BEGIN rlist := ''; FOR r IN SELECT rt_name, fullname FROM relationship LEFT JOIN relationship_type USING(rt_id) LEFT JOIN usr tgt ON to_user = tgt.user_no WHERE from_user = user LOOP rlist := rlist || CASE WHEN rlist = '' THEN '' ELSE ', ' END || r.rt_name || '(' || r.fullname || ')'; END LOOP; RETURN rlist; END; $_$; ALTER FUNCTION public.relationship_list(bigint) OWNER TO davical_dba; -- -- Name: rrule_bysetpos_filter(refcursor, integer[]); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION rrule_bysetpos_filter(refcursor, integer[]) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE AS $_$ DECLARE curse ALIAS FOR $1; bysetpos ALIAS FOR $2; valid_date TIMESTAMP WITH TIME ZONE; i INT; BEGIN IF bysetpos IS NULL THEN LOOP FETCH curse INTO valid_date; EXIT WHEN NOT FOUND; RETURN NEXT valid_date; END LOOP; ELSE FOR i IN 1..366 LOOP EXIT WHEN bysetpos[i] IS NULL; IF bysetpos[i] > 0 THEN FETCH ABSOLUTE bysetpos[i] FROM curse INTO valid_date; ELSE MOVE LAST IN curse; FETCH RELATIVE (bysetpos[i] + 1) FROM curse INTO valid_date; END IF; IF valid_date IS NOT NULL THEN RETURN NEXT valid_date; END IF; END LOOP; END IF; CLOSE curse; END; $_$; ALTER FUNCTION public.rrule_bysetpos_filter(refcursor, integer[]) OWNER TO davical_dba; -- -- Name: rrule_event_instances(timestamp with time zone, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION rrule_event_instances(timestamp with time zone, text) RETURNS SETOF rrule_instance LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; maxdate TIMESTAMP WITH TIME ZONE; current TIMESTAMP WITH TIME ZONE; result rrule_instance%ROWTYPE; BEGIN maxdate := current_date + '10 years'::interval; result.dtstart := basedate; result.rrule := repeatrule; FOR current IN SELECT d FROM rrule_event_instances_range( basedate, repeatrule, basedate, maxdate, 300 ) d LOOP result.instance := current; RETURN NEXT result; END LOOP; END; $_$; ALTER FUNCTION public.rrule_event_instances(timestamp with time zone, text) OWNER TO davical_dba; -- -- Name: rrule_event_instances_range(timestamp with time zone, text, timestamp with time zone, timestamp with time zone, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION rrule_event_instances_range(timestamp with time zone, text, timestamp with time zone, timestamp with time zone, integer) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE basedate ALIAS FOR $1; repeatrule ALIAS FOR $2; mindate ALIAS FOR $3; maxdate ALIAS FOR $4; max_count ALIAS FOR $5; loopmax INT; loopcount INT; base_day TIMESTAMP WITH TIME ZONE; current_base TIMESTAMP WITH TIME ZONE; current TIMESTAMP WITH TIME ZONE; rrule rrule_parts%ROWTYPE; BEGIN loopcount := 0; SELECT * INTO rrule FROM parse_rrule_parts( basedate, repeatrule ); IF rrule.count IS NOT NULL THEN loopmax := rrule.count; ELSE -- max_count is pretty arbitrary, so we scale it somewhat here depending on the frequency. IF rrule.freq = 'DAILY' THEN loopmax := max_count * 20; ELSIF rrule.freq = 'WEEKLY' THEN loopmax := max_count * 10; ELSE loopmax := max_count; END IF; END IF; current_base := basedate; base_day := date_trunc('day',basedate); WHILE loopcount < loopmax AND current_base <= maxdate LOOP IF rrule.freq = 'DAILY' THEN FOR current IN SELECT d FROM daily_set(current_base,rrule) d WHERE d >= base_day LOOP -- IF test_byday_rule(current,rrule.byday) AND test_bymonthday_rule(current,rrule.bymonthday) AND test_bymonth_rule(current,rrule.bymonth) THEN EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; -- END IF; END LOOP; current_base := current_base + (rrule.interval::text || ' days')::interval; ELSIF rrule.freq = 'WEEKLY' THEN FOR current IN SELECT w FROM weekly_set(current_base,rrule) w WHERE w >= base_day LOOP IF test_byyearday_rule(current,rrule.byyearday) AND test_bymonthday_rule(current,rrule.bymonthday) AND test_bymonth_rule(current,rrule.bymonth) THEN EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; END IF; END LOOP; current_base := current_base + (rrule.interval::text || ' weeks')::interval; ELSIF rrule.freq = 'MONTHLY' THEN FOR current IN SELECT m FROM monthly_set(current_base,rrule) m WHERE m >= base_day LOOP -- IF /* test_byyearday_rule(current,rrule.byyearday) -- AND */ test_bymonth_rule(current,rrule.bymonth) -- THEN EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; -- END IF; END LOOP; current_base := current_base + (rrule.interval::text || ' months')::interval; ELSIF rrule.freq = 'YEARLY' THEN FOR current IN SELECT y FROM yearly_set(current_base,rrule) y WHERE y >= base_day LOOP EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; IF current >= mindate THEN RETURN NEXT current; END IF; loopcount := loopcount + 1; EXIT WHEN loopcount >= loopmax; END LOOP; current_base := current_base + (rrule.interval::text || ' years')::interval; ELSE RAISE NOTICE 'A frequency of "%" is not handled', rrule.freq; RETURN; END IF; EXIT WHEN rrule.until IS NOT NULL AND current > rrule.until; END LOOP; -- RETURN QUERY; END; $_$; ALTER FUNCTION public.rrule_event_instances_range(timestamp with time zone, text, timestamp with time zone, timestamp with time zone, integer) OWNER TO davical_dba; -- -- Name: rrule_event_overlaps(timestamp with time zone, timestamp with time zone, text, timestamp with time zone, timestamp with time zone); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION rrule_event_overlaps(timestamp with time zone, timestamp with time zone, text, timestamp with time zone, timestamp with time zone) RETURNS boolean LANGUAGE plpgsql IMMUTABLE AS $_$ DECLARE dtstart ALIAS FOR $1; dtend ALIAS FOR $2; repeatrule ALIAS FOR $3; in_mindate ALIAS FOR $4; in_maxdate ALIAS FOR $5; base_date TIMESTAMP WITH TIME ZONE; mindate TIMESTAMP WITH TIME ZONE; maxdate TIMESTAMP WITH TIME ZONE; BEGIN IF dtstart IS NULL THEN RETURN NULL; END IF; IF dtend IS NULL THEN base_date := dtstart; ELSE base_date := dtend; END IF; IF in_mindate IS NULL THEN mindate := current_date - '10 years'::interval; ELSE mindate := in_mindate; END IF; IF in_maxdate IS NULL THEN maxdate := current_date + '10 years'::interval; ELSE -- If we add the duration onto the event, then an overlap occurs if dtend <= increased end of range. maxdate := in_maxdate + (base_date - dtstart); END IF; IF repeatrule IS NULL THEN RETURN (dtstart <= maxdate AND base_date >= mindate); END IF; SELECT d INTO mindate FROM rrule_event_instances_range( base_date, repeatrule, mindate, maxdate, 60 ) d LIMIT 1; RETURN FOUND; END; $_$; ALTER FUNCTION public.rrule_event_overlaps(timestamp with time zone, timestamp with time zone, text, timestamp with time zone, timestamp with time zone) OWNER TO davical_dba; -- -- Name: rrule_month_byday_set(timestamp with time zone, text[]); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION rrule_month_byday_set(timestamp with time zone, text[]) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE AS $_$ DECLARE in_time ALIAS FOR $1; byday ALIAS FOR $2; dayrule TEXT; i INT; dow INT; index INT; first_dow INT; each_day TIMESTAMP WITH TIME ZONE; this_month INT; results TIMESTAMP WITH TIME ZONE[]; BEGIN IF byday IS NULL THEN -- We still return the single date as a SET RETURN NEXT in_time; RETURN; END IF; i := 1; dayrule := byday[i]; WHILE dayrule IS NOT NULL LOOP dow := position(substring( dayrule from '..$') in 'SUMOTUWETHFRSA') / 2; each_day := date_trunc( 'month', in_time ) + (in_time::time)::interval; this_month := date_part( 'month', in_time ); first_dow := date_part( 'dow', each_day ); -- Coerce each_day to be the first 'dow' of the month each_day := each_day - ( first_dow::text || 'days')::interval + ( dow::text || 'days')::interval + CASE WHEN dow < first_dow THEN '1 week'::interval ELSE '0s'::interval END; -- RAISE NOTICE 'From "%", for % finding dates. dow=%, this_month=%, first_dow=%', each_day, dayrule, dow, this_month, first_dow; IF length(dayrule) > 2 THEN index := (substring(dayrule from '^[0-9-]+'))::int; IF index = 0 THEN RAISE NOTICE 'Ignored invalid BYDAY rule part "%".', bydayrule; ELSIF index > 0 THEN -- The simplest case, such as 2MO for the second monday each_day := each_day + ((index - 1)::text || ' weeks')::interval; ELSE each_day := each_day + '5 weeks'::interval; WHILE date_part('month', each_day) != this_month LOOP each_day := each_day - '1 week'::interval; END LOOP; -- Note that since index is negative, (-2 + 1) == -1, for example index := index + 1; IF index < 0 THEN each_day := each_day + (index::text || ' weeks')::interval ; END IF; END IF; -- Sometimes (e.g. 5TU or -5WE) there might be no such date in some months IF date_part('month', each_day) = this_month THEN results[date_part('day',each_day)] := each_day; -- RAISE NOTICE 'Added "%" to list for %', each_day, dayrule; END IF; ELSE -- Return all such days that are within the given month WHILE date_part('month', each_day) = this_month LOOP results[date_part('day',each_day)] := each_day; each_day := each_day + '1 week'::interval; -- RAISE NOTICE 'Added "%" to list for %', each_day, dayrule; END LOOP; END IF; i := i + 1; dayrule := byday[i]; END LOOP; FOR i IN 1..31 LOOP IF results[i] IS NOT NULL THEN RETURN NEXT results[i]; END IF; END LOOP; RETURN; END; $_$; ALTER FUNCTION public.rrule_month_byday_set(timestamp with time zone, text[]) OWNER TO davical_dba; -- -- Name: rrule_month_bymonthday_set(timestamp with time zone, integer[]); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION rrule_month_bymonthday_set(timestamp with time zone, integer[]) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE in_time ALIAS FOR $1; bymonthday ALIAS FOR $2; month_start TIMESTAMP WITH TIME ZONE; daysinmonth INT; i INT; BEGIN month_start := date_trunc( 'month', in_time ) + (in_time::time)::interval; daysinmonth := date_part( 'days', (month_start + interval '1 month') - interval '1 day' ); FOR i IN 1..31 LOOP EXIT WHEN bymonthday[i] IS NULL; CONTINUE WHEN bymonthday[i] > daysinmonth; CONTINUE WHEN bymonthday[i] < (-1 * daysinmonth); IF bymonthday[i] > 0 THEN RETURN NEXT month_start + ((bymonthday[i] - 1)::text || 'days')::interval; ELSIF bymonthday[i] < 0 THEN RETURN NEXT month_start + ((daysinmonth + bymonthday[i])::text || 'days')::interval; ELSE RAISE NOTICE 'Ignored invalid BYMONTHDAY part "%".', bymonthday[i]; END IF; END LOOP; RETURN; END; $_$; ALTER FUNCTION public.rrule_month_bymonthday_set(timestamp with time zone, integer[]) OWNER TO davical_dba; -- -- Name: rrule_week_byday_set(timestamp with time zone, text[]); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION rrule_week_byday_set(timestamp with time zone, text[]) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE AS $_$ DECLARE in_time ALIAS FOR $1; byday ALIAS FOR $2; dayrule TEXT; dow INT; our_day TIMESTAMP WITH TIME ZONE; i INT; BEGIN IF byday IS NULL THEN -- We still return the single date as a SET RETURN NEXT in_time; RETURN; END IF; our_day := date_trunc( 'week', in_time ) + (in_time::time)::interval; i := 1; dayrule := byday[i]; WHILE dayrule IS NOT NULL LOOP dow := position(dayrule in 'SUMOTUWETHFRSA') / 2; RETURN NEXT our_day + ((dow - 1)::text || 'days')::interval; i := i + 1; dayrule := byday[i]; END LOOP; RETURN; END; $_$; ALTER FUNCTION public.rrule_week_byday_set(timestamp with time zone, text[]) OWNER TO davical_dba; -- -- Name: rrule_yearly_bymonth_set(timestamp with time zone, rrule_parts); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION rrule_yearly_bymonth_set(timestamp with time zone, rrule_parts) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; current_base TIMESTAMP WITH TIME ZONE; rr rrule_parts; i INT; BEGIN IF rrule.bymonth IS NOT NULL THEN -- Ensure we don't pass BYSETPOS down rr := rrule; rr.bysetpos := NULL; FOR i IN 1..12 LOOP EXIT WHEN rr.bymonth[i] IS NULL; current_base := date_trunc( 'year', after ) + ((rr.bymonth[i] - 1)::text || ' months')::interval + (after::time)::interval; RETURN QUERY SELECT r FROM monthly_set(current_base,rr) r; END LOOP; ELSE -- We don't yet implement byweekno, byblah RETURN NEXT after; END IF; END; $_$; ALTER FUNCTION public.rrule_yearly_bymonth_set(timestamp with time zone, rrule_parts) OWNER TO davical_dba; -- -- Name: set_dav_property(text, integer, text, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION set_dav_property(text, integer, text, text) RETURNS boolean LANGUAGE plpgsql STRICT AS $_$ DECLARE path ALIAS FOR $1; change_user ALIAS FOR $2; key ALIAS FOR $3; value ALIAS FOR $4; BEGIN -- Check that there is either a resource, collection or user at this location. IF NOT EXISTS( SELECT 1 FROM caldav_data WHERE dav_name = path UNION SELECT 1 FROM collection WHERE dav_name = path UNION SELECT 1 FROM dav_principal WHERE dav_name = path UNION SELECT 1 FROM dav_binding WHERE dav_name = path ) THEN RETURN FALSE; END IF; PERFORM true FROM property WHERE dav_name = path AND property_name = key; IF FOUND THEN UPDATE property SET changed_by=change_user::integer, changed_on=current_timestamp, property_value=value WHERE dav_name = path AND property_name = key; ELSE INSERT INTO property ( dav_name, changed_by, changed_on, property_name, property_value ) VALUES( path, change_user::integer, current_timestamp, key, value ); END IF; RETURN TRUE; END; $_$; ALTER FUNCTION public.set_dav_property(text, integer, text, text) OWNER TO davical_dba; -- -- Name: sync_dav_id(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION sync_dav_id() RETURNS trigger LANGUAGE plpgsql AS $$ DECLARE BEGIN IF TG_OP = 'DELETE' THEN -- Just let the ON DELETE CASCADE handle this case RETURN OLD; END IF; IF NEW.dav_id IS NULL THEN NEW.dav_id = nextval('dav_id_seq'); END IF; IF TG_OP = 'UPDATE' THEN IF OLD.dav_id != NEW.dav_id OR OLD.collection_id != NEW.collection_id OR OLD.user_no != NEW.user_no OR OLD.dav_name != NEW.dav_name THEN UPDATE calendar_item SET dav_id = NEW.dav_id, user_no = NEW.user_no, collection_id = NEW.collection_id, dav_name = NEW.dav_name WHERE dav_name = OLD.dav_name OR dav_id = OLD.dav_id; END IF; RETURN NEW; END IF; UPDATE calendar_item SET dav_id = NEW.dav_id, user_no = NEW.user_no, collection_id = NEW.collection_id, dav_name = NEW.dav_name WHERE dav_name = NEW.dav_name OR dav_id = NEW.dav_id; RETURN NEW; END $$; ALTER FUNCTION public.sync_dav_id() OWNER TO davical_dba; -- -- Name: test_byday_rule(timestamp with time zone, text[]); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION test_byday_rule(timestamp with time zone, text[]) RETURNS boolean LANGUAGE plpgsql IMMUTABLE AS $_$ DECLARE testme ALIAS FOR $1; byday ALIAS FOR $2; BEGIN -- Note that this doesn't work for MONTHLY/YEARLY BYDAY clauses which might have numbers prepended -- so don't call it that way... IF byday IS NOT NULL THEN RETURN ( substring( to_char( testme, 'DY') for 2 from 1) = ANY (byday) ); END IF; RETURN TRUE; END; $_$; ALTER FUNCTION public.test_byday_rule(timestamp with time zone, text[]) OWNER TO davical_dba; -- -- Name: test_bymonth_rule(timestamp with time zone, integer[]); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION test_bymonth_rule(timestamp with time zone, integer[]) RETURNS boolean LANGUAGE plpgsql IMMUTABLE AS $_$ DECLARE testme ALIAS FOR $1; bymonth ALIAS FOR $2; BEGIN IF bymonth IS NOT NULL THEN RETURN ( date_part( 'month', testme) = ANY (bymonth) ); END IF; RETURN TRUE; END; $_$; ALTER FUNCTION public.test_bymonth_rule(timestamp with time zone, integer[]) OWNER TO davical_dba; -- -- Name: test_bymonthday_rule(timestamp with time zone, integer[]); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION test_bymonthday_rule(timestamp with time zone, integer[]) RETURNS boolean LANGUAGE plpgsql IMMUTABLE AS $_$ DECLARE testme ALIAS FOR $1; bymonthday ALIAS FOR $2; BEGIN IF bymonthday IS NOT NULL THEN RETURN ( date_part( 'day', testme) = ANY (bymonthday) ); END IF; RETURN TRUE; END; $_$; ALTER FUNCTION public.test_bymonthday_rule(timestamp with time zone, integer[]) OWNER TO davical_dba; -- -- Name: test_byyearday_rule(timestamp with time zone, integer[]); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION test_byyearday_rule(timestamp with time zone, integer[]) RETURNS boolean LANGUAGE plpgsql IMMUTABLE AS $_$ DECLARE testme ALIAS FOR $1; byyearday ALIAS FOR $2; BEGIN IF byyearday IS NOT NULL THEN RETURN ( date_part( 'doy', testme) = ANY (byyearday) ); END IF; RETURN TRUE; END; $_$; ALTER FUNCTION public.test_byyearday_rule(timestamp with time zone, integer[]) OWNER TO davical_dba; -- -- Name: to_ical_utc(timestamp with time zone); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION to_ical_utc(timestamp with time zone) RETURNS text LANGUAGE sql IMMUTABLE STRICT AS $_$ SELECT to_char( $1 at time zone 'UTC', 'YYYYMMDD"T"HH24MISS"Z"' ) $_$; ALTER FUNCTION public.to_ical_utc(timestamp with time zone) OWNER TO davical_dba; -- -- Name: uprivs(bigint, bigint, integer); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION uprivs(bigint, bigint, integer) RETURNS bit LANGUAGE plpgsql STABLE STRICT AS $_$ DECLARE in_accessor ALIAS FOR $1; in_grantor ALIAS FOR $2; in_depth ALIAS FOR $3; out_conferred BIT(24); BEGIN out_conferred := 0::BIT(24); -- Self can always have full access IF in_grantor = in_accessor THEN RETURN ~ out_conferred; END IF; SELECT pprivs( p1.principal_id, p2.principal_id, in_depth ) INTO out_conferred FROM principal p1, principal p2 WHERE p1.user_no = in_accessor AND p2.user_no = in_grantor; RETURN out_conferred; END; $_$; ALTER FUNCTION public.uprivs(bigint, bigint, integer) OWNER TO davical_dba; -- -- Name: usr_is_role(integer, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION usr_is_role(integer, text) RETURNS boolean LANGUAGE sql IMMUTABLE STRICT AS $_$ SELECT EXISTS( SELECT 1 FROM role_member JOIN roles USING(role_no) WHERE role_member.user_no=$1 AND roles.role_name=$2 ) $_$; ALTER FUNCTION public.usr_is_role(integer, text) OWNER TO davical_dba; -- -- Name: usr_modified(); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION usr_modified() RETURNS trigger LANGUAGE plpgsql AS $$ DECLARE oldpath TEXT; newpath TEXT; BEGIN -- in case we trigger on other events in future IF TG_OP = 'UPDATE' THEN IF NEW.username != OLD.username THEN oldpath := '/' || OLD.username || '/'; newpath := '/' || NEW.username || '/'; UPDATE collection SET parent_container = replace( parent_container, oldpath, newpath), dav_name = replace( dav_name, oldpath, newpath) WHERE substring(dav_name from 1 for char_length(oldpath)) = oldpath; END IF; END IF; RETURN NEW; END; $$; ALTER FUNCTION public.usr_modified() OWNER TO davical_dba; -- -- Name: weekly_set(timestamp with time zone, rrule_parts); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION weekly_set(timestamp with time zone, rrule_parts) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; valid_date TIMESTAMP WITH TIME ZONE; curse REFCURSOR; weekno INT; i INT; BEGIN IF rrule.byweekno IS NOT NULL THEN weekno := date_part('week',after); IF NOT weekno = ANY ( rrule.byweekno ) THEN RETURN; END IF; END IF; OPEN curse SCROLL FOR SELECT r FROM rrule_week_byday_set(after, rrule.byday ) r; RETURN QUERY SELECT d FROM rrule_bysetpos_filter(curse,rrule.bysetpos) d; END; $_$; ALTER FUNCTION public.weekly_set(timestamp with time zone, rrule_parts) OWNER TO davical_dba; -- -- Name: write_sync_change(bigint, integer, text); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION write_sync_change(bigint, integer, text) RETURNS boolean LANGUAGE plpgsql STRICT AS $_$ DECLARE in_collection_id ALIAS FOR $1; in_status ALIAS FOR $2; in_dav_name ALIAS FOR $3; tmp_int INT8; BEGIN SELECT 1 INTO tmp_int FROM sync_tokens WHERE collection_id = in_collection_id LIMIT 1; IF NOT FOUND THEN RETURN FALSE; END IF; SELECT dav_id INTO tmp_int FROM caldav_data WHERE dav_name = in_dav_name; INSERT INTO sync_changes ( collection_id, sync_status, dav_id, dav_name) VALUES( in_collection_id, in_status, tmp_int, in_dav_name); RETURN TRUE; END $_$; ALTER FUNCTION public.write_sync_change(bigint, integer, text) OWNER TO davical_dba; -- -- Name: yearly_set(timestamp with time zone, rrule_parts); Type: FUNCTION; Schema: public; Owner: davical_dba -- CREATE FUNCTION yearly_set(timestamp with time zone, rrule_parts) RETURNS SETOF timestamp with time zone LANGUAGE plpgsql IMMUTABLE STRICT AS $_$ DECLARE after ALIAS FOR $1; rrule ALIAS FOR $2; current_base TIMESTAMP WITH TIME ZONE; curse REFCURSOR; curser REFCURSOR; i INT; BEGIN IF rrule.bymonth IS NOT NULL THEN OPEN curse SCROLL FOR SELECT r FROM rrule_yearly_bymonth_set(after, rrule ) r; FOR current_base IN SELECT d FROM rrule_bysetpos_filter(curse,rrule.bysetpos) d LOOP current_base := date_trunc( 'day', current_base ) + (after::time)::interval; RETURN NEXT current_base; END LOOP; ELSE -- We don't yet implement byweekno, byblah RETURN NEXT after; END IF; END; $_$; ALTER FUNCTION public.yearly_set(timestamp with time zone, rrule_parts) OWNER TO davical_dba; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: access_ticket; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE access_ticket ( ticket_id text NOT NULL, dav_owner_id bigint NOT NULL, privileges bit(24), target_collection_id bigint NOT NULL, target_resource_id bigint, expires timestamp without time zone ); ALTER TABLE public.access_ticket OWNER TO davical_dba; -- -- Name: addressbook_address_adr; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE addressbook_address_adr ( dav_id bigint NOT NULL, type text, box_no text, unit_no text, street_address text, locality text, region text, postcode text, country text, property text ); ALTER TABLE public.addressbook_address_adr OWNER TO davical_dba; -- -- Name: addressbook_address_email; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE addressbook_address_email ( dav_id bigint NOT NULL, type text, email text, property text ); ALTER TABLE public.addressbook_address_email OWNER TO davical_dba; -- -- Name: addressbook_address_tel; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE addressbook_address_tel ( dav_id bigint NOT NULL, type text, tel text, property text ); ALTER TABLE public.addressbook_address_tel OWNER TO davical_dba; -- -- Name: addressbook_resource; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE addressbook_resource ( dav_id bigint NOT NULL, version text, uid text, nickname text, fn text, n text, note text, org text, url text, fburl text, caladruri text, caluri text ); ALTER TABLE public.addressbook_resource OWNER TO davical_dba; -- -- Name: awl_db_revision; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE awl_db_revision ( schema_id integer, schema_major integer, schema_minor integer, schema_patch integer, schema_name text, applied_on timestamp with time zone DEFAULT now() ); ALTER TABLE public.awl_db_revision OWNER TO davical_dba; -- -- Name: dav_id_seq; Type: SEQUENCE; Schema: public; Owner: davical_dba -- CREATE SEQUENCE dav_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.dav_id_seq OWNER TO davical_dba; -- -- Name: dav_id_seq; Type: SEQUENCE SET; Schema: public; Owner: davical_dba -- SELECT pg_catalog.setval('dav_id_seq', 1642, true); -- -- Name: caldav_data; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE caldav_data ( user_no integer NOT NULL, dav_name text NOT NULL, dav_etag text, created timestamp with time zone, modified timestamp with time zone, caldav_data text, caldav_type text, logged_user integer, dav_id bigint DEFAULT nextval('dav_id_seq'::regclass), collection_id bigint, weak_etag text ); ALTER TABLE public.caldav_data OWNER TO davical_dba; -- -- Name: calendar_alarm; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE calendar_alarm ( dav_id bigint NOT NULL, action text, trigger text, summary text, description text, next_trigger timestamp with time zone, component text, trigger_state character(1) DEFAULT 'N'::bpchar ); ALTER TABLE public.calendar_alarm OWNER TO davical_dba; -- -- Name: calendar_attendee; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE calendar_attendee ( dav_id bigint NOT NULL, status text, partstat text, cn text, attendee text NOT NULL, role text, rsvp boolean, property text, attendee_state text, weak_etag text ); ALTER TABLE public.calendar_attendee OWNER TO davical_dba; -- -- Name: calendar_item; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE calendar_item ( user_no integer NOT NULL, dav_name text NOT NULL, dav_etag text, uid text, created timestamp without time zone, last_modified timestamp without time zone, dtstamp timestamp without time zone, dtstart timestamp with time zone, dtend timestamp with time zone, due timestamp with time zone, summary text, location text, description text, priority integer, class text, transp text, rrule text, url text, percent_complete numeric(7,2), tz_id text, status text, completed timestamp with time zone, dav_id bigint, collection_id bigint, first_instance_start timestamp without time zone, last_instance_end timestamp without time zone ); ALTER TABLE public.calendar_item OWNER TO davical_dba; -- -- Name: collection; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE collection ( user_no integer, parent_container text, dav_name text, dav_etag text, dav_displayname text, is_calendar boolean, created timestamp with time zone, modified timestamp with time zone, public_events_only boolean DEFAULT false NOT NULL, publicly_readable boolean DEFAULT false NOT NULL, collection_id bigint DEFAULT nextval('dav_id_seq'::regclass) NOT NULL, default_privileges bit(24), is_addressbook boolean DEFAULT false, resourcetypes text DEFAULT ''::text, schedule_transp text DEFAULT 'opaque'::text, timezone text, description text DEFAULT ''::text ); ALTER TABLE public.collection OWNER TO davical_dba; -- -- Name: dav_binding; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE dav_binding ( bind_id bigint DEFAULT nextval('dav_id_seq'::regclass) NOT NULL, bound_source_id bigint, access_ticket_id text, dav_owner_id bigint NOT NULL, parent_container text NOT NULL, dav_name text NOT NULL, dav_displayname text, external_url text, type text, CONSTRAINT dav_name_does_not_exist CHECK ((NOT real_path_exists(dav_name))) ); ALTER TABLE public.dav_binding OWNER TO davical_dba; -- -- Name: principal; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE principal ( principal_id bigint DEFAULT nextval('dav_id_seq'::regclass) NOT NULL, type_id bigint NOT NULL, user_no bigint, displayname text, default_privileges bit(24) ); ALTER TABLE public.principal OWNER TO davical_dba; -- -- Name: usr; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE usr ( user_no integer NOT NULL, active boolean DEFAULT true, email_ok timestamp with time zone, joined timestamp with time zone DEFAULT now(), updated timestamp with time zone, last_used timestamp with time zone, username text NOT NULL, password text, fullname text, email text, config_data text, date_format_type text DEFAULT 'E'::text, locale text ); ALTER TABLE public.usr OWNER TO davical_dba; -- -- Name: dav_principal; Type: VIEW; Schema: public; Owner: davical_dba -- CREATE VIEW dav_principal AS SELECT principal.user_no, usr.active AS user_active, usr.joined AS created, usr.updated AS modified, usr.username, usr.password, usr.fullname, usr.email, usr.email_ok, usr.date_format_type, usr.locale, principal.principal_id, principal.type_id, principal.displayname, principal.default_privileges, true AS is_principal, false AS is_calendar, principal.principal_id AS collection_id, false AS is_addressbook, (('/'::text || usr.username) || '/'::text) AS dav_name, ''::text AS resourcetypes FROM (usr JOIN principal USING (user_no)); ALTER TABLE public.dav_principal OWNER TO davical_dba; -- -- Name: freebusy_ticket; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE freebusy_ticket ( ticket_id text NOT NULL, user_no integer NOT NULL, created timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE public.freebusy_ticket OWNER TO davical_dba; -- -- Name: grants; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE grants ( by_principal bigint, by_collection bigint, to_principal bigint, privileges bit(24), is_group boolean ); ALTER TABLE public.grants OWNER TO davical_dba; -- -- Name: group_member; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE group_member ( group_id bigint, member_id bigint ); ALTER TABLE public.group_member OWNER TO davical_dba; -- -- Name: locks; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE locks ( dav_name text, opaquelocktoken text NOT NULL, type text, scope text, depth integer, owner text, timeout interval, start timestamp without time zone DEFAULT now() ); ALTER TABLE public.locks OWNER TO davical_dba; -- -- Name: principal_type; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE principal_type ( principal_type_id integer NOT NULL, principal_type_desc text ); ALTER TABLE public.principal_type OWNER TO davical_dba; -- -- Name: principal_type_principal_type_id_seq; Type: SEQUENCE; Schema: public; Owner: davical_dba -- CREATE SEQUENCE principal_type_principal_type_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.principal_type_principal_type_id_seq OWNER TO davical_dba; -- -- Name: principal_type_principal_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: davical_dba -- ALTER SEQUENCE principal_type_principal_type_id_seq OWNED BY principal_type.principal_type_id; -- -- Name: principal_type_principal_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: davical_dba -- SELECT pg_catalog.setval('principal_type_principal_type_id_seq', 1, false); -- -- Name: property; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE property ( dav_name text NOT NULL, property_name text NOT NULL, property_value text, changed_on timestamp without time zone DEFAULT now(), changed_by integer ); ALTER TABLE public.property OWNER TO davical_dba; -- -- Name: relationship; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE relationship ( from_user integer NOT NULL, to_user integer NOT NULL, rt_id integer NOT NULL, confers bit(24) DEFAULT privilege_to_bits(ARRAY['DAV::read'::text, 'DAV::write'::text]) ); ALTER TABLE public.relationship OWNER TO davical_dba; -- -- Name: relationship_type; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE relationship_type ( rt_id integer NOT NULL, rt_name text, rt_togroup boolean, confers text DEFAULT 'RW'::text, rt_fromgroup boolean, bit_confers bit(24) DEFAULT privilege_to_bits(ARRAY['DAV::read'::text, 'DAV::write'::text]) ); ALTER TABLE public.relationship_type OWNER TO davical_dba; -- -- Name: relationship_type_rt_id_seq; Type: SEQUENCE; Schema: public; Owner: davical_dba -- CREATE SEQUENCE relationship_type_rt_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.relationship_type_rt_id_seq OWNER TO davical_dba; -- -- Name: relationship_type_rt_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: davical_dba -- ALTER SEQUENCE relationship_type_rt_id_seq OWNED BY relationship_type.rt_id; -- -- Name: relationship_type_rt_id_seq; Type: SEQUENCE SET; Schema: public; Owner: davical_dba -- SELECT pg_catalog.setval('relationship_type_rt_id_seq', 10, true); -- -- Name: role_member; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE role_member ( role_no integer, user_no integer ); ALTER TABLE public.role_member OWNER TO davical_dba; -- -- Name: roles; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE roles ( role_no integer NOT NULL, role_name text ); ALTER TABLE public.roles OWNER TO davical_dba; -- -- Name: roles_role_no_seq; Type: SEQUENCE; Schema: public; Owner: davical_dba -- CREATE SEQUENCE roles_role_no_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.roles_role_no_seq OWNER TO davical_dba; -- -- Name: roles_role_no_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: davical_dba -- ALTER SEQUENCE roles_role_no_seq OWNED BY roles.role_no; -- -- Name: roles_role_no_seq; Type: SEQUENCE SET; Schema: public; Owner: davical_dba -- SELECT pg_catalog.setval('roles_role_no_seq', 10, true); -- -- Name: session; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE session ( session_id integer NOT NULL, user_no integer, session_start timestamp with time zone DEFAULT now(), session_end timestamp with time zone DEFAULT now(), session_key text, session_config text ); ALTER TABLE public.session OWNER TO davical_dba; -- -- Name: session_session_id_seq; Type: SEQUENCE; Schema: public; Owner: davical_dba -- CREATE SEQUENCE session_session_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.session_session_id_seq OWNER TO davical_dba; -- -- Name: session_session_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: davical_dba -- ALTER SEQUENCE session_session_id_seq OWNED BY session.session_id; -- -- Name: session_session_id_seq; Type: SEQUENCE SET; Schema: public; Owner: davical_dba -- SELECT pg_catalog.setval('session_session_id_seq', 1, false); -- -- Name: supported_locales; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE supported_locales ( locale text NOT NULL, locale_name_en text, locale_name_locale text ); ALTER TABLE public.supported_locales OWNER TO davical_dba; -- -- Name: sync_changes; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE sync_changes ( sync_time timestamp with time zone DEFAULT now(), collection_id bigint, sync_status integer, dav_id bigint, dav_name text ); ALTER TABLE public.sync_changes OWNER TO davical_dba; -- -- Name: sync_tokens; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE sync_tokens ( sync_token integer NOT NULL, collection_id bigint, modification_time timestamp with time zone DEFAULT now() ); ALTER TABLE public.sync_tokens OWNER TO davical_dba; -- -- Name: sync_tokens_sync_token_seq; Type: SEQUENCE; Schema: public; Owner: davical_dba -- CREATE SEQUENCE sync_tokens_sync_token_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.sync_tokens_sync_token_seq OWNER TO davical_dba; -- -- Name: sync_tokens_sync_token_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: davical_dba -- ALTER SEQUENCE sync_tokens_sync_token_seq OWNED BY sync_tokens.sync_token; -- -- Name: sync_tokens_sync_token_seq; Type: SEQUENCE SET; Schema: public; Owner: davical_dba -- SELECT pg_catalog.setval('sync_tokens_sync_token_seq', 8, true); -- -- Name: timezones; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE timezones ( our_tzno integer NOT NULL, tzid text NOT NULL, olson_name text, active boolean, last_modified timestamp without time zone DEFAULT now(), etag text, vtimezone text ); ALTER TABLE public.timezones OWNER TO davical_dba; -- -- Name: timezones_our_tzno_seq; Type: SEQUENCE; Schema: public; Owner: davical_dba -- CREATE SEQUENCE timezones_our_tzno_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.timezones_our_tzno_seq OWNER TO davical_dba; -- -- Name: timezones_our_tzno_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: davical_dba -- ALTER SEQUENCE timezones_our_tzno_seq OWNED BY timezones.our_tzno; -- -- Name: timezones_our_tzno_seq; Type: SEQUENCE SET; Schema: public; Owner: davical_dba -- SELECT pg_catalog.setval('timezones_our_tzno_seq', 13, true); -- -- Name: tmp_password; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE tmp_password ( user_no integer, password text, valid_until timestamp with time zone DEFAULT (now() + '1 day'::interval) ); ALTER TABLE public.tmp_password OWNER TO davical_dba; -- -- Name: tz_aliases; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE tz_aliases ( our_tzno bigint, tzalias text NOT NULL ); ALTER TABLE public.tz_aliases OWNER TO davical_dba; -- -- Name: tz_localnames; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE tz_localnames ( our_tzno bigint, locale text NOT NULL, localised_name text NOT NULL, preferred boolean DEFAULT true ); ALTER TABLE public.tz_localnames OWNER TO davical_dba; -- -- Name: usr_setting; Type: TABLE; Schema: public; Owner: davical_dba; Tablespace: -- CREATE TABLE usr_setting ( user_no integer NOT NULL, setting_name text NOT NULL, setting_value text ); ALTER TABLE public.usr_setting OWNER TO davical_dba; -- -- Name: usr_user_no_seq; Type: SEQUENCE; Schema: public; Owner: davical_dba -- CREATE SEQUENCE usr_user_no_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.usr_user_no_seq OWNER TO davical_dba; -- -- Name: usr_user_no_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: davical_dba -- ALTER SEQUENCE usr_user_no_seq OWNED BY usr.user_no; -- -- Name: usr_user_no_seq; Type: SEQUENCE SET; Schema: public; Owner: davical_dba -- SELECT pg_catalog.setval('usr_user_no_seq', 1000, true); -- -- Name: principal_type_id; Type: DEFAULT; Schema: public; Owner: davical_dba -- ALTER TABLE principal_type ALTER COLUMN principal_type_id SET DEFAULT nextval('principal_type_principal_type_id_seq'::regclass); -- -- Name: rt_id; Type: DEFAULT; Schema: public; Owner: davical_dba -- ALTER TABLE relationship_type ALTER COLUMN rt_id SET DEFAULT nextval('relationship_type_rt_id_seq'::regclass); -- -- Name: role_no; Type: DEFAULT; Schema: public; Owner: davical_dba -- ALTER TABLE roles ALTER COLUMN role_no SET DEFAULT nextval('roles_role_no_seq'::regclass); -- -- Name: session_id; Type: DEFAULT; Schema: public; Owner: davical_dba -- ALTER TABLE session ALTER COLUMN session_id SET DEFAULT nextval('session_session_id_seq'::regclass); -- -- Name: sync_token; Type: DEFAULT; Schema: public; Owner: davical_dba -- ALTER TABLE sync_tokens ALTER COLUMN sync_token SET DEFAULT nextval('sync_tokens_sync_token_seq'::regclass); -- -- Name: our_tzno; Type: DEFAULT; Schema: public; Owner: davical_dba -- ALTER TABLE timezones ALTER COLUMN our_tzno SET DEFAULT nextval('timezones_our_tzno_seq'::regclass); -- -- Name: user_no; Type: DEFAULT; Schema: public; Owner: davical_dba -- ALTER TABLE usr ALTER COLUMN user_no SET DEFAULT nextval('usr_user_no_seq'::regclass); -- -- Data for Name: access_ticket; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY access_ticket (ticket_id, dav_owner_id, privileges, target_collection_id, target_resource_id, expires) FROM stdin; TZpLPt4E 1002 000000000001001000100001 10 \N 2011-11-12 19:02:33.899625 KNP0znpQ 1003 000000000001001011100111 11 \N \N qIqIdho3 1 000000000001001011100111 12 \N \N \. -- -- Data for Name: addressbook_address_adr; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY addressbook_address_adr (dav_id, type, box_no, unit_no, street_address, locality, region, postcode, country, property) FROM stdin; 1632 HOME 16 Kaka Place Porikana 4173 New Zealand ADR;TYPE=HOME:;;16 Kaka Place;Porikana;;4173;New Zealand 1633 \N 25 Rintoul St Newtown Wellington New Zealand adr:;;25 Rintoul St;Newtown;Wellington;;New Zealand 1636 HOME Brusselsestraat 108 DENDERMONDE B-9200 \N ADR;TYPE=HOME:;;Brusselsestraat 108;DENDERMONDE;;B-9200 1636 WORK Brusselsestraat 108 DENDERMONDE B-9200 \N ADR;TYPE=WORK:;;Brusselsestraat 108;DENDERMONDE;;B-9200 1638 WORK PO 373 Andresen AG, R&D Messegasse 7 Passau Bayern 94036 Deutschland ADR;TYPE=WORK;CHARSET=utf-8:PO 373\\;Andresen AG\\, R&D\\;Messegasse 7\\;Pas\r\n sau\\;Bayern\\;94036\\;Deutschland 1638 WORK 6266 AA andresen Holding, Geschäftsleitung Weisenstraße 13 Irgendwo Niedersachsen 34332 \N ADR;TYPE=WORK;CHARSET=utf-8:6266 AA\\;andresen Holding\\, Geschäftsleitung\r\n \\;Weisenstraße 13\\;Irgendwo\\;Niedersachsen\\;34332 1638 HOME Weisenstraße 13\\r Irgendwo 34332 \N ADR;TYPE=HOME;CHARSET=utf-8:;;Weisenstraße 13\\r;Irgendwo;;34332 1638 X-OTHER Irgendwo Nirgendwo Sonstwo 0 Antarktis ADR;TYPE=X-OTHER:;;Irgendwo;Nirgendwo;Sonstwo;0000;Antarktis 1639 WORK Uni Harburg, - Innstraße 71 Hamburg-Harburg Hamburg 21373 Deutschland ADR;TYPE=WORK;CHARSET=utf-8:\\;Uni Harburg\\, -\\;Innstraße 71\\;Hamburg-Har\r\n burg\\;Hamburg\\;21373\\;Deutschland 1639 HOME Weisestraße 13\\r Irgendwo 33443 \N ADR;TYPE=HOME;CHARSET=utf-8:;;Weisestraße 13\\r;Irgendwo;;33443 1639 X-OTHER Nirgendwo \N \N \N \N ADR;TYPE=X-OTHER:;;Nirgendwo 1640 \N abcStraße 58 Hamburg 20357 Deutschland ADR;WORK;CHARSET=UTF-8:;;abcStraße 58;Hamburg;;20357;Deutschland 1640 \N Gayens Weg 9 Hamburg 22761 Deutschland ADR;HOME:;;Gayens Weg 9;Hamburg;;22761;Deutschland \. -- -- Data for Name: addressbook_address_email; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY addressbook_address_email (dav_id, type, email, property) FROM stdin; 1632 HOME andrew@mcmillan.net.nz EMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:andrew@mcmillan.net.nz 1632 WORK andrew@morphoss.com EMAIL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK:andrew@morphoss.com 1633 internet donald@example.co.nz email;type=internet:donald@example.co.nz 1634 \N zzz@xxx.ru EMAIL:zzz@xxx.ru 1635 pref andrew+davical@morphoss.com EMAIL;type=INTERNET;type=WORK;type=pref:andrew+davical@morphoss.com 1636 HOME vvh@gmail.no EMAIL;TYPE=HOME:vvh@gmail.no 1636 WORK vvh@gmail.no EMAIL;TYPE=WORK:vvh@gmail.no 1637 pref karl@mustermann.de EMAIL;type=INTERNET;type=WORK;type=pref:karl@mustermann.de 1638 INTERNET sven@andresen.de EMAIL;TYPE=INTERNET:sven@andresen.de 1638 INTERNET andresen@andresen.de EMAIL;TYPE=INTERNET:andresen@andresen.de 1639 INTERNET ich@hadi-schmidt.de EMAIL;TYPE=INTERNET:ich@hadi-schmidt.de 1639 INTERNET hadi@telekom-d.de EMAIL;TYPE=INTERNET:hadi@telekom-d.de 1640 \N joerg.rossdeutscher@factordesign.foo EMAIL;INTERNET;WORK:joerg.rossdeutscher@factordesign.foo 1640 \N joerg@factordesign.foo EMAIL;INTERNET;WORK:joerg@factordesign.foo 1640 \N joerg.rossdeutscher@gesindel.foo EMAIL;INTERNET;HOME:joerg.rossdeutscher@gesindel.foo 1640 \N raettchen@gmail.bar EMAIL;INTERNET;HOME:raettchen@gmail.bar 1641 pref joerg.rossdeutscher@factordesign.foo EMAIL;TYPE=pref:joerg.rossdeutscher@factordesign.foo 1641 WORK joerg@factordesign.foo EMAIL;type=INTERNET;type=WORK:joerg@factordesign.foo 1641 HOME joerg.rossdeutscher@gesindel.foo EMAIL;type=INTERNET;type=HOME:joerg.rossdeutscher@gesindel.foo 1641 HOME raettchen@gmail.bar EMAIL;type=INTERNET;type=HOME:raettchen@gmail.bar \. -- -- Data for Name: addressbook_address_tel; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY addressbook_address_tel (dav_id, type, tel, property) FROM stdin; 1632 CELL +64 22 123 4567 TEL;X-EVOLUTION-UI-SLOT=3;TYPE=CELL:+64 22 123 4567 1632 HOME,VOICE +64 4 123 4567 TEL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME,VOICE:+64 4 123 4567 1632 WORK,VOICE +64 22 123 4567 TEL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK,VOICE:+64 22 123 4567 1633 work +64 4 347 4747 tel;type=work:+64 4 347 4747 1633 cell +64 2 1234-4321 tel;type=cell:+64 2 1234-4321 1635 pref 64272332426 TEL;type=WORK;type=pref:+64272332426 1636 CELL,VOICE 0486 11 22 33 TEL;TYPE=CELL,VOICE:0486 11 22 33 1636 HOME,VOICE 052 11 22 33 TEL;TYPE=HOME,VOICE:052 11 22 33 1636 HOME,FAX 052 44 55 66 TEL;TYPE=HOME,FAX:052 44 55 66 1636 WORK,VOICE 052 11 22 33 TEL;TYPE=WORK,VOICE:052 11 22 33 1636 WORK,FAX 052 44 55 66 TEL;TYPE=WORK,FAX:052 44 55 66 1637 pref +49 30 1234567 TEL;type=WORK;type=pref:+49 30 1234567 1637 CELL +49 172 1234567 TEL;type=CELL:+49 172 1234567 1638 WORK,VOICE +49 89 11 11 111 TEL;TYPE=WORK,VOICE:+49 89 11 11 111 1638 WORK,VOICE +49 234 222 222 TEL;TYPE=WORK,VOICE:+49 234 222 222 1638 WORK,FAX +49 7373 73 TEL;TYPE=WORK,FAX:+49 7373 73 1638 PAGER +49 160 073 727 272 TEL;TYPE=PAGER:+49 160 073 727 272 1638 PAGER +49 2626 26 TEL;TYPE=PAGER:+49 2626 26 1638 CELL,VOICE +49 39292 82 TEL;TYPE=CELL,VOICE:+49 39292 82 1638 CELL,VOICE +49 7272 722 TEL;TYPE=CELL,VOICE:+49 7272 722 1638 PREF,VOICE +49 12 34 567 TEL;TYPE=PREF,VOICE:+49 12 34 567 1638 CAR,VOICE +49 8292 38 383 TEL;TYPE=CAR,VOICE:+49 8292 38 383 1638 HOME,VOICE +49 7327 272 727 TEL;TYPE=HOME,VOICE:+49 7327 272 727 1638 HOME,VOICE +49 7272 7282 TEL;TYPE=HOME,VOICE:+49 7272 7282 1638 HOME,FAX +49 1010 1 TEL;TYPE=HOME,FAX:+49 1010 1 1638 ISDN 8797 TEL;TYPE=ISDN:8797 1638 ISDN 98732947234 TEL;TYPE=ISDN:98732947234 1638 X-EVOLUTION-RADIO +49 88 298 723 498 32 TEL;TYPE=X-EVOLUTION-RADIO:+49 88 298 723 498 32 1638 X-EVOLUTION-RADIO +49 9872 394 872 34 TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 1638 X-EVOLUTION-TELEX +49 2763 382 882 28 82 TEL;TYPE=X-EVOLUTION-TELEX:+49 2763 382 882 28 82 1638 X-EVOLUTION-TELEX +49 7722 88 28 282 TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 1638 MAIN +49 6237 623 723 84 76 TEL;TYPE=MAIN:+49 6237 623 723 84 76 1638 MAIN +49 9324 32 479 234234 TEL;TYPE=MAIN:+49 9324 32 479 234234 1638 voice +49 8383 73 723 TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 1638 voice +49 7363 6363 TEL;X-EVOLUTION-CALLBACK:+49 7363 6363 1638 MODEM +49 8383 73 723 TEL;TYPE=MODEM:+49 8383 73 723 1638 MODEM +49 7363 6363 TEL;TYPE=MODEM:+49 7363 6363 1638 voice +49 3377 37 373 TEL;X-EVOLUTION-TTYTDD:+49 3377 37 373 1638 voice +49 8378 33 TEL;X-EVOLUTION-TTYTDD:+49 8378 33 1638 voice 13355 TEL;X-QUICKDIAL:13355 1639 WORK,VOICE +49 9823 9084 TEL;TYPE=WORK,VOICE:+49 9823 9084 1639 WORK,VOICE +49 234 234 234 TEL;TYPE=WORK,VOICE:+49 234 234 234 1639 WORK,FAX +49 7373 73 TEL;TYPE=WORK,FAX:+49 7373 73 1639 PAGER +49 2626 26 TEL;TYPE=PAGER:+49 2626 26 1639 CELL,VOICE +49 7272 722 TEL;TYPE=CELL,VOICE:+49 7272 722 1639 PREF,VOICE +49 12 34 567 TEL;TYPE=PREF,VOICE:+49 12 34 567 1639 CAR,VOICE +49 8292 38 383 TEL;TYPE=CAR,VOICE:+49 8292 38 383 1639 HOME,VOICE +49 7327 272 727 TEL;TYPE=HOME,VOICE:+49 7327 272 727 1639 HOME,FAX +49 40 812 387 21 TEL;TYPE=HOME,FAX:+49 40 812 387 21 1639 ISDN 4234234235 TEL;TYPE=ISDN:4234234235 1639 ISDN 98732947234 TEL;TYPE=ISDN:98732947234 1639 X-EVOLUTION-RADIO +49 9872 349 832 TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 349 832 1639 X-EVOLUTION-RADIO +49 9872 394 872 34 TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 1639 X-EVOLUTION-TELEX +49 38 288 228 82 TEL;TYPE=X-EVOLUTION-TELEX:+49 38 288 228 82 1639 X-EVOLUTION-TELEX +49 7722 88 28 282 TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 1639 MAIN +49 6237 623 723 84 76 TEL;TYPE=MAIN:+49 6237 623 723 84 76 1639 MAIN +49 9324 32 479 234234 TEL;TYPE=MAIN:+49 9324 32 479 234234 1639 voice +49 8383 73 723 TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 1639 MODEM +49 8383 73 723 TEL;TYPE=MODEM:+49 8383 73 723 1639 voice +49 7373 73 TEL;X-EVOLUTION-TTYTDD:+49 7373 73 1639 voice +49 8378 33 TEL;X-EVOLUTION-TTYTDD:+49 8378 33 1640 voice 040 999999432571-43 TEL;WORK:040 999999432571-43 1640 voice 17799999978200 TEL;CELL:017799999978200 1640 voice 40999999793017 TEL;HOME:040999999793017 1641 pref 040 999999432571-43 TEL;type=WORK;type=pref:040 999999432571-43 1641 CELL 17799999978200 TEL;type=CELL:017799999978200 1641 HOME 40999999793017 TEL;type=HOME:040999999793017 \. -- -- Data for Name: addressbook_resource; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY addressbook_resource (dav_id, version, uid, nickname, fn, n, note, org, url, fburl, caladruri, caluri) FROM stdin; 1632 3.0 pas-id-4BB0719600000000 karora Andrew Watson McMillan McMillan;Andrew;Watson;; Primary author of DAViCal CalDAV Server. dotCal;;Porirua http://andrew.mcmillan.net.nz/ https://davical.morphoss.com/freebusy.php/andrew@morphoss.com mailto:andrew@morphoss.com https://dotcal.com/karora 1633 2.1 \N \N Donald Kelly Kelly;Donald;;; \N Esposo Designs Ltd www.example.co.nz \N \N \N 1634 3.0 PHRsMa4mvY \N zzz zzz;;;; \N \N \N \N \N \N 1635 3.0 F26B8512-45DA-49ED-B285-23E64B0A68D1-ABSPlugin \N Morphoss Ltd McMillan;Andrew;;; \N Morphoss Ltd; \N \N \N \N 1636 3.0 \N \N Vincent VAN HOUTTE VAN HOUTTE;Vincent;;Dhr.; \N Advocatenkantoor Suy, Van Baeveghem & Van Houtte;; \N \N \N \N 1637 3.0 \N Boss Überwerbung GmbH Mustermann;Anton;Karl;Dr.; Test vCard Überwerbung GmbH;Marketing \N \N \N \N 1638 4.0 uid=andresenesq.1209158007,ou=Contacts,dc=andresen,dc=de Svenny,Sveny Sven Joseph Klaus Michael Andresen, Esq. Andresen,Esq.;Sven;Joseph,Klaus,Michael;;Dr.,Prof.;Esq. Nur so ein Test! andresen AG;R&D;;XXX, 033 http://www.andresen.de http://caldav.andresen.local/freebusy http://caldav.andresen.local/access http://caldav.andresen.local/sja 1639 4.0 uid=schmidt.1208717693,ou=Contacts,dc=andresen,dc=de HaWe Hans Dieter Schmidt Schmidt;Hans Dieter;;Dr.;Esq. \N Uni Harburg;;;033 http://www.tu-hh.de http://davical.hadi-schmist.home/freebusy http://davical.hadi-schmist.home/access http://davical.hadi-schmist.home/hadi 1640 2.1 \N \N Jörg Test-Roßdeutscher Test-Roßdeutscher;Jörg;;; Technik, Web, DTP, SysAdmin, €-Vermögensverwalter Factor Design AG; www.gesindel.baz \N \N \N 1641 3.0 \N \N Jörg Test-Roßdeutscher Test-Roßdeutscher;Jörg;;; Technik, Web, DTP, SysAdmin, €-Vermögensverwalter Factor Design AG; \N \N \N \N \. -- -- Data for Name: awl_db_revision; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY awl_db_revision (schema_id, schema_major, schema_minor, schema_patch, schema_name, applied_on) FROM stdin; 1 1 1 0 Dawn 2011-11-12 18:01:26.256303+13 2 1 2 11 Novembre 2011-11-12 18:01:26.659837+13 \. -- -- Data for Name: caldav_data; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY caldav_data (user_no, dav_name, dav_etag, created, modified, caldav_data, caldav_type, logged_user, dav_id, collection_id, weak_etag) FROM stdin; 13 /user4/nz_holidays/20081226-1-all-publicholidays-dol.govt.nz.ics b875d6fcbbcc5d04f4032cbc7f5c384d 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081117T225121Z\r\nLAST-MODIFIED:20081117T225144Z\r\nDTSTAMP:20081117T225121Z\r\nUID:20081226-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Boxing Day\r\nDTSTART;VALUE=DATE:20051226\r\nRRULE:FREQ=YEARLY\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1015 1014 \N 13 /user4/nz_holidays/20090101-1-all-publicholidays-dol.govt.nz.ics ceee5347770df7fa8ec2e88277ab5726 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081117T225212Z\r\nLAST-MODIFIED:20081117T230337Z\r\nDTSTAMP:20081117T225212Z\r\nUID:20090101-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:New Year's Day\r\nDTSTART;VALUE=DATE:20050101\r\nRRULE:FREQ=YEARLY\r\nTRANSP:TRANSPARENT\r\nX-MOZ-GENERATION:1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1016 1014 \N 13 /user4/nz_holidays/20081225-1-all-publicholidays-dol.govt.nz.ics 7bebc7c099b76a4786935b3c7b30d532 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081117T224951Z\r\nLAST-MODIFIED:20081117T235108Z\r\nDTSTAMP:20081117T224951Z\r\nUID:20081225-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Christmas Day\r\nDTSTART;VALUE=DATE:20051225\r\nRRULE:FREQ=YEARLY\r\nTRANSP:TRANSPARENT\r\nX-MOZ-GENERATION:2\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1017 1014 \N 13 /user4/nz_holidays/20090410-1-all-publicholidays-dol.govt.nz.ics c133f5c3610eec536604f6f85d6e38a8 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081117T235335Z\r\nLAST-MODIFIED:20081117T235417Z\r\nDTSTAMP:20081117T235335Z\r\nUID:20090410-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20090410\r\nDTEND;VALUE=DATE:20090411\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1018 1014 \N 13 /user4/nz_holidays/20090206-1-all-publicholidays-dol.govt.nz.ics e97dec1ece17d1b3d4b3f7ca099cf069 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081117T235224Z\r\nLAST-MODIFIED:20081120T002639Z\r\nDTSTAMP:20081117T235224Z\r\nUID:20090206-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Waitangi Day\r\nDTSTART;VALUE=DATE:20050206\r\nRRULE:FREQ=YEARLY\r\nTRANSP:TRANSPARENT\r\nX-MOZ-GENERATION:4\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1019 1014 \N 13 /user4/nz_holidays/20090413-1-all-publicholidays-dol.govt.nz.ics f89959922a18af91aa4e71040f3776d8 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081117T235455Z\r\nLAST-MODIFIED:20081117T235524Z\r\nDTSTAMP:20081117T235455Z\r\nUID:20090413-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Easter Monday\r\nDTSTART;VALUE=DATE:20090413\r\nDTEND;VALUE=DATE:20090414\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1020 1014 \N 13 /user4/nz_holidays/20090425-1-all-publicholidays-dol.govt.nz.ics 41ab02b936390e6c591e3be9642cbc3c 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T011910Z\r\nLAST-MODIFIED:20081120T001537Z\r\nDTSTAMP:20081118T011910Z\r\nUID:20090425-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:ANZAC Day\r\nDTSTART;VALUE=DATE:20050425\r\nRRULE:FREQ=YEARLY\r\nTRANSP:TRANSPARENT\r\nX-MOZ-GENERATION:2\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1021 1014 \N 13 /user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics 320ce73f2e17987ce930aacb1d1dd845 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T011947Z\r\nLAST-MODIFIED:20081118T012009Z\r\nDTSTAMP:20081118T011947Z\r\nUID:20090601-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Queen's Birthday\r\nDTSTART;VALUE=DATE:20050606\r\nRRULE:FREQ=YEARLY;BYMONTH=6;BYDAY=1MO\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1022 1014 \N 13 /user4/nz_holidays/20091026-1-all-publicholidays-dol.govt.nz.ics 3e91b2a8859691891c512c703e26d4f5 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T012125Z\r\nLAST-MODIFIED:20081118T012150Z\r\nDTSTAMP:20081118T012125Z\r\nUID:20091026-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Labour Day\r\nDTSTART;VALUE=DATE:20051024\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4MO\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1023 1014 \N 13 /user4/nz_holidays/20090102-1-all-publicholidays-dol.govt.nz.ics 453972f9e37b262b5155553e13ec29a9 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081117T235121Z\r\nLAST-MODIFIED:20081118T012314Z\r\nDTSTAMP:20081117T235121Z\r\nUID:20090102-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Day after New Year's Day\r\nDTSTART;VALUE=DATE:20050102\r\nRRULE:FREQ=YEARLY\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1024 1014 \N 13 /user4/nz_holidays/20091226-1-all-publicholidays-dol.govt.nz.ics 87048bb0ac24e632b47acf20573247ad 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T012344Z\r\nLAST-MODIFIED:20081118T012529Z\r\nDTSTAMP:20081118T012344Z\r\nUID:20091226-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Boxing Day Holiday\r\nDTSTART;VALUE=DATE:20051227\r\nRRULE:FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28\r\n ;BYSETPOS=2\r\nTRANSP:TRANSPARENT\r\nX-MOZ-GENERATION:1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1025 1014 \N 13 /user4/nz_holidays/20091228-1-all-publicholidays-dol.govt.nz.ics a47cf54a3fd69f80733fbaae7173b187 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T012537Z\r\nLAST-MODIFIED:20081118T012606Z\r\nDTSTAMP:20081118T012537Z\r\nUID:20091228-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Christmas Day Holiday\r\nDTSTART;VALUE=DATE:20051226\r\nRRULE:FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28\r\n ;BYSETPOS=1\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1026 1014 \N 13 /user4/nz_holidays/20100101-1-all-publicholidays-dol.govt.nz.ics 6f4e142a3475325dc6af10fdd46475db 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T012634Z\r\nLAST-MODIFIED:20081118T012657Z\r\nDTSTAMP:20081118T012634Z\r\nUID:20100101-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:New Year's Day Holiday\r\nDTSTART;VALUE=DATE:20050103\r\nRRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSE\r\n TPOS=1\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1027 1014 \N 13 /user4/nz_holidays/20160328-1-all-publicholidays-dol.govt.nz.ics 6ce62f49c34b6f8e3a9cdd7de0579ad7 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T021257Z\r\nLAST-MODIFIED:20081118T021323Z\r\nDTSTAMP:20081118T021257Z\r\nUID:20160328-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Easter Monday\r\nDTSTART;VALUE=DATE:20160328\r\nDTEND;VALUE=DATE:20160329\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1042 1014 \N 13 /user4/nz_holidays/20100607-1-all-publicholidays-dol.govt.nz.ics 7b2c3641069b66925f9d23b5691a9184 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T013050Z\r\nLAST-MODIFIED:20081118T013102Z\r\nDTSTAMP:20081118T013050Z\r\nUID:20100607-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Day after New Year's Day Holiday\r\nDTSTART;VALUE=DATE:20050104\r\nRRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSE\r\n TPOS=2\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1028 1014 \N 13 /user4/nz_holidays/20100402-1-all-publicholidays-dol.govt.nz.ics ef596d4d606ce76268ce09566355a823 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T012802Z\r\nLAST-MODIFIED:20081118T012811Z\r\nDTSTAMP:20081118T012802Z\r\nUID:20100402-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20100402\r\nDTEND;VALUE=DATE:20100403\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1029 1014 \N 13 /user4/nz_holidays/20100405-1-all-publicholidays-dol.govt.nz.ics e84a4dde3b35c1b917e13e6d3b70ecbd 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T012817Z\r\nLAST-MODIFIED:20081118T012854Z\r\nDTSTAMP:20081118T012817Z\r\nUID:20100405-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Easter Monday\r\nDTSTART;VALUE=DATE:20100405\r\nDTEND;VALUE=DATE:20100406\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1030 1014 \N 13 /user4/nz_holidays/20110422-1-all-publicholidays-dol.govt.nz.ics b38f25befae6b31c2cf496079e452b64 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T014342Z\r\nLAST-MODIFIED:20081118T014404Z\r\nDTSTAMP:20081118T014342Z\r\nUID:20110422-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20110422\r\nDTEND;VALUE=DATE:20110423\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1031 1014 \N 13 /user4/nz_holidays/20110425-1-all-publicholidays-dol.govt.nz.ics ef6d2f39086173ec7003da9109857591 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T014406Z\r\nLAST-MODIFIED:20081118T014430Z\r\nDTSTAMP:20081118T014406Z\r\nUID:20110425-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Easter Monday\r\nDTSTART;VALUE=DATE:20110425\r\nDTEND;VALUE=DATE:20110426\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1032 1014 \N 13 /user4/nz_holidays/20120406-1-all-publicholidays-dol.govt.nz.ics b1c8988852760af2e95f1733ba8e930b 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T015055Z\r\nLAST-MODIFIED:20081118T015123Z\r\nDTSTAMP:20081118T015055Z\r\nUID:20120406-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20120406\r\nDTEND;VALUE=DATE:20120407\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1033 1014 \N 13 /user4/nz_holidays/20120409-1-all-publicholidays-dol.govt.nz.ics 83b97d43c022a6d963f7d8f698479f82 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T015128Z\r\nLAST-MODIFIED:20081118T015139Z\r\nDTSTAMP:20081118T015128Z\r\nUID:20120409-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Easter Monday\r\nDTSTART;VALUE=DATE:20120409\r\nDTEND;VALUE=DATE:20120410\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1034 1014 \N 13 /user4/nz_holidays/20130329-1-all-publicholidays-dol.govt.nz.ics 471c51ff8dc93ed35d6e439ff04c6376 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T015519Z\r\nLAST-MODIFIED:20081118T015535Z\r\nDTSTAMP:20081118T015519Z\r\nUID:20130329-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20130329\r\nDTEND;VALUE=DATE:20130330\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1035 1014 \N 13 /user4/nz_holidays/20130401-1-all-publicholidays-dol.govt.nz.ics c11837d01bf8715e705632a018e43d0b 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T015540Z\r\nLAST-MODIFIED:20081118T015609Z\r\nDTSTAMP:20081118T015540Z\r\nUID:20130401-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Easter Monday\r\nDTSTART;VALUE=DATE:20130401\r\nDTEND;VALUE=DATE:20130402\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1036 1014 \N 13 /user4/nz_holidays/20140418-1-all-publicholidays-dol.govt.nz.ics a2da777808156199b45c1032eea8193f 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T020024Z\r\nLAST-MODIFIED:20081118T020127Z\r\nDTSTAMP:20081118T020105Z\r\nUID:20140418-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20140418\r\nDTEND;VALUE=DATE:20140419\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1037 1014 \N 13 /user4/nz_holidays/20140421-1-all-publicholidays-dol.govt.nz.ics 9baeec1cc40d7c74975800d5fd0312c1 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T020135Z\r\nLAST-MODIFIED:20081118T020155Z\r\nDTSTAMP:20081118T020135Z\r\nUID:20140421-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Easter Monday\r\nDTSTART;VALUE=DATE:20140421\r\nDTEND;VALUE=DATE:20140422\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1038 1014 \N 13 /user4/nz_holidays/20150403-1-all-publicholidays-dol.govt.nz.ics 8ce044e18cc4a9324ce7c6ad4638b468 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T020631Z\r\nLAST-MODIFIED:20081118T020647Z\r\nDTSTAMP:20081118T020631Z\r\nUID:20150403-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20150403\r\nDTEND;VALUE=DATE:20150404\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1039 1014 \N 13 /user4/nz_holidays/20150406-1-all-publicholidays-dol.govt.nz.ics e076c28b13d25ad71e1df5988ce25701 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T020717Z\r\nLAST-MODIFIED:20081118T020753Z\r\nDTSTAMP:20081118T020717Z\r\nUID:20150406-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Easter Monday\r\nDTSTART;VALUE=DATE:20150406\r\nDTEND;VALUE=DATE:20150407\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1040 1014 \N 13 /user4/nz_holidays/20160325-1-all-publicholidays-dol.govt.nz.ics f2db4e9bdd9990d139af2e4c661b1f45 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081118T021243Z\r\nLAST-MODIFIED:20081118T021253Z\r\nDTSTAMP:20081118T021243Z\r\nUID:20160325-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20160325\r\nDTEND;VALUE=DATE:20160326\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1041 1014 \N 13 /user4/nz_holidays/20081201-1-all-publicholidays-dol.govt.nz.ics 0244a6847a8817a69c4550e6f953b637 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200154Z\r\nLAST-MODIFIED:20081119T200227Z\r\nDTSTAMP:20081119T200154Z\r\nUID:20081201-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Westland Anniversary Day (Monday nearest 1st December)\r\nDTSTART;VALUE=DATE:20051128\r\nRRULE:FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1043 1014 \N 13 /user4/nz_holidays/20081201-2-all-publicholidays-dol.govt.nz.ics ac30ef8e422d122ac0ef71de27ef25a5 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200252Z\r\nLAST-MODIFIED:20081119T200304Z\r\nDTSTAMP:20081119T200252Z\r\nUID:20081201-2-all-publicholidays-dol.govt.nz\r\nSUMMARY:Chatham Islands Anniversary Day (Monday nearest 30th November)\r\nDTSTART;VALUE=DATE:20051128\r\nRRULE:FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1044 1014 \N 13 /user4/nz_holidays/20090126-1-all-publicholidays-dol.govt.nz.ics 70df8c50a4734492ef14844ade5f2e5e 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200321Z\r\nLAST-MODIFIED:20081119T200334Z\r\nDTSTAMP:20081119T200321Z\r\nUID:20090126-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Auckland Anniversary Day (Monday nearest 29th January)\r\nDTSTART;VALUE=DATE:20050131\r\nRRULE:FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1045 1014 \N 13 /user4/nz_holidays/20090119-1-all-publicholidays-dol.govt.nz.ics 915a269139513c9b9e7eab7974cc311e 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200350Z\r\nLAST-MODIFIED:20081119T200406Z\r\nDTSTAMP:20081119T200350Z\r\nUID:20090119-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Wellington Anniversary Day (Monday nearest 22nd January)\r\nDTSTART;VALUE=DATE:20050124\r\nRRULE:FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1046 1014 \N 13 /user4/nz_holidays/20090119-2-all-publicholidays-dol.govt.nz.ics 47021cd8d9b29411129acdba131c3b99 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200431Z\r\nLAST-MODIFIED:20081119T200443Z\r\nDTSTAMP:20081119T200431Z\r\nUID:20090119-2-all-publicholidays-dol.govt.nz\r\nSUMMARY:Southland Anniversary Day (Monday nearest 17th January)\r\nDTSTART;VALUE=DATE:20050117\r\nRRULE:FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1047 1014 \N 13 /user4/nz_holidays/20090202-1-all-publicholidays-dol.govt.nz.ics 7ebcfe2f43910e2e076c3a2c99b61a9b 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200519Z\r\nLAST-MODIFIED:20081119T200530Z\r\nDTSTAMP:20081119T200519Z\r\nUID:20090202-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Nelson Anniversary Day (Monday nearest 1st Feb)\r\nDTSTART;VALUE=DATE:20050131\r\nRRULE:FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1048 1014 \N 13 /user4/nz_holidays/20090309-1-all-publicholidays-dol.govt.nz.ics ed648837b1a2a8653a15da01a63829d7 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200607Z\r\nLAST-MODIFIED:20081119T200622Z\r\nDTSTAMP:20081119T200607Z\r\nUID:20090309-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Taranaki Anniversary Day\r\nDTSTART;VALUE=DATE:20090309\r\nDTEND;VALUE=DATE:20090310\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1049 1014 \N 13 /user4/nz_holidays/20090323-1-all-publicholidays-dol.govt.nz.ics dff0f27711477173a08b05a35b4665cf 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200640Z\r\nLAST-MODIFIED:20081119T200650Z\r\nDTSTAMP:20081119T200640Z\r\nUID:20090323-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Otago Anniversary Day\r\nDTSTART;VALUE=DATE:20090323\r\nDTEND;VALUE=DATE:20090324\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1050 1014 \N 13 /user4/nz_holidays/20091023-1-all-publicholidays-dol.govt.nz.ics 09637d1f4a796c04c286aa856354d22a 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200759Z\r\nLAST-MODIFIED:20081119T200809Z\r\nDTSTAMP:20081119T200759Z\r\nUID:20091023-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Hawkes' Bay Anniversary Day (Friday before 4th Monday of October\r\n )\r\nDTSTART;VALUE=DATE:20051021\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1051 1014 \N 13 /user4/nz_holidays/20091102-1-all-publicholidays-dol.govt.nz.ics f0b7ed4ed459e5cc979b005f22a63f0e 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T200840Z\r\nLAST-MODIFIED:20081119T200928Z\r\nDTSTAMP:20081119T200840Z\r\nUID:20091102-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Marlborough Anniversary Day (Monday after 4th Monday of October)\r\n \r\nDTSTART;VALUE=DATE:20051031\r\nRRULE:FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1052 1014 \N 13 /user4/nz_holidays/20091113-1-all-publicholidays-dol.govt.nz.ics 464b1b6faeb3887179f41bdba511ec48 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T201008Z\r\nLAST-MODIFIED:20081119T201040Z\r\nDTSTAMP:20081119T201008Z\r\nUID:20091113-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Canterbury Anniversary Day (Second Friday after the first Tuesda\r\n y in November)\r\nDTSTART;VALUE=DATE:20051111\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1053 1014 \N 13 /user4/nz_holidays/20090928-1-all-publicholidays-dol.govt.nz.ics ca2c59cfce014c0e364b8e1806c5f76f 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T201140Z\r\nLAST-MODIFIED:20081119T201153Z\r\nDTSTAMP:20081119T201140Z\r\nUID:20090928-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:South Canterbury Anniversary Day (4th Monday in September)\r\nDTSTART;VALUE=DATE:20050926\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=4MO\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1054 1014 \N 13 /user4/nz_holidays/20100308-1-all-publicholidays-dol.govt.nz.ics 36209ff22d99ba4a812794b15e6ffc4b 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T202108Z\r\nLAST-MODIFIED:20081119T202117Z\r\nDTSTAMP:20081119T202108Z\r\nUID:20100308-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Taranaki Anniversary Day\r\nDTSTART;VALUE=DATE:20100308\r\nDTEND;VALUE=DATE:20100309\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1055 1014 \N 13 /user4/nz_holidays/20100322-1-all-publicholidays-dol.govt.nz.ics 516bcca8f85b7d7cb428c0f7c9beec36 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T202119Z\r\nLAST-MODIFIED:20081119T202125Z\r\nDTSTAMP:20081119T202119Z\r\nUID:20100322-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Otago Anniversary Day\r\nDTSTART;VALUE=DATE:20100322\r\nDTEND;VALUE=DATE:20100323\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1056 1014 \N 13 /user4/nz_holidays/20110314-1-all-publicholidays-dol.govt.nz.ics f1198d5c33f000d309498e15c546c4ce 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T203128Z\r\nLAST-MODIFIED:20081119T203139Z\r\nDTSTAMP:20081119T203128Z\r\nUID:20110314-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Taranaki Anniversary Day\r\nDTSTART;VALUE=DATE:20110314\r\nDTEND;VALUE=DATE:20110315\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1057 1014 \N 13 /user4/nz_holidays/20110321-1-all-publicholidays-dol.govt.nz.ics 30aaecb2479eba89243ef363f2e4dd8f 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T203213Z\r\nLAST-MODIFIED:20081119T203247Z\r\nDTSTAMP:20081119T203213Z\r\nUID:20110321-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Otago Anniversary Day\r\nDTSTART;VALUE=DATE:20110321\r\nDTEND;VALUE=DATE:20110322\r\nTRANSP:TRANSPARENT\r\nX-MOZ-GENERATION:1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1058 1014 \N 13 /user4/nz_holidays/20120312-1-all-publicholidays-dol.govt.nz.ics 41fb1874c8242e9d740aa2c49460d93c 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T214936Z\r\nLAST-MODIFIED:20081119T214943Z\r\nDTSTAMP:20081119T214936Z\r\nUID:20120312-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Taranaki Anniversary Day\r\nDTSTART;VALUE=DATE:20120312\r\nDTEND;VALUE=DATE:20120313\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1059 1014 \N 13 /user4/nz_holidays/20120326-1-all-publicholidays-dol.govt.nz.ics 9426349df25c89995d30c89b1870777b 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T215004Z\r\nLAST-MODIFIED:20081119T215012Z\r\nDTSTAMP:20081119T215004Z\r\nUID:20120326-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Otago Anniversary Day\r\nDTSTART;VALUE=DATE:20120326\r\nDTEND;VALUE=DATE:20120327\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1060 1014 \N 13 /user4/nz_holidays/20130311-1-all-publicholidays-dol.govt.nz.ics 04155b7a3b8a359511ff32bb616b6792 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T215900Z\r\nLAST-MODIFIED:20081119T215926Z\r\nDTSTAMP:20081119T215900Z\r\nUID:20130311-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Taranaki Anniversary Day\r\nDTSTART;VALUE=DATE:20130311\r\nDTEND;VALUE=DATE:20130312\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1061 1014 \N 13 /user4/nz_holidays/20130325-1-all-publicholidays-dol.govt.nz.ics 130ab6f29361c6750ca53c0b4e1de2e0 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T215951Z\r\nLAST-MODIFIED:20081119T215958Z\r\nDTSTAMP:20081119T215951Z\r\nUID:20130325-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Otago Anniversary Day\r\nDTSTART;VALUE=DATE:20130325\r\nDTEND;VALUE=DATE:20130326\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1062 1014 \N 13 /user4/nz_holidays/20140310-1-all-publicholidays-dol.govt.nz.ics 91c65d9846cfe8156fb488a43403999f 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T220720Z\r\nLAST-MODIFIED:20081119T220732Z\r\nDTSTAMP:20081119T220720Z\r\nUID:20140310-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Taranaki Anniversary Day\r\nDTSTART;VALUE=DATE:20140310\r\nDTEND;VALUE=DATE:20140311\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1063 1014 \N 13 /user4/nz_holidays/20140324-1-all-publicholidays-dol.govt.nz.ics b7a17924e6b434e06883ca7f0544b386 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T220734Z\r\nLAST-MODIFIED:20081119T220743Z\r\nDTSTAMP:20081119T220734Z\r\nUID:20140324-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Otago Anniversary Day\r\nDTSTART;VALUE=DATE:20140324\r\nDTEND;VALUE=DATE:20140325\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1064 1014 \N 13 /user4/nz_holidays/20150309-1-all-publicholidays-dol.govt.nz.ics bd5271ae06fc94378fc903cf2e17e56d 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T221413Z\r\nLAST-MODIFIED:20081119T221422Z\r\nDTSTAMP:20081119T221413Z\r\nUID:20150309-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Taranaki Anniversary Day\r\nDTSTART;VALUE=DATE:20150309\r\nDTEND;VALUE=DATE:20150310\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1065 1014 \N 13 /user4/nz_holidays/20150323-1-all-publicholidays-dol.govt.nz.ics fea8698d5cfbbece404cf83ee12d13ad 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T221435Z\r\nLAST-MODIFIED:20081119T221446Z\r\nDTSTAMP:20081119T221435Z\r\nUID:20150323-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Otago Anniversary Day\r\nDTSTART;VALUE=DATE:20150323\r\nDTEND;VALUE=DATE:20150324\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1066 1014 \N 13 /user4/nz_holidays/20160314-1-all-publicholidays-dol.govt.nz.ics 8f6940e24cd4b691ad29f256e1d15343 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T222143Z\r\nLAST-MODIFIED:20081119T222153Z\r\nDTSTAMP:20081119T222143Z\r\nUID:20160314-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Taranaki Anniversary Day\r\nDTSTART;VALUE=DATE:20160314\r\nDTEND;VALUE=DATE:20160315\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1067 1014 \N 13 /user4/nz_holidays/20160321-1-all-publicholidays-dol.govt.nz.ics 02285196185ae58df211b56d8b96d390 2011-11-12 18:01:28.554248+13 2011-11-12 18:01:28.554248+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081119T222159Z\r\nLAST-MODIFIED:20081119T222209Z\r\nDTSTAMP:20081119T222159Z\r\nUID:20160321-1-all-publicholidays-dol.govt.nz\r\nSUMMARY:Otago Anniversary Day\r\nDTSTART;VALUE=DATE:20160321\r\nDTEND;VALUE=DATE:20160322\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1068 1014 \N 13 /user4/us_holidays/64E660BA-86DB-43CD-A067-194149D28471-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 31429e6620b47458fcfe8ee6a258a0ef 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20190421\r\nDTEND;VALUE=DATE:20190422\r\nSUMMARY:Easter Sunday\r\nUID:64E660BA-86DB-43CD-A067-194149D28471-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151248Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1070 1069 \N 13 /user4/us_holidays/64874200-9494-415C-9FA8-B86F739FFB13-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 069a230e94bfed64e7c86a7eefe37e52 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20041011\r\nDTEND;VALUE=DATE:20041012\r\nSUMMARY:Columbus Day\r\nUID:64874200-9494-415C-9FA8-B86F739FFB13-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051009;BYMONTH=10;BYDAY=2MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1071 1069 \N 13 /user4/us_holidays/468CB2B3-342D-4D1D-B152-F52608E6CB4C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 5c04ee85cbaa65230444d7fbf22dc923 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040704\r\nDTEND;VALUE=DATE:20040705\r\nSUMMARY:Independence Day\r\nUID:468CB2B3-342D-4D1D-B152-F52608E6CB4C-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060703\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1072 1069 \N 13 /user4/us_holidays/01253561-2B9B-4341-88F5-29A572BB3E75-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics aea3d2fefccc01935df1e5acb480c93c 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20110424\r\nDTEND;VALUE=DATE:20110425\r\nSUMMARY:Easter Sunday\r\nUID:01253561-2B9B-4341-88F5-29A572BB3E75-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151243Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1073 1069 \N 13 /user4/us_holidays/8EE35D87-548A-4495-BE91-07303C510724-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6dacedf5b8307c856b626bd9951c2ba6 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20200412\r\nDTEND;VALUE=DATE:20200413\r\nSUMMARY:Easter Sunday\r\nUID:8EE35D87-548A-4495-BE91-07303C510724-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151246Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1074 1069 \N 13 /user4/us_holidays/5D55021E-0C17-49BD-BE73-29F472A75FAD-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics fb64e60ce7d28042d13ce165788a05f8 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040101\r\nDTEND;VALUE=DATE:20040102\r\nSUMMARY:New Year's Day\r\nUID:5D55021E-0C17-49BD-BE73-29F472A75FAD-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:4\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051231\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1075 1069 \N 13 /user4/us_holidays/183A097B-7D44-4C66-9569-AA520E7CB8DC-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 92bd242467451b1fe0593fea463a51c5 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20051027\r\nDTEND;VALUE=DATE:20051028\r\nSUMMARY:Navy Day\r\nUID:183A097B-7D44-4C66-9569-AA520E7CB8DC-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151243Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1076 1069 \N 13 /user4/us_holidays/EDF531F8-7E53-4604-9F72-16BCD40CD7D2-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 2e4500674f13335a8e69e0d0ffc9220c 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20240331\r\nDTEND;VALUE=DATE:20240401\r\nSUMMARY:Easter Sunday\r\nUID:EDF531F8-7E53-4604-9F72-16BCD40CD7D2-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151242Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1077 1069 \N 13 /user4/us_holidays/95DAFE6C-E465-40C1-8FAD-4EAB11CAD26B-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics ae827c753cd95e741ac6091a8aa2f38b 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060416\r\nDTEND;VALUE=DATE:20060417\r\nSUMMARY:Easter Sunday\r\nUID:95DAFE6C-E465-40C1-8FAD-4EAB11CAD26B-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151251Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1078 1069 \N 13 /user4/us_holidays/E8C35314-F61A-4649-A4C3-E4F24B2BA454-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 78b611b35dbf7ce9aa4669ab1224b9ca 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040119\r\nDTEND;VALUE=DATE:20040120\r\nSUMMARY:Martin Luther King Jr.'s Birthday\r\nUID:E8C35314-F61A-4649-A4C3-E4F24B2BA454-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:5\r\nDTSTAMP:20060216T151248Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060115;BYMONTH=1;BYDAY=3MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1079 1069 \N 13 /user4/us_holidays/0EF392B7-5203-432C-B41B-BB7AFC5CBA6A-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e5bde5057135d7108e93a616eea7be0f 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20120408\r\nDTEND;VALUE=DATE:20120409\r\nSUMMARY:Easter Sunday\r\nUID:0EF392B7-5203-432C-B41B-BB7AFC5CBA6A-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151249Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1080 1069 \N 13 /user4/us_holidays/BCC001F2-681A-4D72-9631-ACCE8EA480A0-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 9ac00032a0fb06c9a3524ca02da12566 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20140420\r\nDTEND;VALUE=DATE:20140421\r\nSUMMARY:Easter Sunday\r\nUID:BCC001F2-681A-4D72-9631-ACCE8EA480A0-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151249Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1081 1069 \N 13 /user4/us_holidays/F35052B2-D44B-43F8-9F2C-95149FD385FF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b296df65fa63180074da067a21bad9f4 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20051124\r\nDTEND;VALUE=DATE:20051125\r\nSUMMARY:Thanksgiving Day\r\nUID:F35052B2-D44B-43F8-9F2C-95149FD385FF-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151251Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=11;BYDAY=4TH\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1082 1069 \N 13 /user4/us_holidays/8FF1DB95-BC31-48B3-94A8-A519ED090EF7-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b1fb4bc4468c1b1e565342d35d37872a 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060101\r\nDTEND;VALUE=DATE:20060102\r\nSUMMARY:New Year's Day\r\nUID:8FF1DB95-BC31-48B3-94A8-A519ED090EF7-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:4\r\nDTSTAMP:20060216T151243Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1083 1069 \N 13 /user4/us_holidays/AB045233-7D93-490A-AEDC-70710D207055-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics da7207deff60eed5bce96d234529e658 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20180401\r\nDTEND;VALUE=DATE:20180402\r\nSUMMARY:Easter Sunday\r\nUID:AB045233-7D93-490A-AEDC-70710D207055-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151245Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1084 1069 \N 13 /user4/us_holidays/D2B79EA9-E22C-4F27-BB84-750584839575-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e62cd34746824a782a5b173cf7e6ba7c 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040906\r\nDTEND;VALUE=DATE:20040907\r\nSUMMARY:Labor Day\r\nUID:D2B79EA9-E22C-4F27-BB84-750584839575-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:4\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060903;BYMONTH=9;BYDAY=1MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1085 1069 \N 13 /user4/us_holidays/B14BF09D-1745-4F98-89D3-98410ACFD9C9-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6625306dccf82547590abdd1f4a86eb7 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040212\r\nDTEND;VALUE=DATE:20040213\r\nSUMMARY:Lincoln's Birthday\r\nUID:B14BF09D-1745-4F98-89D3-98410ACFD9C9-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151247Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060211\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1086 1069 \N 13 /user4/us_holidays/B5F73538-5A2E-4518-86F8-4AC2415447BB-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics d8c981f069b7037686371017aaa2e827 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20210404\r\nDTEND;VALUE=DATE:20210405\r\nSUMMARY:Easter Sunday\r\nUID:B5F73538-5A2E-4518-86F8-4AC2415447BB-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151244Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1087 1069 \N 13 /user4/us_holidays/E1C2F367-726B-4BBC-A6F0-37E31EDA74F0-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b5bdab9f331f49e1635f559fb533764f 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060904\r\nDTEND;VALUE=DATE:20060905\r\nSUMMARY:Labor Day\r\nUID:E1C2F367-726B-4BBC-A6F0-37E31EDA74F0-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:4\r\nDTSTAMP:20060216T151247Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=9;BYDAY=1MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1088 1069 \N 13 /user4/us_holidays/467631C8-F6B4-419C-878F-082B8774CC6C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 75cb17d482b1521620b7bbb7ef090127 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20050327\r\nDTEND;VALUE=DATE:20050328\r\nSUMMARY:Easter Sunday\r\nUID:467631C8-F6B4-419C-878F-082B8774CC6C-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151248Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1089 1069 \N 13 /user4/us_holidays/20432B95-74EB-4A97-B6AA-CF307DE25236-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 7cb3939d34bdf04c396f1a00aa943586 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTAMP:20060216T151243Z\r\nUID:20432B95-74EB-4A97-B6AA-CF307DE25236-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTART;VALUE=DATE:20040531\r\nSUMMARY:Memorial Day\r\nDTEND;VALUE=DATE:20040601\r\nDESCRIPTION:Fly flag half-staff until noon.\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060528;BYMONTH=5;BYDAY=-1MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1090 1069 \N 13 /user4/us_holidays/AB7564F8-DEC3-4A9B-B228-595138D8F83E-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 083af2aa1dd48cf2d71d458bfc5d254a 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040411\r\nDTEND;VALUE=DATE:20040412\r\nSUMMARY:Easter Sunday\r\nUID:AB7564F8-DEC3-4A9B-B228-595138D8F83E-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151243Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1091 1069 \N 13 /user4/us_holidays/70F1BEC8-058E-4CA0-A401-9D0AA6D10C25-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics a534558aa8c0911ba042f3965e0bdfb2 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20080323\r\nDTEND;VALUE=DATE:20080324\r\nSUMMARY:Easter Sunday\r\nUID:70F1BEC8-058E-4CA0-A401-9D0AA6D10C25-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:4\r\nDTSTAMP:20060216T151241Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1092 1069 \N 13 /user4/us_holidays/3DDCAA37-8FC9-4602-8161-062DA284C25A-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6b11e32b2cae21d9d1f1b8741cdb2de6 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060514\r\nDTEND;VALUE=DATE:20060515\r\nSUMMARY:Mother's Day\r\nUID:3DDCAA37-8FC9-4602-8161-062DA284C25A-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151242Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=2SU\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1093 1069 \N 13 /user4/us_holidays/4D1563A6-B1B6-4FC3-B68D-C5BC32117935-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e04d1779c58ad40eb7ba7cf84ce81481 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060704\r\nDTEND;VALUE=DATE:20060705\r\nSUMMARY:Independence Day\r\nUID:4D1563A6-B1B6-4FC3-B68D-C5BC32117935-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1094 1069 \N 13 /user4/us_holidays/8711F720-D78C-4AE3-86CC-4BE1C6A04944-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e79073bbbb718188bcfbb8f682fdae60 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20220417\r\nDTEND;VALUE=DATE:20220418\r\nSUMMARY:Easter Sunday\r\nUID:8711F720-D78C-4AE3-86CC-4BE1C6A04944-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151245Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1095 1069 \N 13 /user4/us_holidays/7B660B80-30F0-42CC-A32A-4FEE2ECC6515-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics a77af3ae3f194afe804b01977651c87b 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20100404\r\nDTEND;VALUE=DATE:20100405\r\nSUMMARY:Easter Sunday\r\nUID:7B660B80-30F0-42CC-A32A-4FEE2ECC6515-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151243Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1096 1069 \N 13 /user4/us_holidays/8B7568AE-0F91-48DA-88EE-210E402147BF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e24eb86ee6ffcd7899803c2c8479f896 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20051010\r\nDTEND;VALUE=DATE:20051011\r\nSUMMARY:Columbus Day\r\nUID:8B7568AE-0F91-48DA-88EE-210E402147BF-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=10;BYDAY=2MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1097 1069 \N 13 /user4/us_holidays/349DCD34-83E1-42EF-81C7-C051E5B6FAC8-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6c6d6023c291c7e1a3861dcb3368d699 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040614\r\nDTEND;VALUE=DATE:20040615\r\nSUMMARY:Flag Day\r\nUID:349DCD34-83E1-42EF-81C7-C051E5B6FAC8-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151245Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060613\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1098 1069 \N 13 /user4/us_holidays/B7DA1215-2500-41A6-A40E-706ADD5FFC1E-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e5a3b741f659a0fdd506d8032301ebdb 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20041027\r\nDTEND;VALUE=DATE:20041028\r\nSUMMARY:Navy Day\r\nUID:B7DA1215-2500-41A6-A40E-706ADD5FFC1E-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151243Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051026\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1099 1069 \N 13 /user4/us_holidays/7D553648-4460-4618-977E-12B8DB4516BF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 115d2d1e19f4791f26d538da8fd4a38e 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040216\r\nDTEND;VALUE=DATE:20040217\r\nSUMMARY:Washington's Birthday\r\nUID:7D553648-4460-4618-977E-12B8DB4516BF-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:5\r\nDTSTAMP:20060216T151242Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060219;BYMONTH=2;BYDAY=3MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1100 1069 \N 13 /user4/us_holidays/4006A01A-8E57-497A-8061-C504817DEC29-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 12abc9703d71f37fdfe7722fc9af4c35 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20230409\r\nDTEND;VALUE=DATE:20230410\r\nSUMMARY:Easter Sunday\r\nUID:4006A01A-8E57-497A-8061-C504817DEC29-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151248Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1101 1069 \N 13 /user4/us_holidays/DE7C6F7A-EA80-42C8-A05B-89341A373CA2-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics ae1cebc0bfc73f278164150566666b81 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040515\r\nDTEND;VALUE=DATE:20040516\r\nSUMMARY:Armed Forces Day\r\nUID:DE7C6F7A-EA80-42C8-A05B-89341A373CA2-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151242Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060519;BYMONTH=5;BYDAY=3SA\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1102 1069 \N 13 /user4/us_holidays/64A2DCF3-5A6B-4EF4-A520-BA01CBC97617-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics c7d538d607dc27a42014311cab704f96 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20051111\r\nDTEND;VALUE=DATE:20051112\r\nSUMMARY:Veterans Day\r\nUID:64A2DCF3-5A6B-4EF4-A520-BA01CBC97617-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151242Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1103 1069 \N 13 /user4/us_holidays/5155D737-F8AA-4522-8703-D51B4A30AF9C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e974fcfbad9493d13da6cfe690c830e2 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040120\r\nDTEND;VALUE=DATE:20040121\r\nSUMMARY:Inauguration Day\r\nUID:5155D737-F8AA-4522-8703-D51B4A30AF9C-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:6\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060119\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1104 1069 \N 13 /user4/us_holidays/E44DD94F-150A-4B6E-8692-A53437147FCF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 38a4b51b6c0f11405b7f8f3242572598 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTAMP:20060216T151243Z\r\nUID:E44DD94F-150A-4B6E-8692-A53437147FCF-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTART;VALUE=DATE:20060529\r\nSUMMARY:Memorial Day\r\nDTEND;VALUE=DATE:20060530\r\nDESCRIPTION:Fly flag half-staff until noon.\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=-1MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1105 1069 \N 13 /user4/us_holidays/DEACF954-F452-4AC2-BB9C-437533BF49A6-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b585bb61386fb89eb90cb5d43fa6c150 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060520\r\nDTEND;VALUE=DATE:20060521\r\nSUMMARY:Armed Forces Day\r\nUID:DEACF954-F452-4AC2-BB9C-437533BF49A6-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151247Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=3SA\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1106 1069 \N 13 /user4/us_holidays/9C3C643D-D138-4AA9-9AB4-F77443E70837-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics c52493fd5ece900625c8e67f7526a328 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060917\r\nDTEND;VALUE=DATE:20060918\r\nSUMMARY:Constitution Day\r\nUID:9C3C643D-D138-4AA9-9AB4-F77443E70837-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1107 1069 \N 13 /user4/us_holidays/79FC38CA-5D7B-45B9-839B-27B5C8C3A514-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 281e240ed90f179e509b9d9d9bc97b14 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20250420\r\nDTEND;VALUE=DATE:20250421\r\nSUMMARY:Easter Sunday\r\nUID:79FC38CA-5D7B-45B9-839B-27B5C8C3A514-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151246Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1108 1069 \N 13 /user4/us_holidays/75F65F7C-5D88-45B2-9D95-18F7C8AFEB86-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 92caabd2127bc227e4287826d597e72b 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20041111\r\nDTEND;VALUE=DATE:20041112\r\nSUMMARY:Veterans Day\r\nUID:75F65F7C-5D88-45B2-9D95-18F7C8AFEB86-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151243Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051110\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1109 1069 \N 13 /user4/us_holidays/7D9E7675-0B5B-4E43-B918-235CD5A9248E-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6f67ef01d9699932b0d23b5a598228e9 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20160327\r\nDTEND;VALUE=DATE:20160328\r\nSUMMARY:Easter Sunday\r\nUID:7D9E7675-0B5B-4E43-B918-235CD5A9248E-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151249Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1110 1069 \N 13 /user4/us_holidays/DF4DAEB8-7248-4F1F-BA4E-EA8B5BDF5D0C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics a85ab4868a352328dbde189ea77a6e2d 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20150405\r\nDTEND;VALUE=DATE:20150406\r\nSUMMARY:Easter Sunday\r\nUID:DF4DAEB8-7248-4F1F-BA4E-EA8B5BDF5D0C-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151244Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1111 1069 \N 13 /user4/us_holidays/E238FE0B-4E32-43D6-965F-ACC28CC43B21-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics ebb766fb8c2736cd349dec71d22355de 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060212\r\nDTEND;VALUE=DATE:20060213\r\nSUMMARY:Lincoln's Birthday\r\nUID:E238FE0B-4E32-43D6-965F-ACC28CC43B21-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151243Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1112 1069 \N 13 /user4/us_holidays/3BBE9587-1A13-4DF6-8671-08511BC92786-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 7b5bf023bc1acc8d8016169ffa617929 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060220\r\nDTEND;VALUE=DATE:20060221\r\nSUMMARY:Washington's Birthday\r\nUID:3BBE9587-1A13-4DF6-8671-08511BC92786-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:5\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=2;BYDAY=3MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1113 1069 \N 13 /user4/us_holidays/9672014B-DAE5-42AF-B83E-91CE92CE1278-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 524a0e6efc725961050d7569f4cd6fa8 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040917\r\nDTEND;VALUE=DATE:20040918\r\nSUMMARY:Constitution Day\r\nUID:9672014B-DAE5-42AF-B83E-91CE92CE1278-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151249Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060916\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1114 1069 \N 13 /user4/us_holidays/95C333C1-CEAE-45F0-B448-B8F9F5B768A2-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics d7cbb4e29fa4d0d25e7452df10bc4f25 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20070408\r\nDTEND;VALUE=DATE:20070409\r\nSUMMARY:Easter Sunday\r\nUID:95C333C1-CEAE-45F0-B448-B8F9F5B768A2-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151247Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1115 1069 \N 13 /user4/us_holidays/5485295A-60A8-4CBF-9574-CE838633DD95-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b9f7991f8e31e3d0bf5e4155692dd103 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060120\r\nDTEND;VALUE=DATE:20060121\r\nSUMMARY:Inauguration Day\r\nUID:5485295A-60A8-4CBF-9574-CE838633DD95-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:6\r\nDTSTAMP:20060216T151245Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1116 1069 \N 13 /user4/us_holidays/7896BE9D-72E8-4C38-9BC7-203830C6429B-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics d2428f82c728833c6881e744975b2f5e 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20130331\r\nDTEND;VALUE=DATE:20130401\r\nSUMMARY:Easter Sunday\r\nUID:7896BE9D-72E8-4C38-9BC7-203830C6429B-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151244Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1117 1069 \N 13 /user4/us_holidays/57B0B83E-0913-4853-B784-C072F9F990DF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 506b3db5aa020756fc707afd4bd44de0 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20041225\r\nDTEND;VALUE=DATE:20041226\r\nSUMMARY:Christmas Day\r\nUID:57B0B83E-0913-4853-B784-C072F9F990DF-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151245Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051224\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1118 1069 \N 13 /user4/us_holidays/6E846799-408D-4D86-B3DF-D9946CCDB194-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 1b4379b83954bfcf47692729373fa687 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20040509\r\nDTEND;VALUE=DATE:20040510\r\nSUMMARY:Mother's Day\r\nUID:6E846799-408D-4D86-B3DF-D9946CCDB194-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151244Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20060513;BYMONTH=5;BYDAY=2SU\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1119 1069 \N 13 /user4/us_holidays/35EE647D-6E48-4233-B0C4-CCC497684C92-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 71a89792fab6a2e04b2e27d41c90bb35 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20170416\r\nDTEND;VALUE=DATE:20170417\r\nSUMMARY:Easter Sunday\r\nUID:35EE647D-6E48-4233-B0C4-CCC497684C92-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151251Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1120 1069 \N 13 /user4/us_holidays/555C0D00-991F-48C5-A68B-7E3CBD5780FA-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics f8a9d23b667503befca8d30aade9a205 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20051225\r\nDTEND;VALUE=DATE:20051226\r\nSUMMARY:Christmas Day\r\nUID:555C0D00-991F-48C5-A68B-7E3CBD5780FA-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151245Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1121 1069 \N 13 /user4/us_holidays/73C40DD3-C7C0-42BB-95F5-22B1FCE2F240-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 96ad452eb049f3ff4fbf6d4c85800ee6 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20041125\r\nDTEND;VALUE=DATE:20041126\r\nSUMMARY:Thanksgiving Day\r\nUID:73C40DD3-C7C0-42BB-95F5-22B1FCE2F240-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151244Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20051123;BYMONTH=11;BYDAY=4TH\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1122 1069 \N 13 /user4/us_holidays/910ED267-B8DF-4CA7-B867-0ED1A5FD3F23-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics cd9c48b5a2a6d526755dbfb2e6748cbc 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060116\r\nDTEND;VALUE=DATE:20060117\r\nSUMMARY:Martin Luther King Jr.'s Birthday\r\nUID:910ED267-B8DF-4CA7-B867-0ED1A5FD3F23-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:5\r\nDTSTAMP:20060216T151242Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=1;BYDAY=3MO\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1123 1069 \N 13 /user4/us_holidays/C15CE396-EAA3-49FB-B79F-79AF3D6E5069-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics a1e86276c9c7a9fbdbbce02560c7590f 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20060614\r\nDTEND;VALUE=DATE:20060615\r\nSUMMARY:Flag Day\r\nUID:C15CE396-EAA3-49FB-B79F-79AF3D6E5069-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:3\r\nDTSTAMP:20060216T151247Z\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1124 1069 \N 13 /user4/us_holidays/698F4B6B-C5B9-4AF6-9E38-DF171C8448A5-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 42d3ce7f961a4115747c26b876afcdd2 2011-11-12 18:01:29.109066+13 2011-11-12 18:01:29.109066+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nTRANSP:TRANSPARENT\r\nDTSTART;VALUE=DATE:20090412\r\nDTEND;VALUE=DATE:20090413\r\nSUMMARY:Easter Sunday\r\nUID:698F4B6B-C5B9-4AF6-9E38-DF171C8448A5-7CFA95A3-9734-46AF-A4DC-5FB544A\r\n D96AF\r\nSEQUENCE:2\r\nDTSTAMP:20060216T151249Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1125 1069 \N 12 /user3/utf8/79c0137f-5972-e464-e906-ece96bd86bab.ics 446a595d01e9b2ffd86147fbc5b60a79 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aüa Aaaaaa aaa Aaaaa aaa Aaaaaaaaa-Aaaaüa aaaaaaa aa. Aaaaaaaa\r\nDTSTART;VALUE=DATE:20071111\r\nDTEND;VALUE=DATE:20071112\r\nDTSTAMP:20070613T112658\r\nDESCRIPTION:Aaaaa Aaaa aa 11.11.11 aaaaaaaaa/aaäaßaaa\\n\\n\r\nUID:79c0137f-5972-e464-e906-ece96bd86bab\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1127 1126 \N 12 /user3/utf8/2b4c8b0e-f596-f174-61d8-5c5e4e1408eb.ics d3725eedffe0df116d7eb966a0de3e37 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaa1111 - aaaaaaaaaaa aaaaaaaaaaa aaa aaaaaa\r\nDTSTART;VALUE=DATE:20070915\r\nDTEND;VALUE=DATE:20070916\r\nDTSTAMP:20070613T112658\r\nLOCATION:Aaaaaa/Aaa\r\nDESCRIPTION:Aaaaaaaaaa aa 11.11.1111 aaa aaaaaaa@a-aaaaaaa.aa\\nAaaaaaaaa\r\n aaaaaa üaaa aaaaaaa@aaaaaaaa.aa\\n\\n\r\nUID:2b4c8b0e-f596-f174-61d8-5c5e4e1408eb\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1128 1126 \N 12 /user3/utf8/27c4eab7-e8a2-a244-8134-9a0a90611143.ics 3377d49f9540599f84fd1bee4894e182 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:AAA'11\r\nDTSTART;VALUE=DATE:20070824\r\nDTEND;VALUE=DATE:20070825\r\nDTSTAMP:20070613T112658\r\nLOCATION:Aaa Aöaaa, Aaaaaaaaa\r\nDESCRIPTION:aaaa://aaa.aaa11.aa/\\n\\n\r\nCATEGORIES:Aaaaaaa Aaaaaaa\r\nUID:27c4eab7-e8a2-a244-8134-9a0a90611143\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1129 1126 \N 12 /user3/utf8/03d0a462-8acf-dfe4-ad47-993178093d6f.ics cbbb2f4a8113136d5ff3fb041a960138 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaa Aaaaaaaaaaaaaaäa\r\nDTSTART:20070820T090000\r\nDTEND:20070820T151500\r\nDTSTAMP:20070613T112659\r\nCATEGORIES:Aaaaaaaaaäa Aaaaaaaaa\r\nUID:03d0a462-8acf-dfe4-ad47-993178093d6f\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1130 1126 \N 12 /user3/utf8/79574526-5d44-7fe4-d571-af2230c6db47.ics be8bf95cf27d2c9b90dfe3667b2d1222 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaa Aaaaaaaaaaaaaa\r\nDTSTART;VALUE=DATE:20070713\r\nDTEND;VALUE=DATE:20070714\r\nDTSTAMP:20070613T112659\r\nCATEGORIES:Aaaaaaaaaäa Aaaaaaaaa\r\nUID:79574526-5d44-7fe4-d571-af2230c6db47\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1131 1126 \N 12 /user3/utf8/5d03d67f-d56f-cd94-49f4-6670f6fc6cd0.ics 2f58c4579898016d836336cd11624b58 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaa aaa Aaaaa\r\nDTSTART:20070710T093000\r\nDTEND:20070710T120000\r\nDTSTAMP:20070613T112659\r\nCATEGORIES:Aaaaaaaaaäa Aaaaaaaaa\r\nUID:5d03d67f-d56f-cd94-49f4-6670f6fc6cd0\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1132 1126 \N 12 /user3/utf8/e35dbaee-3f92-2044-3138-f7dff2c5b79c.ics 293c8cedab41b609a34c0e05dde8c629 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaa Aaaaaaa\r\nDTSTART;VALUE=DATE:20070630\r\nDTEND;VALUE=DATE:20070701\r\nDTSTAMP:20070613T112659\r\nUID:e35dbaee-3f92-2044-3138-f7dff2c5b79c\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1133 1126 \N 12 /user3/utf8/9151a30f-ba72-6844-a9a3-7dc8b98638a3.ics 9e593b57164d29387faebf774f827372 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaa Aaaaaaaaaaaaa\r\nDTSTART;VALUE=DATE:20070629\r\nDTEND;VALUE=DATE:20070630\r\nDTSTAMP:20070613T112659\r\nUID:9151a30f-ba72-6844-a9a3-7dc8b98638a3\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1134 1126 \N 12 /user3/utf8/7b29f39d-0818-9074-5d01-852171ff92e2.ics fee3796a818ac1c07e0a96f08514ac2c 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaa Aaaaaaaaaaaa\r\nDTSTART:20070628T193000\r\nDTEND:20070628T223000\r\nDTSTAMP:20070613T112659\r\nUID:7b29f39d-0818-9074-5d01-852171ff92e2\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1135 1126 \N 12 /user3/utf8/9b5a5deb-4a87-dd24-e5c7-44b76cbb8d27.ics 440f153780ac5e215a8c82a231b9a71d 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaa aaaaa aa Aaaaaaaaa, aa Aaaaa+Aaaa aa aaa Aaaaa\r\nDTSTART;VALUE=DATE:20070628\r\nDTEND;VALUE=DATE:20070629\r\nDTSTAMP:20070613T112659\r\nDESCRIPTION:\r\n -A.A. Aaaaaaaöaaaaaa aaa Aaaaaaaaa Aaaaaaaaa (aaaaaa)\\n-\\n\\n\r\nUID:9b5a5deb-4a87-dd24-e5c7-44b76cbb8d27\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1136 1126 \N 12 /user3/utf8/90fcebac-9dd4-a184-25a6-b74878a72b87.ics cd0770e5af4c6600c0ba1e0cb6d14bbf 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaaaaaa\r\nDTSTART:20070627T154500\r\nDTEND:20070627T234500\r\nDTSTAMP:20070613T112659\r\nLOCATION:Aaaaaaaaa\r\nUID:90fcebac-9dd4-a184-25a6-b74878a72b87\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1137 1126 \N 12 /user3/utf8/d36476c4-b33b-e794-6171-adafba7f928c.ics 467515b08c8cf3275a3e2f4c470a11de 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaaaaa aaa AaaaAaaaaa-Aaaaaaa\r\nDTSTART;VALUE=DATE:20070616\r\nDTEND;VALUE=DATE:20070617\r\nDTSTAMP:20070613T112700\r\nUID:d36476c4-b33b-e794-6171-adafba7f928c\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1138 1126 \N 12 /user3/utf8/f4874366-9bae-5f84-51a2-56a40c8d906a.ics 5c2d4e53bf69fbd7a22e80d32c5bdfdf 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaa Aaaaaa\r\nDTSTART;VALUE=DATE:20070615\r\nDTEND;VALUE=DATE:20070618\r\nDTSTAMP:20070613T112700\r\nUID:f4874366-9bae-5f84-51a2-56a40c8d906a\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1139 1126 \N 12 /user3/utf8/6461f988-0dcb-f7e4-d14e-b23cfc544e2d.ics 391758fb9d17216d90356de1da9f8b7e 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaa aa aaa Aüaaaa aaa Aaa aaa Aaaa\r\nDTSTART;VALUE=DATE:20070614\r\nDTEND;VALUE=DATE:20070622\r\nDTSTAMP:20070613T112700\r\nUID:6461f988-0dcb-f7e4-d14e-b23cfc544e2d\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1140 1126 \N 12 /user3/utf8/6bd0581f-f560-15b4-5d53-f384cc3c7e8c.ics e502d151e0e1dd31cdc9a3990c5642af 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaaaa\r\nDTSTART:20070613T180000\r\nDTEND:20070613T203000\r\nDTSTAMP:20070613T112700\r\nUID:6bd0581f-f560-15b4-5d53-f384cc3c7e8c\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1141 1126 \N 12 /user3/utf8/bf1e3dfd-8de6-c164-1daf-5a244a6aa765.ics 4717a2de233813555f030a2aa42909fa 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaaaa aaa Aaaa\r\nDTSTART:20070613T100000\r\nDTEND:20070613T111000\r\nDTSTAMP:20070613T112700\r\nUID:bf1e3dfd-8de6-c164-1daf-5a244a6aa765\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1142 1126 \N 12 /user3/utf8/4a4244de-36a3-f0e4-edc0-1997bf7c6723.ics c31e6d72d343de1a28702d11a79ab782 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaaaa\r\nDTSTART:20070612T180000\r\nDTEND:20070612T200000\r\nDTSTAMP:20070613T112700\r\nUID:4a4244de-36a3-f0e4-edc0-1997bf7c6723\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1143 1126 \N 12 /user3/utf8/7090de53-1d5d-1294-2d94-0f216633c6fe.ics 2d33d3ee10c87bd0bea30c0c48fbed86 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:AaaAaa11-Aaaaaaaaaaäaaaaaaaaa\r\nDTSTART:20070612T180000\r\nDTEND:20070612T210000\r\nDTSTAMP:20070613T112700\r\nCATEGORIES:Aaaaaaaaaäa Aaaaaaaaa\r\nUID:7090de53-1d5d-1294-2d94-0f216633c6fe\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1144 1126 \N 12 /user3/utf8/6f1254c9-d1f7-33b4-5147-0f9ee049ad6e.ics b58e6cbc780572d43cd4cb1f1138a75b 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaa aaa AaaAaa-Aaaaaaa\r\nDTSTART:20070612T180000\r\nDTEND:20070612T183000\r\nDTSTAMP:20070613T112701\r\nLOCATION:AaaAaa-Aaaa aaa Aaaaaaaaa\r\nCATEGORIES:Aaaaaaaaaäa Aaaaaaaaa\r\nUID:6f1254c9-d1f7-33b4-5147-0f9ee049ad6e\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1145 1126 \N 12 /user3/utf8/fed2ad70-ba7f-eeb4-917e-e1018b820cff.ics 3877af7d98140b8135447e5b1f059454 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaa Aaaaa Aaaaaa aaaaaaaaa\r\nDTSTART:20070612T160000\r\nDTEND:20070612T172000\r\nDTSTAMP:20070613T112701\r\nLOCATION:Aaa Aaaaaa\r\nUID:fed2ad70-ba7f-eeb4-917e-e1018b820cff\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1146 1126 \N 12 /user3/utf8/7dd107e1-72b5-a5f4-59f1-b61cfc6bdc5f.ics d8745d71ade4f40192f0e492165df0b6 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaa aaa Aaaaa aa Aaaaaaaaaaaaaaa\r\nDTSTART:20070612T110000\r\nDTEND:20070612T115000\r\nDTSTAMP:20070613T112701\r\nCATEGORIES:Aaaaaaaaaäa Aaaaaaaaa\r\nUID:7dd107e1-72b5-a5f4-59f1-b61cfc6bdc5f\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1147 1126 \N 12 /user3/utf8/e5ad0205-ad9b-ab44-8dd9-69b1202ccdc5.ics 633d1ae644bc6326819013db9cccf019 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaa aaaaaaaaaaaa\r\nDTSTART:20070614T100000\r\nDTEND:20070614T110000\r\nDTSTAMP:20070613T112701\r\nCATEGORIES:Aaaaaäaaaaaa\r\nUID:e5ad0205-ad9b-ab44-8dd9-69b1202ccdc5\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1148 1126 \N 12 /user3/utf8/4043c1ab-e231-e1f4-a1ee-0fe80db05297.ics 1b7a25cd7cea42ebbb408df1c098635e 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:AA/Aaaaaa Aa Aaaaaaa 1.1.1 aaaaaaaaaa (Aaaaa Aaaa Aaaaa)\r\nDTSTART:20070611T180000\r\nDTEND:20070611T181500\r\nDTSTAMP:20070613T112702\r\nCATEGORIES:Aaaaaa Aaaaaaa\r\nUID:4043c1ab-e231-e1f4-a1ee-0fe80db05297\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1149 1126 \N 12 /user3/utf8/4147afca-79cf-b304-95f0-dce424b3cabd.ics c4a72d8fed8c7ba57fd4ee9ca1ff7c14 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Üaaaa aaaaaaaaa aaa\r\nDTSTART:20070611T160000\r\nDTEND:20070611T180000\r\nDTSTAMP:20070613T112702\r\nUID:4147afca-79cf-b304-95f0-dce424b3cabd\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1150 1126 \N 12 /user3/utf8/286c0009-1b37-a6d4-455d-57ee009a6f11.ics fafaf462912bc73930f8125dc447b008 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaa aöaaaaaa aaaaaaaa\r\nDTSTART:20070611T140000\r\nDTEND:20070611T180000\r\nDTSTAMP:20070613T112702\r\nDESCRIPTION:Aaaaaaaa Aaaaaa Aaaaaa\\nA-Aaaaa aaaaaaaaaa\\nAa Aaaaaa aaaaaa\r\n a\\nAa Aaaaaaa-Aaaa-Aaaaa aaaaaaaaaa\r\nUID:286c0009-1b37-a6d4-455d-57ee009a6f11\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1151 1126 \N 12 /user3/utf8/d565ea32-b018-77c4-a936-a4765b234b99.ics 7d3e6f3049d6d44c58adc01c133037b5 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaa aaa Aaaa aaa Aaaaa\r\nDTSTART:20070611T131500\r\nDTEND:20070611T134500\r\nDTSTAMP:20070613T112702\r\nUID:d565ea32-b018-77c4-a936-a4765b234b99\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1152 1126 \N 12 /user3/utf8/61644877-af81-13b4-3dd4-f7970bd97de7.ics 24543ca134facd20f29d516053c75d5c 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aa Aaaaaaaaaaa Aaaa Aaaaaaa aa. Aaaaaa aaaaaaaaa Aaaaaaaaaaaaaa\r\nDTSTART:20101124T133000\r\nDTEND:20101124T140000\r\nDTSTAMP:20101123T221234\r\nLOCATION:A1.111\r\nDESCRIPTION:Aaaaaaaaaaaaaaaaaa\\nAaaaaaaaaaaaa\\, aaaa aa aaaa aa aaa Aaaa\r\n aaaaaaaaaaaa aaaaaaa\\, aüaa Aaaaäaaaaa Aaa\\n\\nAaa Aaaaaaa\\, aaaa Aaaaaa \r\n aäaaaaaa Aaaaa Aaaaaaaaaaa\\n\\nAaaaaaaa aaa A-Aaaa aa Aaaaaa Aaaaa AAAAA\r\n AAAA "aaaaaa:aaaaaaa@aaaa.aaa-aaaaaaaaa.aa" aaaaaaa@aaaa.aaa-aaaaaaaaa.a\r\n a aaaa aaa aaa Aaaaaaa\r\nCLASS:PRIVATE\r\nUID:61644877-af81-13b4-3dd4-f7970bd97de7\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1153 1126 \N 12 /user3/utf8/87e9e114-3d26-bd84-dd48-8f6023747656.ics 11e0a641a24438b774ee78c509fd0c98 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaa aaa Aaaaaaäaaaaaaaa Aaaaaaa\r\nDTSTART:20110106T140000\r\nDTEND:20110106T150000\r\nDTSTAMP:20101207T215936\r\nLOCATION:Aaaaaaaaaäa Aaaaaaaaa - A1.111\r\nDESCRIPTION:Aaa Aaaaaa aaaaaa aaaa aaa aaaaa aaaaaaaaaa: \\n* Aaaaaaaaaaa\r\n aaa aaa Aaaaaaa aaa Aaaaaaaaaa - Aaaaa aaa Aaaaaaaaa\\, Aaaaaaaaaaa aaaäß\r\n aaa Aaäaaaaaaaaaaaaaaaaaa \\n* Aaaaa aaa Aaaaaaaaa aaa Aaaaaaaaaaaa aaa \r\n Aaäaaaaaa aaa Aaaaaaaaaaaaaaaa - Aaaaaaaaaaaaaaaaößaa\\, Aaaaaaaaaaaaaaaa\r\n aaa aaaßaa Aaaaaaaaaaaaaaa \\n* A-Aaaaaaaa-Aaaaaaaaa aaa Aaaaaaaaaa\\, Aa\r\n aaaaaaaa Aaaaaaaaaaaaaaaaa aaa aaaAA-Aaaaaaaaa\\, Aaaaaaaaaaaaaaaaa Aaaaa\r\n a \\n* Aaaaaaaaaaaaa aaa Aaaaaaaaaaaaaaaa aaa 11.11.1111 aaa Aaaaaa aaa a\r\n aa Aaaaaaaaa Aaaaaaaaaaaaaa - Aaaaaaaaa Aaaaa\\, Aaaaaaa Aaaaaaaa \\n* Aaa\r\n aaaaaaaaaaa aüa Aaaaaaaaaaaaäaaa\r\nCATEGORIES:AAAA 1111/1111\r\nUID:87e9e114-3d26-bd84-dd48-8f6023747656\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1154 1126 \N 12 /user3/utf8/87860d06-861c-7ba4-312e-909b816a274a.ics 3717223d537cfe6958d32efe73265b6f 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaaaaaa Aaaa\r\nDTSTART:20110108T140000\r\nDTEND:20110109T000000\r\nDTSTAMP:20101230T124751\r\nLOCATION:Aaaaaaa\r\nDESCRIPTION:Aaa aaa aa aaa 1 Aaaaaaa aaaaaa aaaaaa (aaaaaa)\\n- aaaaaa aa\r\n aaaaaaaa\\, aaaaaaa aaaaaaaa\\n- aaaa aaaaaa aaaaaaa\\n- aaa aaaaaaaa aa aa\r\n a aäaaaaaa aaaa aaaaaaaaaa\\n- aa aaaaaa aaaaaaaa aaaa aa aaaa aaaa. aaaa\r\n aaaaa\\, aaaaaaaa aaaaaa aaa aa\r\nUID:87860d06-861c-7ba4-312e-909b816a274a\r\nBEGIN:VALARM\r\nTRIGGER:-PT4320M\r\nDESCRIPTION:Aaaaa: Aaaaaaaaaaa Aaaa\r\nACTION:DISPLAY\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1155 1126 \N 12 /user3/utf8/0df73951-9ac7-ee34-a9c2-d87e1c4a03dc.ics 23964436c5827451ad36ea5b69a7e3bb 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaa - Aaa Aaaaaaa (aaa Aaaaaa aaa Aaaaaa)\r\nDTSTART:20101228T201500\r\nDTEND:20101228T211500\r\nDTSTAMP:20101230T145020\r\nLOCATION:Aaaa Aaaaaaaa\r\nCATEGORIES:Aaaa\r\nUID:0df73951-9ac7-ee34-a9c2-d87e1c4a03dc\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1156 1126 \N 12 /user3/utf8/aac9fa24-3d79-5034-49b2-4753079bf247.ics b3bf3b48ae62fb67f51ffbc05fad42c3 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaa aaaaaaa\r\nDTSTART:20110104T190000\r\nDTEND:20110104T200000\r\nDTSTAMP:20110101T134833\r\nCLASS:PRIVATE\r\nUID:aac9fa24-3d79-5034-49b2-4753079bf247\r\nBEGIN:VALARM\r\nTRIGGER:-PT15M\r\nDESCRIPTION:Aaaaa: Aaaaaaa aaaaaaa\r\nACTION:DISPLAY\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1157 1126 \N 12 /user3/utf8/5eb2c3d3-baed-f874-ad7b-ac797eb89f1d.ics 6932161e7249971f0ab742e149592cfe 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:AA/Aaaaa Aüa aaaaaa Aaaaaaaa aaaaaaaaaaaa\r\nDTSTART:20101230T140000\r\nDTEND:20101230T143000\r\nDTSTAMP:20110101T134922\r\nCATEGORIES:Aaaaaa Aaaaaaa\r\nUID:5eb2c3d3-baed-f874-ad7b-ac797eb89f1d\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1158 1126 \N 12 /user3/utf8/cf670e78-0921-12d4-658c-dd526b702b89.ics bfc877aff3aae2f5e5a55944a7b66102 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:AA/Aaaaa Aaaaaaaaaaaaa aaa Aaa\r\nDTSTART:20101231T112000\r\nDTEND:20101231T140500\r\nDTSTAMP:20110101T135020\r\nDESCRIPTION:Aaaaaaaaaaa aaa Aaaaaäaaa aaaa Aaaaa aaaaaaaaaaaa aaa aaaaäa\r\n a\\nA-Aaaa-Aaaaaaaa aaa Aaaa Aaaaaaaa aaa aaa aaaa aaa Aaaa Aaaaüaaa üaaa\r\n aaaaaa\\nAaaaaaa aaa Aaaaaaaaaaaaaaaaa aa aaa Aaaaaaaa aaaa Aaaaaaaaa aaa\r\n A-Aaaaa aaaaaaaaaa\\nAaa Aaaa Aaaaaaaa aaaaaaaaaa aaa Aaaaaaaaa aaaaaaaa\r\n a\\nAaaaaaaaaaaaaaaa Aaaaaaaa\r\nCATEGORIES:Aaaaaa Aaaaaaa\r\nUID:cf670e78-0921-12d4-658c-dd526b702b89\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1159 1126 \N 12 /user3/utf8/1494f18e-5c2d-7f34-9dc1-be23ad5de5b2.ics 90cba392ce9457aefd117543b3a4071a 2011-11-12 18:01:29.65711+13 2011-11-12 18:01:29.65711+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSUMMARY:Aaaaaaa aaa aaa AAA\\, Aaaaa Aaaaaaaa aaa Aaaa aa aaa Aaaaaaa aaa\r\n Aaaaaaaaaaaaaaaaaaaaaaaaa aaa Aaaaaaaaaa aaa Aaaaaaaaaa aa aaaaaaaaaa\r\nDTSTART:20110111T140000\r\nDTEND:20110111T160000\r\nDTSTAMP:20110111T220245\r\nLOCATION:Aaaaaaaaaäa Aaaaaaaaa - AAA, Aüaa aaa Aaaa Aaaaaa\r\nCATEGORIES:AAAA 1111/1111\r\nUID:1494f18e-5c2d-7f34-9dc1-be23ad5de5b2\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 12 1160 1126 \N 12 /user3/home/55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB.ics c215044a2fb4c9b2f24f5f558b1cf098 2011-11-12 18:01:30.084083+13 2011-11-12 18:01:30.084083+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSEQUENCE:3\r\nTRANSP:OPAQUE\r\nUID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB\r\nDTSTART;TZID=Europe/Helsinki:20081025T133000\r\nDTSTAMP:20081024T200745Z\r\nRRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12\r\nSUMMARY:Irregular meeting for User 3\r\nCREATED:20081024T200734Z\r\nDTEND;TZID=Europe/Helsinki:20081025T143000\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Helsinki\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19810329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nTZNAME:EEST\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19961027T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nTZNAME:EET\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 12 1161 12 \N 12 /user3/home/174F9C2A-1223-40C4-9E06-6E91F2EA9491.ics 6cc47e929c65c2342a578dcba09a2492 2011-11-12 18:01:30.084083+13 2011-11-12 18:01:30.084083+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSEQUENCE:2\r\nTRANSP:OPAQUE\r\nUID:174F9C2A-1223-40C4-9E06-6E91F2EA9491\r\nDTSTART;TZID=Europe/Helsinki:20081024T084500\r\nDTSTAMP:20081025T112653Z\r\nSUMMARY:Dentist\\'s Council meeting\r\nRRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR\r\nCREATED:20081025T112648Z\r\nDTEND;TZID=Europe/Helsinki:20081024T113000\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Helsinki\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19810329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nTZNAME:EEST\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19961027T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nTZNAME:EET\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 12 1162 12 \N 13 /user4/home/KOrganizer-25397773.546.ics 230ac060f04ac274a6582d68820f72b9 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VTODO\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:14495745\r\nX-PILOTSTAT:0\r\nCREATED:20060320T200030Z\r\nUID:KOrganizer-25397773.546\r\nSEQUENCE:1\r\nLAST-MODIFIED:20070124T213510Z\r\nSUMMARY:Event at 2006-03-22 22:45:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDUE:20060321T230000Z\r\nDTSTART:20060322T104500Z\r\nCOMPLETED:20060323T083800Z\r\nPERCENT-COMPLETE:100\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT15M\r\nEND:VALARM\r\nEND:VTODO\r\nEND:VCALENDAR\r\n VTODO 13 1163 13 \N 13 /user4/home/libkcal-752176592.682.ics 0c82a3f74a46e9e671f9449bd5d5bf3d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VTODO\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:2\r\nX-PILOTSTAT:0\r\nCREATED:20061203T011420Z\r\nUID:libkcal-752176592.682\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213510Z\r\nDESCRIPTION:To register your Palm™ handheld electronically\\, you must ha\r\n ve an Internet connection or a modem connected to your computer.\\n\\nSpec\r\n ial rewards are available only for registered users:\\n\\n- Discounts fro\r\n m Palm™ Software Connections \\n- Update and upgrade information\\n\\nFor\r\n more information\\, go to http://productreg.palm.com.\\n\r\nSUMMARY:Don't forget to register!\r\nCLASS:PUBLIC\r\nPRIORITY:1\r\nPERCENT-COMPLETE:0\r\nEND:VTODO\r\nEND:VCALENDAR\r\n VTODO 13 1164 13 \N 13 /user4/home/KOrganizer-1211065846.551.ics 9720fb757dfba168356870670b4ec7e0 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453913\r\nX-PILOTSTAT:0\r\nCREATED:20070217T230020Z\r\nUID:KOrganizer-1211065846.551\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070221T200044Z\r\nSUMMARY:Event at 2007-03-21 19:15:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070321T071500Z\r\nDTEND:20070321T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1165 13 \N 13 /user4/home/KOrganizer-1288241059.115.ics 155d78907b8af30e579fe8bde5d83fa1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451847\r\nX-PILOTSTAT:0\r\nCREATED:20050729T192225Z\r\nUID:KOrganizer-1288241059.115\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2005-07-30 07:30:00\r\nLOCATION:test\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050729T193000Z\r\nDTEND:20050729T194500Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT1M\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1166 13 \N 13 /user4/home/libkcal-589255590.706.ics 0e865e3b3c1d4bb4fcc6479aca37ae1d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451846\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-589255590.706\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2002-09-11 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020910T160000Z\r\nDTEND:20020910T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1167 13 \N 13 /user4/home/libkcal-1353942805.140.ics 21d423489c5db8aafaaf7aef78cfc456 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451845\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1353942805.140\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2002-09-30 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020930T063000Z\r\nDTEND:20020930T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1168 13 \N 13 /user4/home/libkcal-639274358.130.ics adb007edba32c5cd9ec44e6610363747 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451844\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-639274358.130\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2002-11-02 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021101T130000Z\r\nDTEND:20021101T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1169 13 \N 13 /user4/home/libkcal-1052165538.720.ics 25394bbbacf627675f49c4a7a10b6013 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451843\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1052165538.720\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2002-11-21 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021120T160000Z\r\nDTEND:20021120T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1170 13 \N 13 /user4/home/libkcal-130822969.932.ics b6d4200b17ee869d6abfcce32f5f80c0 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451842\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-130822969.932\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2003-12-19 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031219T080000Z\r\nDTEND:20031219T083000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1171 13 \N 13 /user4/home/libkcal-723679733.90.ics 97161030f5dd252c61bd38341100480d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451841\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-723679733.90\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2004-08-06 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040806T070000Z\r\nDTEND:20040806T100000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1172 13 \N 13 /user4/home/libkcal-1123041440.757.ics 7ac70a582abd346dda2d6d398483a848 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451851\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1123041440.757\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Repeating event starting 2002-02-20 05:30:00 by FREQ=DAILY;UNTIL\r\n =20020528T153000Z;INTERVAL=14\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20020528T153000Z;INTERVAL=14\r\nEXDATE;VALUE=DATE:20020402\r\nDTSTART:20020219T163000Z\r\nDTEND:20020219T180000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1173 13 \N 13 /user4/home/libkcal-1686153385.653.ics 529c09bdc31a083254d88929b98ebb78 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451850\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1686153385.653\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2002-09-07 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020907T070000Z\r\nDTEND:20020907T150000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1174 13 \N 13 /user4/home/libkcal-822103046.270.ics bba479212cb1cf65952e96de58f9b493 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451849\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-822103046.270\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2002-11-07 03:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021106T140000Z\r\nDTEND:20021106T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1175 13 \N 13 /user4/home/libkcal-1582464105.706.ics 06ca71191546a67e201477a1bfe7f802 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451848\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1582464105.706\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2003-10-28 03:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031027T140000Z\r\nDTEND:20031027T160000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1176 13 \N 13 /user4/home/libkcal-367014638.77.ics 988f07877b4046fba7c76bdf086a0342 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453235\r\nX-PILOTSTAT:0\r\nCREATED:20070117T074413Z\r\nUID:libkcal-367014638.77\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2007-01-19 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070119T080000Z\r\nDTEND:20070119T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1177 13 \N 13 /user4/home/KOrganizer-1632032952.718.ics 674424c9115973786c9c8beeb127980f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453578\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212719Z\r\nUID:KOrganizer-1632032952.718\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213448Z\r\nSUMMARY:Event at 2007-03-01 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070301T073000Z\r\nDTEND:20070301T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1178 13 \N 13 /user4/home/KOrganizer-1759353555.1036.ics c803bc085c7624ec3d8d9d94f504d890 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451859\r\nX-PILOTSTAT:0\r\nCREATED:20060524T093947Z\r\nUID:KOrganizer-1759353555.1036\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Repeating event starting 2006-09-21 02:00:00 by FREQ=WEEKLY;UNTI\r\n L=20061004T140000Z;BYDAY=WE\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nRRULE:FREQ=WEEKLY;UNTIL=20061004T140000Z;BYDAY=WE\r\nDTSTART:20060920T140000Z\r\nDTEND:20060920T180000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1179 13 \N 13 /user4/home/libkcal-647789764.670.ics b17897ac869d3866e48c149cbf772a7f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451858\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-647789764.670\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Repeating event starting 2003-03-01 05:00:00 by FREQ=DAILY;UNTIL\r\n =20030228T230000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20030228T230000Z\r\nEXDATE;VALUE=DATE:20030301\r\nDTSTART:20030228T160000Z\r\nDTEND:20030228T230000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1180 13 \N 13 /user4/home/libkcal-571584239.862.ics db75e5008812222b48075f38efa0bd95 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451857\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-571584239.862\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Repeating event starting 2003-10-13 20:00:00 by FREQ=DAILY;UNTIL\r\n =20031016T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20031016T220000Z\r\nDTSTART:20031013T070000Z\r\nDTEND:20031016T220000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P3D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1181 13 \N 13 /user4/home/libkcal-1512015300.907.ics 61f8ac3122ab489063d52e6dd45ade5e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451856\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1512015300.907\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Repeating event starting 2002-10-22 19:30:00 by FREQ=DAILY;UNTIL\r\n =20021024T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20021024T220000Z\r\nEXDATE;VALUE=DATE:20021023\r\nDTSTART:20021022T063000Z\r\nDTEND:20021024T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1182 13 \N 13 /user4/home/libkcal-2114344132.965.ics ce3dfed8df34cf88876de223b976f932 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451855\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-2114344132.965\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-09-23 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020923T063000Z\r\nDTEND:20020923T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1183 13 \N 13 /user4/home/libkcal-1424963174.253.ics 07daf30773624e489ab433b3866a0e54 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451854\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1424963174.253\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-11-06 04:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021105T153000Z\r\nDTEND:20021105T163000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1184 13 \N 13 /user4/home/libkcal-334227107.122.ics 901fcbff7ba9346a2d77f931249cb0d3 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451853\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-334227107.122\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-12-04 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021204T073000Z\r\nDTEND:20021204T133000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1185 13 \N 13 /user4/home/libkcal-680720714.1001.ics 26dff07bc7d7e532b61415061d9f11e6 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451852\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-680720714.1001\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2004-02-25 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040224T130000Z\r\nDTEND:20040224T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1186 13 \N 13 /user4/home/KOrganizer-550940693.954.ics c1c81c78aa9b7b1c6b0534111d5e9fe3 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453587\r\nX-PILOTSTAT:0\r\nCREATED:20070124T213116Z\r\nUID:KOrganizer-550940693.954\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2007-04-10 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070410T063000Z\r\nDTEND:20070410T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1187 13 \N 13 /user4/home/libkcal-2066319147.664.ics 31395d107cf657f92b2b13b78a2a150b 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451868\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-2066319147.664\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-03-06 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020306T090000Z\r\nDTEND:20020306T100000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1188 13 \N 13 /user4/home/libkcal-429195916.943.ics 5d3347a345bc59233202dad2a3334914 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451867\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-429195916.943\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-04-26 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020425T120000Z\r\nDTEND:20020425T123000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1189 13 \N 13 /user4/home/libkcal-744514207.96.ics 299c5281ad9dc3f78d11d769c599eb88 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451866\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-744514207.96\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-11-01 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021101T073000Z\r\nDTEND:20021101T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1190 13 \N 13 /user4/home/libkcal-142621045.201.ics 96a9bfac2d4ea613ecf395444f1a23df 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451865\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-142621045.201\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-11-05 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021105T073000Z\r\nDTEND:20021105T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1191 13 \N 13 /user4/home/libkcal-1989318571.454.ics c642e1bf4ddf0e9924cd2e9ccc4b01e6 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451864\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1989318571.454\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2003-01-06 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030106T090000Z\r\nDTEND:20030106T100000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1192 13 \N 13 /user4/home/libkcal-724373582.591.ics 31bb2c269b972deb0f5ee728d833eea1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451863\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-724373582.591\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2003-01-28 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030128T090000Z\r\nDTEND:20030128T100000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1193 13 \N 13 /user4/home/libkcal-481358493.847.ics fb0a99bfcca2ab96dec945f8ab896974 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451862\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-481358493.847\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2003-05-07 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030506T160000Z\r\nDTEND:20030506T200000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1194 13 \N 13 /user4/home/libkcal-2065263089.283.ics ec5b1718a35e85c0f4a763a356b1d900 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451861\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-2065263089.283\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2003-08-26 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030825T120000Z\r\nDTEND:20030825T123000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1195 13 \N 13 /user4/home/libkcal-1665923076.160.ics 6d660ae42add1ff3325886a4e4f68d95 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451860\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-1665923076.160\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2004-09-10 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040909T170000Z\r\nDTEND:20040909T200000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1196 13 \N 13 /user4/home/libkcal-1110641771.1024.ics eb602cfae7ffc07d26576453ea09afaf 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451877\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1110641771.1024\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Repeating event starting 2005-02-02 05:00:00 by FREQ=WEEKLY;UNTI\r\n L=20050322T160000Z;BYDAY=TU\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20050322T160000Z;BYDAY=TU\r\nDTSTART:20050201T160000Z\r\nDTEND:20050201T190000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1197 13 \N 13 /user4/home/libkcal-1321212322.195.ics 581a7ea44b3d96d61b1be6f7343394ad 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451876\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-1321212322.195\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Repeating event starting 2004-08-03 00:00:00 by FREQ=DAILY;UNTIL\r\n =20040804\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20040804\r\nDTSTART;VALUE=DATE:20040803\r\nDTEND;VALUE=DATE:20040804\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1198 13 \N 13 /user4/home/libkcal-959318604.221.ics 486593c854fdef168598a58565cd2b8c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451875\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-959318604.221\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-08-28 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020827T160000Z\r\nDTEND:20020827T173000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT5M\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1199 13 \N 13 /user4/home/libkcal-1408713853.418.ics 16f4de16ce040ccdc476f39e65367ea9 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451874\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1408713853.418\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-10-07 19:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021007T063000Z\r\nDTEND:20021007T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1200 13 \N 13 /user4/home/libkcal-1077060236.504.ics 1b8fcde822d1363825a774dee918381f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451873\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1077060236.504\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213449Z\r\nSUMMARY:Event at 2002-10-09 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021009T070000Z\r\nDTEND:20021009T080000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1201 13 \N 13 /user4/home/libkcal-1451704381.591.ics 4e3660aa2b2181e32996c903d82baadd 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451872\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1451704381.591\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2002-10-11 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021010T120000Z\r\nDTEND:20021010T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1202 13 \N 13 /user4/home/libkcal-1204424718.88.ics f76c87b00bff40071cb948f36ea9fc05 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451871\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1204424718.88\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2002-12-04 03:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021203T140000Z\r\nDTEND:20021203T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1203 13 \N 13 /user4/home/libkcal-1282397005.581.ics c250e5d48f1af4711ae7b2c03039df7a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451870\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1282397005.581\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2003-09-26 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030925T120000Z\r\nDTEND:20030925T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1204 13 \N 13 /user4/home/libkcal-829569168.688.ics e8a0ce3b527490a32f6eec025c4206ce 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451869\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-829569168.688\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2003-10-22 03:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031021T140000Z\r\nDTEND:20031021T150000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1205 13 \N 13 /user4/home/libkcal-1193972627.889.ics 69b705d511f65514383df84b2e9a58c3 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451882\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1193972627.889\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Repeating event starting 2002-11-26 20:30:00 by FREQ=DAILY;UNTIL\r\n =20021128T230000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20021128T230000Z\r\nEXDATE;VALUE=DATE:20021127\r\nDTSTART:20021126T073000Z\r\nDTEND:20021128T230000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1206 13 \N 13 /user4/home/libkcal-1947424919.1052.ics 3692e34d5008477e49f37a025363aa68 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451881\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1947424919.1052\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Repeating event starting 2005-02-24 22:00:00 by FREQ=DAILY;UNTIL\r\n =20050224T230000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20050224T230000Z\r\nDTSTART:20050224T090000Z\r\nDTEND:20050224T230000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1207 13 \N 13 /user4/home/libkcal-1040913699.828.ics a782b7575d9a9d36aec7d4b8757d181f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451880\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1040913699.828\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2002-09-16 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020916T063000Z\r\nDTEND:20020916T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1208 13 \N 13 /user4/home/libkcal-1294476626.829.ics 9d26031c9aa2e6fa554e952029219d5f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451879\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1294476626.829\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2003-05-03 06:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030502T180000Z\r\nDTEND:20030502T210000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1209 13 \N 13 /user4/home/libkcal-1055008174.109.ics 4f991fdecc8eb03f1a8171b8731bb116 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451878\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1055008174.109\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2003-06-10 17:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030610T050000Z\r\nDTEND:20030610T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1210 13 \N 13 /user4/home/KOrganizer-1396751201.1020.ics deae3b563fc138dc046a3e1b8cc8f7ba 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453611\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212947Z\r\nUID:KOrganizer-1396751201.1020\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2007-03-20 19:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070320T073000Z\r\nDTEND:20070320T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1211 13 \N 13 /user4/home/KOrganizer-342324400.1065.ics 5c2f7f6194bb33a6693bcb24a8836cd1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451887\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195953Z\r\nUID:KOrganizer-342324400.1065\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2005-12-05 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051205T070000Z\r\nDTEND:20051205T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1212 13 \N 13 /user4/home/libkcal-1811699916.176.ics 6f09b9384fdc3a2f8eaf9afb165c8157 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451886\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1811699916.176\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2002-10-01 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020930T120000Z\r\nDTEND:20020930T133000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1213 13 \N 13 /user4/home/libkcal-208850055.487.ics 3f8107a0ae24ba1e20f1b42bcf782af1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451885\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-208850055.487\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2002-10-09 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021008T120000Z\r\nDTEND:20021008T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1214 13 \N 13 /user4/home/libkcal-1710734567.933.ics 14e375587c4a6a5d512e12e268f425d7 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451884\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1710734567.933\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2003-05-14 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030514T080000Z\r\nDTEND:20030514T083000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1215 13 \N 13 /user4/home/libkcal-1176148155.421.ics 6ad6c4fe43eb7e39fb3927b310db582e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451883\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1176148155.421\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2003-09-04 00:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030903T123000Z\r\nDTEND:20030903T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1216 13 \N 13 /user4/home/KOrganizer-1532096742.930.ics e326fd2166baab8d3dbd39191c453ef3 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451893\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195032Z\r\nUID:KOrganizer-1532096742.930\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2005-10-24 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051024T060000Z\r\nDTEND:20051024T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1217 13 \N 13 /user4/home/KOrganizer-1625124712.125.ics 5186792e2862a2c676577c050ba1052d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451892\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194920Z\r\nUID:KOrganizer-1625124712.125\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2005-10-11 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051011T060000Z\r\nDTEND:20051011T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1218 13 \N 13 /user4/home/libkcal-1541763920.239.ics 89a0b30503b977d97e99507ed99789ab 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451891\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-1541763920.239\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Repeating event starting 2004-09-16 00:00:00 by FREQ=DAILY;UNTIL\r\n =20040917\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20040917\r\nDTSTART;VALUE=DATE:20040916\r\nDTEND;VALUE=DATE:20040917\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1219 13 \N 13 /user4/home/libkcal-1653269400.152.ics 500fc9149b75b13e68e798cc18a0e849 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451890\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1653269400.152\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2002-08-27 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020826T120000Z\r\nDTEND:20020826T133000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT1H\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1220 13 \N 13 /user4/home/libkcal-1192146868.794.ics d262101ef636779ccb302d9e44d2ab9e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451889\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1192146868.794\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2003-05-01 00:15:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030430T121500Z\r\nDTEND:20030430T131500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1221 13 \N 13 /user4/home/libkcal-1022004810.636.ics 7df51ee52dc8a522183e1a6924c58d9c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451888\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1022004810.636\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2003-10-17 07:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031016T180000Z\r\nDTEND:20031016T210000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1222 13 \N 13 /user4/home/KOrganizer-269370179.1064.ics 61ae1ebb427cf785755b872f803f6e28 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453623\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212922Z\r\nUID:KOrganizer-269370179.1064\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2007-03-15 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070315T073000Z\r\nDTEND:20070315T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1223 13 \N 13 /user4/home/KOrganizer-1560165065.218.ics 19b20c2aa413e53b7abda979ab715d95 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451899\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195928Z\r\nUID:KOrganizer-1560165065.218\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213450Z\r\nSUMMARY:Event at 2005-12-02 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051202T070000Z\r\nDTEND:20051202T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1224 13 \N 13 /user4/home/libkcal-881600230.996.ics 3434ecc54d6bef8fddc8e7d72479090e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451898\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-881600230.996\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Repeating event starting 2003-05-30 20:00:00 by FREQ=DAILY;UNTIL\r\n =20030530T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20030530T220000Z\r\nDTSTART:20030530T080000Z\r\nDTEND:20030530T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1225 13 \N 13 /user4/home/libkcal-1959579499.495.ics 6c138109003b6cd1891747977b8b4cfe 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451897\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1959579499.495\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2002-09-04 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020904T063000Z\r\nDTEND:20020904T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1226 13 \N 13 /user4/home/libkcal-1675852008.229.ics c662d49e04bcaf704c72121b484fcf1f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451896\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1675852008.229\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2002-10-01 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART;VALUE=DATE:20021001\r\nDTEND;VALUE=DATE:20021002\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1227 13 \N 13 /user4/home/libkcal-2012437282.982.ics 9e70d30e840549edd628186caa3c9985 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451895\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-2012437282.982\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2002-10-29 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021029T073000Z\r\nDTEND:20021029T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1228 13 \N 13 /user4/home/libkcal-532086566.634.ics 4a35a049366d7cd9d54bfdeaef5ea07a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451894\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-532086566.634\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2002-11-19 03:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021118T143000Z\r\nDTEND:20021118T163000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1229 13 \N 13 /user4/home/libkcal-2096827521.784.ics 84d72bce068ca2e95e2ec20708252ff5 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451902\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-2096827521.784\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Repeating event starting 2004-06-16 18:00:00 by FREQ=DAILY;UNTIL\r\n =20040616T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20040616T220000Z\r\nDTSTART:20040616T060000Z\r\nDTEND:20040616T220000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1230 13 \N 13 /user4/home/libkcal-1371307975.524.ics 4f9b077f599ac2f0d40215ddb79d7ab4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451901\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-1371307975.524\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2002-02-26 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020225T130000Z\r\nDTEND:20020225T140000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1231 13 \N 13 /user4/home/libkcal-29501553.142.ics 4d44a6a5303ff48df8bc0f6376ed8244 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451900\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-29501553.142\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2004-09-04 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040904T080000Z\r\nDTEND:20040904T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1232 13 \N 13 /user4/home/libkcal-305027183.821.ics e9d3af266ac2a48e18bcdfa0c0dde086 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453241\r\nX-PILOTSTAT:0\r\nCREATED:20070117T074413Z\r\nUID:libkcal-305027183.821\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2007-01-26 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070126T080000Z\r\nDTEND:20070126T090000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1233 13 \N 13 /user4/home/libkcal-356065993.882.ics 11d05d3c0fa21b2bc1994d2d2cd694e7 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453909\r\nX-PILOTSTAT:0\r\nCREATED:20070221T200043Z\r\nUID:libkcal-356065993.882\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070221T200043Z\r\nSUMMARY:Event at 2007-05-11 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070510T120000Z\r\nDTEND:20070510T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1234 13 \N 13 /user4/home/KOrganizer-519951890.512.ics 7b2123cf0a49e533f067eb131e9d8659 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451906\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195907Z\r\nUID:KOrganizer-519951890.512\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2005-12-01 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051201T070000Z\r\nDTEND:20051201T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1235 13 \N 13 /user4/home/libkcal-1623898273.769.ics 939be5d42a5f4e99aa7fe9e9e1ef7224 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451905\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-1623898273.769\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2002-04-05 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020404T120000Z\r\nDTEND:20020404T140000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1236 13 \N 13 /user4/home/libkcal-677943530.1035.ics b4d463838bd6f4458ee54732e3a24c65 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451904\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-677943530.1035\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2002-09-25 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020925T063000Z\r\nDTEND:20020925T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1237 13 \N 13 /user4/home/libkcal-621613832.230.ics cd33fd5d38225cf8ce4d47b2544b206d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451903\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-621613832.230\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2004-11-12 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20041111T130000Z\r\nDTEND:20041111T150000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1238 13 \N 13 /user4/home/libkcal-1320911446.836.ics 14ee7ad1c3b0d75651412b9b0fd245fe 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451916\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1320911446.836\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Repeating event starting 2002-10-30 20:30:00 by FREQ=WEEKLY;UNTI\r\n L=20021204T073000Z;BYDAY=WE\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20021204T073000Z;BYDAY=WE\r\nDTSTART:20021030T073000Z\r\nDTEND:20021030T131500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1239 13 \N 13 /user4/home/libkcal-247737881.1034.ics 45997576da5119786415dce226748d77 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451915\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-247737881.1034\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Repeating event starting 2005-04-15 18:30:00 by FREQ=WEEKLY;UNTI\r\n L=20050513T063000Z;BYDAY=FR\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20050513T063000Z;BYDAY=FR\r\nDTSTART:20050415T063000Z\r\nDTEND:20050415T113000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1240 13 \N 13 /user4/home/libkcal-145382464.740.ics 7d427eed0d2fc28be3e7a2e3025e6656 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451914\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-145382464.740\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2002-09-11 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020911T063000Z\r\nDTEND:20020911T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1241 13 \N 13 /user4/home/libkcal-817273620.913.ics 3fc436da8c3af0ad289731d64799764a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451913\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-817273620.913\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2002-11-30 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021129T150000Z\r\nDTEND:20021129T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1242 13 \N 13 /user4/home/libkcal-734047853.574.ics 70a7c66830809a6d16831f48c3c6c213 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451912\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-734047853.574\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2003-01-28 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030128T080000Z\r\nDTEND:20030128T090000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1243 13 \N 13 /user4/home/libkcal-1896176446.680.ics a9b86fb081ba6c49d99b413d0fd8e98d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451911\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1896176446.680\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2003-03-18 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030318T080000Z\r\nDTEND:20030318T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1244 13 \N 13 /user4/home/libkcal-45118192.951.ics 392377c9a94b5a11b97b05efa69c4eb0 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451910\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-45118192.951\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2003-05-15 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030515T070000Z\r\nDTEND:20030515T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1245 13 \N 13 /user4/home/libkcal-1465969358.564.ics 207ba11b3819d20f3ef8996ac044c02c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451909\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1465969358.564\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2003-09-25 06:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030924T180000Z\r\nDTEND:20030924T200000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1246 13 \N 13 /user4/home/libkcal-252164306.653.ics 5f36b463ae273ab5337a409ff643effb 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451908\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-252164306.653\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2003-10-21 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031020T120000Z\r\nDTEND:20031020T140000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1247 13 \N 13 /user4/home/libkcal-1225211214.949.ics 269f65757bde65cdbaa899f5e46c3164 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451907\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1225211214.949\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2004-01-26 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040126T080000Z\r\nDTEND:20040126T083000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1248 13 \N 13 /user4/home/KOrganizer-1571060348.340.ics 6bfc465c9e6cf89312abdfd381b47e71 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451922\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194329Z\r\nUID:KOrganizer-1571060348.340\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213451Z\r\nSUMMARY:Event at 2005-09-01 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050901T060000Z\r\nDTEND:20050901T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1249 13 \N 13 /user4/home/libkcal-545492870.973.ics bb29b889140d6825b58455301d5653d1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451921\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-545492870.973\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2002-10-29 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021029T073000Z\r\nDTEND:20021029T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1250 13 \N 13 /user4/home/libkcal-268989763.356.ics 7cc4d2a89876546ca507f740e87c661e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451920\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-268989763.356\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2002-11-07 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021107T073000Z\r\nDTEND:20021107T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1251 13 \N 13 /user4/home/libkcal-223550567.539.ics 22dc3dbfb40bfdaa22d0c00e91efc0e5 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451919\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-223550567.539\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2003-01-27 23:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030127T100000Z\r\nDTEND:20030127T110000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1252 13 \N 13 /user4/home/libkcal-1931226847.404.ics ae880744275b4998ad3801c5c55d5c2c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451918\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1931226847.404\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2003-09-03 02:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030902T143000Z\r\nDTEND:20030902T153000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1253 13 \N 13 /user4/home/libkcal-824353234.758.ics bd5cf29fac9c682236e5dbcc9350caa3 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451917\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-824353234.758\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2003-10-31 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031031T080000Z\r\nDTEND:20031031T083000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1254 13 \N 13 /user4/home/KOrganizer-1241596503.111.ics a68172e3649db56da60feea78462896a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451928\r\nX-PILOTSTAT:0\r\nCREATED:20060320T200205Z\r\nUID:KOrganizer-1241596503.111\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2006-03-24 23:00:00\r\nLOCATION:bhs\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20060324T110000Z\r\nDTEND:20060324T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1255 13 \N 13 /user4/home/KOrganizer-1325946143.757.ics a56d97b8bce94312797fcd9cdd83c927 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451927\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194506Z\r\nUID:KOrganizer-1325946143.757\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2005-09-22 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050922T060000Z\r\nDTEND:20050922T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1256 13 \N 13 /user4/home/libkcal-1171510238.661.ics a3478459f1d1c09b7831fd35d71e2a6c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451926\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1171510238.661\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Repeating event starting 2003-07-11 18:00:00 by FREQ=DAILY;UNTIL\r\n =20030712T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20030712T220000Z\r\nDTSTART:20030711T060000Z\r\nDTEND:20030712T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1257 13 \N 13 /user4/home/libkcal-758088585.406.ics cb22b8a0c0c6db37c5d60fda9dce2a01 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451925\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-758088585.406\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Repeating event starting 2005-01-28 20:00:00 by FREQ=DAILY;UNTIL\r\n =20050129T230000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20050129T230000Z\r\nDTSTART:20050128T070000Z\r\nDTEND:20050129T230000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1258 13 \N 13 /user4/home/libkcal-1063781651.118.ics 32ad49d30c1f7fc07e9b79433e7ec7ff 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451924\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1063781651.118\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2002-08-22 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020822T070000Z\r\nDTEND:20020822T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1259 13 \N 13 /user4/home/libkcal-98921073.921.ics 3b16c76d81a8c81a79bc77207f282c6f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451923\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-98921073.921\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2002-10-26 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021025T120000Z\r\nDTEND:20021025T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1260 13 \N 13 /user4/home/KOrganizer-1016508863.138.ics 2d337497501e04331bba015063651a19 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451933\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195108Z\r\nUID:KOrganizer-1016508863.138\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2005-10-28 19:00:00\r\nLOCATION:kl-111\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051028T060000Z\r\nDTEND:20051028T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1261 13 \N 13 /user4/home/libkcal-1082241187.489.ics c0e2c39f13cf51dc3129c294c28f612e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451932\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-1082241187.489\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2002-02-22 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020221T120000Z\r\nDTEND:20020221T133000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1262 13 \N 13 /user4/home/libkcal-1654956090.979.ics 6680c4b2b72c5aaa87ee9a60861a1fe1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451931\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-1654956090.979\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2002-05-03 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020502T120000Z\r\nDTEND:20020502T140000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1263 13 \N 13 /user4/home/libkcal-1955799109.1003.ics 34d5e1c8b9c0e66e2d0b5d3d43899047 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451930\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1955799109.1003\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2003-05-21 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030520T120000Z\r\nDTEND:20030520T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1264 13 \N 13 /user4/home/libkcal-396989560.1072.ics caa9548a6e0308ff6e1fb716407ef31d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451929\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-396989560.1072\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2004-08-02 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040802T100000Z\r\nDTEND:20040802T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1265 13 \N 13 /user4/home/KOrganizer-1757099750.216.ics 2a915412b47c5827e3fbf97c88f1daab 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451938\r\nX-PILOTSTAT:0\r\nCREATED:20050822T195912Z\r\nUID:KOrganizer-1757099750.216\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2005-08-26 02:00:00\r\nLOCATION:Klareboderne\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050825T140000Z\r\nDTEND:20050825T160000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1266 13 \N 13 /user4/home/libkcal-1399279554.704.ics de6d54c2b006cfe26c2963c449748e06 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451937\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1399279554.704\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Repeating event starting 2003-03-26 19:30:00 by FREQ=WEEKLY;UNTI\r\n L=20030507T063000Z;BYDAY=WE\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20030507T063000Z;BYDAY=WE\r\nEXDATE;VALUE=DATE:20030416\r\nDTSTART:20030326T073000Z\r\nDTEND:20030326T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1267 13 \N 13 /user4/home/libkcal-1379725410.1001.ics c5493fbe6f36c21977ae4cddd327f861 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451936\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1379725410.1001\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2002-09-24 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020923T120000Z\r\nDTEND:20020923T133000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1268 13 \N 13 /user4/home/libkcal-1528853965.493.ics d9506aba8816d7fc57ecdff5d2491a0c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451935\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1528853965.493\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2003-09-18 00:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030917T123000Z\r\nDTEND:20030917T133000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1269 13 \N 13 /user4/home/libkcal-1208863622.915.ics ab8e2befd47a3e1828770506f43fd3f4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451934\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1208863622.915\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2003-12-17 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031216T160000Z\r\nDTEND:20031216T163000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1270 13 \N 13 /user4/home/KOrganizer-1268251613.1081.ics 26f795fcc6741ca898a8f928988d6ec1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451946\r\nX-PILOTSTAT:0\r\nCREATED:20060524T094034Z\r\nUID:KOrganizer-1268251613.1081\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Event at 2006-06-09 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20060608T140000Z\r\nDTEND:20060608T210000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1271 13 \N 13 /user4/home/KOrganizer-1316417293.928.ics 88739e555fe351d23006254e3371d1d4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451945\r\nX-PILOTSTAT:0\r\nCREATED:20060320T200334Z\r\nUID:KOrganizer-1316417293.928\r\nSEQUENCE:2\r\nLAST-MODIFIED:20070124T213452Z\r\nSUMMARY:Repeating event starting 2006-04-05 19:00:00 by FREQ=DAILY;UNTIL\r\n =20060406T070000Z\r\nLOCATION:ballerup\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nRRULE:FREQ=DAILY;UNTIL=20060406T070000Z\r\nDTSTART:20060405T070000Z\r\nDTEND:20060405T220000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1272 13 \N 13 /user4/home/KOrganizer-1032814688.266.ics 896810e29645a166c6f421a0dd1bf7a3 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451944\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194855Z\r\nUID:KOrganizer-1032814688.266\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2005-10-10 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051010T060000Z\r\nDTEND:20051010T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1273 13 \N 13 /user4/home/libkcal-275695243.1018.ics 3c5cb07d7fe140209caa32a0c971ffac 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451943\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-275695243.1018\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2002-09-24 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020923T160000Z\r\nDTEND:20020923T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1274 13 \N 13 /user4/home/libkcal-1909409644.470.ics 4e82f8a7d51f2b52372d6aff2986ca81 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451942\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1909409644.470\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2002-10-09 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021008T110000Z\r\nDTEND:20021008T113000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1275 13 \N 13 /user4/home/libkcal-93108450.1057.ics 15c3c9388bb4b72510643e0af6cd79d4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451941\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-93108450.1057\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2003-05-28 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030528T070000Z\r\nDTEND:20030528T080000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1276 13 \N 13 /user4/home/libkcal-1685650426.600.ics 457f4666e811a2f3a0026292d3b1a4a9 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451940\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1685650426.600\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2003-10-07 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031006T160000Z\r\nDTEND:20031006T200000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1W\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1277 13 \N 13 /user4/home/libkcal-2036447089.264.ics a057b79551081b24c2a6dfdcd06a7615 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451939\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-2036447089.264\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2005-01-17 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050117T090000Z\r\nDTEND:20050117T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1278 13 \N 13 /user4/home/KOrganizer-1531501876.687.ics b716cc2683e0825a723f1502cdb71e15 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451950\r\nX-PILOTSTAT:0\r\nCREATED:20050829T111853Z\r\nUID:KOrganizer-1531501876.687\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2005-09-05 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050905T080000Z\r\nDTEND:20050905T090000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1279 13 \N 13 /user4/home/KOrganizer-400061712.176.ics 3f53cd27fc774a41c42b0b9d8fd44d42 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451949\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195500Z\r\nUID:KOrganizer-400061712.176\r\nSEQUENCE:3\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Repeating event starting 2005-11-22 20:00:00 by FREQ=DAILY;COUNT\r\n =2\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;COUNT=2\r\nDTSTART:20051122T070000Z\r\nDTEND:20051122T230000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1280 13 \N 13 /user4/home/libkcal-40588559.687.ics 8c8381cbfbde619d7606ffdf17e66783 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451948\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-40588559.687\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Repeating event starting 2003-02-12 20:30:00 by FREQ=WEEKLY;UNTI\r\n L=20030319T073000Z;BYDAY=WE\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20030319T073000Z;BYDAY=WE\r\nDTSTART:20030212T073000Z\r\nDTEND:20030212T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1281 13 \N 13 /user4/home/libkcal-1344187686.193.ics 720225e93177b9242132fe680171d50f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451947\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1344187686.193\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2002-10-01 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020930T160000Z\r\nDTEND:20020930T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1282 13 \N 13 /user4/home/libkcal-186613018.608.ics df546e1b5393f1437ca4fe909624bec9 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453234\r\nX-PILOTSTAT:0\r\nCREATED:20070117T074412Z\r\nUID:libkcal-186613018.608\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2007-01-18 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070118T090000Z\r\nDTEND:20070118T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1283 13 \N 13 /user4/home/libkcal-1833164074.354.ics 02fab886f301e7edfb18a3e0799a840c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453908\r\nX-PILOTSTAT:0\r\nCREATED:20070221T200043Z\r\nUID:libkcal-1833164074.354\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070221T200043Z\r\nSUMMARY:Event at 2007-04-12 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070411T120000Z\r\nDTEND:20070411T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1284 13 \N 13 /user4/home/libkcal-589387468.739.ics 29f521785a167da5d53a7c951e3c0bfe 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451962\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-589387468.739\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Repeating event starting 2003-06-17 20:00:00 by FREQ=DAILY;UNTIL\r\n =20030618T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20030618T220000Z\r\nDTSTART:20030617T080000Z\r\nDTEND:20030618T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1285 13 \N 13 /user4/home/libkcal-1081550300.938.ics 31231ddb1244df02f35b60774672557a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451961\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1081550300.938\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2002-10-27 06:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021026T170000Z\r\nDTEND:20021026T173000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1286 13 \N 13 /user4/home/libkcal-1271651172.235.ics e559d37a0cc5991ca26d8eec5ab1809e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451960\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1271651172.235\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2002-11-05 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021105T073000Z\r\nDTEND:20021105T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1287 13 \N 13 /user4/home/libkcal-1439209644.459.ics 7526fb2e11389d187779b8781626da3a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451959\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1439209644.459\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2002-11-12 05:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021111T163000Z\r\nDTEND:20021111T173000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1288 13 \N 13 /user4/home/libkcal-1881284871.807.ics 0889f4bb563307e2613cf334e6acf531 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451958\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1881284871.807\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2002-11-27 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021126T130000Z\r\nDTEND:20021126T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1289 13 \N 13 /user4/home/libkcal-624141615.157.ics e84eab7f1a381515c98a330f7d893232 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451957\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-624141615.157\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2002-12-06 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021205T150000Z\r\nDTEND:20021205T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1290 13 \N 13 /user4/home/libkcal-672191901.245.ics a3c605ab2bf90f31d36777fcaaeb2632 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451956\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-672191901.245\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2002-12-10 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021210T073000Z\r\nDTEND:20021210T110000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1291 13 \N 13 /user4/home/libkcal-1541138818.1074.ics 46d7875351699aa9540058483345c787 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451955\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1541138818.1074\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2003-05-29 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030529T100000Z\r\nDTEND:20030529T200000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1292 13 \N 13 /user4/home/libkcal-1269048507.300.ics 1235236f7781123f86476dd5f021a3fe 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451954\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1269048507.300\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2003-08-26 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030826T070000Z\r\nDTEND:20030826T080000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1293 13 \N 13 /user4/home/libkcal-768755480.671.ics 4312bc919f1839e4c522923ac44efd57 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451953\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-768755480.671\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2003-10-22 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031021T130000Z\r\nDTEND:20031021T140000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1294 13 \N 13 /user4/home/libkcal-19706228.125.ics 7d4ef4e195e64e5e1f6fed7b5bcd77c3 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451952\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-19706228.125\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2004-08-23 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040823T060000Z\r\nDTEND:20040823T070000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1295 13 \N 13 /user4/home/libkcal-1677882372.178.ics 15c37eee01ccb086542747804f307bb4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451951\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-1677882372.178\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2004-09-16 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040915T120000Z\r\nDTEND:20040915T140000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1296 13 \N 13 /user4/home/KOrganizer-631336277.241.ics d44d6dda3b638ea67edff13e3cfb44df 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453695\r\nX-PILOTSTAT:0\r\nCREATED:20070124T213245Z\r\nUID:KOrganizer-631336277.241\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213453Z\r\nSUMMARY:Event at 2007-05-01 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070501T063000Z\r\nDTEND:20070501T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1297 13 \N 13 /user4/home/KOrganizer-1659060362.673.ics 46555a427a041946d682b3d320c3086c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451971\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194651Z\r\nUID:KOrganizer-1659060362.673\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2005-09-27 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050927T060000Z\r\nDTEND:20050927T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1298 13 \N 13 /user4/home/KOrganizer-547039492.851.ics 3ba8dfdb1823334152c6e7d4bf16a7fb 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451970\r\nX-PILOTSTAT:0\r\nCREATED:20050729T192741Z\r\nUID:KOrganizer-547039492.851\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050729T194500Z\r\nDTEND:20050729T214500Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT1M\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1299 13 \N 13 /user4/home/KOrganizer-1099949027.1055.ics 60d206cdb712d5d93061fd6eedbfe516 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451969\r\nX-PILOTSTAT:0\r\nCREATED:20050729T193844Z\r\nUID:KOrganizer-1099949027.1055\r\nSEQUENCE:2\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Repeating event starting 2005-08-09 18:30:00 by FREQ=DAILY;COUNT\r\n =2\r\nLOCATION:Klareboderne\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;COUNT=2\r\nDTSTART:20050809T063000Z\r\nDTEND:20050809T220000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1300 13 \N 13 /user4/home/libkcal-211720587.187.ics fe6c41da1f46c8fed2f493cbb02779fe 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451968\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-211720587.187\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2002-08-28 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020827T120000Z\r\nDTEND:20020827T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1301 13 \N 13 /user4/home/libkcal-548731495.147.ics 7988a857ecb45c3485ca371cda9b785e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451967\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-548731495.147\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2002-11-05 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021104T130000Z\r\nDTEND:20021104T190000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1302 13 \N 13 /user4/home/libkcal-347215494.1039.ics 66a77abdb0beaeb25e22c70f067471bd 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451966\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-347215494.1039\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2003-05-23 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030522T120000Z\r\nDTEND:20030522T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1303 13 \N 13 /user4/home/libkcal-1762813400.161.ics 977ef50122c29d5ed0c9b7599c4b368a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451965\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1762813400.161\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2003-07-07 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030707T100000Z\r\nDTEND:20030707T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1304 13 \N 13 /user4/home/libkcal-1077249209.370.ics 5f0f610b281abda9b85051367f8cc590 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451964\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1077249209.370\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2003-09-02 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030901T120000Z\r\nDTEND:20030901T123000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1305 13 \N 13 /user4/home/libkcal-1201928610.547.ics 64a25b712e47372da1e104bb427aa483 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451963\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1201928610.547\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2003-09-23 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030922T130000Z\r\nDTEND:20030922T140000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1306 13 \N 13 /user4/home/KOrganizer-1138025243.527.ics 87b14929137c7937ad106e191b3869ff 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451976\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195647Z\r\nUID:KOrganizer-1138025243.527\r\nSEQUENCE:1\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Repeating event starting 2005-11-24 20:00:00 by FREQ=DAILY;COUNT\r\n =2\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;COUNT=2\r\nDTSTART:20051124T070000Z\r\nDTEND:20051124T230000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1307 13 \N 13 /user4/home/KOrganizer-1944568617.286.ics 3952d1f167f123aca7e019379228516e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451975\r\nX-PILOTSTAT:0\r\nCREATED:20050729T193755Z\r\nUID:KOrganizer-1944568617.286\r\nSEQUENCE:1\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2005-08-11 23:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050811T110000Z\r\nDTEND:20050811T120000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1308 13 \N 13 /user4/home/libkcal-2074581994.559.ics 64b662dd855a1d3e11c67d6c9180f8a1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451974\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-2074581994.559\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2002-02-26 03:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020225T143000Z\r\nDTEND:20020225T153000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1309 13 \N 13 /user4/home/libkcal-1539789441.581.ics e553c46626116abea6a44f23b2cd03fd 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451973\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1539789441.581\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2002-11-15 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021115T073000Z\r\nDTEND:20021115T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1310 13 \N 13 /user4/home/libkcal-1240533661.810.ics 5b10fa2faf1cff33cb95b787fbe20aa2 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451972\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1240533661.810\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2003-11-06 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031105T130000Z\r\nDTEND:20031105T133000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1311 13 \N 13 /user4/home/libkcal-125650352.185.ics fff3fcbae37b5684fe9d896ee5297236 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453232\r\nX-PILOTSTAT:0\r\nCREATED:20070117T074402Z\r\nUID:libkcal-125650352.185\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2007-01-15 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070115T080000Z\r\nDTEND:20070115T230000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1312 13 \N 13 /user4/home/KOrganizer-738458230.642.ics 74ddd8bd2d6c8e94d553ef0c900fc1b8 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453711\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212258Z\r\nUID:KOrganizer-738458230.642\r\nSEQUENCE:1\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2007-01-30 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070130T073000Z\r\nDTEND:20070130T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1313 13 \N 13 /user4/home/KOrganizer-1734853127.483.ics f013ff1fcf0a7972682ebe026448da45 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453712\r\nX-PILOTSTAT:0\r\nCREATED:20070124T213010Z\r\nUID:KOrganizer-1734853127.483\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2007-03-22 19:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070322T073000Z\r\nDTEND:20070322T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1314 13 \N 13 /user4/home/KOrganizer-6240027.699.ics 83f6e15bd4111db69583d6c76e75b473 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451981\r\nX-PILOTSTAT:0\r\nCREATED:20050826T095902Z\r\nUID:KOrganizer-6240027.699\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2005-09-06 19:30:00\r\nLOCATION:Høje Tåstrup\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050906T073000Z\r\nDTEND:20050906T090000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1315 13 \N 13 /user4/home/KOrganizer-668555287.189.ics 30e312279f83806000068bcca2394183 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451980\r\nX-PILOTSTAT:0\r\nCREATED:20050814T200143Z\r\nUID:KOrganizer-668555287.189\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2005-12-12 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051212T070000Z\r\nDTEND:20051212T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1316 13 \N 13 /user4/home/libkcal-863120668.565.ics a3325c0a0d34fb70e498b3ef2a95692f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451979\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-863120668.565\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2002-09-05 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020905T063000Z\r\nDTEND:20020905T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1317 13 \N 13 /user4/home/libkcal-1780424263.776.ics c527c31fac83c710a58dc4fc54e25922 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451978\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1780424263.776\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2003-04-29 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030428T170000Z\r\nDTEND:20030428T210000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1318 13 \N 13 /user4/home/libkcal-1364406704.107.ics 89336eb83360721fe04603e1f31bb0ac 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451977\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-1364406704.107\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2004-08-19 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040819T070000Z\r\nDTEND:20040819T100000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1319 13 \N 13 /user4/home/KOrganizer-810745804.721.ics e6913a296f87258356efc2118f528e43 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12451990\r\nX-PILOTSTAT:0\r\nCREATED:20050814T200058Z\r\nUID:KOrganizer-810745804.721\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2005-12-08 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051208T070000Z\r\nDTEND:20051208T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1320 13 \N 13 /user4/home/libkcal-765934596.461.ics 79f00f9c411a4e2e122227a92600ba48 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451989\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-765934596.461\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2002-08-31 03:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020830T150000Z\r\nDTEND:20020830T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1321 13 \N 13 /user4/home/libkcal-396229364.599.ics 176ca3709c28d761554c07e4150c335c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451988\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-396229364.599\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213454Z\r\nSUMMARY:Event at 2002-09-06 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020906T063000Z\r\nDTEND:20020906T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1322 13 \N 13 /user4/home/libkcal-2131935622.105.ics 86290cf1bd448acef98cf14555bf3a0d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451987\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-2131935622.105\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-09-27 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020927T063000Z\r\nDTEND:20020927T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1323 13 \N 13 /user4/home/libkcal-1118149605.948.ics 58d56d60de58fac9e3e50eaafd815f72 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451986\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1118149605.948\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-12-02 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021202T073000Z\r\nDTEND:20021202T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1324 13 \N 13 /user4/home/libkcal-2065957537.505.ics 2c32ee220034cb8a9062f7ebf9b41e46 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451985\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-2065957537.505\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2003-01-26 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030125T160000Z\r\nDTEND:20030125T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1325 13 \N 13 /user4/home/libkcal-1880312065.986.ics fe66ec71f7f3ec69be6580810e588ece 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451984\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1880312065.986\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2003-05-16 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030516T060000Z\r\nDTEND:20030516T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1326 13 \N 13 /user4/home/libkcal-1530393784.511.ics 7b3deaba9e1f287c1a23103620bff754 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451983\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1530393784.511\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2003-09-23 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030922T120000Z\r\nDTEND:20030922T130000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1327 13 \N 13 /user4/home/libkcal-1692819609.723.ics f35a0104cd1d9c2ef3e1aeb3bdd9996a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451982\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1692819609.723\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2003-10-30 01:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031029T123000Z\r\nDTEND:20031029T130000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1328 13 \N 13 /user4/home/libkcal-267268802.802.ics 396acc1e3399448c4d52cdb4fee8767c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451996\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-267268802.802\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Repeating event starting 2002-09-13 18:30:00 by FREQ=WEEKLY;UNTI\r\n L=20020920T063000Z;BYDAY=FR\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20020920T063000Z;BYDAY=FR\r\nEXDATE;VALUE=DATE:20020920\r\nDTSTART:20020913T063000Z\r\nDTEND:20020913T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1329 13 \N 13 /user4/home/libkcal-183271552.699.ics e08d24d7d804fc90b9d1c60aa31c9eda 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451995\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-183271552.699\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-03-12 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020311T130000Z\r\nDTEND:20020311T140000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1330 13 \N 13 /user4/home/libkcal-1564156755.83.ics 19836e504dac444b7fc2ee6b6903bd9c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451994\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1564156755.83\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-08-21 19:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020821T073000Z\r\nDTEND:20020821T083000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT3M\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1331 13 \N 13 /user4/home/libkcal-1045090772.930.ics dbbd2e7ba5cfbce2eb1d6515bb6dc08c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451993\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1045090772.930\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-09-18 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020918T063000Z\r\nDTEND:20020918T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1332 13 \N 13 /user4/home/libkcal-1753025426.982.ics 320e46b33fa389b70dcd2ae1e654e14c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451992\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1753025426.982\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-12-03 02:45:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021202T134500Z\r\nDTEND:20021202T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1333 13 \N 13 /user4/home/libkcal-1139684300.385.ics 8384f2e720e4df1e0bbd24637c62894d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451991\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1139684300.385\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-12-18 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021217T150000Z\r\nDTEND:20021217T163000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1334 13 \N 13 /user4/home/KOrganizer-1782181593.838.ics e8172de86b3463fefe0c9c1d41de5e1a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452002\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194541Z\r\nUID:KOrganizer-1782181593.838\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2005-09-23 18:00:00\r\nLOCATION:kl-111\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050923T060000Z\r\nDTEND:20050923T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1335 13 \N 13 /user4/home/libkcal-446662745.838.ics d4606f26cbccef73adb72fb944eb5645 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452001\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-446662745.838\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-04-11 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020410T120000Z\r\nDTEND:20020410T123000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1336 13 \N 13 /user4/home/libkcal-232329512.1034.ics 4f95be919872cf4176d6d82b45245bea 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452000\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-232329512.1034\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-10-31 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021031T073000Z\r\nDTEND:20021031T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1337 13 \N 13 /user4/home/libkcal-388918578.878.ics 4b9e218dc5a3fe24889ee94734d05e9b 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451999\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-388918578.878\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-11-29 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021128T160000Z\r\nDTEND:20021128T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1338 13 \N 13 /user4/home/libkcal-100829294.645.ics b387886ee72b21ca75385e06d91833b1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451998\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-100829294.645\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2003-02-28 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030227T150000Z\r\nDTEND:20030227T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1339 13 \N 13 /user4/home/libkcal-30418358.476.ics d31bff2906a592d4a5002a51edb4be4a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12451997\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-30418358.476\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2003-09-11 23:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030911T110000Z\r\nDTEND:20030911T213000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1340 13 \N 13 /user4/home/libkcal-2074841085.871.ics 9b324292d7c27434303bcd0b31c08fa8 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452009\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-2074841085.871\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2003-06-21 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART;VALUE=DATE:20030621\r\nDTEND;VALUE=DATE:20030622\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1341 13 \N 13 /user4/home/libkcal-234836881.818.ics 03c43059449b513d43c0c0185d203500 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452008\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-234836881.818\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-10-24 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021023T120000Z\r\nDTEND:20021023T133000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1342 13 \N 13 /user4/home/libkcal-1433402917.322.ics e2ce386d0a8bacbadfbb10c106b9f6cb 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452007\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1433402917.322\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-11-07 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021106T160000Z\r\nDTEND:20021106T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1343 13 \N 13 /user4/home/libkcal-1046517717.351.ics d2d1a084600f52de772f5f0a5b45c089 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452006\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1046517717.351\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2002-12-13 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021212T160000Z\r\nDTEND:20021212T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1344 13 \N 13 /user4/home/libkcal-415496577.724.ics 990f19d0014aead241c6ecbf4db6d55d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452005\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-415496577.724\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213455Z\r\nSUMMARY:Event at 2003-03-23 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030323T070000Z\r\nDTEND:20030323T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1345 13 \N 13 /user4/home/libkcal-58675341.127.ics 8a7fa0a3d5eb415c93fdf6eddde8378b 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452004\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-58675341.127\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2003-06-21 00:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030620T123000Z\r\nDTEND:20030620T130000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1346 13 \N 13 /user4/home/libkcal-1804357297.335.ics cd56e34b8d91b9ebd728c3799a22fba9 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452003\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1804357297.335\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2003-09-01 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030831T170000Z\r\nDTEND:20030831T173000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1347 13 \N 13 /user4/home/KOrganizer-701998803.821.ics b489baca346504dbd3744fbf6d66c8bc 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453746\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212556Z\r\nUID:KOrganizer-701998803.821\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2007-02-20 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070220T073000Z\r\nDTEND:20070220T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1348 13 \N 13 /user4/home/libkcal-979542311.1045.ics 2325c515dba82062b8e56bab6a279deb 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453563\r\nX-PILOTSTAT:0\r\nCREATED:20070124T213447Z\r\nUID:libkcal-979542311.1045\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2007-01-23 01:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070122T123000Z\r\nDTEND:20070122T133000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1349 13 \N 13 /user4/home/libkcal-1369467354.953.ics ce7ddb790ddc15a11825600da4a25f07 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452015\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1369467354.953\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Repeating event starting 2003-08-27 18:30:00 by FREQ=WEEKLY;UNTI\r\n L=20031105T073000Z;BYDAY=WE\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20031105T073000Z;BYDAY=WE\r\nEXDATE;VALUE=DATE:20031015\r\nDTSTART:20030827T063000Z\r\nDTEND:20030827T113000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1350 13 \N 13 /user4/home/libkcal-862236580.979.ics 8a7c1f17321e3b683a48482fc4d0d7a1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452014\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-862236580.979\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Repeating event starting 2003-08-25 18:30:00 by FREQ=WEEKLY;UNTI\r\n L=20031103T073000Z;BYDAY=MO\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20031103T073000Z;BYDAY=MO\r\nEXDATE;VALUE=DATE:20031013\r\nDTSTART:20030825T063000Z\r\nDTEND:20030825T113000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1351 13 \N 13 /user4/home/libkcal-814721216.280.ics 50f2d3d4ce435ee2dc32c898af8df3cb 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452013\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-814721216.280\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2002-10-02 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021001T120000Z\r\nDTEND:20021001T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1352 13 \N 13 /user4/home/libkcal-1672206794.625.ics a7e9c2856312f320b29902067758f7aa 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452012\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1672206794.625\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2002-10-11 19:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021011T063000Z\r\nDTEND:20021011T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1353 13 \N 13 /user4/home/libkcal-936783626.511.ics 472d79cd7a27cd3d77008e8325346bf5 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452011\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-936783626.511\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2002-11-14 03:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021113T140000Z\r\nDTEND:20021113T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1354 13 \N 13 /user4/home/libkcal-896129370.1018.ics f472e98b4623af5958ab1e8d3ae11302 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452010\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-896129370.1018\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2004-06-10 19:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040610T073000Z\r\nDTEND:20040610T100000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1355 13 \N 13 /user4/home/KOrganizer-1744515772.739.ics 32bc33ed4c5717d38e817a3670bcd327 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453754\r\nX-PILOTSTAT:0\r\nCREATED:20070124T213149Z\r\nUID:KOrganizer-1744515772.739\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2007-04-12 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070412T063000Z\r\nDTEND:20070412T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1356 13 \N 13 /user4/home/KOrganizer-102081386.996.ics 434d9f897bbd0fed7ebcb2e60b35097d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452024\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195801Z\r\nUID:KOrganizer-102081386.996\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2005-11-28 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051128T070000Z\r\nDTEND:20051128T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1357 13 \N 13 /user4/home/libkcal-2105180231.827.ics 678920a2e38b27b971e847482ded8e7d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452023\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-2105180231.827\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Repeating event starting 2002-09-12 18:30:00 by FREQ=WEEKLY;UNTI\r\n L=20020919T063000Z;BYDAY=TH\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20020919T063000Z;BYDAY=TH\r\nEXDATE;VALUE=DATE:20020919\r\nDTSTART:20020912T063000Z\r\nDTEND:20020912T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1358 13 \N 13 /user4/home/libkcal-340383776.896.ics fbaf2b6752f1f87b185f2e6cfdb6c877 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452022\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-340383776.896\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2002-09-18 02:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020917T143000Z\r\nDTEND:20020917T153000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1359 13 \N 13 /user4/home/libkcal-769882015.651.ics e6b6e4cf41fbb01222c28a56ec12ff4b 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452021\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-769882015.651\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2002-11-19 03:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021118T143000Z\r\nDTEND:20021118T163000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1360 13 \N 13 /user4/home/libkcal-508293985.968.ics 3f73173b597c5d47aa484793a87392d9 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452020\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-508293985.968\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2003-05-16 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030515T160000Z\r\nDTEND:20030515T210000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1361 13 \N 13 /user4/home/libkcal-1741929750.230.ics 8526227b79e07d2390e6b11e1d07906e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452019\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1741929750.230\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2003-08-18 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030818T090000Z\r\nDTEND:20030818T100000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1362 13 \N 13 /user4/home/libkcal-1006121415.248.ics dd89ac44089dfa174e86556f823cf2b7 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452018\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1006121415.248\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2003-08-19 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030819T070000Z\r\nDTEND:20030819T090000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1363 13 \N 13 /user4/home/libkcal-703065367.617.ics c4f6f101881ae2b62356906cd52e4e28 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452017\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-703065367.617\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2003-10-10 03:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031009T140000Z\r\nDTEND:20031009T153000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1364 13 \N 13 /user4/home/libkcal-1949515845.984.ics 037a4b876b71b7916680abc7e908fcca 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452016\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1949515845.984\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2004-02-21 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040220T130000Z\r\nDTEND:20040220T133000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1365 13 \N 13 /user4/home/KOrganizer-1650816570.794.ics 0b814e2590f5ac7a7fe2d901a92a28ae 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452033\r\nX-PILOTSTAT:0\r\nCREATED:20060524T094110Z\r\nUID:KOrganizer-1650816570.794\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2006-06-16 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20060616T100000Z\r\nDTEND:20060616T190000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1366 13 \N 13 /user4/home/libkcal-849984507.747.ics ac4a80cacdf22681a14fb94b841465be 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452032\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-849984507.747\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Repeating event starting 2002-12-05 20:30:00 by FREQ=DAILY;UNTIL\r\n =20021205T230000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20021205T230000Z\r\nDTSTART:20021205T073000Z\r\nDTEND:20021205T230000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1367 13 \N 13 /user4/home/libkcal-552750671.427.ics 408bccf8bdec9fe2a277ba39b3d92d25 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452031\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-552750671.427\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2002-08-31 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020830T120000Z\r\nDTEND:20020830T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1368 13 \N 13 /user4/home/libkcal-79234141.608.ics b0dee38c354789a48064ef1e016bbcd9 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452030\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-79234141.608\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2002-10-11 04:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021010T153000Z\r\nDTEND:20021010T163000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1369 13 \N 13 /user4/home/libkcal-164963697.408.ics 798c72dd68778b62ac7297d618764dca 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452029\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-164963697.408\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213456Z\r\nSUMMARY:Event at 2002-11-12 02:15:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021111T131500Z\r\nDTEND:20021111T141500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1370 13 \N 13 /user4/home/libkcal-1846504379.590.ics 3876aba7cee2113529e82165136f600f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452028\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1846504379.590\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2002-11-15 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021115T073000Z\r\nDTEND:20021115T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1371 13 \N 13 /user4/home/libkcal-159554538.440.ics 23b1eca9d70702353a49afc3ec327a7d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452027\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-159554538.440\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2003-09-08 06:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030907T180000Z\r\nDTEND:20030907T200000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1372 13 \N 13 /user4/home/libkcal-585548585.458.ics 4dd07b865c8f484beae5d527727f2ef7 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452026\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-585548585.458\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2003-09-09 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030908T120000Z\r\nDTEND:20030908T130000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1373 13 \N 13 /user4/home/libkcal-1099622629.520.ics 46519348d73132f485830308705f79b7 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452025\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1099622629.520\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2003-09-23 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030922T120000Z\r\nDTEND:20030922T123000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1374 13 \N 13 /user4/home/KOrganizer-591358863.211.ics 61ed51993e115b86016232acb9f189cb 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453773\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212431Z\r\nUID:KOrganizer-591358863.211\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2007-02-01 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070201T073000Z\r\nDTEND:20070201T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1375 13 \N 13 /user4/home/KOrganizer-129716648.746.ics deb73f8fc0f1a2293eabb454c09f832a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453774\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212642Z\r\nUID:KOrganizer-129716648.746\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2007-02-27 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070227T080000Z\r\nDTEND:20070227T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1376 13 \N 13 /user4/home/KOrganizer-1459780733.285.ics 72d278d5e4bd7a56dec0ffbaf58002ad 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453775\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212806Z\r\nUID:KOrganizer-1459780733.285\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2007-03-06 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070306T073000Z\r\nDTEND:20070306T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1377 13 \N 13 /user4/home/libkcal-1471533825.612.ics a4355d7a336dc5e51cc0cc1efaf5b732 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453907\r\nX-PILOTSTAT:0\r\nCREATED:20070221T200042Z\r\nUID:libkcal-1471533825.612\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070221T200042Z\r\nSUMMARY:Event at 2007-03-07 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070306T130000Z\r\nDTEND:20070306T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1378 13 \N 13 /user4/home/KOrganizer-1869628571.468.ics 2454ed96899c8d2c7668d433d3aaa5be 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452043\r\nX-PILOTSTAT:0\r\nCREATED:20050814T200014Z\r\nUID:KOrganizer-1869628571.468\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2005-12-06 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051206T070000Z\r\nDTEND:20051206T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1379 13 \N 13 /user4/home/KOrganizer-2016497045.275.ics d8a95f149f315c10748381bc369cab90 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452042\r\nX-PILOTSTAT:0\r\nCREATED:20050810T202432Z\r\nUID:KOrganizer-2016497045.275\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2005-08-15 21:00:00\r\nLOCATION:Lærerværelset\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050815T090000Z\r\nDTEND:20050815T110000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1380 13 \N 13 /user4/home/libkcal-2039685585.970.ics 5e521088189ac0a4a4bf1e283a303e22 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452041\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-2039685585.970\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Repeating event starting 2003-10-22 04:00:00 by FREQ=WEEKLY;UNTI\r\n L=20031216T160000Z;BYDAY=TU\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20031216T160000Z;BYDAY=TU\r\nDTSTART:20031021T150000Z\r\nDTEND:20031021T183000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1381 13 \N 13 /user4/home/libkcal-633146427.453.ics 986ac11a665d56ffe7e92ec89d6047a3 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452040\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-633146427.453\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2002-02-21 00:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020220T113000Z\r\nDTEND:20020220T150000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1382 13 \N 13 /user4/home/libkcal-2117633683.908.ics bd1bc833f74dd0c44de0f612386b4787 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452039\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-2117633683.908\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2002-04-24 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020423T120000Z\r\nDTEND:20020423T123000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1383 13 \N 13 /user4/home/libkcal-265144908.324.ics 2b03559e5569eeeb6e17081a33140405 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452038\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-265144908.324\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2002-08-29 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020829T063000Z\r\nDTEND:20020829T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1384 13 \N 13 /user4/home/libkcal-697479598.608.ics 77e14b17cc427d990845b25c3812d59f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452037\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-697479598.608\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2003-02-05 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030205T080000Z\r\nDTEND:20030205T090000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1385 13 \N 13 /user4/home/libkcal-1065457646.865.ics 913cb4d8fb6f0423bbc7bb38ea018b48 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452036\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1065457646.865\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2003-05-08 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030507T140000Z\r\nDTEND:20030507T144500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1386 13 \N 13 /user4/home/libkcal-1571145881.916.ics aff5281889386aca48f078813cd4aa88 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452035\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1571145881.916\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2003-05-14 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030513T120000Z\r\nDTEND:20030513T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1387 13 \N 13 /user4/home/libkcal-719251466.178.ics 7976520b2f9705ec27dbf7e0bfc95e30 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452034\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-719251466.178\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2003-07-26 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030726T060000Z\r\nDTEND:20030726T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1388 13 \N 13 /user4/home/KOrganizer-2081735588.967.ics 755555cf3747dd5e706dfbc9febb1257 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452049\r\nX-PILOTSTAT:0\r\nCREATED:20060227T110149Z\r\nUID:KOrganizer-2081735588.967\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Repeating event starting 2006-05-11 18:00:00 by FREQ=DAILY;UNTIL\r\n =20060514T060000Z\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nRRULE:FREQ=DAILY;UNTIL=20060514T060000Z\r\nDTSTART:20060511T060000Z\r\nDTEND:20060513T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1389 13 \N 13 /user4/home/KOrganizer-2123856648.160.ics aee916bbb510aa907f5e5345ed3a7863 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452048\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194746Z\r\nUID:KOrganizer-2123856648.160\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2005-09-30 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050930T060000Z\r\nDTEND:20050930T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1390 13 \N 13 /user4/home/libkcal-1653920106.332.ics 441873e53468362756da910cdaeee4bc 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452047\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1653920106.332\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2002-10-03 02:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021002T143000Z\r\nDTEND:20021002T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1391 13 \N 13 /user4/home/libkcal-1681129373.546.ics fb8270da122f7bb5ebcb0b01b10cc0ec 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452046\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1681129373.546\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2002-11-14 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021113T160000Z\r\nDTEND:20021113T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1392 13 \N 13 /user4/home/libkcal-1403092089.280.ics 574335f1c548bb96160114a866e15206 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452045\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1403092089.280\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213457Z\r\nSUMMARY:Event at 2002-12-11 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021210T150000Z\r\nDTEND:20021210T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1393 13 \N 13 /user4/home/libkcal-1712337319.1054.ics 18ce21f90d246227479b222ec67dfe3e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452044\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1712337319.1054\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2004-06-28 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040628T063000Z\r\nDTEND:20040628T110000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1394 13 \N 13 /user4/home/KOrganizer-490134801.711.ics 255b5099355c7a2d7e8ce841070663c7 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452053\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194433Z\r\nUID:KOrganizer-490134801.711\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2005-09-20 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050920T060000Z\r\nDTEND:20050920T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1395 13 \N 13 /user4/home/libkcal-36373198.842.ics c8f81cefcca9f9c065e7d2ac62627c64 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452052\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-36373198.842\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-11-28 06:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021127T173000Z\r\nDTEND:20021127T200000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1396 13 \N 13 /user4/home/libkcal-1780538774.1017.ics 16be17d41435f27b644639e416e23066 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452051\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1780538774.1017\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-12-03 04:10:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021202T151000Z\r\nDTEND:20021202T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1397 13 \N 13 /user4/home/libkcal-872967326.863.ics 2e2c312478112b5c5985477c95a9425a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452050\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-872967326.863\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2003-11-29 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031128T130000Z\r\nDTEND:20031128T143000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1398 13 \N 13 /user4/home/KOrganizer-702492225.521.ics 486949f000d02fcccdda9b6b103460b4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453796\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212848Z\r\nUID:KOrganizer-702492225.521\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2007-03-13 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070313T073000Z\r\nDTEND:20070313T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1399 13 \N 13 /user4/home/libkcal-1595089298.730.ics 5c31cedbead966abb2d6460630585f2b 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452063\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1595089298.730\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Repeating event starting 2002-12-03 20:30:00 by FREQ=DAILY;UNTIL\r\n =20021203T230000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20021203T230000Z\r\nEXDATE;VALUE=DATE:20021204\r\nEXDATE;VALUE=DATE:20271231\r\nDTSTART:20021203T073000Z\r\nDTEND:20021203T230000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1400 13 \N 13 /user4/home/libkcal-917472477.1048.ics 6d929714710621190aeb44458c2869a5 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452062\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-917472477.1048\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-08-21 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020821T070000Z\r\nDTEND:20020821T080000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1401 13 \N 13 /user4/home/libkcal-1750177958.774.ics 273437a0c9b5e6a91b298ebadf0fcc11 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452061\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1750177958.774\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-09-12 02:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020911T143000Z\r\nDTEND:20020911T153000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1402 13 \N 13 /user4/home/libkcal-379281985.366.ics 65df031f495d5bc5b1022bf1b623d085 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452060\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-379281985.366\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-10-04 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021004T063000Z\r\nDTEND:20021004T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1403 13 \N 13 /user4/home/libkcal-209808238.453.ics 716f98cca3fe4ccefbd21071db76b797 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452059\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-209808238.453\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-10-08 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021007T120000Z\r\nDTEND:20021007T133000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1404 13 \N 13 /user4/home/libkcal-253794414.697.ics 16b8e3b8c69a85cde56bbf8bed05d058 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452058\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-253794414.697\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2003-03-21 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030320T160000Z\r\nDTEND:20030320T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1405 13 \N 13 /user4/home/libkcal-425860506.92.ics 53220b84e4feec589f2046cbf2052bea 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452057\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-425860506.92\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2003-06-04 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030603T160000Z\r\nDTEND:20030603T200000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1406 13 \N 13 /user4/home/libkcal-1317643479.828.ics 404cd0642c6d33875a3b0a0c11790193 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452056\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1317643479.828\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2003-11-10 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031110T080000Z\r\nDTEND:20031110T170000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1407 13 \N 13 /user4/home/libkcal-937139402.898.ics 04481a757d830238f5ded08951a0460c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452055\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-937139402.898\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2003-12-13 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031212T110000Z\r\nDTEND:20031212T210000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1408 13 \N 13 /user4/home/libkcal-1932174917.273.ics 4d8ed9021e172d40b6a549d26fc995c6 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452054\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-1932174917.273\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2005-01-19 21:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050119T083000Z\r\nDTEND:20050119T090000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1409 13 \N 13 /user4/home/KOrganizer-1395173834.699.ics 033e0613c8522eade0d1133b26359fec 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453807\r\nX-PILOTSTAT:0\r\nCREATED:20070124T213305Z\r\nUID:KOrganizer-1395173834.699\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2007-05-03 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070503T063000Z\r\nDTEND:20070503T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1410 13 \N 13 /user4/home/KOrganizer-1730801416.165.ics 68337bb757bc26d61eadadb99b61ee1f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452073\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195842Z\r\nUID:KOrganizer-1730801416.165\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2005-11-30 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051130T070000Z\r\nDTEND:20051130T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1411 13 \N 13 /user4/home/KOrganizer-406853360.634.ics 1d9ebef3b42f3adae77b1bb61dbf0c81 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452072\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194354Z\r\nUID:KOrganizer-406853360.634\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2005-09-02 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050902T060000Z\r\nDTEND:20050902T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1412 13 \N 13 /user4/home/libkcal-376020341.793.ics 401a32389caa52891fbc7b3919ea9a1e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452071\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-376020341.793\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Repeating event starting 2004-06-02 18:00:00 by FREQ=DAILY;UNTIL\r\n =20040602T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20040602T220000Z\r\nDTSTART:20040602T060000Z\r\nDTEND:20040602T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1413 13 \N 13 /user4/home/libkcal-1989686502.594.ics 18086515d61a5fc33d9c68a0285001e2 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452070\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-1989686502.594\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-03-02 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020301T160000Z\r\nDTEND:20020301T210000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1414 13 \N 13 /user4/home/libkcal-499949909.792.ics 910732cbec997d33743cab5a02883e45 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452069\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-499949909.792\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-09-13 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020912T160000Z\r\nDTEND:20020912T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1415 13 \N 13 /user4/home/libkcal-579646873.861.ics 1e9107760f35313a8a39c999df645611 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452068\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-579646873.861\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-09-17 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020917T063000Z\r\nDTEND:20020917T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1416 13 \N 13 /user4/home/libkcal-628821013.246.ics a8335985a0023c6368b8dbb4fd69ee7f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452067\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-628821013.246\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-10-01 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021001T063000Z\r\nDTEND:20021001T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1417 13 \N 13 /user4/home/libkcal-1595290417.661.ics 71c7deb64c3e246d6921ebd46ab214a2 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452066\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1595290417.661\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-10-14 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021014T080000Z\r\nDTEND:20021014T090000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1418 13 \N 13 /user4/home/libkcal-1783404419.679.ics 98cc31e88775d513cfdf291ab0ac5a10 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452065\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1783404419.679\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213458Z\r\nSUMMARY:Event at 2002-10-21 19:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021021T063000Z\r\nDTEND:20021021T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1419 13 \N 13 /user4/home/libkcal-199912874.835.ics 2972be82fdc6aa8e7d16688411ba8c17 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452064\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-199912874.835\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2002-10-24 03:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021023T143000Z\r\nDTEND:20021023T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1420 13 \N 13 /user4/home/libkcal-125820789.94.ics f1a2fa6e3a868a8d8093b5946cb7439a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453905\r\nX-PILOTSTAT:0\r\nCREATED:20070221T200042Z\r\nUID:libkcal-125820789.94\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070221T200042Z\r\nSUMMARY:Event at 2007-03-06 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070305T130000Z\r\nDTEND:20070305T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1421 13 \N 13 /user4/home/libkcal-928524085.416.ics 53b4b02b96f8a6e34b5d9f553206b036 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452079\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-928524085.416\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nDESCRIPTION:Something or other else\r\nSUMMARY:Event at 2002-02-11 23:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020211T100000Z\r\nDTEND:20020211T113000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1422 13 \N 13 /user4/home/libkcal-2044288932.529.ics a9a2c848f2d1c9d5459ba99c0bae2f75 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452078\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-2044288932.529\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2002-09-05 02:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020904T143000Z\r\nDTEND:20020904T153000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT1H\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1423 13 \N 13 /user4/home/libkcal-1738019068.315.ics 44da48692311080699a31d153bbaae18 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452077\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1738019068.315\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2002-12-12 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021211T130000Z\r\nDTEND:20021211T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1424 13 \N 13 /user4/home/libkcal-1755621387.662.ics ce5ddd69f06efb5ccd16b217b0e07e19 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452076\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1755621387.662\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2003-03-01 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030301T070000Z\r\nDTEND:20030301T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1425 13 \N 13 /user4/home/libkcal-2129031911.882.ics 1e989a3718c0ad52bc01f000ee473909 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452075\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-2129031911.882\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2003-05-08 03:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030507T150000Z\r\nDTEND:20030507T190000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1426 13 \N 13 /user4/home/libkcal-957569344.845.ics 2c8de5233d8d81fd58e51c256b8701ce 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452074\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-957569344.845\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2003-11-13 06:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031112T170000Z\r\nDTEND:20031112T203000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1427 13 \N 13 /user4/home/KOrganizer-236679345.661.ics f926e02466503b78a4f2ed3b7aacfabb 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453914\r\nX-PILOTSTAT:0\r\nCREATED:20070217T225414Z\r\nUID:KOrganizer-236679345.661\r\nSEQUENCE:2\r\nLAST-MODIFIED:20070221T200044Z\r\nSUMMARY:Repeating event starting 2007-03-07 20:30:00 by FREQ=WEEKLY;COUN\r\n T=2;BYDAY=WE\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nRRULE:FREQ=WEEKLY;COUNT=2;BYDAY=WE\r\nDTSTART:20070307T073000Z\r\nDTEND:20070307T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1428 13 \N 13 /user4/home/KOrganizer-1772890621.111.ics b65ee88dc57488dd5f2ac053f1866236 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452085\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194719Z\r\nUID:KOrganizer-1772890621.111\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2005-09-29 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050929T060000Z\r\nDTEND:20050929T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1429 13 \N 13 /user4/home/libkcal-1823278872.713.ics 917a825f3cbbd6c7ed90f737b93f97c4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452084\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1823278872.713\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2002-10-22 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021021T120000Z\r\nDTEND:20021021T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1430 13 \N 13 /user4/home/libkcal-1656896074.730.ics 4262ea91ffd946e6d190b7c5c5c8214a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452083\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1656896074.730\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2002-10-22 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021021T150000Z\r\nDTEND:20021021T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1431 13 \N 13 /user4/home/libkcal-1365613586.755.ics 197a079349c7a7c5590f61d62df17e32 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452082\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1365613586.755\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2002-11-22 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021122T073000Z\r\nDTEND:20021122T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1432 13 \N 13 /user4/home/libkcal-857676503.741.ics e737cfa636bf7c1d264f0e5d6e70a280 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452081\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-857676503.741\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2003-04-25 05:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030424T173000Z\r\nDTEND:20030424T193000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1433 13 \N 13 /user4/home/libkcal-646296168.758.ics 16e9362b76fc7f7dad01afc3a197b5ee 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452080\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-646296168.758\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2003-04-26 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030426T060000Z\r\nDTEND:20030426T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1434 13 \N 13 /user4/home/libkcal-1069926005.477.ics e16ad1c94dda8caf522fb57acf4ea3a9 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453238\r\nX-PILOTSTAT:0\r\nCREATED:20070117T074413Z\r\nUID:libkcal-1069926005.477\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2007-01-22 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070122T073000Z\r\nDTEND:20070122T100000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1435 13 \N 13 /user4/home/KOrganizer-1604341089.409.ics 58d4229726ba16b1b0db7a976ec61ef5 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453831\r\nX-PILOTSTAT:0\r\nCREATED:20070124T212501Z\r\nUID:KOrganizer-1604341089.409\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2007-02-06 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070206T073000Z\r\nDTEND:20070206T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1436 13 \N 13 /user4/home/KOrganizer-226448206.799.ics 029c9c3ad2387a269690d803d606167e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452093\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195309Z\r\nUID:KOrganizer-226448206.799\r\nSEQUENCE:1\r\nLAST-MODIFIED:20070124T213459Z\r\nDESCRIPTION:Review\r\nSUMMARY:Event at 2005-11-11 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051111T070000Z\r\nDTEND:20051111T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1437 13 \N 13 /user4/home/KOrganizer-534221956.209.ics 1ad34075157de4c9dafe107f2f868d69 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452092\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195235Z\r\nUID:KOrganizer-534221956.209\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2005-11-05 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051104T110000Z\r\nDTEND:20051104T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1438 13 \N 13 /user4/home/libkcal-2074181858.934.ics 2ca2894ea623256fab697688a5aace36 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452091\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-2074181858.934\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Repeating event starting 2003-09-18 18:00:00 by FREQ=DAILY;UNTIL\r\n =20030918T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20030918T220000Z\r\nDTSTART:20030918T060000Z\r\nDTEND:20030918T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1439 13 \N 13 /user4/home/libkcal-1135103303.297.ics 9a1ece093f437c7714a23c8a3523aeff 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452090\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1135103303.297\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2002-10-02 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021002T063000Z\r\nDTEND:20021002T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1440 13 \N 13 /user4/home/libkcal-387454150.1052.ics 937a3cca3f9ed0ba1c7f524f6a23712e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452089\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-387454150.1052\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2002-12-03 05:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021202T163000Z\r\nDTEND:20021202T173000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1441 13 \N 13 /user4/home/libkcal-1595454741.811.ics 96e4a82337a7f078a81de8200d8ede04 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452088\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1595454741.811\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2003-05-02 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030502T090000Z\r\nDTEND:20030502T100000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1442 13 \N 13 /user4/home/libkcal-218275606.213.ics 33a64ca5ce42fa5dc806e8d84eb94c16 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452087\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-218275606.213\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2003-08-11 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030811T070000Z\r\nDTEND:20030811T090000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P2D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1443 13 \N 13 /user4/home/libkcal-1579630913.793.ics aee66e06f2f4ea01a2c5b18b93ca61b8 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452086\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1579630913.793\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2003-11-05 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031104T110000Z\r\nDTEND:20031104T113000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P3D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1444 13 \N 13 /user4/home/KOrganizer-370516235.812.ics 02b99b82e741fe8d8753994748e2b96a 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453840\r\nX-PILOTSTAT:0\r\nCREATED:20070124T213050Z\r\nUID:KOrganizer-370516235.812\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nSUMMARY:Event at 2007-03-29 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070329T063000Z\r\nDTEND:20070329T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1445 13 \N 13 /user4/home/KOrganizer-1027531016.315.ics 23f64a02141f6cb8a4a8cde1a18c2152 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452105\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194620Z\r\nUID:KOrganizer-1027531016.315\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213459Z\r\nDESCRIPTION:Review\r\nSUMMARY:Event at 2005-09-26 18:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050926T060000Z\r\nDTEND:20050926T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1446 13 \N 13 /user4/home/KOrganizer-1254693944.298.ics 6d4dd633f151123c96e76f54119b33ae 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452104\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194117Z\r\nUID:KOrganizer-1254693944.298\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Repeating event starting 2005-08-31 18:00:00 by FREQ=WEEKLY;UNTI\r\n L=20051109T070000Z;BYDAY=WE\r\nLOCATION:kl-111\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20051109T070000Z;BYDAY=WE\r\nEXDATE;VALUE=DATE:20051019\r\nDTSTART:20050831T060000Z\r\nDTEND:20050831T100000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1447 13 \N 13 /user4/home/libkcal-363124201.106.ics 84829146efbfa6eab3f79bd32bb90f60 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452103\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-363124201.106\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Repeating event starting 2002-10-28 20:30:00 by FREQ=WEEKLY;UNTI\r\n L=20021202T073000Z;BYDAY=MO\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20021202T073000Z;BYDAY=MO\r\nEXDATE;VALUE=DATE:20021202\r\nDTSTART:20021028T073000Z\r\nDTEND:20021028T131500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1448 13 \N 13 /user4/home/libkcal-774247267.873.ics 8097773effde524bd74ac757da3398d4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452102\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-774247267.873\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2002-04-22 23:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020422T110000Z\r\nDTEND:20020422T133000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1449 13 \N 13 /user4/home/libkcal-1290881671.256.ics ef76173100876bec3cb421fd168eff09 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452110\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1290881671.256\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2002-08-28 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020828T063000Z\r\nDTEND:20020828T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1462 13 \N 13 /user4/home/libkcal-99027505.748.ics c5884e5a5fcf3f2b68944e29f817e403 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452101\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-99027505.748\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2002-10-23 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021022T160000Z\r\nDTEND:20021022T173000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1450 13 \N 13 /user4/home/libkcal-845126012.339.ics 0bc31a7f351d5f06012c515d8dbd34cf 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452100\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-845126012.339\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2002-11-07 06:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021106T170000Z\r\nDTEND:20021106T180000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1451 13 \N 13 /user4/home/libkcal-1682153210.364.ics 9eea2486c95df504b014ee85c7ecd9d0 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452099\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1682153210.364\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2002-11-07 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021107T073000Z\r\nDTEND:20021107T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1452 13 \N 13 /user4/home/libkcal-1912083550.790.ics 9fa03465b232340328a5c32ac1be84cf 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452098\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1912083550.790\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2002-11-23 03:15:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021122T141500Z\r\nDTEND:20021122T151500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1453 13 \N 13 /user4/home/libkcal-2122625345.144.ics a187588b52a71f978f1505e05f6105f7 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452097\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-2122625345.144\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2003-07-06 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030705T160000Z\r\nDTEND:20030705T213000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1454 13 \N 13 /user4/home/libkcal-1391827491.880.ics 01316680894442a832d3087b40b09849 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452096\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1391827491.880\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2003-12-03 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031202T130000Z\r\nDTEND:20031202T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1455 13 \N 13 /user4/home/libkcal-557438505.213.ics 27053f3d7db84cdfbc12ccc52447f79b 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452095\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-557438505.213\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2004-10-02 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20041001T140000Z\r\nDTEND:20041001T150000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1456 13 \N 13 /user4/home/libkcal-1893863902.247.ics 63132eef275493bc83d46976373d7009 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452094\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-1893863902.247\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2005-01-10 23:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050110T103000Z\r\nDTEND:20050110T110000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1457 13 \N 13 /user4/home/KOrganizer-1750028846.678.ics 1b84939d84b972f20c825c15c07a7e0c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452114\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195823Z\r\nUID:KOrganizer-1750028846.678\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2005-11-29 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051129T070000Z\r\nDTEND:20051129T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1458 13 \N 13 /user4/home/KOrganizer-531478213.970.ics 71b43f5506cb041ad82cb790855f9839 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452113\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195147Z\r\nUID:KOrganizer-531478213.970\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2005-10-31 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051031T070000Z\r\nDTEND:20051031T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1459 13 \N 13 /user4/home/libkcal-731296952.678.ics 91bb484a03e127bdcb536f98967a3319 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452112\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-731296952.678\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Repeating event starting 2003-02-10 20:30:00 by FREQ=WEEKLY;UNTI\r\n L=20030317T073000Z;BYDAY=MO\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20030317T073000Z;BYDAY=MO\r\nDTSTART:20030210T073000Z\r\nDTEND:20030210T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1460 13 \N 13 /user4/home/libkcal-998404549.722.ics 7c7ca20b0e5b5425a405878a92a9c2de 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452111\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-998404549.722\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Repeating event starting 2002-12-12 20:30:00 by FREQ=DAILY;UNTIL\r\n =20021212T230000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20021212T230000Z\r\nDTSTART:20021212T073000Z\r\nDTEND:20021212T230000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1461 13 \N 13 /user4/home/libkcal-434321803.401.ics a06e644f07b54bd9f3886256112d1bf0 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452109\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-434321803.401\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2002-10-05 03:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021004T150000Z\r\nDTEND:20021004T160000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1463 13 \N 13 /user4/home/libkcal-1366801637.899.ics 41f52d8b2168892cdf4f6808301fb203 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452108\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1366801637.899\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2003-05-09 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030509T063000Z\r\nDTEND:20030509T110000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1464 13 \N 13 /user4/home/libkcal-1775039090.967.ics 08e33f7b8d666298207352f1fd49a66e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452107\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1775039090.967\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2004-02-06 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040205T130000Z\r\nDTEND:20040205T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1465 13 \N 13 /user4/home/libkcal-657456592.1036.ics a1e3a1b7c0934b55d94fa16f49a77b91 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452106\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-657456592.1036\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2004-06-19 04:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040618T160000Z\r\nDTEND:20040618T210000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1466 13 \N 13 /user4/home/KOrganizer-1964974121.664.ics d658f078e8af63523ed9b138deedcfe0 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12453862\r\nX-PILOTSTAT:0\r\nCREATED:20070124T213032Z\r\nUID:KOrganizer-1964974121.664\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2007-03-27 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070327T063000Z\r\nDTEND:20070327T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1467 13 \N 13 /user4/home/libkcal-1536422870.705.ics 1813710860c7e93e62bd0614d0dc07f4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453911\r\nX-PILOTSTAT:0\r\nCREATED:20070221T200043Z\r\nUID:libkcal-1536422870.705\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070221T200043Z\r\nSUMMARY:Event at 2007-04-20 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070419T120000Z\r\nDTEND:20070419T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1468 13 \N 13 /user4/home/KOrganizer-1313050303.342.ics a9da101a29c7351ef96cf1364ff1a8a1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452119\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195423Z\r\nUID:KOrganizer-1313050303.342\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2005-11-10 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051110T070000Z\r\nDTEND:20051110T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1469 13 \N 13 /user4/home/libkcal-95576125.1061.ics 53edb619bb1991ec451c7c4866a0fe1f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452118\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-95576125.1061\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Repeating event starting 2005-01-31 20:30:00 by FREQ=WEEKLY;UNTI\r\n L=20050314T073000Z;BYDAY=MO\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20050314T073000Z;BYDAY=MO\r\nDTSTART:20050131T073000Z\r\nDTEND:20050131T123000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1470 13 \N 13 /user4/home/libkcal-1695335249.803.ics 1156b2fc30f269a43f6112310f887e88 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452117\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-1695335249.803\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2002-04-08 23:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020408T110000Z\r\nDTEND:20020408T120000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1471 13 \N 13 /user4/home/libkcal-1658848585.634.ics 1720f623399ff14dec3b8073f40dca86 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452116\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1658848585.634\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213500Z\r\nSUMMARY:Event at 2002-09-07 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART;VALUE=DATE:20020907\r\nDTEND;VALUE=DATE:20020908\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1472 13 \N 13 /user4/home/libkcal-1348102428.775.ics 1466f0d8ea9dd66c02d8d586a5271e2c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452115\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1348102428.775\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2003-11-04 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031103T130000Z\r\nDTEND:20031103T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1473 13 \N 13 /user4/home/libkcal-1273950378.671.ics f11c9fecb05abd739859198d36075806 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452125\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1273950378.671\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-09-10 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020910T063000Z\r\nDTEND:20020910T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1474 13 \N 13 /user4/home/libkcal-50908146.556.ics 75894bfd6efb9549a4520ec425d39859 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452124\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-50908146.556\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-10-10 19:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021010T063000Z\r\nDTEND:20021010T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1475 13 \N 13 /user4/home/libkcal-530242634.686.ics ab0da889390ce50cc1f60d9de3e417ea 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452123\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-530242634.686\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-11-19 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021119T073000Z\r\nDTEND:20021119T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1476 13 \N 13 /user4/home/libkcal-1345435026.420.ics a997ae30782ff414e7b1db593476ca8d 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452122\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1345435026.420\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-12-18 05:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021217T163000Z\r\nDTEND:20021217T173000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1477 13 \N 13 /user4/home/libkcal-1810768863.741.ics 7fe9fccd5d41ea37baeb6f39622367bf 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452121\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1810768863.741\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2003-10-30 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20031029T130000Z\r\nDTEND:20031029T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1478 13 \N 13 /user4/home/libkcal-1505368998.256.ics e9c8e4fea41b8c94d1343a60ee536f95 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452120\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-1505368998.256\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2005-01-13 21:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20050113T083000Z\r\nDTEND:20050113T153000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1479 13 \N 13 /user4/home/libkcal-207492094.170.ics 2d4fc66ca6a35d6ca8cc2f64911b01f9 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453240\r\nX-PILOTSTAT:0\r\nCREATED:20070117T074414Z\r\nUID:libkcal-207492094.170\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2007-02-22 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070222T090000Z\r\nDTEND:20070222T110000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1480 13 \N 13 /user4/home/libkcal-43161913.1070.ics f08c11451a5280c347b5e36dc679d160 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452131\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-43161913.1070\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Repeating event starting 2003-03-24 19:30:00 by FREQ=WEEKLY;UNTI\r\n L=20030512T063000Z;BYDAY=MO\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=WEEKLY;UNTIL=20030512T063000Z;BYDAY=MO\r\nEXDATE;VALUE=DATE:20030414\r\nEXDATE;VALUE=DATE:20271231\r\nDTSTART:20030324T073000Z\r\nDTEND:20030324T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1481 13 \N 13 /user4/home/libkcal-1881242561.783.ics f697e0791fba802daaefd47231a1d0fd 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452130\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1881242561.783\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-10-23 19:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021023T063000Z\r\nDTEND:20021023T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1482 13 \N 13 /user4/home/libkcal-1868356274.192.ics 8e59baf8bc1f255b1c1394743c2a9933 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452129\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-1868356274.192\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-12-09 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021209T070000Z\r\nDTEND:20021209T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1483 13 \N 13 /user4/home/libkcal-662090617.196.ics 02262e09c0ac3d19afc67a62b67c8d59 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452128\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-662090617.196\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2003-08-07 01:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030806T130000Z\r\nDTEND:20030806T140000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1484 13 \N 13 /user4/home/libkcal-903236501.352.ics dcc34b89bc486ed6151c85ecacef7daa 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452127\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-903236501.352\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2003-09-01 21:55:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030901T095500Z\r\nDTEND:20030901T100000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1485 13 \N 13 /user4/home/libkcal-8461016.195.ics 4007cff99b9fe96220738ee6884a0f66 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452126\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160958Z\r\nUID:libkcal-8461016.195\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2004-09-21 21:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20040921T093000Z\r\nDTEND:20040921T100000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1486 13 \N 13 /user4/home/KOrganizer-915657925.108.ics aee92128b05ba7e9df894f8048ef96d4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452135\r\nX-PILOTSTAT:0\r\nCREATED:20050814T195211Z\r\nUID:KOrganizer-915657925.108\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2005-11-03 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051103T070000Z\r\nDTEND:20051103T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1487 13 \N 13 /user4/home/libkcal-1034179453.1025.ics d551d5c97b111a96cc32f9c66cf55266 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452134\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1034179453.1025\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-10-31 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021031T073000Z\r\nDTEND:20021031T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1488 13 \N 13 /user4/home/libkcal-1564831085.1069.ics 5ad87da93d270b2fb233171c85fde36e 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452133\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160955Z\r\nUID:libkcal-1564831085.1069\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-12-03 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021203T073000Z\r\nDTEND:20021203T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1489 13 \N 13 /user4/home/libkcal-1650360155.265.ics 9108227822fc80254ccec240ffa5bd3b 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452132\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-1650360155.265\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2003-08-19 21:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030819T090000Z\r\nDTEND:20030819T100000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT5M\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1490 13 \N 13 /user4/home/KOrganizer-1363807535.433.ics e4b580b6f6dbbc5c16eea08e29bcdff5 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452142\r\nX-PILOTSTAT:0\r\nCREATED:20050814T200038Z\r\nUID:KOrganizer-1363807535.433\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2005-12-07 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051207T070000Z\r\nDTEND:20051207T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1491 13 \N 13 /user4/home/libkcal-1900080537.713.ics 1c27bc5b8c7a3cb2b5d61d8deda55f85 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452141\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1900080537.713\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Repeating event starting 2003-04-14 18:00:00 by FREQ=DAILY;UNTIL\r\n =20030420T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20030420T220000Z\r\nDTSTART:20030414T060000Z\r\nDTEND:20030420T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1492 13 \N 13 /user4/home/libkcal-705074019.733.ics 533ce3f8d05604ebd9290125ef831995 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452140\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-705074019.733\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-04-03 23:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020403T110000Z\r\nDTEND:20020403T123000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1493 13 \N 13 /user4/home/libkcal-1753896417.1014.ics 2c13d00e8877d3619ed030de10ea5eeb 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452139\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-1753896417.1014\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-08-08 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART;VALUE=DATE:20020808\r\nDTEND;VALUE=DATE:20020809\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1494 13 \N 13 /user4/home/libkcal-673839817.290.ics 0cb4948d194e939db933a793eabb80ee 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452138\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-673839817.290\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-08-29 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020828T120000Z\r\nDTEND:20020828T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1495 13 \N 13 /user4/home/libkcal-375156206.1070.ics 8aa5170395ef2fc9e7e147d3c6d511d5 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452137\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-375156206.1070\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213501Z\r\nSUMMARY:Event at 2002-09-26 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020926T063000Z\r\nDTEND:20020926T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1496 13 \N 13 /user4/home/libkcal-995462243.318.ics f25630ed1d81319ec30f702a84c3b171 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452136\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-995462243.318\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2003-08-27 01:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030826T133000Z\r\nDTEND:20030826T143000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1497 13 \N 13 /user4/home/libkcal-876798833.981.ics 36a3485153c032a752b34cc3ad6d369f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453910\r\nX-PILOTSTAT:0\r\nCREATED:20070221T200042Z\r\nUID:libkcal-876798833.981\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070221T200042Z\r\nSUMMARY:Event at 2007-03-09 02:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070308T130000Z\r\nDTEND:20070308T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1498 13 \N 13 /user4/home/libkcal-1802748548.853.ics fcadf758dbd9d96a807be50c946e1fa4 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452147\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1802748548.853\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Repeating event starting 2005-01-05 22:00:00 by FREQ=DAILY;UNTIL\r\n =20050106T230000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20050106T230000Z\r\nDTSTART:20050105T090000Z\r\nDTEND:20050106T230000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1499 13 \N 13 /user4/home/libkcal-897641360.629.ics a1e3949ca1af97eae079dc00c46ca85f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452146\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160952Z\r\nUID:libkcal-897641360.629\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2002-03-02 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART;VALUE=DATE:20020302\r\nDTEND;VALUE=DATE:20020303\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1500 13 \N 13 /user4/home/libkcal-679398215.853.ics 59986fa68ef5c13d69b6abf5fc246ce0 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452145\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-679398215.853\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2002-10-25 04:15:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021024T151500Z\r\nDTEND:20021024T161500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1501 13 \N 13 /user4/home/libkcal-1690704588.1077.ics 386f6d9c336998a591640e0be9711004 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452144\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1690704588.1077\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2002-11-01 20:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021101T073000Z\r\nDTEND:20021101T124500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1502 13 \N 13 /user4/home/libkcal-989953154.387.ics 8d389ed7d8265aa0295f6795de84a751 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452143\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160957Z\r\nUID:libkcal-989953154.387\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2003-09-02 22:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030902T100000Z\r\nDTEND:20030902T110000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1503 13 \N 13 /user4/home/KOrganizer-293245651.612.ics d6c6fada59177d6e0416914bb2bf0499 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452152\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194946Z\r\nUID:KOrganizer-293245651.612\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2005-10-13 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051013T060000Z\r\nDTEND:20051013T120000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1504 13 \N 13 /user4/home/KOrganizer-829920097.578.ics f617b1805edcaa85beececb1241dd71c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452151\r\nX-PILOTSTAT:0\r\nCREATED:20050814T194816Z\r\nUID:KOrganizer-829920097.578\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2005-10-03 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051003T060000Z\r\nDTEND:20051003T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1505 13 \N 13 /user4/home/libkcal-1459440544.810.ics 3bd6a05f4eeb9ee0255169f28794ba2f 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452150\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160951Z\r\nUID:libkcal-1459440544.810\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Repeating event starting 2002-09-19 18:00:00 by FREQ=DAILY;UNTIL\r\n =20020919T220000Z\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nRRULE:FREQ=DAILY;UNTIL=20020919T220000Z\r\nDTSTART:20020919T060000Z\r\nDTEND:20020919T220000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1506 13 \N 13 /user4/home/libkcal-606835123.359.ics ef58d9442c02d2492b63ac2fbb12d9aa 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452149\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-606835123.359\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2002-08-30 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020829T120000Z\r\nDTEND:20020829T150000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1507 13 \N 13 /user4/home/libkcal-1090755342.393.ics 432e032a51ef7cb41275d92893c996d2 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452148\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160953Z\r\nUID:libkcal-1090755342.393\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2002-08-30 18:30:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20020830T063000Z\r\nDTEND:20020830T114500Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1508 13 \N 13 /user4/home/libkcal-40337687.1050.ics 340c49e69843b8ce1dda301cf6fb13b1 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12453912\r\nX-PILOTSTAT:0\r\nCREATED:20070221T200043Z\r\nUID:libkcal-40337687.1050\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070221T200043Z\r\nSUMMARY:Event at 2007-05-17 00:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:5\r\nDTSTART:20070516T120000Z\r\nDTEND:20070516T140000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1509 13 \N 13 /user4/home/KOrganizer-1422474157.849.ics a708e5715a8dcfad9b84ccc3b3627e97 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER;CN=User Four:MAILTO:user4@example.net\r\nX-PILOTID:12452155\r\nX-PILOTSTAT:0\r\nCREATED:20050814T200120Z\r\nUID:KOrganizer-1422474157.849\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2005-12-09 20:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20051209T070000Z\r\nDTEND:20051209T130000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1510 13 \N 13 /user4/home/libkcal-1332396888.870.ics 4ce81de5f3340e49da1cee979b8e1c6c 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452154\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160954Z\r\nUID:libkcal-1332396888.870\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nSUMMARY:Event at 2002-10-25 05:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20021024T160000Z\r\nDTEND:20021024T170000Z\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1511 13 \N 13 /user4/home/libkcal-929822560.1022.ics 26da35fd7cc0ca4dd6d09f9d4f7ae720 2011-11-12 18:01:30.744506+13 2011-11-12 18:01:30.744506+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTAMP:20070417T195323Z\r\nORGANIZER:MAILTO:\r\nX-PILOTID:12452153\r\nX-PILOTSTAT:0\r\nCREATED:20050814T160956Z\r\nUID:libkcal-929822560.1022\r\nSEQUENCE:0\r\nLAST-MODIFIED:20070124T213502Z\r\nDESCRIPTION:Something\r\nSUMMARY:Event at 2003-05-21 19:00:00\r\nCLASS:PUBLIC\r\nPRIORITY:3\r\nDTSTART:20030521T070000Z\r\nDTEND:20030521T080000Z\r\nTRANSP:OPAQUE\r\nBEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1512 13 \N 14 /user5/home/naltpirh2vfjfmplmsivuo30t8@google.com.ics 2dac7abaa0d9d26e7b75ed0ce6a2e327 2011-11-12 18:01:33.804275+13 2011-11-12 18:01:33.804275+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100812T161339Z\r\nSEQUENCE:5\r\nUID:naltpirh2vfjfmplmsivuo30t8@google.com\r\nSUMMARY:Tango Night\r\nDESCRIPTION:Never will you see a space glow like a night of Tango at Tea\r\n se.\\nAll dancers welcome!\\n$5 suggested donation\r\nDTSTART;TZID=America/Los_Angeles:20100815T200000\r\nCREATED:20091221T033228Z\r\nDTSTAMP:20100812T161339Z\r\nDURATION:PT3H\r\nLOCATION:\r\nX-VENUE:Tease Restaurant & Bar, corner of 2nd & Main\r\nX-EMAIL-RSVP-UPDATES:true\r\nRRULE:FREQ=MONTHLY;WKST=MO;BYDAY=3SU\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-LIC-LOCATION:America/Los_Angeles\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 14 1513 14 \N 14 /user5/home/v3f2otajsto18em4rom3jd4238@google.com.ics d18adb4d57636f47f71a7e04408806cf 2011-11-12 18:01:33.804275+13 2011-11-12 18:01:33.804275+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSEQUENCE:4\r\nDTSTART;TZID=America/Los_Angeles:20090707T170000\r\nSTATUS:CONFIRMED\r\nDTSTAMP:20090828T083735Z\r\nSUMMARY:Sketch Salone\r\nDTEND;TZID=America/Los_Angeles:20090707T200000\r\nLOCATION:Tease Restaurant & Bar\\, corner of 2nd & Main\r\nRRULE:FREQ=WEEKLY;WKST=SU;INTERVAL=2;UNTIL=20090921T065959Z;BYDAY=MO\r\nDESCRIPTION:Sketch Salone\\, where the artist in you can come to the surf\r\n ace. Live model Hosted by Kevin Christman\\n per bench seat by RSVP or w\r\n elcome to use a table\r\nUID:v3f2otajsto18em4rom3jd4238@google.com\r\nTRANSP:TRANSPARENT\r\nCREATED:20091221T033228Z\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-LIC-LOCATION:America/Los_Angeles\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nSEQUENCE:4\r\nDTSTART;TZID=America/Los_Angeles:20090907T170000\r\nSTATUS:CONFIRMED\r\nDTSTAMP:20090828T083735Z\r\nSUMMARY:Sketch Salone\r\nDTEND;TZID=America/Los_Angeles:20090907T200000\r\nLOCATION:Tease Restaurant & Bar\\, corner of 2nd & Main\r\nDESCRIPTION:Sketch Salone\\, where the artist in you can come to the surf\r\n ace. Live model Hosted by Kevin Christman\\n per bench seat by RSVP or w\r\n elcome to use a table\r\nUID:v3f2otajsto18em4rom3jd4238@google.com\r\nTRANSP:TRANSPARENT\r\nCREATED:20091221T033228Z\r\nRECURRENCE-ID;TZID=America/Los_Angeles:20090914T170000\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 14 1514 14 \N 15 /User Six/home/55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB.ics c215044a2fb4c9b2f24f5f558b1cf098 2011-11-12 18:01:34.048574+13 2011-11-12 18:01:34.048574+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSEQUENCE:3\r\nTRANSP:OPAQUE\r\nUID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB\r\nDTSTART;TZID=Europe/Helsinki:20081025T133000\r\nDTSTAMP:20081024T200745Z\r\nRRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12\r\nSUMMARY:Irregular meeting for User 3\r\nCREATED:20081024T200734Z\r\nDTEND;TZID=Europe/Helsinki:20081025T143000\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Helsinki\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19810329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nTZNAME:EEST\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19961027T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nTZNAME:EET\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 15 1515 15 \N 15 /User Six/home/174F9C2A-1223-40C4-9E06-6E91F2EA9491.ics 9f49231ad46f31932ab26533e99d0d11 2011-11-12 18:01:34.048574+13 2011-11-12 18:01:34.048574+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nSEQUENCE:2\r\nTRANSP:OPAQUE\r\nUID:174F9C2A-1223-40C4-9E06-6E91F2EA9491\r\nDTSTART;TZID=Europe/Helsinki:20081024T084500\r\nDTSTAMP:20081025T112653Z\r\nSUMMARY:Dentist\\'s Council meeting\r\nRRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR\r\nCREATED:20081025T112648Z\r\nDTEND;TZID=Europe/Helsinki:20081024T113000\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Helsinki\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19810329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nTZNAME:EEST\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19961027T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nTZNAME:EET\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nSEQUENCE:1\r\nTRANSP:OPAQUE\r\nUID:174F9C2A-1223-40C4-9E06-6E91F2EA9491\r\nDTSTART;TZID=Bogus Nonstandard Time:20091017T084500\r\nDTSTAMP:20081025T112653Z\r\nSUMMARY:Bogus Nonstandard Meeting\r\nRRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR\r\nCREATED:20081025T112648Z\r\nDTEND;TZID=Bogus Nonstandard Time:20091017T113000\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:Bogus Nonstandard Time\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19810329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nTZNAME:EEST\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19961027T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nTZNAME:EET\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 15 1516 15 \N 11 /user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics f2c974ff51cb52cde0668544deb36380 2011-11-12 18:01:34.318096+13 2011-11-12 18:01:34.318096+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081023T054958Z\r\nLAST-MODIFIED:20081023T055044Z\r\nDTSTAMP:20081023T054958Z\r\nUID:33169d69-2969-4a96-a3e1-2e312b7614e6\r\nSUMMARY:Near Daily Action Meeting\r\nRRULE:FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR\r\nDTSTART;TZID=Pacific/Auckland:20081020T110000\r\nDTEND;TZID=Pacific/Auckland:20081020T113000\r\nX-MOZ-GENERATION:2\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19700927T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1517 11 \N 11 /user2/home/047871e3-6b70-4178-9af8-0ceb50f7b092.ics 58cba7e3fafb6080e85619ea77d08c7a 2011-11-12 18:01:34.318096+13 2011-11-12 18:01:34.318096+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081023T054934Z\r\nLAST-MODIFIED:20081023T055059Z\r\nDTSTAMP:20081023T054934Z\r\nUID:047871e3-6b70-4178-9af8-0ceb50f7b092\r\nSUMMARY:Weekly Project Meeting\r\nRRULE:FREQ=WEEKLY;INTERVAL=1\r\nDTSTART;TZID=Pacific/Auckland:20081020T090000\r\nDTEND;TZID=Pacific/Auckland:20081020T100000\r\nX-MOZ-GENERATION:2\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19700927T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1518 11 \N 11 /user2/home/9429a973-2b13-4b1a-be09-948d75425c45.ics 13249ced6c7527191a003f54f7e3cd25 2011-11-12 18:01:34.318096+13 2011-11-12 18:01:34.318096+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nCREATED:20081023T055115Z\r\nLAST-MODIFIED:20081023T055139Z\r\nDTSTAMP:20081023T055115Z\r\nUID:9429a973-2b13-4b1a-be09-948d75425c45\r\nSUMMARY:Weekly catch-up\r\nRRULE:FREQ=WEEKLY;INTERVAL=1\r\nDTSTART;TZID=Pacific/Auckland:20081024T140000\r\nDTEND;TZID=Pacific/Auckland:20081024T150000\r\nX-MOZ-GENERATION:2\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19700927T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1519 11 \N 11 /user2/home/7d729xc0-0895-012d-124e-002421a2359e.ics 848df16c32fc3ce319083ae84c2603a3 2011-11-12 18:01:34.318096+13 2011-11-12 18:01:34.318096+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20080303T015422Z\r\nSEQUENCE:5\r\nUID:7d729xc0-0895-012d-124e-002421a2359e\r\nSUMMARY:1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday\r\nRRULE:FREQ=MONTHLY;BYDAY=1MO,2TU,3TH,-1FR;INTERVAL=1\r\nDESCRIPTION:An all day event on various days.\r\nDTSTART;TZID=America/Los_Angeles:20081006T000000\r\nCREATED:20080303T015329Z\r\nDTSTAMP:20080303T015422Z\r\nDURATION:P1D\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1520 11 \N 11 /user2/home/bd262d20-1cdb-012d-1264-002421a2359e.ics 671d4ee904be6c16dd1be076619fe7c0 2011-11-12 18:01:34.318096+13 2011-11-12 18:01:34.318096+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20081123T210725Z\r\nSEQUENCE:6\r\nUID:bd262d20-1cdb-012d-1264-002421a2359e\r\nSUMMARY:Afternoon run\r\nDESCRIPTION:\r\nDTSTART;TZID=America/Los_Angeles:20081123T150000\r\nCREATED:20081123T210644Z\r\nDTSTAMP:20081123T210725Z\r\nDURATION:PT1H\r\nLOCATION:\r\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1521 11 \N 11 /user2/home/56f0e0e0-f742-012d-680c-002421a2359e.ics e18c0d539b6dcb56df2d266dd4305008 2011-11-12 18:01:34.318096+13 2011-11-12 18:01:34.318096+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20110101T005414Z\r\nSEQUENCE:12\r\nURL;VALUE=URI:http://www.oregontrufflefestival.com\r\nUID:56f0e0e0-f742-012d-680c-002421a2359e\r\nSUMMARY:Willamette Valley Vineyards at the Oregon Truffle Festival\r\nDESCRIPTION:The 6th Annual Oregon Truffle Festival will be held in and a\r\n round Eugene Oregon over three brisk winter days from January 28-30\\, 20\r\n 11. Created to celebrate the magnificent Oregon truffles as they reach t\r\n he peak of ripeness in their native soil\\, it is the first festival of i\r\n ts kind in North America\\, dedicated to sharing the experience of the ch\r\n efs\\, foragers and fans of Oregon\\\\'s wild truffles\\, from their hidden \r\n source in the forest to their glory on the table.\\n\\nThe theme for 2011 \r\n is "Slow Food"\\, and Willamette Valley Vineyards will be hosting a gourm\r\n et wine luncheon during the festival. Please visit www.oregontrufflefest\r\n ival.com for more info and to purchase tickets.\\n\\n\r\nDTSTART;TZID=America/Los_Angeles:20110128\r\nCREATED:20101231T193025Z\r\nDTSTAMP:20110101T005414Z\r\nDURATION:P1D\r\nLOCATION:Eugene Oregon\r\nX-VENUE:\r\nX-EMAIL-RSVP-UPDATES:true\r\nRRULE:FREQ=DAILY;COUNT=3;INTERVAL=1\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1522 11 \N 10 /user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics 509b0f0d8a3363379f9f5727f5dd74a0 2007-08-06 08:02:15+12 2007-08-06 08:15:31+12 BEGIN:VCALENDAR\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\nVERSION:2.0\nBEGIN:VTODO\nCREATED:20070805T200215Z\nLAST-MODIFIED:20070805T201531Z\nDTSTAMP:20070805T200215Z\nUID:2178279a-aec2-471f-832d-1f6df6203f2f\nSUMMARY:Incomplete\\, uncancelled\nX-MOZ-LOCATIONPATH:2178279a-aec2-471f-832d-1f6df6203f2f.ics\nDESCRIPTION:This task is incomplete and has not been cancelled (has no \n status at all)\nEND:VTODO\nEND:VCALENDAR\n VTODO 10 1535 10 \N 10 /user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics 2c32a2f8aba853654eb17fe037a4db4d 2006-11-02 22:02:17+13 2006-11-04 13:29:21+13 BEGIN:VCALENDAR\nCALSCALE:GREGORIAN\nPRODID:-//mulberrymail.com//Mulberry v4.0//EN\nVERSION:2.0\nBEGIN:VTIMEZONE\nLAST-MODIFIED:20040110T032845Z\nTZID:New Zealand Standard Time\nX-LIC-LOCATION:Pacific/Auckland\nBEGIN:DAYLIGHT\nDTSTART:20000404T020000\nRRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4\nTZNAME:NZDT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nEND:DAYLIGHT\nBEGIN:STANDARD\nDTSTART:20001026T020000\nRRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10\nTZNAME:NZST\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nDTSTAMP:20061102T090217Z\nDTSTART;TZID=New Zealand Standard Time:20061102T123000\nDURATION:PT1H\nLAST-MODIFIED:20061104T002921Z\nSEQUENCE:1\nSUMMARY:Lunch with David\nUID:5A55230C8866CA8D3D325F3A@CA1CBED546AAE36FF3BC722E\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1525 10 \N 101 /resource2/home/0A5EA1F0F2691A03E917E85F9F255448-0.ics 75a75e1c7c4546074aab7645b5323738 2006-11-09 00:30:35+13 2006-11-09 00:30:44+13 BEGIN:VCALENDAR\nCALSCALE:GREGORIAN\nPRODID:-//mulberrymail.com//Mulberry v4.0//EN\nVERSION:2.0\nBEGIN:VTIMEZONE\nLAST-MODIFIED:20040110T032845Z\nTZID:New Zealand Standard Time\nX-LIC-LOCATION:Pacific/Auckland\nBEGIN:DAYLIGHT\nDTSTART:20000404T020000\nRRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4\nTZNAME:NZDT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nEND:DAYLIGHT\nBEGIN:STANDARD\nDTSTART:20001026T020000\nRRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10\nTZNAME:NZST\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nDTSTAMP:20061108T113035Z\nDTSTART;TZID=New Zealand Standard Time:20061030T100000\nDURATION:PT1H\nLAST-MODIFIED:20061108T113044Z\nSEQUENCE:1\nSUMMARY:Booking resource 2\nUID:C8344958F0CC35344E063A04@D76FAF7B10D9E8D2D41F779C\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1527 101 \N 10 /user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics a1c6404d61190f9574e2bfd69383f144 2006-11-20 17:13:36+13 2006-11-20 17:17:09+13 BEGIN:VCALENDAR\r\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\r\nVERSION:2.0\r\nBEGIN:VEVENT\r\nCREATED:20061120T041336Z\r\nLAST-MODIFIED:20061120T041709Z\r\nDTSTAMP:20061120T041709Z\r\nUID:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54\r\nSUMMARY:Weekly Project Meeting\r\nPRIORITY:0\r\nCLASS:PUBLIC\r\nRRULE:FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH\r\nDTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T100000\r\nDTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061102T110000\r\nCATEGORIES:Projects\r\nX-MOZ-LOCATIONPATH:4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/mozilla.org/20050126_1/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 10 1530 10 \N 10 /user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics 08a435c2abaf38f4a50a997343c098a7 2006-12-23 16:23:50+13 2006-12-23 16:31:44+13 BEGIN:VCALENDAR\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\nVERSION:2.0\nBEGIN:VEVENT\nCREATED:20061223T032350Z\nLAST-MODIFIED:20061223T033144Z\nDTSTAMP:20061223T033144Z\nUID:9d050be7-8a02-4355-8ed3-02a9fc5f473f\nSUMMARY:Confidential Event\nPRIORITY:0\nSTATUS:CONFIRMED\nCLASS:CONFIDENTIAL\nDTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T160000\nDTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T180000\nX-MOZ-LOCATIONPATH:9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics\nLOCATION:In a confidential place\nEND:VEVENT\nBEGIN:VTIMEZONE\nTZID:/mozilla.org/20050126_1/Antarctica/McMurdo\nX-LIC-LOCATION:Antarctica/McMurdo\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nTZNAME:NZST\nDTSTART:19700315T030000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nTZNAME:NZDT\nDTSTART:19701004T020000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\nEND:DAYLIGHT\nEND:VTIMEZONE\nEND:VCALENDAR\n VEVENT 10 1531 10 \N 10 /user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics 5def8ae2b20893a1c7f4dbaeb008f2f1 2006-12-23 16:14:15+13 2006-12-23 16:23:05+13 BEGIN:VCALENDAR\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\nVERSION:2.0\nBEGIN:VEVENT\nCREATED:20061223T031415Z\nLAST-MODIFIED:20061223T032305Z\nDTSTAMP:20061223T032305Z\nUID:1906b3ca-4890-468a-9b58-1de74bf2c716\nSUMMARY:Private Event\nPRIORITY:0\nSTATUS:CONFIRMED\nCLASS:PRIVATE\nDTSTART;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T130000\nDTEND;TZID=/mozilla.org/20050126_1/Pacific/Auckland:20061223T150000\nX-MOZ-LOCATIONPATH:1906b3ca-4890-468a-9b58-1de74bf2c716.ics\nLOCATION:At a private location\nDESCRIPTION:Private and Confirmed\nEND:VEVENT\nBEGIN:VTIMEZONE\nTZID:/mozilla.org/20050126_1/Pacific/Auckland\nX-LIC-LOCATION:Pacific/Auckland\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nTZNAME:NZST\nDTSTART:19700315T030000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nTZNAME:NZDT\nDTSTART:19701004T020000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\nEND:DAYLIGHT\nEND:VTIMEZONE\nEND:VCALENDAR\n VEVENT 10 1532 10 \N 10 /user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics ac90acd649c25070b1a2a17fb31a105a 2006-12-23 18:16:46+13 2006-12-23 18:17:13+13 BEGIN:VCALENDAR\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\nVERSION:2.0\nBEGIN:VEVENT\nCREATED:20061223T051646Z\nLAST-MODIFIED:20061223T051713Z\nDTSTAMP:20061223T051713Z\nUID:fbd57454-d966-4a14-8341-abe1edb1ae66\nSUMMARY:Tentative Event\nSTATUS:TENTATIVE\nCLASS:PUBLIC\nDTSTART;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T190000\nDTEND;TZID=/mozilla.org/20050126_1/Antarctica/McMurdo:20061223T210000\nX-MOZ-LOCATIONPATH:fbd57454-d966-4a14-8341-abe1edb1ae66.ics\nLOCATION:Never never land\nEND:VEVENT\nBEGIN:VTIMEZONE\nTZID:/mozilla.org/20050126_1/Antarctica/McMurdo\nX-LIC-LOCATION:Antarctica/McMurdo\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nTZNAME:NZST\nDTSTART:19700315T030000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nTZNAME:NZDT\nDTSTART:19701004T020000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\nEND:DAYLIGHT\nEND:VTIMEZONE\nEND:VCALENDAR\n VEVENT 10 1533 10 \N 10 /user1/home/917b9e47-b748-4550-a566-657fbe672447.ics cb3d9dc3e8c157f53eba3ea0e1e0f146 2007-08-06 08:15:57+12 2007-08-06 08:16:43+12 BEGIN:VCALENDAR\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\nVERSION:2.0\nBEGIN:VTODO\nCREATED:20070805T201557Z\nLAST-MODIFIED:20070805T201643Z\nDTSTAMP:20070805T201557Z\nUID:917b9e47-b748-4550-a566-657fbe672447\nSUMMARY:50% Complete\\, uncancelled\nSTATUS:IN-PROCESS\nPERCENT-COMPLETE:50\nX-MOZ-LOCATIONPATH:917b9e47-b748-4550-a566-657fbe672447.ics\nDESCRIPTION:This task is in progress (50% complete) and has not been \n cancelled.\nEND:VTODO\nEND:VCALENDAR\n VTODO 10 1536 10 \N 10 /user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics 00ad5eb1eb5507884710b0b66aa5d5c4 2007-08-06 08:16:47+12 2007-08-06 08:18:34+12 BEGIN:VCALENDAR\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\nVERSION:2.0\nBEGIN:VTIMEZONE\nTZID:/mozilla.org/20070129_1/Antarctica/McMurdo\nX-LIC-LOCATION:Antarctica/McMurdo\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nTZNAME:NZST\nDTSTART:19700315T030000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nTZNAME:NZDT\nDTSTART:19701004T020000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VTODO\nCREATED:20070805T201647Z\nLAST-MODIFIED:20070805T201834Z\nDTSTAMP:20070805T201647Z\nUID:0575d895-a006-4ed8-9be6-0d1b6b6b1f96\nSUMMARY:Due 7/8/7 16:30\\, completed\nSTATUS:COMPLETED\nDUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070807T163000\nCOMPLETED:20070805T201737Z\nPERCENT-COMPLETE:100\nX-MOZ-LOCATIONPATH:0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics\nDESCRIPTION:Due on 7/8/7 at 4:30pm\\, but completed alread on 6/8/7\nCATEGORIES:Projects\nEND:VTODO\nEND:VCALENDAR\n VTODO 10 1537 10 \N 10 /user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics 257b9df4aaf573a578af4aadd033abf4 2009-10-07 11:58:07+13 2009-10-07 11:58:08+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Apple Inc.//iCal 4.0//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Europe/Prague\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+0100\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\nDTSTART:19810329T020000\nTZNAME:GMT+02:00\nTZOFFSETTO:+0200\nEND:DAYLIGHT\nBEGIN:STANDARD\nTZOFFSETFROM:+0200\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\nDTSTART:19961027T030000\nTZNAME:GMT+01:00\nTZOFFSETTO:+0100\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nCREATED:20091006T225807Z\nUID:70D23799-4A68-4905-AB9F-4D47BA693CFD\nDTEND;TZID=Europe/Prague:20091005T150000\nTRANSP:OPAQUE\nSUMMARY:New Event\nDTSTART;TZID=Europe/Prague:20091005T140000\nDTSTAMP:20091006T225808Z\nSEQUENCE:1\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1555 10 \N 10 /user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics a2990674708634a311bb98a59865ca50 2007-08-07 10:32:44+12 2007-08-07 10:34:11+12 BEGIN:VCALENDAR\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\nVERSION:2.0\nBEGIN:VTIMEZONE\nTZID:/mozilla.org/20070129_1/Antarctica/McMurdo\nX-LIC-LOCATION:Antarctica/McMurdo\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nTZNAME:NZST\nDTSTART:19700315T030000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nTZNAME:NZDT\nDTSTART:19701004T020000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VTODO\nCREATED:20070806T223244Z\nLAST-MODIFIED:20070806T223411Z\nDTSTAMP:20070806T223244Z\nUID:b1679f77-673d-4f46-b3eb-2420e1bba301\nSUMMARY:A Cancelled Task\\, with a start and due date\nSTATUS:CANCELLED\nDTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500\nDUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20070808T111500\nX-MOZ-LOCATIONPATH:b1679f77-673d-4f46-b3eb-2420e1bba301.ics\nDESCRIPTION:This is a task with a Start and a Due date\\, but it has been \n cancelled.\nEND:VTODO\nEND:VCALENDAR\n VTODO 10 1538 10 \N 10 /user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics e8060931f30c1798ac58ffbe4ec0bffc 2007-12-04 09:26:30+13 2007-12-04 09:28:34+13 BEGIN:VCALENDAR\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\nVERSION:2.0\nBEGIN:VTIMEZONE\nTZID:/mozilla.org/20070129_1/Antarctica/McMurdo\nX-LIC-LOCATION:Antarctica/McMurdo\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nTZNAME:NZST\nDTSTART:19700315T030000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nTZNAME:NZDT\nDTSTART:19701004T020000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VEVENT\nCREATED:20071203T202630Z\nLAST-MODIFIED:20071203T202834Z\nDTSTAMP:20071203T202630Z\nUID:e70576e9-c1e0-431e-a507-0386fd82f223\nSUMMARY:Morning Meeting\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH\nDTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T074500\nDTEND;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071211T083000\nX-MOZ-LOCATIONPATH:e70576e9-c1e0-431e-a507-0386fd82f223.ics\nLOCATION:Suzies Coffee Lounge\nDESCRIPTION:Twice-weekly breakfast meeting\nCATEGORIES:Business\nBEGIN:VALARM\nTRIGGER;VALUE=DURATION:-PT10M\nDESCRIPTION:Mozilla Alarm: Morning Meeting\nACTION:DISPLAY\nEND:VALARM\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1539 10 \N 10 /user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics 8f581a053df6d833254756dfd7553d37 2007-12-04 09:29:15+13 2007-12-04 09:30:21+13 BEGIN:VCALENDAR\nPRODID:-//Mozilla Calendar//NONSGML Sunbird//EN\nVERSION:2.0\nBEGIN:VTIMEZONE\nTZID:/mozilla.org/20070129_1/Antarctica/McMurdo\nX-LIC-LOCATION:Antarctica/McMurdo\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nTZNAME:NZST\nDTSTART:19700315T030000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nTZNAME:NZDT\nDTSTART:19701004T020000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VTODO\nCREATED:20071203T202915Z\nLAST-MODIFIED:20071203T203021Z\nDTSTAMP:20071203T202915Z\nUID:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08\nSUMMARY:Release 0.9.3\nSTATUS:IN-PROCESS\nDTSTART;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000\nDUE;TZID=/mozilla.org/20070129_1/Antarctica/McMurdo:20071209T133000\nPERCENT-COMPLETE:95\nX-MOZ-LOCATIONPATH:e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics\nBEGIN:VALARM\nTRIGGER;VALUE=DURATION:-P2D\nDESCRIPTION:Mozilla Alarm: Release 0.9.3\nACTION:DISPLAY\nEND:VALARM\nEND:VTODO\nEND:VCALENDAR\n VTODO 10 1540 10 \N 10 /user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics 55f02f66966ee150320383803d1e0d34 2006-05-11 16:37:51+12 2006-05-11 16:37:51+12 BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//PYVOBJECT//NONSGML Version 1//EN\r\nBEGIN:VTIMEZONE\r\nTZID:Pacific/Auckland\r\nBEGIN:STANDARD\r\nDTSTART:20000319T030000\r\nRRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=3\r\nTZNAME:Pacific/Auckland\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nDTSTART:20001001T020000\r\nRRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10\r\nTZNAME:Pacific/Auckland\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nUID:71e2ae82-7870-11db-c6d6-f6927c144649\r\nDTSTAMP:20060511T043751Z\r\nDTSTART;TZID=Pacific/Auckland:20061103T160000\r\nDTEND;TZID=Pacific/Auckland:20061103T174500\r\nDESCRIPTION:\r\nLOCATION:Level 3\r\nRRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900\r\nSTATUS:CONFIRMED\r\nSUMMARY:Beer O'Clock\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 10 1544 10 \N 10 /user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics 6f16959eee5c920b45548840b1e9ea19 2006-10-25 00:52:17+13 2006-10-25 00:52:17+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//PYVOBJECT//NONSGML Version 1//EN\nBEGIN:VEVENT\nUID:da81c0ee-7871-11db-c6d6-f6927c144649\nDTSTAMP:20061024T115217Z\nDTSTART:20061103T073000\nDTEND:20061103T093000\nDESCRIPTION:\nLOCATION:Olivia's\nRRULE:FREQ=MONTHLY\nSTATUS:CONFIRMED\nSUMMARY:Morning Mgmt Mtg\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1545 10 \N 10 /user1/home/20061101T073004Z.ics bcc402382688cb3e8e57379c757dbcb0 2006-11-01 20:30:00+13 2006-11-01 20:30:00+13 BEGIN:VCALENDAR\nCALSCALE:GREGORIAN\nPRODID:-//Ximian//NONSGML Evolution Calendar//EN\nVERSION:2.0\nBEGIN:VEVENT\nUID:20061101T073000Z-10468-1000-1-7@ubu\nDTSTAMP:20061101T073000Z\nDTSTART;TZID=Pacific/Auckland:20061101T100000\nDTEND;TZID=Pacific/Auckland:20061101T110000\nSUMMARY:A Changed Meeting\nBEGIN:VALARM\nX-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu\nACTION:DISPLAY\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\nDESCRIPTION:A Meeting\nEND:VALARM\nEND:VEVENT\nBEGIN:VTIMEZONE\nTZID:Pacific/Auckland\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nTZNAME:NZST\nDTSTART:19700315T030000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nTZNAME:NZDT\nDTSTART:19701004T020000\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\nEND:DAYLIGHT\nEND:VTIMEZONE\nEND:VCALENDAR\n VEVENT 10 1529 10 \N 10 /user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics efd0257efbc898d059c200d1391af060 2007-11-23 22:30:48+13 2007-11-25 11:48:50+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Apple Inc.//iCal 3.0//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Pacific/Auckland\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:19900318T030000\nRRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU\nTZNAME:NZST\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nDTSTART:20070930T020000\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\nTZNAME:NZDT\nEND:DAYLIGHT\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:20080406T030000\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\nTZNAME:NZST\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nSEQUENCE:6\nTRANSP:OPAQUE\nUID:AAA9318E-37D9-4319-8626-95ECD3D3B243\nDTSTART;TZID=Pacific/Auckland:20071125T130000\nDTSTAMP:20071124T224850Z\nSUMMARY:BBQ @ ML's\nCREATED:20071123T093048Z\nDTEND;TZID=Pacific/Auckland:20071125T190000\nLOCATION:ML's House\nBEGIN:VALARM\nX-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62\nACTION:AUDIO\nTRIGGER:-PT15M\nATTACH;VALUE=URI:Basso\nEND:VALARM\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1546 10 \N 10 /user1/addressbook/Jörg_Test-Roßdeutscher_2_0.vcf feaa1a28c9942fc56403e2f97f75171b 2011-11-12 18:03:30.255235+13 2011-11-12 18:03:30.255235+13 BEGIN:VCARD\r\nVERSION:2.1\r\nN;CHARSET=UTF-8:Test-Roßdeutscher;Jörg;;;\r\nFN;CHARSET=UTF-8:Jörg Test-Roßdeutscher\r\nORG:Factor Design AG;\r\nEMAIL;INTERNET;WORK:joerg.rossdeutscher@factordesign.foo\r\nEMAIL;INTERNET;WORK:joerg@factordesign.foo\r\nEMAIL;INTERNET;HOME:joerg.rossdeutscher@gesindel.foo\r\nEMAIL;INTERNET;HOME:raettchen@gmail.bar\r\nTEL;WORK:040 999999432571-43\r\nTEL;CELL:017799999978200\r\nTEL;HOME:040999999793017\r\nADR;WORK;CHARSET=UTF-8:;;abcStraße 58;Hamburg;;20357;Deutschland\r\nADR;HOME:;;Gayens Weg 9;Hamburg;;22761;Deutschland\r\nNOTE;CHARSET=UTF-8:Technik\\, Web\\, DTP\\, SysAdmin\\, €-Vermögensverwalter\r\nURL;type=pref:www.gesindel.baz\r\nURL:www.factordesign.foo\r\nBDAY;value=date:1969-06-20\r\nEND:VCARD\r\n VCARD 10 1640 1631 \N 10 /user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA.ics 6079c141bc189326bf2432a8426c4242 2007-11-24 21:37:09+13 2007-11-24 21:42:39+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Apple Inc.//iCal 3.0//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Pacific/Auckland\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:19900318T030000\nRRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU\nTZNAME:NZST\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nDTSTART:20070930T020000\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\nTZNAME:NZDT\nEND:DAYLIGHT\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:20080406T030000\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\nTZNAME:NZST\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nSEQUENCE:5\nTRANSP:OPAQUE\nUID:6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA\nDTSTART;TZID=Pacific/Auckland:20071126T070000\nDTSTAMP:20071124T084239Z\nSUMMARY:Go to work\nCREATED:20071124T083709Z\nDTEND;TZID=Pacific/Auckland:20071126T170000\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU\nBEGIN:VALARM\nX-WR-ALARMUID:F33877C6-563B-4F20-B129-77A5B6C6944E\nACTION:AUDIO\nTRIGGER:-PT15M\nATTACH;VALUE=URI:Basso\nEND:VALARM\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1548 1547 \N 10 /user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/E6BC62F3-77C6-4FB7-BDD3-6882E2F1BE74.ics 18134bbb51c8e25919c92a0d6265f789 2007-11-25 11:07:49+13 2007-11-25 11:09:25+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Apple Inc.//iCal 3.0//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Pacific/Auckland\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:19900318T030000\nRRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU\nTZNAME:NZST\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nDTSTART:19901007T020000\nRRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU\nTZNAME:NZDT\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VTODO\nPRIORITY:5\nSEQUENCE:7\nDESCRIPTION:Organise a party\nUID:E6BC62F3-77C6-4FB7-BDD3-6882E2F1BE74\nDTSTART;TZID=Pacific/Auckland:20040101T120000\nDTSTAMP:20071124T220925Z\nSUMMARY:Celebrate a significant birthday\nCREATED:20071124T220749Z\nX-APPLE-SORT-ORDER:2147483647\nDUE;VALUE=DATE:20100217\nEND:VTODO\nEND:VCALENDAR\n VTODO 10 1549 1547 \N 101 /resource2/home/3C1BF85D-3F28-413F-844F-80EBD33B8EE6.ics c057c3eb789b944e76f4d77fccf36ea1 2007-11-25 11:15:21+13 2007-11-25 11:19:00+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Apple Inc.//iCal 3.0//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Pacific/Auckland\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:19900318T030000\nRRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU\nTZNAME:NZST\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nDTSTART:20070930T020000\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\nTZNAME:NZDT\nEND:DAYLIGHT\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:20080406T030000\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\nTZNAME:NZST\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nSEQUENCE:7\nDESCRIPTION:Lunch will be needed\nUID:3C1BF85D-3F28-413F-844F-80EBD33B8EE6\nTRANSP:OPAQUE\nDTSTART;TZID=Pacific/Auckland:20071123T120000\nDTSTAMP:20071124T221900Z\nSUMMARY:Beard Meeting\nCREATED:20071124T221521Z\nDTEND;TZID=Pacific/Auckland:20071123T140000\nRRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=4FR\nBEGIN:VALARM\nX-WR-ALARMUID:F5B2B4CF-E7F2-47B3-8243-8CB829E81122\nACTION:EMAIL\nDESCRIPTION:This is an event reminder\nSUMMARY:Alarm notification\nATTENDEE:mailto:andrew@mcmillan.net.nz\nTRIGGER:-P8D\nEND:VALARM\nBEGIN:VALARM\nX-WR-ALARMUID:3A336F1D-550D-412F-9BDE-EBE8B03E8A53\nACTION:AUDIO\nTRIGGER:-PT15M\nATTACH;VALUE=URI:Basso\nEND:VALARM\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1550 101 \N 10 /user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 2a09ef8c6a9e0b6bc16228359b99d8e7 2008-10-25 11:07:49+13 2008-10-27 20:43:26+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Pacific/Auckland\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:19900318T030000\nRRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU\nTZNAME:NZST\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nDTSTART:19901007T020000\nRRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU\nTZNAME:NZDT\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VEVENT\nDESCRIPTION:Have a microparty. All the best parties are monthly!\nUID:MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74\nDTSTAMP:20081027T074326Z\nSUMMARY:Woohoo! Time to Par-tay!\nCREATED:20081024T220749Z\nDTSTART;TZID=Pacific/Auckland:20081121T160000\nDURATION:PT3H\nRRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=3FR\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1565 10 \N 10 /user1/anotherone/20060803T084628Z-6040-1000-1-6@lamb.ics b0af6a15f1d8a7188bb50a5265ae0734 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060803T084628Z-6040-1000-1-6@lamb\r\nDTSTAMP:20060803T084628Z\r\nDTSTART:20060801T123456\r\nDTEND:20060802T123456\r\nSUMMARY:Steve's Private Birthday\r\nCREATED:20060803T084628\r\nLAST-MODIFIED:20060803T084657\r\nCLASS:PRIVATE\r\nTRANSP:OPAQUE\r\nRRULE:FREQ=YEARLY;INTERVAL=1\r\nSEQUENCE:1\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060803T084657Z-6038-1000-1-13@lamb\r\nDESCRIPTION:Steve's Birthday\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 1 1585 1566 \N 11 /user2/.in/15f40cce00b378332164188cf779f0d6.ics a7c061339ba234f532610cd45ebed7e4 2008-10-26 00:26:48+13 2008-10-26 00:27:07+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nMETHOD:REQUEST\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Helsinki\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19810329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nTZNAME:EEST\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19961027T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nTZNAME:EET\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nSEQUENCE:3\r\nTRANSP:OPAQUE\r\nUID:174F9C2A-1223-40C4-9E06-6E91F2EA9491\r\nDTSTART;TZID=Europe/Helsinki:20081022T084500\r\nORGANIZER;CN="User 1":mailto:user1@example.net\r\nDTSTAMP:20081025T112707Z\r\nSUMMARY:test meeting\r\nATTENDEE;CN="User 1";PARTSTAT=ACCEPTED:mailto:user1@example.net\r\nX-WR-ATTENDEE;CN="user2";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=RE\r\n Q-PARTICIPANT;RSVP=TRUE:mailto:user2@example.net\r\nCREATED:20081025T112648Z\r\nDTEND;TZID=Europe/Helsinki:20081024T113000\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 10 1552 1551 15f40cce00b378332164188cf779f0d6 10 /user1/.in/15f40cce00b378332164188cf779f0d6.ics a7c061339ba234f532610cd45ebed7e4 2008-10-26 00:26:48+13 2008-10-26 00:27:07+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nMETHOD:REQUEST\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Helsinki\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19810329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nTZNAME:EEST\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19961027T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nTZNAME:EET\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nSEQUENCE:3\r\nTRANSP:OPAQUE\r\nUID:174F9C2A-1223-40C4-9E06-6E91F2EA9491\r\nDTSTART;TZID=Europe/Helsinki:20081022T084500\r\nORGANIZER;CN="User 1":mailto:user1@example.net\r\nDTSTAMP:20081025T112707Z\r\nSUMMARY:test meeting\r\nATTENDEE;CN="User 1";PARTSTAT=ACCEPTED:mailto:user1@example.net\r\nX-WR-ATTENDEE;CN="user2";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=RE\r\n Q-PARTICIPANT;RSVP=TRUE:mailto:user2@example.net\r\nCREATED:20081025T112648Z\r\nDTEND;TZID=Europe/Helsinki:20081024T113000\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 10 1553 1541 15f40cce00b378332164188cf779f0d6 10 /user1/home/0544-gzip-PUT.ics 6ddd18264a9d40c1c9d37a005eeb7e4f 2011-10-05 04:35:07+13 2011-10-05 04:35:07+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Yeah Right Inc.//Doohickey 4.0//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Somewhere_in_Central_Europe\nX-MICROSOFT-CDO-TZID:4\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+0100\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\nDTSTART:19810329T020000\nTZNAME:GMT+02:00\nTZOFFSETTO:+0200\nEND:DAYLIGHT\nBEGIN:STANDARD\nTZOFFSETFROM:+0200\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\nDTSTART:19961027T030000\nTZNAME:GMT+01:00\nTZOFFSETTO:+0100\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nCREATED:20111004T153507Z\nUID:0544-gzip-PUT\nTRANSP:OPAQUE\nSUMMARY:In Central Europe, 2pm, Oct 5th for 1 hour\nDTSTART;TZID=Somewhere_in_Central_Europe:20111005T140000\nDTEND;TZID=Somewhere_in_Central_Europe:20111005T150000\nDTSTAMP:20111004T153507Z\nSEQUENCE:1\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1556 10 \N 10 /user1/home/0545-deflate-PUT.ics 4a3aa58a3e11487e87d87024465d4182 2011-10-05 04:35:07+13 2011-10-05 04:35:07+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Yeah Right Inc.//Doohickey 4.0//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Prague_in_Central_Europe\nX-MICROSOFT-CDO-TZID:4\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+0100\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\nDTSTART:19810329T020000\nTZNAME:GMT+02:00\nTZOFFSETTO:+0200\nEND:DAYLIGHT\nBEGIN:STANDARD\nTZOFFSETFROM:+0200\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\nDTSTART:19961027T030000\nTZNAME:GMT+01:00\nTZOFFSETTO:+0100\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nCREATED:20111004T153507Z\nUID:0545-deflate-PUT\nTRANSP:OPAQUE\nSUMMARY:In Prague, 10am, Oct 7th for 1 hour\nDTSTART;TZID=Prague_in_Central_Europe:20111007T100000\nDURATION:PT1H\nDTSTAMP:20111004T153507Z\nSEQUENCE:1\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1557 10 \N 10 /user1/collection/Daily_NY_5pm.ics 7b70c8c0621b4daac509b8198e9e13d8 2009-05-15 21:53:26+12 2009-05-15 21:53:26+12 BEGIN:VCALENDAR\nPRODID:-//OSAF//NONSGML Scoooby Server//EN\nVERSION:2.0\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:America/New_York\nLAST-MODIFIED:20051220T211408Z\nBEGIN:STANDARD\nDTSTART:20051030T060000\nTZOFFSETTO:-0500\nTZOFFSETFROM:+0000\nTZNAME:EST\nEND:STANDARD\nBEGIN:DAYLIGHT\nDTSTART:20060402T010000\nTZOFFSETTO:-0400\nTZOFFSETFROM:-0500\nTZNAME:EDT\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VEVENT\nDTSTART;TZID=America/New_York:20060101T170000\nSUMMARY:Daily_NY_5pm\nUID:DE916949-731D-4DAE-BA93-48A38B2B2030\nSEQUENCE:4\nDTSTAMP:20090515T095326Z\nRRULE:FREQ=DAILY;INTERVAL=1;COUNT=1000\nDURATION:PT1H\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1561 1560 \N 10 /user1/collection/All_Day_NY_JAN1.ics c056350d3c91ac45724c0f9773778941 2009-05-15 21:53:26+12 2009-05-15 21:53:26+12 BEGIN:VCALENDAR\nPRODID:-//OSAF//NONSGML Scoooby Server//EN\nVERSION:2.0\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:America/New_York\nLAST-MODIFIED:20051220T211408Z\nBEGIN:STANDARD\nDTSTART:20051030T060000\nTZOFFSETTO:-0500\nTZOFFSETFROM:+0000\nTZNAME:EST\nEND:STANDARD\nBEGIN:DAYLIGHT\nDTSTART:20060402T010000\nTZOFFSETTO:-0400\nTZOFFSETFROM:-0500\nTZNAME:EDT\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VEVENT\nDTSTART;VALUE=DATE:20060101\nDTEND;VALUE=DATE:20060102\nSUMMARY:All_Day_NY_JAN1\nUID:C68DADAD-37CE-44F7-8A37-52E1D02E29CA\nSEQUENCE:4\nDTSTAMP:20090515T095326Z\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1562 1560 \N 10 /user1/anotherone/20061029T195821Z-14356-1000-1-12@ubu.ics f88f6e26787a25375428231cf023bcf1 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061029T195821Z-14356-1000-1-12@ubu\r\nDTSTAMP:20061029T195821Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 030T130000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006103\r\n 0T140000\r\nSUMMARY:???\r\nCREATED:20061029T195822\r\nLAST-MODIFIED:20061029T195822\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061029T195821Z-14353-1000-1-6@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:???\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1568 1566 \N 10 /user1/home/PUT-eastern-time.ics 0b17d5f4102e63037d2ae732e4ca563d 2010-10-10 18:46:39+13 2010-10-10 18:46:39+13 BEGIN:VCALENDAR\nCALSCALE:GREGORIAN\nPRODID:-//Ximian//NONSGML Evolution Calendar//EN\nVERSION:2.0\nBEGIN:VTIMEZONE\nTZID:(UTC-05:00) Eastern Time (US & Canada)\nBEGIN:STANDARD\nDTSTART:16010101T020000\nTZOFFSETFROM:-0400\nTZOFFSETTO:-0500\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11\nEND:STANDARD\nBEGIN:DAYLIGHT\nDTSTART:16010101T020000\nTZOFFSETFROM:-0500\nTZOFFSETTO:-0400\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VEVENT\nUID:PUT-eastern-time\nDTSTAMP:20101009T214524Z\nSUMMARY;LANGUAGE=en-US:Psychic's Anonymous Meeting\nDTSTART;TZID="(UTC-05:00) Eastern Time (US & Canada)":20110912T110000\nDTEND;TZID="(UTC-05:00) Eastern Time (US & Canada)":20110912T113000\nLOCATION:You will know when you arrive\nCREATED:20101010T014639\nLAST-MODIFIED:20101010T014639\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1596 10 \N 10 /user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 165746adbab8bc0c8336a63cc5332ff2 2008-10-25 11:07:49+13 2008-10-25 11:09:25+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Pacific/Auckland\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:19900318T030000\nRRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU\nTZNAME:NZST\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nDTSTART:19901007T020000\nRRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU\nTZNAME:NZDT\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VEVENT\nDESCRIPTION:Have a party. All the best parties are monthly!\nUID:DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74\nDTSTAMP:20081024T220925Z\nSUMMARY:Party all day!\nCREATED:20081024T220749Z\nDTSTART;TZID=Pacific/Auckland;VALUE=DATE:20081114\nRRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 10 1564 10 \N 10 /user1/anotherone/20061119T201927Z-5105-1000-5103-8@ubu.ics 9c79e22dd04b662134ec18cdd3db4792 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061119T201927Z-5105-1000-5103-8@ubu\r\nDTSTAMP:20061119T201927Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 122T130000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006112\r\n 2T133000\r\nSUMMARY:Alan Wanston\\, FudgeFactory\r\nCREATED:20061119T201929\r\nLAST-MODIFIED:20061119T201951\r\nSEQUENCE:1\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061119T201927Z-5101-1000-1-17@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Alan Wanston\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1567 1566 \N 10 /user1/anotherone/20061009T214137Z-5718-1001-1-1@dolmein.ics 559b8c776d6cab34a86dad9304649040 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061009T214137Z-5718-1001-1-1@dolmein\r\nDTSTAMP:20061009T214524Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 012T140000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006101\r\n 2T150000\r\nTRANSP:OPAQUE\r\nSEQUENCE:2\r\nSUMMARY:Sysadmin Interview\r\nLOCATION:Copperstuff\\, Level 2\\, 150 Walthias St\r\nCLASS:PRIVATE\r\nORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;LANGUAGE=en:MAILTO:jo@example.net\r\nX-MICROSOFT-CDO-REPLYTIME:20061010T014639Z\r\nCREATED:20061010T014639\r\nLAST-MODIFIED:20061010T014639\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061010T014606Z-6897-1000-1-2@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1595 1566 \N 10 /user1/anotherone/20061105T211651Z-4384-1000-1-7@ubu.ics 16393a861fdd010b183a5a1ef51fb4dd 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061105T211651Z-4384-1000-1-7@ubu\r\nDTSTAMP:20061105T211651Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 107T140000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006110\r\n 7T150000\r\nSUMMARY:James What\r\nCREATED:20061105T211656\r\nLAST-MODIFIED:20061106T213310\r\nLOCATION:Copperstuff\r\nCLASS:PUBLIC\r\nTRANSP:OPAQUE\r\nSEQUENCE:3\r\nORGANIZER;CN=Andrew Moughtonbeigh:MAILTO:andrew@example.org\r\nDESCRIPTION:I am looking at hosting a custom Web application on a Linux \r\n Debian server. \\nFrom what I understand you can provide the complete sol\r\n ution in terms of hosting and support. \\nI am currently looking into hos\r\n ting providers as well as looking for some Debian admin skilled resource\r\n .\\n\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Andrew Moughtonbeigh;LANGUAGE=en:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061106T213310Z-4382-1000-1-31@ubu\r\nDESCRIPTION:James What\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1569 1566 \N 10 /user1/anotherone/20061031T194148Z-14356-1000-1-14@ubu.ics ceeb47ba9a4cc6c93d343c959db11483 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061031T194148Z-14356-1000-1-14@ubu\r\nDTSTAMP:20061031T194148Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 101T133000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006110\r\n 1T143000\r\nSUMMARY:Doctor\r\nCREATED:20061031T194149\r\nLAST-MODIFIED:20061031T194149\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061031T194148Z-14353-1000-1-19@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Doctor\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1570 1566 \N 10 /user1/anotherone/20061027T005242Z-5029-1001-1-1@dolmein.ics 4f658e55f47ecabb5c3efcff4da93e36 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061027T005242Z-5029-1001-1-1@dolmein\r\nDTSTAMP:20061027T010232Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 030T103000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006103\r\n 0T113000\r\nTRANSP:OPAQUE\r\nSEQUENCE:3\r\nSUMMARY:Interview Linus Pauling\r\nCLASS:PRIVATE\r\nCREATED:20061027T022816\r\nLAST-MODIFIED:20061027T022816\r\nDESCRIPTION:I've already spoken to each of you about this\\, this is just\r\n to ensure that it is in my calender :-)\r\nORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org\r\nX-MICROSOFT-CDO-REPLYTIME:20061027T022816Z\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061027T022803Z-4264-1000-1-2@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1571 1566 \N 10 /user1/anotherone/20060912T233427Z-12681-1000-1-5@ubu.ics fbe0feb306166d493fbe9edff9807548 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060912T233427Z-12681-1000-1-5@ubu\r\nDTSTAMP:20060912T233427Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Europe/Helsinki:200609\r\n 13T090000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Europe/Helsinki:20060913\r\n T143000\r\nTRANSP:OPAQUE\r\nSEQUENCE:5\r\nSUMMARY:9:am - 2:30pm in Helsinki\r\nCLASS:PUBLIC\r\nX-EVOLUTION-CALDAV-HREF:http://mycaldav:80/caldav.php/andrew/20060912T23\r\n 3500Z.ics\r\nX-EVOLUTION-CALDAV-ETAG:"8d8ca5e838b7e088bf17d9916032eec6"\r\nX-EVOLUTION-MOVE-CALENDAR:1\r\nCREATED:20060913T003545\r\nLAST-MODIFIED:20060913T003631\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060913T003631Z-12694-1000-1-24@ubu\r\nDESCRIPTION:9:am - 2:30pm in Helsinki\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 1 1584 1566 \N 10 /user1/anotherone/20061025T210650Z-21440-1000-1-8@ubu.ics 365d06a4afd49d910ba70d932801acf9 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nX-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for UID property.\r\n Removing entire property:\r\nDTSTAMP:20061025T193258Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 026T150000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006102\r\n 6T160000\r\nTRANSP:OPAQUE\r\nSEQUENCE:3\r\nSUMMARY:Performance Review - David C\r\nCLASS:PRIVATE\r\nORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=David Calle\r\n nius;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:dcallenius@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=David Smith\r\n ;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:dave2@example.org\r\nCREATED:20061025T210902\r\nLAST-MODIFIED:20061025T210902\r\nUID:20061025T210650Z-21440-1000-1-8@ubu\r\nX-MICROSOFT-CDO-REPLYTIME:20061025T210902Z\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061025T210650Z-21440-1000-1-9@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1572 1566 \N 10 /user1/anotherone/20061019T022314Z-5014-1001-1-1@dolmein.ics ac0317209a64e15ac9b7eda408ef9d1b 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061019T022314Z-5014-1001-1-1@dolmein\r\nDTSTAMP:20061019T022452Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 025T150000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006102\r\n 5T160000\r\nTRANSP:OPAQUE\r\nSEQUENCE:2\r\nSUMMARY:Performance Review - David C\r\nCLASS:PRIVATE\r\nORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Smith;LANGUAGE=en:MAILTO:dave2@example.org\r\nX-MICROSOFT-CDO-REPLYTIME:20061020T071245Z\r\nCREATED:20061020T071245\r\nLAST-MODIFIED:20061020T071245\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061020T071222Z-7292-1000-1-2@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1573 1566 \N 10 /user1/anotherone/20060918T011246Z-21151-1000-1-10@ubu.ics 62486c3599358477c356d1edd07f95bf 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060918T011246Z-21151-1000-1-10@ubu\r\nDTSTAMP:20060918T011246Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060\r\n 928T173000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006092\r\n 8T200000\r\nSUMMARY:Summer Festival drinks at the loaded hog\r\nCREATED:20060918T011251\r\nLAST-MODIFIED:20060918T011251\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060918T011246Z-21149-1000-1-20@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Summer Festival drinks at the loaded hog\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1574 1566 \N 10 /user1/anotherone/20061029T195827Z-14356-1000-1-13@ubu.ics f688eed63d79ce17c10a02d5cdf1cfe6 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061029T195827Z-14356-1000-1-13@ubu\r\nDTSTAMP:20061029T195827Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 030T160000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006103\r\n 0T170000\r\nSUMMARY:IZPAXY\r\nCREATED:20061029T195828\r\nLAST-MODIFIED:20061029T195828\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061029T195827Z-14353-1000-1-7@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:IZPAXY\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1575 1566 \N 10 /user1/anotherone/20061011T232622Z-27447-1000-1-6@ubu.ics 8b30e3ae6d24cc88bf5e72ee4fb51d6b 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061011T232622Z-27447-1000-1-6@ubu\r\nDTSTAMP:20061011T232622Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_4/Asia/Dubai:20061016T09\r\n 0000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_4/Asia/Dubai:20061016T1700\r\n 00\r\nTRANSP:OPAQUE\r\nSEQUENCE:3\r\nSUMMARY:Dubai Day\r\nCLASS:PUBLIC\r\nCREATED:20061011T232657\r\nLAST-MODIFIED:20061011T232731\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061011T232731Z-27445-1000-1-15@ubu\r\nDESCRIPTION:Dubai Day\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 1 1576 1566 \N 10 /user1/anotherone/86203AFD481A6C42892013E6E0C4845D039A2543@AKEXBE02.telecom.tcnz.net.ics 621885941033781f3462950c9bc2844b 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:86203AFD481A6C42892013E6E0C4845D039A2543@AKEXBE02.telecom.tcnz.net\r\nDTSTAMP:20061005T230724Z\r\nDTSTART:20070120T093000\r\nSUMMARY:Reminder for Mark for Absolom Livasathan's PGP WF Services cost \r\n request\r\nDESCRIPTION:From Absolom.Livasathan@example.com Fri Oct 6 12:00:02 2006\r\n \\n\r\nORGANIZER;CN=Absolom Livasathan:Absolom.Livasathan@example.com\r\nATTENDEE;RSVP=FALSE;CN=:andrew@example.org\r\nCREATED:20061005T230724\r\nLAST-MODIFIED:20061005T230724\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 1 1577 1566 \N 10 /user1/anotherone/20061219T104451Z-28207-1000-1-8@ubu.ics 48442c494e80c936f62ab3dedfed19d0 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061219T104451Z-28207-1000-1-8@ubu\r\nDTSTAMP:20061219T104451Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 222T140000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006122\r\n 2T150000\r\nTRANSP:OPAQUE\r\nSEQUENCE:2\r\nSUMMARY:Those who are left will have a drink to celebrate the new calend\r\n ar\r\nLOCATION:The Boardroom\r\nCLASS:PUBLIC\r\nORGANIZER;CN=Andrew Moughtonbeigh:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Andrew Moughtonbeigh;LANGUAGE=en:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;LANGUAGE=en:MAILTO:Boardroom@example.org\r\nCREATED:20061219T104635\r\nLAST-MODIFIED:20061219T104635\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061219T104635Z-23686-1000-1-22@ubu\r\nDESCRIPTION:Those who are left will have a drink to celebrate the new ca\r\n lendar\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1578 1566 \N 10 /user1/anotherone/20060914T212513Z-15783-1000-1-11@ubu.ics 967453ee71d6bcb9d69b4adf83b40553 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060914T212513Z-15783-1000-1-11@ubu\r\nDTSTAMP:20060914T212513Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060\r\n 918T140000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006091\r\n 8T150000\r\nSUMMARY:Donovan\r\nX-EVOLUTION-CALDAV-HREF:http://mycaldav:80/caldav.php/andrew/20060914T21\r\n 2516Z.ics\r\nX-EVOLUTION-CALDAV-ETAG:"004c7b3de49835f714ae7962e8d06d3c"\r\nX-EVOLUTION-MOVE-CALENDAR:1\r\nCREATED:20060914T213552\r\nLAST-MODIFIED:20060914T213552\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060914T212513Z-15781-1000-1-18@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Donovan\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1579 1566 \N 10 /user1/anotherone/20060906T123509Z-5231-1000-1-5@ubu.ics 928d0f0366934dd46d99ed93b1d269a5 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060906T123509Z-5231-1000-1-5@ubu\r\nDTSTAMP:20060906T123509Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060\r\n 911T103000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006091\r\n 1T120000\r\nSUMMARY:NGOP by-election readiness.\r\nX-EVOLUTION-CALDAV-HREF:http://mycaldav:80/caldav.php/andrew/20060906T12\r\n 3515Z.ics\r\nX-EVOLUTION-CALDAV-ETAG:"9a39bedee743f397ebeeda78a4233c8b"\r\nX-EVOLUTION-MOVE-CALENDAR:1\r\nCREATED:20060907T093748\r\nLAST-MODIFIED:20060907T093748\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060906T123509Z-5254-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:NGOP by-election readiness.\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1580 1566 \N 10 /user1/anotherone/20060903T233851Z-31623-1000-1-5@ubu.ics 92e380d82aa7aee9d51a798ef2513649 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060903T233851Z-31623-1000-1-5@ubu\r\nDTSTAMP:20060903T233851Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060\r\n 907T123000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006090\r\n 7T133000\r\nSUMMARY:Murray Flenshaw @ Copperstuff\r\nCREATED:20060903T233856\r\nLAST-MODIFIED:20060903T233856\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060903T233851Z-31621-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Murray Flenshaw @ Copperstuff\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1581 1566 \N 10 /user1/anotherone/20060920T052705Z-28287-1000-1-5@ubu.ics 74d71aebcd274d278791b3dad214fa76 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060920T052705Z-28287-1000-1-5@ubu\r\nDTSTAMP:20060920T052705Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060\r\n 921T160000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006092\r\n 1T170000\r\nSUMMARY:Really Geeky Thoughts\r\nX-EVOLUTION-CALDAV-HREF:http://andrew@mycaldav/caldav.php/andrew/2006092\r\n 0T052710Z.ics\r\nX-EVOLUTION-CALDAV-ETAG:"d9a4a80a3dbc76b947a3bf0f0672359c"\r\nX-EVOLUTION-MOVE-CALENDAR:1\r\nCREATED:20060920T052722\r\nLAST-MODIFIED:20060921T012657\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060920T052705Z-28285-1000-1-7@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Really Geeky Thoughts\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1582 1566 \N 10 /user1/anotherone/20060918T011217Z-21151-1000-1-9@ubu.ics fa714e1248dc234f8b9d99b714c1fd13 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060918T011217Z-21151-1000-1-9@ubu\r\nDTSTAMP:20060918T011217Z\r\nDTSTART;VALUE=DATE:20060928\r\nDTEND;VALUE=DATE:20060930\r\nSUMMARY:Summer Festival\r\nCREATED:20060918T011218\r\nLAST-MODIFIED:20060918T011218\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060918T011217Z-21149-1000-1-19@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Summer Festival\r\nEND:VALARM\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 1 1583 1566 \N 10 /user1/anotherone/20061210T214816Z-5064-1001-1-0@dolmein.ics 72e3c96dc0b764d7d173dd9d835787ec 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061210T214816Z-5064-1001-1-0@dolmein\r\nDTSTAMP:20061210T215058Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 212T100000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006121\r\n 2T110000\r\nTRANSP:OPAQUE\r\nSEQUENCE:3\r\nSUMMARY:Interview - Arthur Williams\r\nCLASS:PRIVATE\r\nCREATED:20061211T020841\r\nLAST-MODIFIED:20061211T020841\r\nDESCRIPTION:I think you all have had a copy of Arthur Williams's CV pass\r\n ed onto you.\r\nORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=Gerrold Nimby;LANGUAGE=en:MAILTO:gerrold@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org\r\nX-MICROSOFT-CDO-REPLYTIME:20061211T020841Z\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061211T020828Z-15443-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1586 1566 \N 10 /user1/anotherone/20060907T213951Z-5189-1001-1-0@dolmein.ics e892a467e0d74a8b8bc04021049ca46d 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060907T213951Z-5189-1001-1-0@dolmein\r\nDTSTAMP:20060914T042719Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060\r\n 915T100000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006091\r\n 5T110000\r\nTRANSP:OPAQUE\r\nSEQUENCE:2\r\nSUMMARY:Sysadmin -> Development\r\nCLASS:PRIVATE\r\nORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Richard Hec\r\n tor;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:richard@example.org\r\nCREATED:20060914T051701\r\nLAST-MODIFIED:20060914T051701\r\nX-MICROSOFT-CDO-REPLYTIME:20060914T051701Z\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060914T051626Z-5898-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1587 1566 \N 10 /user1/anotherone/20060905T231045Z-16025-1000-1-6@ubu.ics 0b7e7d2067fc4796d7c62d4527f24d15 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060905T231045Z-16025-1000-1-6@ubu\r\nDTSTAMP:20060905T231045Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060\r\n 919T090000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006091\r\n 9T120000\r\nSUMMARY:NGOP Meeting\r\nX-EVOLUTION-CALDAV-HREF:http://mycaldav:80/caldav.php/andrew/20060905T23\r\n 1053Z.ics\r\nX-EVOLUTION-CALDAV-ETAG:"4d37ed48425acb9f4245539e2d2b726b"\r\nX-EVOLUTION-MOVE-CALENDAR:1\r\nCREATED:20060907T093732\r\nLAST-MODIFIED:20060911T214556\r\nCLASS:PUBLIC\r\nTRANSP:OPAQUE\r\nSEQUENCE:1\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060911T214556Z-21593-1000-1-6@ubu\r\nDESCRIPTION:NGOP Meeting\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1588 1566 \N 10 /user1/anotherone/DC9C0944-D80A-426D-A4A4-6003C72BA7B5.ics 69283d8740fbf70f5af724ef34ab282e 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTART;TZID=Pacific/Auckland:20061220T140000\r\nSUMMARY:Really Geeky round table\r\nUID:DC9C0944-D80A-426D-A4A4-6003C72BA7B5\r\nORGANIZER;CN=Chris Dalgleish:mailto:chris@example.org\r\nSEQUENCE:2\r\nDTSTAMP:20061219T195427Z\r\nDURATION:PT1H\r\nTRANSP:OPAQUE\r\nX-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for ATTENDEE prop\r\n erty. Removing entire property:\r\nX-MICROSOFT-CDO-REPLYTIME:20061219T225056Z\r\nCREATED:20061219T225056\r\nLAST-MODIFIED:20061219T225056\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061219T225040Z-21169-1000-1-13@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nDTSTART:19900318T030000\r\nRRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU\r\nTZNAME:NZST\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nDTSTART:20070930T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\r\nTZNAME:NZDT\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nDTSTART:20080406T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nTZNAME:NZST\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1589 1566 \N 12 /user3/home/70399cd7-50a4-4be4-a665-af593e19a7fd.ics ea6b316ca24db20f5eb37d1abd60f8c1 2011-11-12 18:03:01.534476+13 2011-11-12 18:03:01.534476+13 BEGIN:VCALENDAR\nPRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\nVERSION:2.0\nBEGIN:VEVENT\nCREATED:20100319T103247Z\nLAST-MODIFIED:20100319T105620Z\nDTSTAMP:20100319T105620Z\nUID:70399cd7-50a4-4be4-a665-af593e19a7fd\nSUMMARY:An invited event. Black tie with pink polka dots is essential. D\n o not bring a leopard. Any leopards which do attend will be forcibly chai\n ned to a nearby fence.\nORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user4@example.net\n \nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user2\n @example.net\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user3\n @example.net\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user1\n @example.net\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user5\n @example.net\nDTSTART:20100322T160000\nDTEND:20100322T170000\nX-MOZ-GENERATION:3\nTRANSP:OPAQUE\nX-MOZ-SEND-INVITATIONS:TRUE\nSEQUENCE:1\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 13 1615 12 \N 10 /user1/anotherone/20061101T224855Z-5026-1001-1-0@dolmein.ics b5d8c7c11e4488c430155f053b3b2969 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061101T224855Z-5026-1001-1-0@dolmein\r\nDTSTAMP:20061101T225011Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 102T140000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006110\r\n 2T150000\r\nTRANSP:OPAQUE\r\nSEQUENCE:3\r\nSUMMARY:Sysadmin Interview\r\nCLASS:PRIVATE\r\nCREATED:20061101T230424\r\nLAST-MODIFIED:20061101T230424\r\nORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=Gerrold Nimby;LANGUAGE=en:MAILTO:gerrold@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org\r\nX-MICROSOFT-CDO-REPLYTIME:20061101T230424Z\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061101T230356Z-1895-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1590 1566 \N 10 /user1/anotherone/20060918T071919Z-21151-1000-1-13@ubu.ics 74cc48fb529dd80b7ee24fbf39ac9181 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20060918T071919Z-21151-1000-1-13@ubu\r\nDTSTAMP:20060918T071919Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20060\r\n 925T120000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006092\r\n 5T133000\r\nSUMMARY:Board Meeting\r\nCREATED:20060918T071921\r\nLAST-MODIFIED:20060918T071921\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060918T071919Z-21149-1000-1-51@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Board Meeting\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1591 1566 \N 10 /user1/anotherone/20061119T202229Z-5105-1000-5103-9@ubu.ics fdbf955864dcd5f98c1bab83f1e96607 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061119T202229Z-5105-1000-5103-9@ubu\r\nDTSTAMP:20061119T202229Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 120T110000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006112\r\n 0T120000\r\nSUMMARY:IZPAXY Review\r\nCREATED:20061119T202231\r\nLAST-MODIFIED:20061119T202231\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061119T202229Z-5101-1000-1-18@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:IZPAXY Review\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1592 1566 \N 10 /user1/anotherone/20061026T222249Z-5029-1001-1-0@dolmein.ics c719ef9a84a9c3bc8997c1fa123768d4 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061026T222249Z-5029-1001-1-0@dolmein\r\nDTSTAMP:20061026T223020Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 030T140000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006103\r\n 0T160000\r\nTRANSP:OPAQUE\r\nSEQUENCE:3\r\nSUMMARY:ABC\r\nCLASS:PRIVATE\r\nCREATED:20061026T223700\r\nLAST-MODIFIED:20061026T223700\r\nDESCRIPTION:Mark and Tom from ABC would like to discuss the work require\r\n d and estimate for the work they would like us to do - \\"start to become\r\n specific about things\\". Expectations of work\\, issues and solutions.\r\nORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=TENTATIVE:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=Andy Capp;LANGUAGE=en:MAILTO:andyc@example.org\r\nX-MICROSOFT-CDO-REPLYTIME:20061026T223700Z\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061026T223608Z-4264-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1593 1566 \N 10 /user1/anotherone/20061019T022147Z-5014-1001-1-0@dolmein.ics e4ba9a5b1e03a3362145cb582b499e15 2011-11-12 18:02:25.542696+13 2011-11-12 18:02:25.542696+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:20061019T022147Z-5014-1001-1-0@dolmein\r\nDTSTAMP:20061019T022247Z\r\nDTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:20061\r\n 025T133000\r\nDTEND;TZID=/softwarestudio.org/Olson_20011030_5/Pacific/Auckland:2006102\r\n 5T143000\r\nTRANSP:OPAQUE\r\nSEQUENCE:2\r\nSUMMARY:Performance Review - Jon C\r\nCLASS:PRIVATE\r\nORGANIZER;CN=Ian Winsleigh:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=Jon Callenius;LANGUAGE=en:MAILTO:jon@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org\r\nATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Smith;LANGUAGE=en:MAILTO:dave2@example.org\r\nX-MICROSOFT-CDO-REPLYTIME:20061020T071144Z\r\nCREATED:20061020T071144\r\nLAST-MODIFIED:20061020T071144\r\nBEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061020T071108Z-7292-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 1 1594 1566 \N 15 /User Six/home/c0f7c860-1345-012d-125f-002421a2359e.ics 4d7d14bee6ce017c086e6f1de56f1641 2010-03-17 05:20:26+13 2010-03-17 05:21:03+13 BEGIN:VCALENDAR\nPRODID:-//Open Source Applications Foundation//NONSGML Chandler Server//E\n N\nVERSION:2.0\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:America/Los_Angeles\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\nBEGIN:DAYLIGHT\nTZOFFSETTO:-0700\nTZOFFSETFROM:-0800\nTZNAME:America/Los_Angeles(DST)\nDTSTART:19980405T020000\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\nEND:DAYLIGHT\nBEGIN:STANDARD\nTZOFFSETTO:-0800\nTZOFFSETFROM:-0700\nTZNAME:America/Los_Angeles(STD)\nDTSTART:19981025T020000\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETTO:-0700\nTZOFFSETFROM:-0800\nTZNAME:America/Los_Angeles(DST)\nDTSTART:20070311T020000\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\nEND:DAYLIGHT\nBEGIN:STANDARD\nTZOFFSETTO:-0800\nTZOFFSETFROM:-0700\nTZNAME:America/Los_Angeles(STD)\nDTSTART:20071104T020000\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nLAST-MODIFIED:20100316T162103Z\nSEQUENCE:4\nUID:c0f7c860-1345-012d-125f-002421a2359e\nSUMMARY:2nd Annual Lobsterfest: will you come?\nDESCRIPTION:2nd Annual Lobsterfest\\nSaturday\\, August 7\\nTime to be annou\n nced\\, @Chamisal Vineyards @1pm\\n$85 members\\; $100 non members. Inquire for s\n pecial group pricing. Will you come?\nDTSTART;TZID=America/Los_Angeles:20100807T000000\nCREATED:20100316T162026Z\nDTSTAMP:20100316T162103Z\nDURATION:P1D\nLOCATION:Chamisal Vineyards\\\\, Oregon\nX-VENUE:Chamisal Vineyards\nEND:VEVENT\n VEVENT 15 1601 15 \N 11 /user2/home/thiswillworkfine.ics 9a8d7696ee2e0a0f1f4170fe4f094a3a 2010-03-18 17:44:09+13 2010-03-18 17:44:51+13 BEGIN:VCALENDAR\nPRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\nVERSION:2.0\nBEGIN:VTIMEZONE\nTZID:Pacific/Auckland\nX-LIC-LOCATION:Pacific/Auckland\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nTZNAME:NZDT\nDTSTART:19700927T020000\nRRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9\nEND:DAYLIGHT\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nTZNAME:NZST\nDTSTART:19700405T030000\nRRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4\nEND:STANDARD\nEND:VTIMEZONE\nBEGIN:VEVENT\nCREATED:20100318T044409Z\nLAST-MODIFIED:20100318T044451Z\nDTSTAMP:20100318T044451Z\nUID:9f81cd8a-b1c2-4f72-9f12-1ddbddd69342\nSUMMARY:Test adding an event to a bound collection\nRRULE:FREQ=WEEKLY;INTERVAL=2\nDTSTART;TZID=Pacific/Auckland:20100322T180000\nDTEND;TZID=Pacific/Auckland:20100322T190000\nLOCATION:Somewhere else\nDESCRIPTION:This event is being added to a bound collection.\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 13 1604 11 \N 11 /user2/home/thiswillalsobegood.ics 1c7895f11787e71fd6dbe3260d72d4a0 2010-03-19 10:04:57+13 2010-03-19 10:05:57+13 BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Apple Inc.//iCal 3.0//EN\nCALSCALE:GREGORIAN\nBEGIN:VTIMEZONE\nTZID:Pacific/Auckland\nBEGIN:STANDARD\nTZOFFSETFROM:+1300\nTZOFFSETTO:+1200\nDTSTART:19900318T030000\nRRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU\nTZNAME:NZST\nEND:STANDARD\nBEGIN:DAYLIGHT\nTZOFFSETFROM:+1200\nTZOFFSETTO:+1300\nDTSTART:19901007T020000\nRRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU\nTZNAME:NZDT\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VTODO\nPRIORITY:0\nSEQUENCE:4\nDTSTART;TZID=Pacific/Auckland:20040101T120000\nUID:A51AC037-E6F9-4E03-872C-7DFE0B67D1FF\nDTSTAMP:20100318T210557Z\nSUMMARY:Release DAViCal 0.9.9\nCREATED:20100318T210457Z\nX-APPLE-SORT-ORDER:2147483647\nDUE;VALUE=DATE:20100326\nEND:VTODO\nEND:VCALENDAR\n VTODO 13 1609 11 \N 11 /user2/.in/70399cd7-50a4-4be4-a665-af593e19a7fd.ics 8d057fb2fc98a8d36f2cc19f0d8fa16c 2011-11-12 18:03:01.534476+13 2011-11-12 18:03:01.534476+13 BEGIN:VCALENDAR\r\nPRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\r\nVERSION:2.0\r\nMETHOD:REQUEST\r\nBEGIN:VEVENT\r\nCREATED:20100319T103247Z\r\nLAST-MODIFIED:20100319T105620Z\r\nDTSTAMP:20100319T105620Z\r\nUID:70399cd7-50a4-4be4-a665-af593e19a7fd\r\nSUMMARY:An invited event. Black tie with pink polka dots is essential. \r\n Do not bring a leopard. Any leopards which do attend will be forcibly \r\n chained to a nearby fence.\r\nORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user4@example.ne\r\n t\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r2@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r3@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r1@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r5@example.net\r\nDTSTART:20100322T160000\r\nDTEND:20100322T170000\r\nX-MOZ-GENERATION:3\r\nTRANSP:OPAQUE\r\nX-MOZ-SEND-INVITATIONS:TRUE\r\nSEQUENCE:1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1611 1551 \N 11 /user2/home/70399cd7-50a4-4be4-a665-af593e19a7fd.ics ea6b316ca24db20f5eb37d1abd60f8c1 2011-11-12 18:03:01.534476+13 2011-11-12 18:03:01.534476+13 BEGIN:VCALENDAR\nPRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\nVERSION:2.0\nBEGIN:VEVENT\nCREATED:20100319T103247Z\nLAST-MODIFIED:20100319T105620Z\nDTSTAMP:20100319T105620Z\nUID:70399cd7-50a4-4be4-a665-af593e19a7fd\nSUMMARY:An invited event. Black tie with pink polka dots is essential. D\n o not bring a leopard. Any leopards which do attend will be forcibly chai\n ned to a nearby fence.\nORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user4@example.net\n \nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user2\n @example.net\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user3\n @example.net\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user1\n @example.net\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user5\n @example.net\nDTSTART:20100322T160000\nDTEND:20100322T170000\nX-MOZ-GENERATION:3\nTRANSP:OPAQUE\nX-MOZ-SEND-INVITATIONS:TRUE\nSEQUENCE:1\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 13 1612 11 \N 12 /user3/.in/70399cd7-50a4-4be4-a665-af593e19a7fd.ics 8d057fb2fc98a8d36f2cc19f0d8fa16c 2011-11-12 18:03:01.534476+13 2011-11-12 18:03:01.534476+13 BEGIN:VCALENDAR\r\nPRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\r\nVERSION:2.0\r\nMETHOD:REQUEST\r\nBEGIN:VEVENT\r\nCREATED:20100319T103247Z\r\nLAST-MODIFIED:20100319T105620Z\r\nDTSTAMP:20100319T105620Z\r\nUID:70399cd7-50a4-4be4-a665-af593e19a7fd\r\nSUMMARY:An invited event. Black tie with pink polka dots is essential. \r\n Do not bring a leopard. Any leopards which do attend will be forcibly \r\n chained to a nearby fence.\r\nORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user4@example.ne\r\n t\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r2@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r3@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r1@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r5@example.net\r\nDTSTART:20100322T160000\r\nDTEND:20100322T170000\r\nX-MOZ-GENERATION:3\r\nTRANSP:OPAQUE\r\nX-MOZ-SEND-INVITATIONS:TRUE\r\nSEQUENCE:1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1614 1613 \N 14 /user5/.in/70399cd7-50a4-4be4-a665-af593e19a7fd.ics 8d057fb2fc98a8d36f2cc19f0d8fa16c 2011-11-12 18:03:01.534476+13 2011-11-12 18:03:01.534476+13 BEGIN:VCALENDAR\r\nPRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\r\nVERSION:2.0\r\nMETHOD:REQUEST\r\nBEGIN:VEVENT\r\nCREATED:20100319T103247Z\r\nLAST-MODIFIED:20100319T105620Z\r\nDTSTAMP:20100319T105620Z\r\nUID:70399cd7-50a4-4be4-a665-af593e19a7fd\r\nSUMMARY:An invited event. Black tie with pink polka dots is essential. \r\n Do not bring a leopard. Any leopards which do attend will be forcibly \r\n chained to a nearby fence.\r\nORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user4@example.ne\r\n t\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r2@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r3@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r1@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:use\r\n r5@example.net\r\nDTSTART:20100322T160000\r\nDTEND:20100322T170000\r\nX-MOZ-GENERATION:3\r\nTRANSP:OPAQUE\r\nX-MOZ-SEND-INVITATIONS:TRUE\r\nSEQUENCE:1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1617 1616 \N 14 /user5/home/70399cd7-50a4-4be4-a665-af593e19a7fd.ics ea6b316ca24db20f5eb37d1abd60f8c1 2011-11-12 18:03:01.534476+13 2011-11-12 18:03:01.534476+13 BEGIN:VCALENDAR\nPRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\nVERSION:2.0\nBEGIN:VEVENT\nCREATED:20100319T103247Z\nLAST-MODIFIED:20100319T105620Z\nDTSTAMP:20100319T105620Z\nUID:70399cd7-50a4-4be4-a665-af593e19a7fd\nSUMMARY:An invited event. Black tie with pink polka dots is essential. D\n o not bring a leopard. Any leopards which do attend will be forcibly chai\n ned to a nearby fence.\nORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user4@example.net\n \nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user2\n @example.net\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user3\n @example.net\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user1\n @example.net\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user5\n @example.net\nDTSTART:20100322T160000\nDTEND:20100322T170000\nX-MOZ-GENERATION:3\nTRANSP:OPAQUE\nX-MOZ-SEND-INVITATIONS:TRUE\nSEQUENCE:1\nEND:VEVENT\nEND:VCALENDAR\n VEVENT 13 1618 14 \N 13 /user4/base/calendar/anothergoodleopard.ics ea6b316ca24db20f5eb37d1abd60f8c1 2010-03-19 23:32:47+13 2010-03-19 23:56:20+13 BEGIN:VCALENDAR\r\nPRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\r\nVERSION:2.0\r\nBEGIN:VEVENT\r\nCREATED:20100319T103247Z\r\nLAST-MODIFIED:20100319T105620Z\r\nDTSTAMP:20100319T105620Z\r\nUID:70399cd7-50a4-4be4-a665-af593e19a7fd\r\nSUMMARY:An invited event. Black tie with pink polka dots is essential. \r\n Do not bring a leopard. Any leopards which do attend will be forcibly \r\n chained to a nearby fence.\r\nORGANIZER;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=CHAIR:\r\n mailto:user4@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=1.2:mailto:user2@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=1.2:mailto:user3@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=3.8:mailto:user1@example.net\r\nATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=1.2:mailto:user5@example.net\r\nDTSTART:20100322T160000\r\nDTEND:20100322T170000\r\nX-MOZ-GENERATION:3\r\nTRANSP:OPAQUE\r\nX-MOZ-SEND-INVITATIONS:TRUE\r\nSEQUENCE:1\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n VEVENT 13 1610 1606 \N 13 /user4/base/newcalendar/73d1f980-ec28-012c-11f9-002421a2359e.ics 228540edb5690f6e8adb855aaa98ee98 2011-11-12 18:03:01.904358+13 2011-11-12 18:03:01.904358+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100125T214235Z\r\nSEQUENCE:1\r\nUID:73d1f980-ec28-012c-11f9-002421a2359e\r\nSUMMARY:HELLO\r\nDESCRIPTION:\r\nDTSTART;VALUE=DATE-TIME;TZID=America/Los_Angeles:20100105T140000\r\nCREATED:20100125T214226Z\r\nDTSTAMP:20100125T214235Z\r\nDURATION:PT1H\r\nLOCATION:\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 13 1620 1619 \N 13 /user4/base/newcalendar/939afe30-0f86-012d-1259-002421a2359e.ics 83516c50151ea62ca04fd02f4f6af695 2011-11-12 18:03:01.904358+13 2011-11-12 18:03:01.904358+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100311T220844Z\r\nSEQUENCE:18\r\nURL;VALUE=URI:http://www.macwfc.org\r\nUID:939afe30-0f86-012d-1259-002421a2359e\r\nSUMMARY:Youngberg Hill @ McMinniville Wine & Food Festival\r\nDESCRIPTION:March 12-14th McMinniville Wine & Food Festival\\nCome visit \r\n Youngberg Hill at this wonderful festival. \\nwww.macwfc.org\\n\\n\r\nDTSTART;TZID=America/Los_Angeles:20100312T110000\r\nCREATED:20100311T215422Z\r\nDTSTAMP:20100311T220844Z\r\nDURATION:P2DT5H\r\nLOCATION:\r\nX-VENUE:Evergreen Aviation\\, McMnnville OR\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 13 1621 1619 \N 10 /user1/addressbook/Jörg_Test-Roßdeutscher_3_0.vcf 5a32961b9938a7d6a354a757a8a1ea36 2011-11-12 18:03:32.210587+13 2011-11-12 18:03:32.210587+13 BEGIN:VCARD\r\nVERSION:3.0\r\nN:Test-Roßdeutscher;Jörg;;;\r\nFN:Jörg Test-Roßdeutscher\r\nORG:Factor Design AG;\r\nEMAIL;type=INTERNET;type=WORK;type=pref:joerg.rossdeutscher@factordesign.foo\r\nEMAIL;type=INTERNET;type=WORK:joerg@factordesign.foo\r\nEMAIL;type=INTERNET;type=HOME:joerg.rossdeutscher@gesindel.foo\r\nEMAIL;type=INTERNET;type=HOME:raettchen@gmail.bar\r\nTEL;type=WORK;type=pref:040 999999432571-43\r\nTEL;type=CELL:017799999978200\r\nTEL;type=HOME:040999999793017\r\nitem1.ADR;type=WORK;type=pref:;;abcStraße 58;Hamburg;;20357;Deutschland\r\nitem1.X-ABADR:de\r\nitem2.ADR;type=HOME:;;Gayens Weg 9;Hamburg;;22761;Deutschland\r\nitem2.X-ABADR:de\r\nNOTE:Technik\\, Web\\, DTP\\, SysAdmin\\, €-Vermögensverwalter\r\nitem3.URL;type=pref:www.gesindel.baz\r\nitem3.X-ABLabel:_$!!$_\r\nitem4.URL:www.factordesign.foo\r\nitem4.X-ABLabel:_$!!$_\r\nBDAY;value=date:1969-06-20\r\nX-ABUID:58AB933D-81D3-4095-8CB5-A63431AC934D\\:ABPerson\r\nEND:VCARD\r\n VCARD 10 1641 1631 \N 13 /user4/base/newcalendar/12cbff90-0f8a-012d-1259-002421a2359e.ics d7773e205d1992a23af9840dcf944e3b 2011-11-12 18:03:01.904358+13 2011-11-12 18:03:01.904358+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100311T222451Z\r\nSEQUENCE:11\r\nURL;VALUE=URI:http://www.theoregonwineandartauction.org/\r\nUID:12cbff90-0f8a-012d-1259-002421a2359e\r\nSUMMARY:Youngberg Hill @ Uncorked\\, Oregon Wine & Art Auction \r\nDESCRIPTION:July 10th - Uncorked\\, Oregon Wine & Art Auction\\n\\nCome joi\r\n n Youngberg Hill for this wonderful event.\r\nDTSTART;TZID=America/Los_Angeles:20100710T160000\r\nCREATED:20100311T221924Z\r\nDTSTAMP:20100311T222451Z\r\nDURATION:PT4H30M\r\nLOCATION:11400 Westland Lane\\, Dayton OR\r\nX-VENUE:The Methven Family Vineyards\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 13 1622 1619 \N 13 /user4/base/newcalendar/242afc80-0f8c-012d-1259-002421a2359e.ics 7387e025ed4fb1f0ec39e0dfca36942d 2011-11-12 18:03:01.904358+13 2011-11-12 18:03:01.904358+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100311T231118Z\r\nSEQUENCE:7\r\nUID:242afc80-0f8c-012d-1259-002421a2359e\r\nSUMMARY:Pre- IPNC Winemaker Dinner @ Youngberg Hill\r\nDESCRIPTION:July 22nd - PRE-IPNC Winemaker Dinner @ Youngberg Hill.\\n\\nD\r\n etails to follow.\r\nDTSTART;TZID=America/Los_Angeles:20100722T183000\r\nCREATED:20100311T223412Z\r\nDTSTAMP:20100311T231118Z\r\nDURATION:PT30M\r\nLOCATION:\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 13 1623 1619 \N 13 /user4/base/newcalendar/950ca060-0f87-012d-1259-002421a2359e.ics 7054218fa2a9e561b9e0ac0f1f8a6e0e 2011-11-12 18:03:01.904358+13 2011-11-12 18:03:01.904358+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100311T220308Z\r\nSEQUENCE:8\r\nURL;VALUE=URI:http://www.stephanie-inn.com\r\nUID:950ca060-0f87-012d-1259-002421a2359e\r\nSUMMARY:Youngberg Hill Winemaker Dinner @ The Stephanie Inn\r\nDESCRIPTION:May 2 - Stephanie Inn Winemaker Dinner @ Cannon Beach\\nCome \r\n join Youngberg Hill Vineyards & Inn for this wonderful experience. Detai\r\n ls at \\nwww.stephanie-inn.com\\n\\n\r\nDTSTART;TZID=America/Los_Angeles:20100502T180000\r\nCREATED:20100311T220134Z\r\nDTSTAMP:20100311T220308Z\r\nDURATION:PT3H30M\r\nLOCATION:Cannon Beach\\, OR\r\nX-VENUE:The Stephanie Inn\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 13 1624 1619 \N 13 /user4/base/newcalendar/4887b3b0-0f91-012d-1259-002421a2359e.ics 0e091d7cf1ea4f613199a2a60090a7e1 2011-11-12 18:03:01.904358+13 2011-11-12 18:03:01.904358+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100311T231101Z\r\nSEQUENCE:0\r\nUID:4887b3b0-0f91-012d-1259-002421a2359e\r\nSUMMARY:New Event\r\nDESCRIPTION:\r\nDTSTART;TZID=America/Los_Angeles:20100716T150000\r\nCREATED:20100311T231101Z\r\nDTSTAMP:20100311T231101Z\r\nDURATION:PT1H\r\nLOCATION:\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 13 1625 1619 \N 13 /user4/base/newcalendar/ed3beb90-0f8a-012d-1259-002421a2359e.ics a5972f272523b97d6cade1486a8b1c40 2011-11-12 18:03:01.904358+13 2011-11-12 18:03:01.904358+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100311T223312Z\r\nSEQUENCE:9\r\nURL;VALUE=URI:http://www.mcminnvilleava.org/event.htm\r\nUID:ed3beb90-0f8a-012d-1259-002421a2359e\r\nSUMMARY:Discover McMinnville AVA\r\nDESCRIPTION:July 17th - Discover McMinnville AVA\\n\\nParticipating Wineri\r\n es Include:\\nBrittan Vineyards\\, Coeur de Terre Vineyard\\, Coleman Viney\r\n ard\\, Maysara Vineyard\\, Seufert Winery\\, Stony Mountain Vineyard\\, Yamh\r\n ill Valley Vineyards and Youngberg Hill Vineyard\r\nDTSTART;TZID=America/Los_Angeles:20100717T100000\r\nCREATED:20100311T222531Z\r\nDTSTAMP:20100311T223312Z\r\nDURATION:PT7H\r\nLOCATION:16250 SW Oldsville Rd\\, McMinnville OR\r\nX-VENUE:Yamhill Valley Vineyards\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 13 1626 1619 \N 13 /user4/base/newcalendar/626c1f10-0f91-012d-1259-002421a2359e.ics 29665951ecbafebf365e664ecc7eb25f 2011-11-12 18:03:01.904358+13 2011-11-12 18:03:01.904358+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100312T064055Z\r\nSEQUENCE:9\r\nURL;VALUE=URI:http://www.youngberghill.com\r\nUID:626c1f10-0f91-012d-1259-002421a2359e\r\nSUMMARY:Linfield Chamber Benefit @ Youngberg Hill\r\nDESCRIPTION:August 12th - Linfield Chamber Benefit @ Youngberg Hill\\n\\nD\r\n etails to follow\r\nDTSTART;TZID=America/Los_Angeles:20100812T180000\r\nCREATED:20100311T231144Z\r\nDTSTAMP:20100312T064055Z\r\nDURATION:PT2H30M\r\nLOCATION:10660 SW Youngberg Hill Road\\, McMinniville OR\r\nX-VENUE:Youngberg Hill\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 13 1627 1619 \N 13 /user4/base/newcalendar/b0362430-0f88-012d-1259-002421a2359e.ics e9bdeacf16eb2b71f9625ab01113bb6b 2011-11-12 18:03:01.904358+13 2011-11-12 18:03:01.904358+13 BEGIN:VCALENDAR\r\nPRODID:-//davical.org//NONSGML AWL Calendar//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nLAST-MODIFIED:20100311T221206Z\r\nSEQUENCE:8\r\nURL;VALUE=URI:http://www.youngberghill.com\r\nUID:b0362430-0f88-012d-1259-002421a2359e\r\nSUMMARY:Youngberg Hill Vineyard & Inn - Memorial Weekend\r\nDESCRIPTION:Memorial Weekend\\nYoungberg Hill will be open from 11:00 to \r\n 5:00 on Saturday\\, Sunday\\, & Monday. We will be highlighting our 2007 J\r\n ordan & Natasha Block Pinot Noir as well as our newly released 2009 Pino\r\n t Gris. We will have cheeses\\, breads\\, and treats available\\, plus the \r\n greatest view.\\n\\nTasting fee of $5\\, complimentary tastings for our Win\r\n e Club members. \\n\r\nDTSTART;TZID=America/Los_Angeles:20100529T110000\r\nCREATED:20100311T220929Z\r\nDTSTAMP:20100311T221206Z\r\nDURATION:P2DT6H\r\nLOCATION:10660 SW Youngberg Hill Road\r\nX-VENUE:McMinnville\\, OR\r\nEND:VEVENT\r\nBEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-TZINFO:America/Los_Angeles[2007g/Partial@883612800000]\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:19980405T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20060403T100000Z;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:19981025T020000\r\nRRULE:FREQ=YEARLY;UNTIL=20061030T100000Z;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0700\r\nTZOFFSETFROM:-0800\r\nTZNAME:America/Los_Angeles(DST)\r\nDTSTART:20070311T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0800\r\nTZOFFSETFROM:-0700\r\nTZNAME:America/Los_Angeles(STD)\r\nDTSTART:20071104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n VEVENT 13 1628 1619 \N 10 /user1/addressbook/andrew_mcmillan.vcf 24bae2a7f81c0a79413a656c06d8326b 2011-11-12 18:03:25.677695+13 2011-11-12 18:03:25.677695+13 BEGIN:VCARD\r\nVERSION:3.0\r\nREV:2010-03-29T09:23:34Z\r\nUID:pas-id-4BB0719600000000\r\nX-SKYPE;X-EVOLUTION-UI-SLOT=1;TYPE=HOME:karora__\r\nX-JABBER;X-EVOLUTION-UI-SLOT=3;TYPE=HOME:karora@irc.oftc.net\r\nTEL;X-EVOLUTION-UI-SLOT=3;TYPE=CELL:+64 22 123 4567\r\nTEL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME,VOICE:+64 4 123 4567\r\nTEL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK,VOICE:+64 22 123 4567\r\nEMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:andrew@mcmillan.net.nz\r\nEMAIL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK:andrew@morphoss.com\r\nLABEL;TYPE=HOME:16 Kaka Place\\nPorikana\\n4173\\nNew Zealand\r\nADR;TYPE=HOME:;;16 Kaka Place;Porikana;;4173;New Zealand\r\nX-MOZILLA-HTML:FALSE\r\nX-EVOLUTION-VIDEO-URL:\r\nFBURL:https://davical.morphoss.com/freebusy.php/andrew@morphoss.com\r\nCALADRURI:mailto:andrew@morphoss.com\r\nCALURI:https://dotcal.com/karora\r\nX-EVOLUTION-BLOG-URL:http://andrew.mcmillan.net.nz/\r\nCATEGORIES:Developer,Personal,Debian,\r\nX-EVOLUTION-FILE-AS:McMillan\\, Andrew\r\nN:McMillan;Andrew;Watson;;\r\nFN:Andrew Watson McMillan\r\nNOTE:Primary author of DAViCal CalDAV Server.\r\nX-EVOLUTION-SPOUSE:Heather Buchanan\r\nX-EVOLUTION-ANNIVERSARY:1989-04-22\r\nBDAY:1958-07-26\r\nNICKNAME:karora\r\nX-EVOLUTION-ASSISTANT:\r\nX-EVOLUTION-MANAGER:\r\nROLE:Geek\r\nORG:dotCal;;Porirua\r\nTITLE:Chief Technology Officer\r\nURL:http://andrew.mcmillan.net.nz/\r\nEND:VCARD\r\n VCARD 10 1632 1631 \N 10 /user1/addressbook/donald_kelly.vcf fada70a725708bce8521efb87acfa629 2011-11-12 18:03:26.362103+13 2011-11-12 18:03:26.362103+13 begin:vcard\r\nfn:Donald Kelly\r\nn:Kelly;Donald;;;\r\norg:Esposo Designs Ltd\r\nadr:;;25 Rintoul St;Newtown;Wellington;;New Zealand\r\nemail;type=internet:donald@example.co.nz\r\ntitle:Proprietor\r\ntel;type=work:+64 4 347 4747\r\ntel;type=cell:+64 2 1234-4321\r\nx-mozilla-html:TRUE\r\nurl:www.example.co.nz\r\nversion:2.1\r\nend:vcard\r\n VCARD 10 1633 1631 \N 10 /user1/addressbook/PHRsMa4mvY.vcf 70da8e376791d07c9fae3dbda0b40314 2011-11-12 18:03:26.824354+13 2011-11-12 18:03:26.824354+13 BEGIN:VCARD\r\nCLASS:PUBLIC\r\nEMAIL:zzz@xxx.ru\r\nFN:zzz\r\nN:zzz;;;;\r\nNAME:zzz\r\nREV:2010-11-18T14:27:41\r\nUID:PHRsMa4mvY\r\nVERSION:3.0\r\nEND:VCARD\r\n VCARD 10 1634 1631 \N 10 /user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf 0ea4d7759e103090c6494505b5da0f11 2011-11-12 18:03:28.435723+13 2011-11-12 18:03:28.770336+13 BEGIN:VCARD\r\nVERSION:3.0\r\nN:McMillan;Andrew;;;\r\nFN:Morphoss Ltd\r\nORG:Morphoss Ltd;\r\nEMAIL;type=INTERNET;type=WORK;type=pref:andrew+davical@morphoss.com\r\nTEL;type=WORK;type=pref:+64272332426\r\nPHOTO;BASE64:\r\n /9j/4AAQSkZJRgABAQAAAQABAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAA\r\n AqACAAQAAAABAAAA2qADAAQAAAABAAAA2gAAAAD/2wBDAAIBAQIBAQICAQICAgICAwUDAwMDAwYE\r\n BAMFBwYHBwcGBgYHCAsJBwgKCAYGCQ0JCgsLDAwMBwkNDg0MDgsMDAv/2wBDAQICAgMCAwUDAwUL\r\n CAYICwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwv/wAAR\r\n CADaANoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED\r\n AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol\r\n JicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW\r\n l5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3\r\n +Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3\r\n AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5\r\n OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan\r\n qKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIR\r\n AxEAPwD6Nuf2mfHfju2aDwb488cWzx/6uf8At+6AY+/7zJFR2fxp+IXhvwg7a18U/Gmoar5x3+R4\r\n kuXWL0UjzOOPXBr5s+FF9c/EnUp9GfUptK0bSxC2rtA5S5uWlz5dsjj7gKqWcj5sYA6mvdE/Zo8F\r\n eD7iGf4TW82lXd1bnzw0ZKSknuScsepyfwruhR5IObdj1YzVWoqcUi6/7TPxJzgfEHxx/wCD66/+\r\n OUwftMfErP8AyULxz/4Pbr/45XOa3oF94akxrEOIz0nj5jP1/u/jVIR7lyvO78qyjKMlc3qYdxvd\r\n HdaN+1f8StJug7eO/F9yp6pNrNy4P5yV5t8eNG+LvxjuZtX/AGdf2gfjF4U8QyAltGn8b6mdNu2/\r\n uxHz/wByT2xxWjHHnHr2q/o9jNdX0EdgG86RwECjkkmuiKUnoTQrTwdT2lPR+mn4mJ/wSb8eftBS\r\n a/8AFHUP2iviL8Ur650RY9MttP1nxTfXsUM+Gd3RZZWCnhBkdj719g6b8VvGlhpdrBP4u8TzTIix\r\n s76pOS7dyTvye9VNC8OQ+HPDkjiKOO+1N42vJFHM8ioAWb1OEUUxIPMu0DAYUFzj/PvUVYq6ujqq\r\n VvrlWeIlFJvolotDWf4t+Ln+VvFniZWB4xqk/P8A4/Ug+MXi9WVp/FPiJGXgMNRmKN/vLu/WsWS3\r\n 8wncAcfpQLd05ALr6d6zi+RidGEuh0bfFnxVdFQfFPiOCU/dxqc2x/od9Zmp/EbxvExNv4u8Uq2f\r\n unVZ8H6HfVBLcoD9mIIPWNvun/CrNrNkeVKpcH/lk/3h/unvW6cJoydFRW2hRb41eNoXKTeLfFAY\r\n dc6pP/8AF1Inxt8ZZw3i3xP/AODWf/4up7/w9DqcZa3+bHVejpWBfaDJZFiQWQHrjkfUU+VLoR7J\r\n PVI34fjV4w7+LPEx/wC4pOf/AGerEXxp8X8Z8V+JD/3E5v8A4uuNCkdPpUsUhU80WRm6S7Hbw/GP\r\n xaw+bxT4jz/2E5v/AIqrEPxf8WHk+KfEJ+upTf8AxVcRFcDHB5q7a3fQtzVLl7Gcqa7HaRfFrxUe\r\n vifxCf8AuJTf/FVZi+K/ik9fEviD/wAGE3/xVclBIp+7VuCQE/N+dXyx7GMoHVR/FLxPj/kZNf8A\r\n /BhN/wDFVYh+KPiZ/wDmYtd9P+P+X/4quYj6DPSrERyevWqjGNjNxTOoi+JviQn5vEGt/X7fL/8A\r\n FVdtviV4hB/ea9rR/wC32X/4quWgPTPrV2AZaq5Y9jNrodXB8RdfOM65q5/7fJP/AIqr9t491xvv\r\n 6zq343kn/wAVXMWw5BxzWhaL0zVKMX0IsdFB441pz/yF9UP/AG9Sf41dHjDWMf8AIW1P/wACn/xr\r\n DtFwcVc2j0rVQj2GnY/OHVP2YdL8S+K9X1fwlqV3obaldRy3EMKgxTPEuI5MdmCtjivUPC3hFPDO\r\n mpF58t1MFAaaQ5Zq+dP+CbPxj8bfFjwdf/8AC2rGSwmsHEZSY5dyABkd8GvqWKIk5HcdK8HFe0pS\r\n dKTvY+mwcKbgqkI2Kc9ms6lZVDAjBBGQa5HXfhTBNK0uhk2kpySnWNj9O34V3XkEnLUNB5gOBXKp\r\n OOx6TSkrNHjd7oN7os23VoWT+645U/Q16d+zx4Xh1DVbi7lQSS2ygcjiInoPrjn2zWpdWMX2Vjcq\r\n rKoJIIyK7L9n7w4tv4PF15YWTUJWnOBjIJ4/SvSwdR1JO62PLx1CNFKUXubmux+UbaH/AJ5xmRh7\r\n scD9BVG0hy87nsFQfz/wpbXV28Satq8xCiC3vntICP4liAUn/vsP+VXbe3H2BWI5lZm/XA/lVVZc\r\n zuYULOKt1Kiwk47U9bc9+lWktznnr0p4t+fasWdKKTWYPQEHsRSSW2VxcqWBPDDtWkLbdinfZwRg\r\n jr2qLlLYzdkkBBfdKqjhwf3i/j/EPrU4Md9HuusMBx5qDAHsw7VZax7xnn0PSoXtlMv7tjDORgEf\r\n xfh3FWqzjuQ6S6GTq/hMffhCoTyCPun/AArDudPktZNtwpUn9a662vXiupYHAjZAGOeYnB6e6Hg+\r\n 1Sz6XDqSFCoWQjPlN391P+FbxkpK6MXE4kRnrTo5Cg4Na2p+HZbJ8wgso7H7w/xrNKYb09qG7EOH\r\n cfFetGPmq5a6wA2HNZjdajdypOKpTM5UvI6u01RXxzxWjBOGHymuCjvGjbIY8e9XLPxRJbt8+SB3\r\n rRTMHQfQ723lGcVo2pyRj1rjdP8AF8MoxI20j1rX0fxlY3GrW9nFMrXFw21FHOTWikcs4NdDsLUE\r\n 4FaVmmG96q29o6kAjB/lV61gKkE1Sepm4GhZrk1dC8dTUFlEABV8R8VvF32Iasfin4F+Mviz4KeG\r\n NGk+H6x+IIZbqSDUPPP+lS7chTGf4x8jNj0ZcZJr6y+Dn7QmifFDwVYajcXEOmXt1K1q1ncOEl89\r\n eGRVPJ618XeJLa5l1vwzofhNngmskikiGcOssxQw5PYiMWIP/XRq9A+GusmPxHqt34Us7Fl8PJLN\r\n Y30sQeYqWSKIZPeQ/Zj/ANtmrPHYenWjzJa738r2V/Xp1sZ5bmtWg+WWq2/C/wArep9qIgYZ7HpT\r\n lgBA7V4X4C/bIiuLaYeM7Tb5MHnrJEcb0yApIPdt0Z/4GK7o/tSeB9K0ywn8a+INM0Ga+IUW19Os\r\n csTEKcOP4eHXk4HzCvCq0J03aUT7Khj6FZXU0dT4oZotNaOHO+4IiXHqxx/WvbPBmmp4f8O2yHCp\r\n Zwbj+AzXjHhyW28c+NNCTRrm3vLORzdCWGQSI6qOCGBIIya941Rfsfh6bYELTAQqGGQc9f0BrtwU\r\n eWm5PqcmYz55qKfQ4/S9HXSNHWGyXH3pCOu53Jdj+LMavwxr9miSM58tAv6VmrFdaTwrEoP4JGLI\r\n fo/Vfo2frV2z1CK6lEcwaCY/wPwW/wB09G/CokiadtEWRDzzUq2xxU0cZ/j+Ye3Wp0jDdOahnQkV\r\n RbZ+7Tzb46iraRYwAPxp6w57VDKSKYtSBk44rPurbzPEFqP7kbsf0H9a3GiwORXLeJvHOl+D9cNz\r\n 4ou4rS3WDYHc9WznAHU9KiWhVuhctbbN/ftIMhSi/kuf601rMqn+j42/e8tugPqD1U/SrOg39vrl\r\n hNeaRKJ4Lli0bjIBGAO/0q7NYrJz0Ydx1ojJrVCSUlqZf2oSjZdo0g9D/rU+n94frWfqnh2O8iMt\r\n kQ4/vKOR9RWvdWIYf6Qu4Kchh1FU5kkt28xSx/6aJ97/AIEOjfzreNW/xESpNbHGajZS2Tfvhlex\r\n HQ1nTXOMktiut17UopoSJlQMeN68o31HY/WuG8QWcltuaJsL125/kacpWBUXJXHT6moB3NVKfXVQ\r\n nJFc5qWvi3cqzfN0x3rLudVMsJk1GQRxDnk4/OodRomVFHTXXiySQlLQjjqx7f41q/CHxhZ6b8UN\r\n J+3O00gnyyj5mYYNeSan4vkv3MGhkxx9DLjk/wC6K2/g8v2H4g6Q7kkm6QMxOc5OOv41yyx3K+WJ\r\n r/Z/uuU9D74tLa18RWS3GjSK6n07exHaozYNDJtkXDVyOkzXOjXXnaVIY37gj5XHoRXeaB4ks/FK\r\n rDeKLe8A+6T191PevTw+LhiFyvSR5OKwUqGq1RFbQlT7VcGcd6ln017A/P8AMh6MOn4+lHk/Wu5X\r\n WjR50j8kdH8T/Dj4va02rarDL4T8SSROq3cTb7fzWjKLIVPdSVYdOUX0q7c/s9at4G+GV4vhWW31\r\n UareoBdWJ3rFAikRFsdMPJGx9BbD1FfKUvh3xF4P+PieA9A+0a3eSaWmprmLaVBRJPKPPLBZYsnj\r\n lj6V6Z8Kv2mNT8E6jHFYXl3p1ypAe1mBAI90Pak17WOj00+7p6Hnxw0FLnirPXbbXd22v59ToTpE\r\n N8jxuDDBf3KwjcMeXbQqGc/grj8bc+lfLPxE8L6v+0J8TfE+tw38tuxuTGtu0IljfZl2DDrwZNnB\r\n H+rHpX3lF8WvBvxn057T4macdMvpYZLddS08BSgkVlYlehyHYf8AAjXndn+xHrvw5tJtQ+EWo2vj\r\n HTpvMkeS3G26G9izF4ick5P8Oa7MG17VuTtppfv6/wDDGeLpclDkaum1e2rUVe+nm30PO/2I/iHr\r\n /wCzJNa3HgXVXvrq3R1u9PnkY20pZiflQ8x44AxxgfjX6wW3iLUfF1j4EfXbQadeXemNrN/ao5dY\r\n HaNEWPdgZwZH7fw1+fn7GnwktvFnxxbRtcgCXWryRwuHj+ZERi8gwRw3A/I1+m2vWytr8/kooW3R\r\n LZOPuhRkj82P5Us2jy8seTll18/61N8jptuShV56d9PLuvyMSSIlm2oXVU3Ed+uP8aqHSLe+RhAQ\r\n ATkxsuVz9O31GK3I7YpHKx6swUfgM/1qCewSc5cYYdGHBFeFdp6H1qSluZEX2rSXAB3Rj+GViVx7\r\n SdR9G/OtO11GO4kCNmKYj7j8E/T1HuKjlml0xHN0BNEP4h97H071yni/4haZpVkDFdwQvJIUW2kX\r\n JY4znacbfqMUpW6jV4bHb31/DpFlLc6pNFBbQKXkkdgFQAZJJPQVx2h/tLeDfEOrrYaTqqy3EpIh\r\n JgkRJ8dTGzKA4A5yCa+Ov2t/245hpmr6KmV02yeGK9dwZVILKZArj+Hy88EEnJ9K8W8a/tpTvpmn\r\n DwO9nYOBvjvrhzJ5mekrL0XGfU5z2qGmmS6rufoV8X/2xfBHw8e7sLzxDp39o2S77i3WYGWBcEkk\r\n Dp06V8I/FL/gojH8Q/Gd5DpKxX1lbzRyC3dWdn43Abh04+nPrXwT8cf2ttQ8K/EvVYvFN4ur3l4j\r\n JNNHhI5VLMygBc8EuxOf6V4NN+07rei3k62Ny9rDOACI3OSoOVBPfHvV+yja8tjOWJSXxWufvR+y\r\n r+1Nc/EbxPFENRl02xihE0Vi0gJmLMCxYjgjB6HHJB7V9gaB4lsfEtuW02aOR1JV1DAlSOxxX83f\r\n wf8A25byw02wNxqE9pc2S7VklzjHbkc49vevtP8AZc/4KKeIW1bTyusWZ3EbjaQlVfngMp+979Kz\r\n lh/ZJtbGscRe3+W6P17ltwVyAD71QvLTZkxcZ7V4R4G/bot/FWmWokSFbl5PLkEf7wg9ztyOPzr3\r\n Lwz4ih8W6LHdWjI6yruBUEBh6gHkVDi46s6ozUjkfE0eLolD5Uh68ZDfUd643xBftBG0cwEe7sT+\r\n 7b6H+H6Hiu/8TW4ac+YM/WuB8WWhIZc5Ujoa5XNwZ3xgpRPLfHviy00m9UbWe4wQI9vP5+lcrJe3\r\n fiObdqTAIOViXIVf8TW78Q9OV3tGAztkdCfTpxVHTbbaBtyccVx4qtJy5U9Dow9GKjzLclsbMRqM\r\n D61veFGNj4jsJo+PKuEb6YYVn28JA5XNXbRjDcowAypB/KsqOjQq12mfbkMO4ZxwwzTmstxVo8qy\r\n nKkHBB9Qak0c/adKtZRyJIlYe+QDVsR4H0rqSsea1ojY8LeOntALbxKPNiPyiXGf++h/WurSw0yV\r\n AyTJtYZGJeMV555IYncKT7IO3HtnpXo0swnTXLLU82tl8KkuaDsfjt+zxqsnxU/aP+JPiyX91JbG\r\n LQoXA/1ElwxklVT/ALEc8i+32celW774IaD8Tf22fF2teJDJFpXhrTLeG+USfItw2JJOv3QkZlGO\r\n P9Sa+gf2bvgx8OvDWmy/8Kr1c6gt/q82t3iXTATzySH5l/75eZR0++PSvKV+Gfifwr8CvFf/AAsW\r\n wnsfGnxX8Tz2rw4yYxez+UoUrn5Vga7bI7MK75c1NtR00SPnOV72PP8A4Y/A7xj43+F1r428AWkV\r\n 1p2qvLc2+lpNm9gtS7eUxRuWDJtYYycEVteAfinrXgrWgIZL3TL2BsNGwKMD6Mpr6J0fwJeeBdDs\r\n oLW3ls4LSNY7eSL7iKoAADA4HQcZB9q0dRi0zxqkafFLR7LVmiIKXuzZcRqP9scn8ciu1Jvrc6lQ\r\n a2Z7R+yF4Ai+MOu+HPinrmlxadqtla3NndTImxdSOFWObb/eCmUFu/HpXsUcZuY2ncEG4dpjn/aJ\r\n I/QgUfCLxOuu/AeK80uwTS7J4zZ6dGihA8IIiR9oPGTuIHoAe9XbuMQwFY8AAbR/KssS72X9ehvg\r\n KMaTk4rr+JmG3K26D+9lvzqhq95FpFq812dqKMk1uXUW18L/AAjA/CvFf2zviJN4E+FV7/YiySah\r\n Iu6IxttaIDktn6ZFcTV9j1XLlVzzj9qf9tuD4TweXplncXUkMu2cx4PljB4/3uOlflX+2J/wUa+I\r\n +seNNZv/AAT4uuItFd2W2gi0+JWgQ4+QyFSSeOSD1H0r6H+Jsmr6zoWoQ65NqH2+4GYYZYSY8MnS\r\n Qjq3OSRmvjH42Q6NoPg29efVFEMCPm1aZZSk4bBL9O44XnpnnIqoW5tjCs1zas8/+GX7XviW+8Wy\r\n x+OtUlv7a4cSyQ3LkoeMHgnk4x+Vc38Xfj63hq6vLf4d6kXtnMkawyR5EKsQTsbPTsOOlef+DPAO\r\n pfEPWJrjSVeC08wlZNuAR7V39p+yrNqcDfblm8wnhvWtJuC6HoYXLcZmFO9OHo3+Z4TrPiC48Q3s\r\n s93IXlf5yx/lULIbpPOib5j95T2r3Zf2MrkM7tKY1Xr8pxipNO/Ywvb19sDuT3OzrzWN01dsS4Qz\r\n B3cl+J5tompQad9meaIXS4ACbiN3HTjtX0h4G8R6Kh0d9ImS0uvIZJlQ8BvlwPfv1xjArD0v9iTU\r\n dPzLZShZkX92JV3oT7is/wAOfATxT4M103N9pjRy26yOMy7ophg8KMdec1q60ZWRU8lxeFsqkfuP\r\n tf8AZ98U3hlsJtF1HyNQmcQoYmyQmQDx64yc+2O9fXPwB/aG8Q/DTxpbaLqGvDWrC8Ls0d7AElic\r\n EAhWXrnp3HBr8sfgX8VvEvwo8X2qzRCOSbDB2G5kU9NpzgDmvq3wH+0Zp194zsZ9eivNtmPN3uAZ\r\n EbI7gYxjPH+NZSiptKxzSUqV0/kfqdc6umqFCHQtLGH2g/Mn1/Oua8U2u7JHoa4n4U/G/SfiHaWt\r\n 5pWoWzyugTarhW/EZ/T2rv8AW0JiUsOSK8qrFp6ntUJKUVZni3jrSPscEW9ifNuZnHsCRxWbaL5e\r\n 0LXT/EyLNlZMcE+fMufyrnrZMgZAzXDiF+8+R1YXWl95YjJB+Xj1qZPvjp+FNVdp7D8acMbz14NT\r\n DdNBUR9v/Dhv7T8AaLOOfNsoW/8AHBW2bQha5v8AZ8uvt/wd0Bic7bYJ/wB8kj+ldutvvU8V22ue\r\n Yo+6jMW2/P3pfJx2rR+xkrkDmmm1bPQ0WMZKx+A2mX/jv4WRWF9cWd9LZ3lst7FcW5LOkbM4Uvt6\r\n E+WxA9CD3Fe5fCD/AIKH6nor20fiV4dTjt3DpHeIPMjYcZUnow55616bDYR2WkW7RwpNYRqLi2iI\r\n 4a2tUHkD/gf2K3Hv9p968X/4KIfDXRfBPws0i30azT/hIrk2mnW86JiQzyMXkk46ny7aU8/89s19\r\n GsSp2jKP9f12Z8ZHSV1ofXnwy/bN8D/FKJYdRmGi6hMNp34COffsw+tdr468DaInhN9WWezitHG2\r\n O5t3ESu5HyrtPyFj2AKk9ga/Kz4W+ANfbxjouh+G7s3f2+8uIhPMScxRSLEHGPVzx7MK/S39hz4f\r\n a5Jd3fh3xFEmteF5ozDqcU+WgO1soyk9G3KGXHIxmtuRN+49dzoVWfLe3kfVWquPB2jeCvDemxIg\r\n dT5ijpHHbwgE4/32Srkv7yaNXA5bJ+gGab4o0k3nxJS/lkLfYtNFoqH+FpJPMdvxCxinRYN028/d\r\n j49SSf8A61c1Z3k/uO/Cq0SvK3zYY/Svjb9s/wCLhvNTvoPDmp6TEunCWKYSHzJG5wy4+6OmOa+z\r\n Lq3Ei4cZ9a/Fj/gq58R/EH7L/iPxdp3gvxTPZxX12b9o5lWWKQSMfkUEZDgjkZIJ578YqPM7I6qk\r\n mle2h5b+3x/wUv1Hwbpq6P4VuI/t7ECaMWrxowwQDuLYxjHCnnvXwz4MPiH9qf4kPc+L7uSSxifz\r\n Jwo2RL6KqDAz7+leffE3xtf+PvFEt3rV/d6jcztlnmfc2T29vwr6s/Zq8CQeCvBNrEqqLmVd8x7s\r\n 5/zitHJUV7u5tk+GeYYr3vgjv59j0XwN4I03w9aw21hbKiRLtA28Cu1stJiZM26qMnnArDsm+zRI\r\n zHORjGOldDoVwWQgnv27159Rtn67l9KLSS6Ej2kCIwlQN2PHFdN8PNDtZrxVu4kCdeBWVBpHmlTK\r\n uVfnGeldX4Wsi17CsKgpjDc4K1F0j6KlKnCJ6XpPgHTdQsszW8TuThTjoK15v2b7DxFphjlhB342\r\n sAMqfasPw1rn2W+WMlkBO1RnvX0t8HPBEviAQlA8nmAEhRn9KuPvaI4cVGl7N+0St5nyD4+/4Jxy\r\n eI/C14loxt9Qs1aSzcIdr9Tt9gTXx58Pfi1c6B8RLzQ/HhuLKaycwSxOv+qdDjbj3P5g1+/OmfDl\r\n YNKeO5hV14XDivxL/wCC8HwIj/Z8/ai0/wASeHbVrW18XWLFwowrXMLAN+JV0P4V2Qbtys/LuIcJ\r\n Spr29NaXs/8AP9D1L4U/En/hHvEEjaB4nSxv9SgGLZosAtnAzv8Aug+tfbn7PXxv1jxoq6f8QXga\r\n /Vf4F2grjCkc98c5r8cP2Y/G8nifWreC0sby+uJmBu2aQMwA6DJ+6o49q/U/9hp5bjw/qs+oLE81\r\n sUSNWkDPbwgk7F7/AHhnP0FY14JwfNujw8LWm6istD1z4ihZtMtyjZ2Xcqn6+lc3bR8DvW54ztjb\r\n 6QxY5WXUZXU56ggGsS2YZG2vDxK9/wCR9Bgr+yu+7LCLjhiaeOW5HOeTTUUk8fnSoTkjoRWKKqO5\r\n 9h/snXP2v4Kabg58mSWP8nP+Nep2q7+2K8Z/Ys1AT/COWPvb38ox9Qp/rXtNkcqN3Nd55mys+7LM\r\n MOcAVN9gB7fpSQD5uRxVsNgU0jJ6H5x3Hw4uf+EztLEWMtrYReTbW6yLx5MI83H1P2bTk+rsPWvk\r\n f9vHxoPEn7SWi6Pp7ebH4cs7nXiBypI/cW2T/tC1jIH/AE3961vgj/wVB13RkhtPEdxFqsKYXy7l\r\n dsgH41315c/BX9o7X7jV9UjvfCHii9hht2vIm82BliZGjUxk7doMadCMhRmvoHhJRlZ6/wBfefEU\r\n 5X/qxyn7JHgR7H4l3lxJEzReGbCLTUJHPnKglk/EvND+Vfq78DfACeBfAekaesapMsCNOQOXkIyx\r\n PvnNfI/7Hv7Lf/COTpGviDTPE6ahqpv7m7gHlvIrSGVt0ZPBJEa4GQAor7tCCws5ZXOBFGSSe3Fd\r\n OFg4OU5eh1yklCMV5s4e/wDF2kaj4z1Gy0jU7OTUIpR59oZR5sZ2rjjOR8u386fdTCJsX0bRejMP\r\n l/766V+WvxZ+KV34k+NXiTxBpl3NBLe6nNLFLE5VggfamCP9lVr0L4Yf8FBfHXgWNbbWruLxBYgA\r\n NFfAmTHtIOfzzUzpRqa9S6OM5NJLQ+3/AIg/EFPBrWMEbxPd6nP9ntEkfCu2xmPPsEJ9+B3r+cH/\r\n AILVfG6++KP7ZfieM6ot9o1hdNbWrx/6vcoHmAAddrEqD3xnvX6Kf8FRP+CmsXh/4M6B4j8D6Ze2\r\n eq6feSRtCHAEEkkeElVwMEAqwIKjO6vxT+M/7QeqfGG0tbbxHDYA6fPcSx3EUGyZ/Ok3srkfeAbO\r\n OmMmsacHSbk/Q0r4pSjo9DkvCWnrqHjCyjPCvMpOTyBnrX2z8PiFsYVUZCgAc9RXyH8A9AbxL8SL\r\n SPqq5d++AP8AIr7H8IRQ2wRnLKiMBXNXezsfUcLQtSlLuztIZkuLbGM7cZOOtbXhyMCZWj3HecAe\r\n lcxDqlvJcEWU0ZPQgHGa3vDc88dwAVJSTkcg4NcUr2ufpOB/dJOWzPR9F0P7R+9fkR8le5q94fv1\r\n tb6aSQkAAgDH86zNF8RL9jLuQoC/Mc+1Q+GLs6zeSR4ByxYkdwK57NJntdLt6HrPw80FdZ1QPcnK\r\n jawPevtH4K3h0PRVihi+YqqqwHOTXy7+zjoUeqZChdh43E56da+qPhtd20SwKpHlxHO/d9444I+l\r\n duHukeZmlSM4ci1sfQXw7tf+EliWPbmKBAc471+UX/B0/wCDUX4a/Di9g2I1rrd0Ax+9tMKgj9Af\r\n wr9eP2cdOXWzP9j+6FAGP4q/MX/g6J8Lz33hHwBodjB59zeXN3dLtXeYyFABxXpOnzcrW5+cZxXX\r\n s5Um+x+W37Jt9FqUMdqsn2K9sD9qstQjH7xeu63fjDoxGQD0Nfqj+wv4lvfFrXMPiC0hivo7YFZo\r\n ovKjvIA3Lbf4Tlun86/Pj4Efs6PCNBl8KLcww3YSSaQj5Y7xAwKj1RgM/ifSv04/YN0tNS+G0erX\r\n dt5Vy6vEjHkqu750J74ZePbFcmISim2eFhXzyjFd/wCvM7f4kRpFoFusYchLpgcnPODmuUhAA7c8\r\n Vv8Aja5mm0a58wkrFqkir7DBrnoDnH0rwMUrzXofTYP+F82W4+Op7UPKF6dKjBJGfzpC27gnpWMY\r\n 9WVNn0/+wbc/avCGuwZOYrxHx6bk/wDsa+g7aEgZ7Gvmv/gnveCW88S2rHjZBL+rj+tfUlvZbkBF\r\n dyWh5j+0vNkdswEnzdKvADHSq72JRjjNJ+8HrVpGLPxLtvg/4D+JerfE/wAe+OdPiHh7RJ5jZi3J\r\n h22ljbSSuVK4wWWK0jz/ANNz3rzz4MfA/Vte8E+DtQhv/KvNf0w6rc28gwtpEWmZBnr/AKq3kc59\r\n vWu//aehf4T/ALBmh+EtJhkGsfEnUbDw5DHg73a8kF9cfiLaKzQ/XFeqeGNCttIvdSygW3gt7bw9\r\n Zqg42FhajH1isrtv+2+e9fQYeUnonu7L8O/rf5bnwtRtWS6l/wDZg8K+LE8Y6fZ/DKS8k1MMrjym\r\n ICjg7n7BR3Jr9BP2iPH178MP2W/Ees+JpoW1W10lw8kfyo85TauPq7LXN/sS+BNP8KfDUXmmWqR3\r\n OosWlmI+eQA8ZPp7VwX/AAV18cnQ/wBnSz0S1YibXtRijYDqY48yt+qIPxr0cRZJpbGibS956n5s\r\n fayAVLZ24GSetMkvjHHuRuR2qoztGSsgPB5zVe6nfqn3T2rj5uoJM8m/bW1LS9Y+C+s2fi8ExCHf\r\n F/eRwflYfjX5fXqeXdOFfeATz61+pP7UHwTb45/DufSY7qWynJDpLGu48c7SMjIPpmvzb+Kfwrvv\r\n hV4qudL1lhI0bfI4UrvXPUg8qeOlZSvPbcubvoemfsXaHDI2salKy+dEUgUHqAQSf1Fev6j4k8yb\r\n yIJNuXwyg8n8a8c+A/hK9sfAE+q+Hr+S1uGlZZo9u5ZYxjIHcN1wRXZ+OfAc99qbp4etoLUOq7pX\r\n UOwGOozyT71zpK75mfc5NOdHDw5I7a/edvfxXttatNoU1oZ9o+SV8FfeqnhT4zeI/Duqbbq1F2iH\r\n BMcqsvucZzXAXvwO1iSGx/sh5pCFKSiQuUcZJzlfr0rR17wVNpFlYQ2vkxtbxlbh1BQzEk5IPt0G\r\n fShxp9X/AF956tPHY2pN/u+W3no/wPdvCPxj/wCEwaS3tlZHYhJEU/dOea9Gm1C78FWklyI5NksK\r\n lcDGctg18s/swfb5viDNa+GY0uIojgmQEEsDg59K+8vjF4yv5/2a7PTNf8Nafo+tWzgw6i1ySl1G\r\n wKgLHs5bdwDuxuxmuepStU5Fse5SzWpHB+2n1dr9DjfAP7bdt8NlS3vY5toOAFPXsc5r6V+Bf7Xm\r\n mfEPWbKHTGk2zEKybuF9s1+ZPiG41iCS4fbNK9oRtT7PGfNHcnKkg17f+xf8TfEF3erd+HvDwuBb\r\n SrF5JQJLPIT92Ncjd1HOO9bU6SWt9Ec7z2Sm4VYtf9u3/FXP6Jf2KtPW60cTmI+S9uHVuhU5wVP5\r\n gg+h9q/M7/g5pmGhfEv4e20bj7RPDLLChXPmRrMpPT0B5PpX15+y5/wULtPh18E9CHiHQnklvLh7\r\n aSG3mJuYGQcpJAyK6Nk8DLA84Jr47/4L863aftE/tM/ASTQ7qztbCbQ7rUA0U/nTSQTzIiytGB+7\r\n RtpUB8HIbgba3hze15ls/wBEz4DH4idavUqfZlovl2/4B8XfBzU5dR1DTYtbu30+xjja5SFDtMMi\r\n qygDHsAPq3vX39+w9BewfB/Gs7VCzHygF253IrsSPXLn9a+d/Cv7NulfHj4zQRaLBJYWtxPE0cSY\r\n SSPAIdicEKCVU9OrHAr7h8OfCzT/AITaJHpegQNDHGMsWdneRu5LMSSTisswXs6fLbVjy6Lq1ebo\r\n jj/ibb7dAJUAFrzcf++TXDW7kgZyO1d58VDt8Ose32ofqDXBRNxkda+fxWkl6H1GHfuP1ZZ34Ppi\r\n mucnOTk881xfxb+LC/CaxsL68s3vLW4uDDN5bfPGoUtuA78A8e1aOmfEXTdZ8QLp2jzNczG1S7Zk\r\n HyRo/Kbj6kc4qOSVlKxlKpHmcE9f6/zPp/8A4J63234maxbMf9fp+7HrtkX/AOKNfY9ooQDOOtfD\r\n v7BWofZ/j9DESMXNhPHweuAG/wDZa+1tZmktLNngJDLzXXT+FM4J/FI09gaUDsR1p32FT1zXzf4G\r\n /az8W+M/27dd+EOgaPo80ej+F4/EsEs9w0Mt8hmWJ40OCoZS+eRggdRXup8caxEdtz4J8XiReGCW\r\n qOoPfDB8Ee4610xi2tDzJ4+jCTjKVmu5+ZPx6/Zq1T9oD47fC3xX4C1fw/q/hj4dDU9XNik4W4ut\r\n Tm2+QVjIxtSOC3iBzkc8YrY8MfB3WPDun6FZ+ILK7SVbma5uWljPUIttAM9OizSf9tfevlDw74Z+\r\n Kfwh1toLlJ5vJcgT2UpdXClwWGOcfunPI6DNfVfwO/aV8Z+GmtF8TN/aMSEGS3u03fhzX0lOEcO4\r\n 7W/4f5dT5L2fM73dlb87n3z8JvDaeGvA+m2cahTHEuQB6ivi/wD4KseKT4h+KWkaNCS0Wk2LTN6B\r\n 5Wx+e2MfnX278OfHlp8RPAthremWUmniWAmSFjwGHGVz2OK+Jf2g7u28efFPXJ9SijuYhcNChYZ4\r\n T5ev4H86WLnZXaKT50fFd7pPzHCkFiazrvTSDheDX0VrvwY0vU9zWDyWzen3l/I81wniT4I6jZMz\r\n WQjulH9zr+RrznU8zoVN9Dxq+t2jJ9hjnpXw9/wUA0Jrjxmt08Dy7IAqPj7oySfw4/Wv0E17QXsZ\r\n JI7yJkkU8qwwePavjX9sbwnN4z+JsGmRTi2t7i0dp5GXKwopHp3J/nWlKaclc0S11PJ/2X2/4oq4\r\n juf9XJcPgn69Pxr0mXzrGywiQXaocAuTHIfYkAg/XivM/gfLHZaNNaWmd1rKQfqa9Bg1HzrkK3Qn\r\n p71z1ad6jufp3D+GhVowUux1Ona5Ppelri2nCkHIS4Rxn2Bxn8a4rxPqk9zdSTXdk8xI/dK8qbQf\r\n U7c/lXaabbx3UQClVQjkZ9q5rxfdpFqC2OlKklyx4Xsvqax5XF2PoMRlEKFO6k/w/wAjr/2UNCNj\r\n raXFzGBdXcgaTA/L8q/S7xh8DIPib+zJp9xNaR3934e23yR7Q5aIf6xAO525YDuQK/O34E6XMt1G\r\n wf51wTg96/Xf9mzR7rTPgVb3ktq9y6WxYxqM+aNucfyH40Jc05dzsxFGksBCC010/r1Pz7+L3wH8\r\n OeHPGL3ngW7jvtHvsTiJx5dzbhucbHAYiveP2TfAvhnwtLbaqbG0nli/ebpI2DJ9FzjNef8Axl+M\r\n GhfEXxpJB4atTZpBK0XkSJyhBwVKn0IIruP2bvgTYeK9ci+02Ns3mnlGiU4z+FEIvntE5JZLV+rq\r\n cpJq3mtPlc+mQNN8VlJ9Igt7fVVZVs4VwJbu6Y4RQpJ3Z+X5uwBJOBxJ+3h+zT8KvAvxQ8KeB/DG\r\n iaLpGsQ+HFvdQvbeFI7zUZZJmG93I3SOXDSEZ6Oexr61/Zf/AGbvDfg3TdMXQ9G0+zu5Yi0ssNqi\r\n NtGMgsBmvnj/AIKffDXSvGH7Qk1x4jZY54raKG0kV/LkTCb9yv8A7Jweo6e9ddOMqdSzlrbp9x+a\r\n Zq+fEKC+zd2X9L+vU4T4IfAy4+Grw/YbxkhkUymURASysfViDgduDxXoXiK5e5cG4YuwULk9SAMf\r\n 0rL8Gateajo2mT38gRPsyxqUHykjKsfxK7uefmFXNcLYy2CPUV5uLqSnL3jswNKEKalDqedfFO4W\r\n TwlcbCCY7tMgc9q85FwAo9veuv8AiAkseh61uUgNexOn+0No6fjmuBW6H/1q4MRFcyO/Bz5oz9Wc\r\n z8dvB93468PWNvpEZnMV2GkUPsbYyMhIPsWBPsDTfgl8MW+GOhTw6hKbieWXarsdzLEowi5PXHJx\r\n 2ziuoF/ubH5EVKkxf3qVJqPJ0BxUZOXf+v0PXf2L9SFl+0j4cycee8kJ/wCBRN/9avvzWId9jKG/\r\n u1+cP7M2q/2f8fvCcxO0DUolP/Ajt/rX6V6jbbrd+v3a7KELwOCo/wB40fEtndf8K+/4LkfCK+z5\r\n UPjTwdrGhykf8tGiH2hAfxjFfpDz71+ZH7b10Ph9+3X+yt4vz5aWfjoaRM+cfJdp5JBPp8xr9OGO\r\n 1iOePenK8UrHx2aw5a7ufkL4egTUdamtbUeZPcL9lhYDqrkRFv8Avzbzt/22r0z9mL4L2Pj34oap\r\n qPjmE3H2Kbd9n/5Zljgjd6gDHFeT/st/F/wh438VXa6Xq1ms+mxO8dvO3lTnKrGpAb7wEcecju5r\r\n 6/8A2WPCg0zw7dag6kS6jMZWOPU5r36ELV+VrZXMopKjzPe56F8QPEVv4F+GmqXsaxwxWVsxRQAq\r\n gKpOB2HSvzduviwjarJH4lguNOvJWLstyhTcWOcgnqDnrX2j+3Zr76T8F10yF8Ta7eQWKgdSHkG7\r\n /wAdD18n+NPjHrOoeI72z1xNO1zS45TDHaalarOiIpwArEbl/A1vVh7V8q/r8DJSjCKcupltq39r\r\n WrnRriASkfKThgD71TsL3Upp3+2xR+SnBfo3AGTj65xU9p4c8H6zN5ek6RqPhTUsNIn2G6Mtm+0b\r\n m+RwWXgHocVjeMNA8TWNml9oDO2mXCsF8yPGBnGd2MHNcdWjys6Kburp3Ll54etta0PZqUUU6yKZ\r\n PnUH7xz/AFr4q/bu8IeHfhZHqmsapugW8szbKinq2ScLnnnNfYR8eR6JpQh8QNGlwihCY/mjJxxg\r\n 9+K/L3/grh8cf+E1+IOm+HdDdjb6fEZ7hzxvdj8oA9AAx/GueEE3obcyW6PBPhDr/wBmv7qMsyLO\r\n wcjPP0/WvS9P1ZGycbUyeQOfyrwbwfqBs9SGWwe3vXq+neK7W1tIvOl2kL0Y9/StHPmvJH3WQ4qU\r\n aas9j0mXxJbaFo/n3cuFUAY7k15T4t+LP2PXpdTwRIU2CMNzj1+tcv8AE/4kG/lEdizeWp7NkNXG\r\n y3P9pSrG7ACcYLnOFb/P86yle19zuzXiH2i9lTd2j6L/AGdf2gZ1Mja7dR2fnNtSWUNsTnqQoJ/I\r\n V+gGg/8ABYnUPg/4H8IaB4MkstR0SyQtqt0ysbiYg/djUkBF24+Zs9+BX5GafLBbW0UF3OsVxG25\r\n 8kkBcDGMdx/WvQ/heYb/AFiyzcmCcAlt7fISuSOT0J7Z45rN6K7Wp5tLNJySp1KjaVvv/M+i/wDh\r\n ou68RfHTWfEUZigTX9Qm1BI0I2RGWQsVH03V+hX7CHxDbUdXsJXYN5rBTnkZr83vBPwgh8VWV81k\r\n Vt5EEctqA+dpMe4ggdBkdsYAr69/4Ju/FGPSpHtdcdIb3TnKyRSMBlweik9aVKoozTeh9dgs4p18\r\n J7FK3KkkvK2n3H78/BZ7VPBdtfvLGALYPITx5Y7kn0wK/OX/AIKefEhdf8Xa3qDXBexwlqoAysKu\r\n +Cw+o8sn2Fe7/DP9pc2HwevJxdwiPUFWBInbO3apDjHpk18Tftg36+I9B1YX95I0EiPceSjZLSrH\r\n 8uR3Hy89sL+fVZKpJ3u3+B+aYuhKFepUk9W/6RwOqftZeIv2b9X0vR/COsJq1gtjHdSi6USxTNJk\r\n 7V5yqj7vB5xnuK9F8H/8FFvDHjC3jj8b2NzoNw3BmhPmwE+uOo/Kvhi8km1bU5WvJZDjCKgPCqOA\r\n B7DFbfh7Q1llXcOO+azqQhU0ZnSxFWkrJn354216z8RfDafUdAu4720uWjkjmj+643Yry8ahufmt\r\n b4cEQ/sv28S4CRRn/wBHsf61xkeo5k6/WvIxULTse/gKznSvLds6GO824wanjvSW4Pb61hW95vXI\r\n PJ6VcguyRg9qwUTeUjtfhZrB034l6BdJ8ph1GBsj08wV+r93H5tsxHda/H7Q9SNlq9rKpx5UyPn6\r\n MDX7GaNANU0OynTlbi3jkz67lB/rXfhdInl4qpyTTPzp/wCC0sLeH/gv4Y8UW+Vl8HeMtM1UOOqh\r\n Jx/iK/UWwnj1WxhurVt0VzGsqEd1YZH6Gvjf/gpr+xxrX7Sn7Lvinw14IWNtS1BEltvMOAHSRXHP\r\n /Aa0Phn+3t4n8C/Dfw/onif4SeM7vUtH022sbueKWAxzTRRKjuuT0LKSPY1vDDTqK0e/dHzuaQVW\r\n opJXR+CGgeMPtV1DdWMpguoGykiNhgp6rkfnX1l+zJ/wVR8c/s5yW2m6vMniPw+rc2l4cyIvfy5f\r\n vL9DkV8F/DjWd00JJLKXOc+legT6kl8oLDIHy59D2r6lU3B2ep83SxEnFXP1M+KP7b/hL9rC/wDC\r\n F94SuXsLLR5H1DU4L0hGs2RMIC2cMMs3I/SvB3+Pfgm68XajbnxHphks7aTUZ5Ek8xPKX75BXOdo\r\n 5OO3NfDHi/XtOtdDvtO8U36WlpewmNn83YUBHUHPBHX8K+aNC/acT4S6jrdrHMmsNJpN5osEoPyg\r\n XEZheUe+xmwPU1hKHLdxZ1JqtZNaL+v61P2C8JftWfCDVtQlDfETSre8FtILOOS2m23TnHyBwh2k\r\n jOMjGepFe16N+3d8Gfhz8KbSPxj428OI1ral5YJLhd+dx+Xae/PSv5ttU+K2o3FyJ7C6a2xwojJD\r\n L+Nc5feJbvU5d9/cTTuerO5JrCfspvVs7MNiPY3VtD9bP21/+C2vwzj8RR2PwK8FWetRwyE3GoSk\r\n 26SH0RV+99SK/M749/F2P4x/FjWvE0EL2serSh4bZ38z7OoULt3YGehPTvXnUlwZ5Mhsgc4PapYf\r\n 33zgtn19K45xjO6iilVlUdnuX9P1No7wmRsuc7SOxrR1HXZUhCp80uMDPIGe1c3HPiQbcnb0q/p7\r\n s98kc2TIflC4yV7/AJ1zJtO6Ouji5U4OMWTzWOpXJVpoiwzxk4LeuBV7QdGvNQv0hWP5ydwUD86n\r\n 0vzNNEFzqRfegZUTPPJ457d+fpUkHiqSK7jbTI5USJs7ZHyFA68kfzrb2adlexVKrBTUmaUnh20D\r\n xrf3ESyhtvzK2QK9F+G/gizntY7vT5ZbpbQFpGVfRSdvPPQV5zq/iSHUdWOoWax4DCTaw5Y8dMdQ\r\n PSu88LfF+DwndGzW1mQSr57xR8bmPTI6Dt9PenUpSULRPc+v0lH4I83fU9C8K/FbVNEjiudEt5ZY\r\n 7Z0VygJ3KMgrgnn7xHHY17P8I/GdvJ8QbvU7Kf5pyrNGG27WCjcMD0I6182+CvH8mra9ZrHHPY/Y\r\n 51MaTIBHIf4g+Bzk8c9a9b+Hs0+n6pJdaFbeUl8yGbYo+XHAJ7AE1y1KbvqOlilSmpx2P0S8A/HK\r\n 8j8IadaGcTW0jPHKjn54flBVj7E45z61Fr9/fWlwup6k0F5C8bQshOd28EDI9CA3P4V4x8JNYuvi\r\n BpsQ0+WS4vLKIiKNEA8zYpJBI6k7SPXgV6l4WZvGWhw2ksw/tEkeV5qna/yk4PoR/M9KvDrmqbE4\r\n 2tGULSZ4z8RPBMei61LLpkTrDI67k6hNwzj8wR+FT6BpskYQmNv3gyMDrWN+2rY+OtC0qe98JXUu\r\n nXCt5s+yMAsoiRWKnGOkYb8a+Hrn9rXxp4a8SPHLrurF45pAySzsdo4x7Z69K6nRs7s8ZVmk3LdH\r\n 7K+AJWX9m3DKQQr8fSU152l0TJhs9a+Rv2WP+Ci/iIrFp2r6kZlkygWb5o1zn7wNeq+C/wDgoN4a\r\n n8cf2H8Z9E+x75zCNRsW2hBnG5oz1H5Vz1sulUd4vU9DDZrGgvZzjt1Wp7pa3GBtJz9BV+G4yBnm\r\n quv6OmjywTaZOt3p99ELi0uV5SeM9CKjtbgkcnJ+leVKm4PlZ7EK0asVKLumbdtcksCG4/Wv2h+B\r\n d0ut/BvwlerhvtGlWz5/7ZrX4p2dxsOa/Yv9ijVv7a/ZR8Czltx/stIyf90lf6VadoaHh51U5IRl\r\n HzPT2iVlwygj0IrNk8H2TuxMEJyc/drUp26iMpQ2Z85RxEo394/jY8IeNIdFsxPeTRxRAbxlsYXG\r\n c1w/xT/bQur65ls/AX7i0U484/fcjuPSvHdU8VX+pabb2LzEwxrt68t9awTYOkhB5I5619dXrpfA\r\n jihQgnzM3vE3xH1XxbdtL4hvJ7tnPO5zwPYViz7Zw7x5OPWoyS3Ocn+VAkVMliR2OK5JVJNXZ0W7\r\n EYYjrzzTCSxye9KxG4nt2pmfmP6Vxvey3NEhrt5bcGr1oxFucnhuvY4qtY2TahfJDCVDyHA3HAp4\r\n uf3RC9+PwqYvl36mkdyS0AF1HuG4M2cHvW1ocmy6nlusRvKAobPzJk5P5jI/GsITmCdXQcpgj61u\r\n G5juo0k2JE0jHDqM7uOeOxHH50Qi5aMpS02NRbZ7aRLnzY7pGHykRkR/7ozya2YdIitorybWbaSQ\r\n FAURDjaxGST+n51tfDXTrWfQSLy1DpbxSSJM65ZicDgegJJPet3wtpV94pujYXIhmtLkBZJEA8sl\r\n ckcdcYyOO9dFrrbQ7KTaV5fLqeY6laQ2lzts42BjcCJmP31ZjtYjsa6X4cofEevf2fdyC3e52QAx\r\n 8kDIPPfA54rpfF/w8TVVnOmCET6evluQvXCkgDHsMDPOa5b4drep4wFxa2a+YjAKCdroT7dT1yK0\r\n irK97F8zpO70PZT8H49KiljhAMrSZMomJlPoSvTk844PNdx4Blv/AA1plzba8PNW4tjBDcxPhGII\r\n Iyex9jU3w2nf4gW8DkpHdQLGswjbO4su1uOh7MD9fw9X+H3gC20q6/s/xKEMcLAOx+68LAjJI4B4\r\n 6fSs6kOfVot12o8tyx+z74gufB8LPo10ReLG3nqMhUByu7ce/wAy5Gf4vTNew/CzxTeX6Q6iha2Y\r\n TK6rI3ILZXIP4fhmvJtI0bTrXwrqz3NqPtkTLHD5CeX5y7lJDgEDIAH19a7m18drp3gTw8ttEZpk\r\n tmhKp8pSRnJLkH0DhRn0rJ0ZwfNEuNeM1GMo79/62PYodUX4ueBPEFhpkCXl8trJEJLlN4ilbgDG\r\n OQQGB9jX5f8A7VX7P+meE9fhuLoTWNpqEaS2zv8AfiyoZ0JH3grEjPtX6P8Aw18Zt4fiuTay26Tg\r\n JciUNtaTK7cfgSx985r5i/bf8IWFpo3iPU7VX1GxguHneCOI4wDnCnHCMzqMjGAtdT96PP8A1fQ4\r\n nFwm/wCXz7Hw54UNx4H8TWcgkDJNiSJgwO9SxAyOx4/zmuy+MV9LYePLS8tnfF5Akob+Ek9SM+4r\r\n zK81e4v/ABJ9p1pkHmvvjRB8sajsB2AxivVfiPMur+FPDN3cRAhcxYwfkUjdye+Tmrpt6af1uVez\r\n 5ltsfo/+wp4yf4v/ALJ/2RpXnvPCOJFU8uIXOCPwIB/Ou0tbnawySBXhn/BGT4xW2har4u0qJYJV\r\n fS3ncOMhljZGKn6jP5V9R/F/wVZ6Iljrng5hJour5aIqSRG45ZD9M1zZlhHJ+2R1ZPjoxnLCy7u3\r\n 52MK0n6Z578V+uf/AATa1U6r+x34X3tuNs1xAfbbK2P0Ir8gLKff3r9WP+CSeqjUP2TFhySbPV7m\r\n P6ZCN/WvFatFnRnS/cfM+nKKKKk+UP4HzMwPBPAwOaVrkj7pI9ajU5BDZoA3n2HPvX0PM+Tsb2QB\r\n 8HK96aZDyFyc03JR+DS54znmuVzve+5VrDt+7ORx3ppXLfL9KQfKc/hTmGGJB5PepcdL9h7DD8kg\r\n 25GOfpU0UgZzI3GOo96gkG49c4pVPTJx3rFKWxXoTRL50wDdWPXtWhFBKFEahxzhARwc+lVLGMSM\r\n DkAL3NT6dc3IuVW0dlfPyjPAP4100Y2SBHuPh23l846XpM0SLZWcQbfF9xigLEnHqx49q9N+Gvhs\r\n Jo+oNdNC0jRuY3jBCFwowqgjjNeY+Gbu30Lwu73FxFFO0Q8133MpLL6V6x8N/E1lfaTBdWV0sUEK\r\n CExuCF3Dknbjrk10zg1H3f62/M7o2Sut+pmxyzS2D22qWoikv4wZC6FGkZWAyOOnI5964pPBqeA/\r\n iPBZThp5J5DP9oZsKgXnC88NgHnrXrOqeHrnSIkeeQ3Xmv54lySY+/B9CO1QeIfBVr4pujfyr89o\r\n RIqBiGcdPlPuTz7elEHZ3T0KnK7v2G/C+S08KeMGjnf7MLkBYzI/DqeQw/E/pX0hp2mrNY/6VuWa\r\n 4nK253AmUBRnHqrKenqPrXhOueHbTxFNHcJFCbi1MYkQjZk7RgKfT5T+de1aRZRa7oNkNSmxHbEy\r\n W8gP3WU4KE5oi7yV2ZvVJs7PxD4Ku9V8Cx2GliJbm1mExQ8tKj7d5B9uOBzxXFDwtr/hj4kSaZPC\r\n ptLHU3e6Erjy5U5yVb+FSpOB/hXouj60+q2to9i8kd9axMZVzhZVUkHPrnKkfWsnW9YE2g2msyMi\r\n XF/K9nIpGBNFtz847MGJAPPFbWV72JUmtJdTZj1x9C0GCRbe3kexbyi0+Wea2c74Wb3Afbnvtpb3\r\n Q28Z+HriC6hgtmuLK4syjODC6z4Q/iMg57VxHhpZbvTp7DWrpY72BURJgCYrkR5IBz0IU9uOK9J8\r\n F6YukjTYIjMbi+mQxtcHj7y7kKdMA/Nu7g1k6dlYbqe7Zv8A4PU/Mn9oT4A3fgKK51W0EK2Vrqr2\r\n kcK7t8YYSEYJHzL+5fn1qOO8e6+AEzzM0ptZUAyeYixYAD2619rf8FIPglfavZaXf+GrQS2c5e8n\r\n sUjJLPE8iSMNuGJCgk4zwTivjWe3Ft8MdVs2iNtFdXSqMHchxJgAE88ZroinL3r9iH7yUlu7Hrn/\r\n AATb8fr8LYPGusagiTxS6FPbDe2F3NgAeueT/k19y/sMftKf8Lq0VPAPiYGaw1TC2b/x2TgcMPb1\r\n 9q/MnQb1vCXwt1OG2uf9IluhaL5Ywsi7uSPXOOtfQf8AwTm8Sy6F8S9EneWWNo5F3MvOFzxnHfIx\r\n +NdlOKmnCWz0+5HLiIunerHdar5I+3PF3hifwR4pvNLvyfMtJChOOuO9fpR/wRc1Rr74C+JrRjn7\r\n LrAcc/34V/8Aia+Fv2j/ABD4W8ZfEFHivY9L1e+gjKPIw+z3UmAPLJ/gfjHPFfZ//BFK2vNC8PeP\r\n tL1qGWCaK4tJtkgweVkGfpwOa+cxmFdFSutND2KuNhjsInfXS6Pt8gqeaSp3TeKgryvh0PBnTcWf\r\n wOsvzEdfcUqEBhkZ/pSyjGcVFn5m+tfQvZF7oV05PIphHHSpB9+mt/rT9TWNaXI7FbCHG0Bs+tOP\r\n TrSN/Wm56/SlG62AG9R+NIvzjA5NJL96pLHm4XPrUWUpKJV7K5f0yMIpEqgpgZ55zWx4e0hdV1Sb\r\n yy3lxqGOxCCASAcntx3rIJwiY710ehOU8JXJUkFmUMQeSMjrXdTSUkOk7y19TuoZIr9Ht7NYfIim\r\n UAE58wbcDPsoGa9R+DNlazaQrTsjK11JGo+9yBggfXIOfavJvhzGr2zl1BJmbkj2FelfApinh692\r\n EjbfNjHbKnNbVF+75l5fidEaj0a6ux6LpGp3bmf+1IWMEkXkBCMqjLldynvkEce1anhBFi06KVH8\r\n 6WxzBIf4kRm657kcf5zXOLO41i5QO+0yxEjPB5I6fTitbwMc+MNRQ/cMI+XtznPFcvKloa03eSNl\r\n IFsvEwsbdTPHqTnZlcIH2k/UA449DXR+HGfwj4TitYy19BaqdpVssxyxIPr1/SuasJGH9kMGO4Sq\r\n Ac89DXS6KojtpPLAX9/J0470Qlr9w5SvLbuekfDPxFHFoEsV3M5nYjDlfmUEc/X6VH8Q9NGn6Npd\r\n xcSzQxJeMI3UbwdwDqeOg4Ye2KqRoI7awZAFLRqSQOTz3q/4xjWTwzLHIoaMSK4UjI3DocevvXXC\r\n Xutoycrsx5pBqOh6imqB5LiSIH5G+XduAVgR0yMjFeieDdXk1Twvp7rNG15pBCxB1zlSp53dsHAz\r\n /wDWrznwSxk0OcOSwNlMSDzz8h/qa3LmVoNM0wQMyB7WQsFON33evrWtSSavYydR6pHbfFn7Vr3h\r\n bT7jSNQkjfSI5bmOK4OchsrJg9cbXP1r4/8Ajp8NrT/hDNei8OiO1FhcXWo2jScJMvkiSROeVKeW\r\n 5Ud8e9fbllZxT/CkvNFG7/a/K3MoJ2HqufT2r5X+Ocanwn4wjKjZHbTFVxwp2SLkDtwxH0JFYyl7\r\n PVL+tC1FSSPlP4g3B0jwZ4fgsm3vcwecV/uHO3/69epfsweLG8OzJNFctHdJGDxwFxzn868b8Ykv\r\n JpYc5CcLn+EccCuv+GsjBuGI+Yjr2xXcpNRsVJ3iovrdnufxy+Od/wCIdASeC9lEsUu8lWO786/T\r\n b/g31/4KiR6n4vt/AHxbuPtFxqUC21nqDnL4UkojHuBk49AcV+Nfi+Rns2DsxGehPtXrv/BLe5kt\r\n v2mPCrW8jxsL+PBViD19qujCOLg6dRXUrr0IqUVDDuot1qj+t+k2g1Q8KSNL4W01pWLM1rESSckn\r\n YK0K+GkrOxC95XP/2Q==\r\nX-ABShowAs:COMPANY\r\nCATEGORIES:My Contacts\r\nX-ABUID:685FC9B6-8446-45B8-89AF-3F3BC70CA03A\\:ABPerson\r\nUID:F26B8512-45DA-49ED-B285-23E64B0A68D1-ABSPlugin\r\nREV:2010-06-23T00:01:37Z\r\nEND:VCARD\r\n VCARD 10 1635 1631 \N 10 /user1/addressbook/van_houtte.vcf d43780719361367f2d690f1f966e3da1 2011-11-12 18:03:29.083913+13 2011-11-12 18:03:29.083913+13 BEGIN:VCARD\r\nVERSION:3.0\r\nPROFILE:VCARD\r\nFN:Vincent VAN HOUTTE\r\nN:VAN HOUTTE;Vincent;;Dhr.;\r\nBDAY:1978-12-31\r\nTEL;TYPE=CELL,VOICE:0486 11 22 33\r\nADR;TYPE=HOME:;;Brusselsestraat 108;DENDERMONDE;;B-9200\r\nLABEL;TYPE=HOME:Brusselsestraat 108\\nB-9200 DENDERMONDE\r\nTEL;TYPE=HOME,VOICE:052 11 22 33\r\nTEL;TYPE=HOME,FAX:052 44 55 66\r\nEMAIL;TYPE=HOME:vvh@gmail.no\r\nORG:Advocatenkantoor Suy, Van Baeveghem & Van Houtte;;\r\nTITLE:Advocaat\r\nADR;TYPE=WORK:;;Brusselsestraat 108;DENDERMONDE;;B-9200\r\nLABEL;TYPE=WORK:Brusselsestraat 108\\nB-9200 DENDERMONDE\r\nTEL;TYPE=WORK,VOICE:052 11 22 33\r\nTEL;TYPE=WORK,FAX:052 44 55 66\r\nEMAIL;TYPE=WORK:vvh@gmail.no\r\nREV:2010-06-23TZ\r\nEND:VCARD\r\n VCARD 10 1636 1631 \N 10 /user1/addressbook/mustrmahn.vcf e67537e9d473e93911eccd6e63e9ac3a 2011-11-12 18:03:29.356976+13 2011-11-12 18:03:29.356976+13 BEGIN:VCARD\r\nVERSION:3.0\r\nN:Mustermann;Anton;Karl;Dr.;\r\nFN:Überwerbung GmbH\r\nNICKNAME:Boss\r\nX-MAIDENNAME:Müller\r\nX-PHONETIC-FIRST-NAME:Anto\r\nX-PHONETIC-MIDDLE-NAME:Carl\r\nX-PHONETIC-LAST-NAME:Mustrmahn\r\nORG:Überwerbung GmbH;Marketing\r\nTITLE:CEO\r\nEMAIL;type=INTERNET;type=WORK;type=pref:karl@mustermann.de\r\nTEL;type=WORK;type=pref:+49 30 1234567\r\nTEL;type=CELL:+49 172 1234567\r\nitem1.ADR;type=WORK;type=pref:;;Musterweg 1a;Musterhausen;;12345;DE\r\nitem1.X-ABADR:de\r\nNOTE:Test vCard\r\nitem2.URL;type=pref:mustermann.de\r\nitem2.X-ABLabel:_$!!$_\r\nBDAY;value=date:1969-08-16\r\nX-AIM;type=WORK;type=pref:bethel69\r\nX-JABBER;type=HOME;type=pref:bethel69@foo.com\r\nPHOTO;BASE64:\r\n /9j/4AAQSkZJRgABAQAAAQABAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAA\r\n AqACAAQAAAABAAAAS6ADAAQAAAABAAAASwAAAAD/2wBDAAIBAQIBAQICAQICAgICAwUDAwMDAwYE\r\n BAMFBwYHBwcGBgYHCAsJBwgKCAYGCQ0JCgsLDAwMBwkNDg0MDgsMDAv/2wBDAQICAgMCAwUDAwUL\r\n CAYICwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwv/wAAR\r\n CABLAEsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED\r\n AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol\r\n JicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW\r\n l5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3\r\n +Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3\r\n AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5\r\n OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan\r\n qKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIR\r\n AxEAPwDmrj9qzxB4q8F3MniG/uYdSubhYYxa+U9zJGkYJQQNMpbgKwZV4KeormNe+MXiG90sWN/d\r\n 6Zql/qN1NcTzRW6EMXAVV2sg3SKwfPHGW5PU/NXgq90/xwJo9KS61eSaGSUyWqMGjKqQs8kxJWDG\r\n TydpcEqo5yf11/4Ji/8ABJXw38XP2d9J+In7SN94qkuvFVlLceHdJhvjB/wj1pKCIrre0Yk+0FPm\r\n G8lIw6jYWBY/u9XinDYCEXtFaJRtt2SWiPiaeRYjHSc5Xb6uTf66s8//AOCc37dE3wl+P1t4X8Tv\r\n byeB/H17a2d5Yr5cENlLegRwyxRgbV/eyRIyqACkgJ6V3f8AwVQ/4Ja+FfjN4Pvrn4F6nL8NdY04\r\n Y1WDR1EVjrFsALjDWzHZBOB5bCQFFycMGFfKv/BTD/gnv47/AGEfiLYv8B9Q8ReOfB2qrBa6ZqUM\r\n fm6noV1BKk8VrflFwCbdNyXRCBwjZAIWvXfiB+2Pb+A/Duup4N1e9Hh+9n86S7vbybUNQuSURRDD\r\n NcO5jDFGG4scbSVTawr53G5vg54qONg2lOPvJdWu6vvbT5I9illmIp0fYJWs9G9jz34JfG/4c/sr\r\n fCK60rTtP8Q6x4V0tDfX+vaRYlNaSVUZ3h1C0mI8uQkvP58D7JI7hXhjYJKU8x/Z2+NGvftT/tDe\r\n Evhx+zv4LvdMXVtWj1CHSYIpLa00m1VjNc3Ny8iARxKhLPIByzhUBMsYLtX/AGpEstYuLnRLSz0X\r\n TnhWeC00yFYINUgMkrlmZcHzlkklIduI2kkwF3kV9V/8Et/+Chvhb4WfEQ+DfFt5frB49lgms9Vu\r\n L15okIAWOBQ5xCrO3zgYVnkU45NfL8RY1cQ06dDncYRafLZa+r3Vrnt5Vl0sJX9pJpy73Z+mXwM/\r\n Z70T4DaYl0n2bVPEbQeRc6rMu1wDtLRxK2TFFlF+TPJQFsnms342ftC2Fl4ZA0LU9Jg1G6uTp3l3\r\n F3DBIrgB8RtK4TOzc4z/AAhvQVyP7Yvxqv8A4S/sv/EDXvCMkQ1TQtEnubFrltsfmgqEMn96PLYG\r\n PvHg1/N7+2f8V/iN8UvElhoX7U/j2W40HxVfm8xZwSx2kl0EMRieGVikLR5K7gPujjg15tHC1MNB\r\n 4ijR54Qdm+idtLndmc4yt9Yn+8lt/wAA/e/9k/8AaB079ofTLjxPptzp17b60S8NzplwbmxvVt2a\r\n 3MsErcshdJR/tcnoa0PFmiJrniS9uo3nZJJSFZXIDAfKD+IGa+ff+CWvw+8VeAP2Jf2e9d8UXYuU\r\n 8Q+DLcAmNTsgR5BZJkdSLKO359c19c+HLSFtFgMyxu2DlnQbjyetffYR/u1NrXb7m0fN4iSp1OVb\r\n Dda/4KE+Cvgzby2/iTwv4x8EWcL+WG1HwtJptupHQK4TY/XtwK821T/gr94O8R6tFo/geeHVdZ1t\r\n nttEgs3+0S6rdDGLYQg8kqpbII2bdx4VhXu/g742Q6hZm3u7hrceXsdCG2jtjJ+U1xHiv9lD4VfF\r\n nxveXet+EdE0zxJDaxyWesaXaRw3ce5jsukeJRtuIpVVklTEi4GW8suD+Z4vK8YqfNQraLyV38/0\r\n t8z6vA5rhfaf7TR+ab/I8K/4LBfETxl8Hv2LNH0q10wXkPi/XoZfHeq27iT+x7WL/TG2xn5nLPHH\r\n CJT8qLETjL1+MfxN/a3tfEDSyST2sUcyNG0JYsgh2/djYHCAAcHGCBuxgMD+qn7VfxOuj8KLjQf2\r\n ifF2i23iMajceDdanuRBBp9xcpFG4ZxLlUW5iaGZAoXBkG0jAr4Q1r9j/wCA3wFuoZPFF38OP7Tm\r\n uJp0g1e7jmkZFxwyzuwUBgcyEBT0LV81VzqpQfJCm3/wD2MZllV83LHmW91trsfFl/8AHqa+04W+\r\n h3s89xYuZbdLUedgNjKsiqdxIC54zwM5IzW9ongr44fE+HzPhR8OPiRqYf8Ae+ZbaHdKquAWcLvj\r\n +bh0bAK45wa+x/Cv/BQjUPAHhDVYfhP8KfDsem6JI9jFq6+IZIvC8BkHmRBUsFSA3EuJWSJ503fN\r\n txsctleEv+Cy3xE8Z/C69YJ4S0Z7ixuLK+u9K0IvqWkxyq0R+xSXU8qS7Hj3/OjttDfNuZTSp4/F\r\n Yl+7C3rJX+655To16TSdO3rp+Vz9DP2s/HvijX/+COuo2d9A3i74iXvgrS9L1fSdMK6jqY1WT7It\r\n xBJbW++QOsjsrLw3BJPFfk38ItK0j4p/tIaX8Mfi74bsfEs+tasPDM+ieITJYmz1S7X7PbyRvC6S\r\n RYkZIGY4eNt25T5YY/d2h/ts+G/28f8Agmn8SY/HJ0Lwx+0J4R0GTXFufD1vHpOp362ZM/2zSbzA\r\n l3GGBkePLSJghlPmHP5L6h+07ZfGeS58U/ErTru18b6vAJrzVNLmWGDU7tSomurm2kjISSZN7yTQ\r\n uB56RuIxvOP0jhbF+0o1cPXceWT9Xtb7tjzuJqTqeyrNarsf1N638H7X4T/Afwt4W8H2UVpZfDnT\r\n LHT7G3iZpYoobO2S12IWJZlEanBb5iACecivG9N/ap8G2tr5V9rAhmid0eOd3jkQhiCCo6D09sV8\r\n Ufsof8HJY8B+B/DGkfto6DqfifRooF0u88V6M3m39gpUIlxc2hbF1G6nLSRFZF8tvlY/KPqnT/ij\r\n +zZ8U9OtvENp47+Fetw6vDHcRXw8U2cDXKFRtZ4pXWSN8AbkdVZWDBgCCK+hwcZYJPC1baWaa2af\r\n Y+UlONV+0a3Ifhx8Z73+2bO21qeJYbskQNcBm8xPTyVyWf6K2PavWPjR8a9R+G2jaDfeCtEiku70\r\n fZDcanqCW1vabyqb5UiQuFPykAn+FsgHIHyr4W+KukaRqrvYiKNvODPJGxEjuQBnJ5PQjPpXpX7Q\r\n 37Q2if8ADPus/FXVpJLKD4QDb4htVCrDqljcQmS1HLKglFyyIhYhf3kisSHxXysKyjScr7Hvzpvn\r\n SaPD/wBrDx7ceA9bk0rQ0sPEVh47sb298RaPdSi4j1+WKSG2uLYLMrIzoL6xntmZVSL7Iof5JmZc\r\n r9oK/wBH/Z90vVND+L/wV/4Wdpnifw2tpomuaYotdb0/W7S3EKzSSwyLcfZJIvs8rPbFmgkhbbCw\r\n nUJ4N4B8E3Xx3vYr/wCL3j3w9Z3XhXTry41Tw7aak8N5bmQxPPFfagBItohWGJSkaNI27hirZq7o\r\n 3x60a4+IetXPwqv/AA7JqFxc/Yrq31ia7ub63fzDgNbIvlqjISsbpIjFUOADvFfndZYrB0PrVSNl\r\n dq/XXX0/G/kfouWPLc2rPL+a8+VO17fD0v8AoR/tE/GqXwN+wZpWn/GPR10m7EEqabpMWkwxwf2j\r\n Kju11LZW4Cm8k3yPNO48w/MGIA2j8rPCvxck8L6VdWejRyWf2u2uIjL5h3qHfaCe4P3yfbiv1Q/a\r\n t8XXHxJ+Ekq6Dp0lzqmnea9tE0WdzvFJExHZgwZ1z/EvXOa+Ik/4JLeLfEHhK61Sx1vRNNvo5Jrm\r\n 4t7vdBHb2qx/PKWTd84JC7SANpB6mufCYunL45auxWeYapFxWFjaMen5/wDBPN/A/wARNVv73wvo\r\n fwue2uPEWp6pFFYwblSGN2EkTv8A9MI1IiYvwm1CSMK2ej/aF/Yn+Jnww8c+Nr2y+H+uX/hzQ9dv\r\n 9NuNY0LTZrjR/tFq8a3DxOqH9yskmFfhDuZR9w12f7EHwoi8PePpPHNpbafFaWDSrayxx74JLeG3\r\n eANHuJLG5ncgDPIT3xX2xovxd8VJ4rudQ8O3d7YC2sfIJEsc1wXilEs0kYkYnKiTygf3e7bIVYEH\r\n P3mTZdGMY1pSak+lloflOccRSpzlh4wUkut3o/8Agn5geEfFMmoaFcxaYzTTWuJCYlZ5IW+bcCpO\r\n fm2sTnjDMuAGxXc6P+zn4Z+IWnprTwTacdQLS/ZorqIpH8xHGITjOM4ycZxX3H4++MnwJ/a+17Wt\r\n K+PXw312CfQpEttS+J3h3w+bq9tT5asuozXFmkSyIsqvDLE0VzuePIlRDuT4y+LH7JfxA/Z48fX3\r\n hHSfDWv+N9P0wRS2Ov8AhvWjDpesWs8SXEFxDGYWMe+KaNmQklXLA9K+1w+Z0KdNQqrnS8jyaU/r\r\n Ert+zdr6tar+vmfX3w++Lnib4n3V8fh1pFzqEenAySu08cNpYKpOGuJ952YHRWxkdOtekfBP9t/Q\r\n /hXrl/qHxw0zwx4gi04Rajpk0Wo2c9v4f1C0VpF1N7eWWX7WbeITSxI0RaOSPzIkLqrL1vh/9kC7\r\n 8TazpsH7Rc+t2vgW5uFt4LTSNItrjT7SRw7LKp0x5LO7iXCgqXQgdlbICW/7Vnw9+AOq3cJ8O6L/\r\n AMKt1ELaaR8QfDOmmbUL1ysvmWzaOiGSFN8Uqbg5BG1vvMa/Nfr0cI4xqTS5tubZ9fTp3Pq61ZSf\r\n JbX7vz6ng37Vf7ct94/8U69eXlzrZ8OaPaQ3Fva3qSwXWrXl2m23a7LYMzyxb5zPycKWznFfEXw0\r\n +OXjr4W6/wCIvGXwk18W+qa9rRtLmJ41ktNRWLOyPyWGAI1kO1h0BIFfbX/BXfwTrXxY8LeFfiB8\r\n NZ1uvCdtZJCyWkBhnslnBaGZ967ijJJtww/c8g/eFfJ2i+BrPRvBej6faRSR21szklgPnYtuLMRz\r\n tLseD0wAeldTxbziHvWt2X9eR5NXDyyDEOpCT5pWs3vY+hP2RvB3xQ/bD8OTeKvH2rre6fa6nPaX\r\n Ftp8T2c0flOu2QtITkEs42r24q5+3Np83h650v4OfD13lu/FbWy+JdQIeSa3sZZPMis1kzwZRG8r\r\n EcAKAetfWX/BG/wJbaL+yPpOq/KZ9dmuNRuV+8GdrqVwRnvtUDNfOf7c2v2tj/wUK8eQ6ne6Z4Zj\r\n ENhAuoahKkVnYq2nWq72Zm2hiWfgr2rxsDk1CWLVSWy18tD7bNM5rUsnUr/vJJa97/qca1xbXXxX\r\n 8B/D74fWqwWcV3FdX0UJCLBa2EfmJEB90OZfK5PACe9cb+1t8Stf+CPxVv49C1S1srix0a6WO4lQ\r\n YWC5uNsAEX3GJkjJKgYG0N2zWX8evCOlfCGxtdH8IeJTrPirxvbT6asenSC7kMNyYmuJYViAzvRX\r\n +Yv/ABAdsDJ8afsMfFT4lXJ8f+M9OjuNNQWmm6XFd3gl3W4EdqkkoQnHyuSwz1znnNfSY3MYYWLi\r\n 3Z36P/I/NsBlVbMmpU4N730/zPoD9lme3+CHhrw82oa82gazLYAS6e97HLJZRzItxPcvcKdsAWV3\r\n cg4bEx5YsFHrHg3/AIK7eFPC/hq1sNC1b4lala2wZUuobOK2inyxJaKOa4WQRkk7d6hiu0kc1u/s\r\n /f8ABule6n8Ira/8efEK+t/Eh23Mdvp9pFNpKyhi6vJFOn79gcfeY4IOMcVynif/AIJb/teeHNfu\r\n rLwt4F+H/ibT7d8QapBcG0S8U87vJyQjckMAcbgcYHFdVLN3FJSjZdLxcr/cddfg/Ey96VnfopJW\r\n 9dV+Z+o/hr9n74XfDP4SP4j/AGE4rfNx5cNpY3us3iWVp5j70W5gMgkZVbG1SwxuOSydeC/a+/Yq\r\n 1r49x2etfCSHTZrnStFXS9Q8Nx6VBptzDH5yTLPpt3bJGruJIm24ffGHbynQuwf4M1f4w+IPBf7S\r\n Og+HvDV1bW+kX+qNFcwGwt5DOvkyS/NI8ZcneAck56jOCRX2Z4t+OvjD4O/syazd/DTxDqWkzvf2\r\n 0QMUm5YldV3eWrZWMnJBZADjjOOK8auoVMP7KrH7nY9TEUFjLxm21030/Fo+a/B0t/4Z+HuoaV8U\r\n H1S41S2uLjSpm1m2CXbRoybVuFCIwYIwR3dQXZGbGDXzjrfgnw3+0L4m1b4XWF9p/hPx5ZD+1fCX\r\n iCKyilg8Q2iL++sbqLbmTy8krs/eFfKKn91Jn0n4v+MNW8QXF3rPiPU7/U9W1LVpLi7u724e5muX\r\n TyUQu0hJYKgCgHgKAAMCvnzwb/pn7T3w7up8+eniGyCsvy7fkc8AcA/Owz1wcdABX59LMHgMV7Gk\r\n 3ZO2+uuuve1z9MynKaeKyymq9paW1R+m/wDwT6/Z/T4M/s7aJ4fub6O5mtLaNBceWUMgKFshWJKZ\r\n 3fd7ZxX5Zf8ABfz4V3a/t0XOoaTcxR6d4i0LTLqQTymKKQpB5Dt83y7g0OcgdTk81+tHwZvZbCx8\r\n qzby44Y2aNVAwmBxj0HJ46du1fAX/By7otq3hP4Ya00KnVLS9OkxXHO5bWSJZGix0I3ksCRlSzFS\r\n Nxz9tRq89BSkjwc4wvuunB2Stb8jwr/gi18KNJ1Xxh4v8SeILV7x9NvLaK2e6mVmDrE0kmGHX59o\r\n 47AZr9R/jt8V/APhb4I6jpN/fWMF1Fp3mBHOyN9rFo44iQBIwdFO0ZYZ4IHFfnh+yR4ftPBX7M3g\r\n PU/Csb2WoeI7ZLzUp45W33cpdgXbJ64AHGOAB0r7Q8N3kknga484iQm3dcyKHIB3ZAJ6Z9q8atiW\r\n lJJanpZTho0qUFJtrfsfor+z/wCKLfW/hno1ygB+1WUUyue4dQ3QgEDnof1616IbLzsMZbJcgcPa\r\n F2/E7xn8q8D/AGLYwPBvhi3O4wvZQgoSSAAqYAz0HJ4FeH+Pfjl4suPGWotLrd2T5xHAUAAcAAAc\r\n AACv0nhTLKvEkZWmoqKW6ueHxPmdLh5Qm4uXO3s7H//Z\r\nitem3.X-ABDATE;type=pref:2000-12-31\r\nitem3.X-ABLabel:_$!!$_\r\nX-ABShowAs:COMPANY\r\nX-ABUID:73FD0F46-DE18-4F1F-AA2C-59E8738B4249\\:ABPerson\r\nEND:VCARD\r\n VCARD 10 1637 1631 \N 10 /user1/addressbook/andresenesq.vcf f6ae02ec1b5612fe4737092734d062c7 2011-11-12 18:03:29.658466+13 2011-11-12 18:03:29.658466+13 BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//ALAB//NOSGML Version 0.9//DE\r\nREV;VALUE=date-time:20100623071522Z\r\nUID:uid=andresenesq.1209158007\\,ou=Contacts\\,dc=andresen\\,dc=de\r\nX-ABUID:ADDEEFEF-162A-260A-DEA3-1DA8-8A913187\\:ABPerson\r\nFN:Sven Joseph Klaus Michael Andresen\\, Esq.\r\nSORT-STRING:Andresen\\, Esq.\\, Sven Joseph Klaus Michael\r\nN:Andresen,Esq.;Sven;Joseph,Klaus,Michael;;Dr.,Prof.;Esq.\r\nX-DISPLAYNAME:Svenni\r\nX-INITIALS:SA\r\nX-INITIALS:SHA\r\nNICKNAME:Svenny,Sveny\r\nPHOTO;ENCODING=b;TYPE=jpeg:\r\n /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkS\r\n Ew8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJ\r\n CQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy\r\n MjIyMjIyMjIyMjIyMjL/wAARCAFQATYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA\r\n AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh\r\n MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6\r\n Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ\r\n mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx\r\n 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA\r\n AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV\r\n YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp\r\n anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE\r\n xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3\r\n +iiigAooooAKKKKACiiigAooooAKKKKACiiigAoorM17xBpnhnSZdT1a7S2tY/4m\r\n 6seyqOpJ9BQBp1zuvePPC/hkMNW1q1glXrCrb5f++Fy36V5Hf+L/ABr8SXkj0hz4\r\n d8PMSFnOfPnX6jn8FwO2TU2i/DfwxpKq89r/AGjc9WluzuBP+7938wfrQBr3X7Q+\r\n gGRotK0XVr+QdPkVA305J/Ssyb45eKWbdb/D67WI9PMMrE/iIxXXQSQWsKxW8UcM\r\n S9EjUKB+AqT7b70AeeXP7Q3iGxkUXnhKKDP8MryIT+Yq/Y/tLWDlRf8Ahu5hHcwX\r\n KyfoVX+ddk9ykiFHCsp6qwyDXJa54B8Ma4Hd7BbS4b/lta/uzn1IHyn8RQB3WgfF\r\n zwX4iZI7fWI7a4fgQXo8ls+mT8pP0Jrt6+K/FngLUvCxM5YXVgWwtxGMbfQMP4f1\r\n HvWt4F+LniDwbPDbyTvqGkKcNZzNnav/AEzY8r9OntQB9fUVjeGPFOk+L9Gj1PSL\r\n kSwsdrqRh4m7qw7H/IyK2aACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo\r\n oAKKKKACiiigAooooAKKKKACiiigAooooArahf22l6dcX95KIra3jaWV26KoGSa+\r\n fbm6n+I2vr4j1pGTSYSRpmnP02Z++47k4z78dgM9b8Ztba6u9L8HwPiO6/0zUMHn\r\n yUPyr9GYH/vkVzC3SoiomFVRgAcACgDohdhQAMADgAUfbPeue+2+9H2z3oA6H7Z7\r\n 0fbfeue+2e9H233oA6D7b70fbPeue+2+9H233oA3pp4riF4ZkWSJ1KsjDIYHsRXh\r\n XjPw6PD+sEQZNlcZeA/3fVfwz+RFer/bPeuW8fKl34d80jLwSqyn0B4P8x+VAHN/\r\n D7x1feA/ESXsBaSylIS8ts8Sp6j/AGhyQf6E19lWN9banYW99ZyrLbXEayxSL0ZS\r\n Mg18EV9Gfs7eLWutOvfC91KWe1/0i0DH/lmTh1HsGIP/AAM0Ae50UUUAFFFFABRR\r\n RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFVdTvB\r\n p+lXl62NtvA8pz6KpP8ASgD5h1nXf7a+J/ibUDJuSOX7NDzx5aEqMex25/GpPtvv\r\n Xneh3rRX8m9iTMDknuev+NdH9t96AOg+2+9H2z3rn/tvvSfbfegDoftnvR9t9657\r\n 7Z70fbfegDoPtvvR9s965/7b70n233oA6H7Z71ieK7//AIkbxZ/1rqv5HP8ASoft\r\n nvXNa1qH225VFOY4+B7nuaAMyuq+G+vf8I38QdG1Fn2wicRTHt5b/IxP0Bz+FcrR\r\n QB9/0VkeFdU/trwlpGpk5a6s4pX/AN4qN365rXoAKKKKACiiigAooooAKKKKACii\r\n igAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5v4gzeR8OfEj/8AUNnUfihH\r\n 9a6SuW+JIz8NPEY/6cJT/wCO0AfFSsVYMpwRyDXe+FPCOs+Krf7TCqW9qDt8+bID\r\n EddoHJ/l71yWhaVLrmu2WmQ53XMyxkj+Edz+Ayfwr6us9PgsLOG0tYljghQJGi9A\r\n B0oA8P174ea3oto93E0d7BGMv5OQ6j12nqPpmuI+2+9fVvlV85/FLwz/AMI54paW\r\n 3QJZXwM0QXgK38aj6E5+jCgDnvtnvV3Sba81vUobCxjMk8pwB2A7knsBXN5PrXvH\r\n wY8OLa+HpNblQG4vWKRseqxKcfqwP5CgDT0T4b6Pp0Ctfp9uuiPmaQkID7L/AI5r\r\n SvvA/h2+hMbabHCT0eD92w/Lj862NX1jTdCt1n1K6WBHJCDBZnI5OFAJP4Co9D17\r\n SfEds0+k3sdyiEBwAQyE+qkAii4WPBvHnhbUPCcy7XM1hOcR3IGCD/db0P8AP88c\r\n NX1p4g0G38QaHd6ZcKNs6EKxH3G/hYfQ4NfKFzbyWl1NbTLtlido3HoQcGgCKiii\r\n gD7D+DN39r+E+hsTlo1kiPttkYD9MV3leUfs9XJn+GskZ6QahLGP++Ub/wBmr1eg\r\n AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig\r\n ArmviGhf4ceJAP8AoGzn8kJrpax/FkP2jwbrkGM+Zp9wn5xsKAPlX4Owed8R7I/8\r\n 84pn/wDHCP61658QdcOn3OmaUszxJd+ZLO0blGKJjChhyAS3OOykd68S+GepJpXx\r\n F0a4kcJG8xhck4GHUpz+LCvSPj9ZXFtJoerQ7hGvmwMwHCk4I/MbvyqW/eKWxo+C\r\n /Egj8WDQvOkks72FpLZZHLmKROWUEnO0rzjsRx1qr8ebBT4b0u943xXZiH0dCT/6\r\n AK4L4aRajd+NdP1UxO9rZMxkkHAGVIwPUnI4r2zXNLTxhFFbahZrJbxSeakQJ4bB\r\n GTgjPBNctfF06MrPV9kdFHC1KsbrRHyrX1r4HtVg8CaCiAAGxhfj1ZAx/UmsGX4b\r\n 6ME+fRbcDHURD+lb2m3M2j2VvZQwo9pboI40BO5VAwBn6Vh/adJu0k0bf2fO14tM\r\n 851HxUs/iTU7ksN0c72sXOdscZ24H1ILfj7VzWi66NL+Ldjc2mFi1B0guUU4VvMO\r\n 3J/HDfUVieKtE1rRNUvZzBIbGW4eSOZfmADMSM+h571U8EWU+teP9FgAZ2a8jkfH\r\n ZEO5j+Cqa9CM4zjeLujilCUZWkrH1h5VfKfxGt1tfiHrcaYwbkvx6sAx/U19c+VX\r\n xz4x1JNX8ZaxfxMGimupDGw7oDhT+QFKDuElYxKKKK0IPp39nB8+AtST01Nz+cUf\r\n +FexV4v+zdn/AIQ3VvT+0P8A2mle0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF\r\n FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFU9VTzNHvk/vW8g/8dNXKo61crZaFqF0/\r\n 3YbaSQ59ApP9KAPg8EggjrX0rpWtQePvhlBYa5ps0l1Igjdn+XcygbZlb36/XI6d\r\n fLvhf4Og1yeTUr1BJBC+yONhlWYDJJHcDI4759q92htY4Iwsa4FeHmeZqi/Zw+I9\r\n PCYRSXPPbsVdA8O2um2cVvBEsNvGMBV/z+tdNGUiQKgCqOwqlDJhAvQipPMryqeL\r\n ivevqzsqJy06Fzzaq3FrDcZONr/3hTfMo8yrli4yVpExi4u6Me709clJVDAjGfUV\r\n k6P4d07w7rb6vp2nWwunQxsQCuFJycDOAeOuK6WdvNIHYVDsriWNlSk/ZvQ6Wo1I\r\n ++rmN4/8XX0Hgu9TStPuDqEy+USoz5SEfM47njgYHBOe1fLJGDzX140UU6FTtYdO\r\n O1eBfFTw9Do+uR3VumxLvcXA6bxjJ9sgg/nX0GWZl7eXsprU8vGYVRXPA4Ciiivb\r\n PNPpn9m4f8UTqh/6iJ/9FpXs1eIfs13G7w5rdtn/AFd2kmP95Mf+y17fQAUUUUAF\r\n FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVyfxOv\r\n PsHwy8RTZxusniz/AL/yf+zV1leP/tEa0LHwPa6Ur4l1G6GV9Y4/mP8A49soA4f4\r\n L6vALK5052AljlL4PdWA5/MfqK9XeCS2JkiBeM8tH3HuP8K+TtK1W70bUYr6zk2S\r\n xnvyGHcEdwa+ofD2rXVz4d07UruAiC6gWQMp3bMjofavlc6wFVTdemrp7o9fCYhS\r\n goPdGxEUmQPGwZT6VJtNMNpHN+/tZdjNzuXkN9RRm9j4a3SX/aR8foa+Wc9fdf3n\r\n VzD9ppNnrTfNuj92yI/3pAP5UfZbqb/XTCNf7sX+Jpc7XxMXMRSzxxtsUF5T0ReT\r\n +PpTBayz83DYX/nmh4/E96vxWsUC7Y0Cjv6moJr63hfy1Jll6BIxk1UKkpvlpK7H\r\n z9hvlxW8ROFRBycDFfP3xd1lb/xDFYoCPsqlnz6uAQP++Qv519AxWNxfSCS9XyoF\r\n ORB3P1rxH48aMLPxPY6pGgWO9t9jYH8cfH/oJT8q+uyXL6lKXtau5w4uunDkR5RR\r\n RRX0h5h7V+zhrItfFGqaO7ALe2wlTPd4z0/75dj+FfStfDfg/wAQy+FPFum63EC3\r\n 2WYF1H8SH5XH4qSK+37W5hvbSG6tpBJBPGskbr0ZSMgj8DQBLRRRQAUUUUAFFFFA\r\n BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXyR8bvFC+I/iDPB\r\n bvutNMX7IhB4ZwSXP/fXH/ARX0H8UfGieCfB1xdxOP7QuMwWan++R97Hoo5+uB3r\r\n 41ZmdyzMWZjkknJJoASvs/wlphtPDGl2U6D/AEeziidSOrBADXyR4U006x4t0qw2\r\n 7lmukDj/AGAct+gNfZ9owFuPcmpkk9GUtDHu9Lm02U3OnIZIG5kt/T3WnWt7bXY+\r\n RwH7o3DD8K3d9UbvS7C9YvPbqXP8a/Kf0r5zMuH6WKfPTfLI7KeK0tP7yLYKp3Oo\r\n 2tsdpffJ0CR8k1N/wjmn9/OI9DIcVetLCzsf+PeBEP8Ae6n8zzXmUOFZ8372eho8\r\n RTW12ZUOn32qHfclrS2PSNfvt9fStqz0+1sE228Kp6t1J+pqXzKN9fU4TAUMLHlp\r\n o5alec9NkRXceV8wdR1ry740aOdU8BS3KJul0+VbgYHO37rfhhs/8Br1SR8xOPUG\r\n sS8tob6yns7hd8M8bRSL6qwwR+Rrr2dzLofF9FXtZ0ybRdavdMn/ANZazNETjrg8\r\n H8Rz+NUa0ICvpP4A+OxqWlN4Uv5R9qslL2bMf9ZDnlfqpP5H2r5srV8N3OqWXiC0\r\n u9Fdl1GBjLDt6sVBJGO+RkY79O9AH3VRXM+BfGVl448NQ6pbYjnH7u6t88wyDqPp\r\n 3B9PxrpqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAq\r\n tqF/a6Xp89/fTpBa26GSWV+iqOpqzXgnjbxDN8SvET6Dp07J4W06X/S7iM/8fko/\r\n hB7qO3b+Ln5aAPLfiR4zvvHPiI6rJFNFpilorCNxgKgPJ9NxyCcZ6gdAK42uj8Z6\r\n tb6nrQhsESPT7JPs9sqfdIB5b8T+mK5ygD1P4G6P9r8UXequuUsYNqH0kfgf+Oh/\r\n zr6LtpP3ZHoa83+E2h/2L4GtpJF23F+ftT564P3B/wB8gH8TXeRybG68Goe5XQ0v\r\n Mo8yqfm0eb70AXPMo8yqfm+9J5tAFzzKPMqn5tHm0AWpJcRtz2qjuokl3DGajzQB\r\n 4J8cdC+x+I7XWYkxHfRbJCP+eiYH6qV/I15XX1L8RfD/APwkngy9tY03XMI+0W/r\r\n vXsPqMj8a+WqpCYVPZ3c1hewXdu22aFxIh9wc1BRTEey6V4gl8K6nbeOtEjaTSr4\r\n BdWsUPvywHqDnn19mNfR+l6nZa1pdtqWnXCXFpcoJIpE6EH+R7EHkEEGvkb4da0k\r\n VxPod3hra7BKK/I3Y5H4j+XvXe+A/FMnw18U/wBgalMT4Z1KTdbTSHi1kPqf7vQH\r\n 8G45yAfQ9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFYHjPx\r\n Va+DfDNzq9yPMZPkghBwZpT91R/M+wNAHHfFjxfcwJF4P0KXbq2pJm4mX/l1t+jN\r\n nszcgd8Z6Eqa8p8ValbeEfCsWi6adk8yFAQfmC/xOfc/19q0bR5LCC/8Q67P5mpX\r\n ZM93Kf4fSNfYcAD8PSvOLlpPED6r4g1FmS2hXy4lB6yNkRxj6csfZT3NAHOVs+FN\r\n DfxH4msdLXOyaQeaw/hjHLH8gfxxWNXtnwS8P+RZXevzJ885+z25P9wHLH8Tgf8A\r\n ATQB67GqRRJHGoVEAVVHQAdBTs1Huqzb2NxcgFVwp/ibgVNhke8+tG8+tasWjxKM\r\n yuzH24FW0sraMcQof94Z/nTsFzn959aN59a6QRRL0jQfRRQYYm6xIfqoosFzm959\r\n aN59a3pLC1k6wqP93iqk2jqRmGQg+jc0WC5l5ozTp7aa2P7xCB2Yciod1KwXJN1f\r\n MHxG8P8A/CO+M7yCNNttcH7RBjptY8gfQ5H4V9N7q89+Lvhv+2fC/wDaMCZu9OzJ\r\n wOWiP3x+GA34H1poDwKxtTfX0FqJooTM4QSTNtRSe5PYUuoafdaXfTWV7A0NxE21\r\n 0bt/iPeq1drptzH400qPQ77b/bVshGm3THBmUc+Q5/8AQSfp9WI42GaS3njmiYpJ\r\n GwZWHUEcg165utfGfhZPNwrSL1HWKUf5/EGvI5YpIJnhlRkkRirIwwVI6giuo8D6\r\n ybHUWsZWxDc/dz2ft+fT8qAPcvgx48uLgP4K15wup2C4tJGPM0QH3fcqOR6r9CT7\r\n FXyh4jt7mGa21/SpGi1LT2EiunUgHP44/lmvorwJ4utvG3hS11eHakxHl3MQ/wCW\r\n co+8Pp0I9iKAOlooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvnfxb4i\r\n /wCE68ctLE+7Q9FcxW2CCs8/8UnuB29gD3Nei/GDxdJ4c8KCwsXI1XVmNtb4PKKe\r\n Hf2wDge7A9q8Ykmg8OeHjswRBHhc/wAbn1+pNAGL411abU9Qg0KxDSNvUOqdXkP3\r\n V/DP5n2rN8YvFpv2TwzaOrRaapNy69Jblsbz744UfQ1d8Gj+zrXVvGV4vmNZqUtd\r\n 4/1ly/APvjOT9c1xcsjzSvLIxeR2LMxOSSepoAn0+xn1PUbextl3T3EixoPcnFfV\r\n +jaZFpOk2el2ikx28axrgcsR1P1Jyfxrxr4M+HvtOp3GvTpmO1HlQZHWQj5j+CnH\r\n /Aq+h9MtRDGJnHzsOPYUAS2WmJEA84Dv/d7D/GtLIqHdRuoAn3Ubqg3UbqAJ91G6\r\n oN9G+gCfdSbqh30b6AJm2spVgCD1BrIvtMABkth9U/wrR30b6AOYzTXCyIyOoZGG\r\n GUjII9K0dUtdp+0IOCfnHv61mZosB8v+NPDreGPFF3YbT9nJ8y3Y9426flyPqKwo\r\n pZIJkmidkkjYMjqcFSOQRXvfxc8OjVfDX9pwpm60/LkgctEfvD8OD+B9a8BoA7rx\r\n LbR+KPDMPi+0iVbuNhb6rGnA38YlA7A5Gfcj3NcMrMjBlJDA5BHY12fw11iGz199\r\n Jvfm0/V0+yzITxuPCn8yR/wKuf8AEWjS+H9fvNLmOTA+Fb+8p5U/iCDQB3+j6qNS\r\n 0uG4ON5G2Qf7Q6/4/jVz4f8AiX/hAPiEtvK4TQ9XISTJwsTZ+VvbaT/3y1cJ4Svj\r\n Fcy2jH5ZBvX/AHh/9b+VbmuWo1DTXUD97H88ZHXI7fjQB9f0V578HPGJ8W+B4Rcy\r\n btQ08i2uMnJYAfI5+o4yepU16FQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVw\r\n 3xc8S/8ACM/DvUZ4323V2PskH+84IJ9sKGOfUCgDxbxLr48Z/Ea/1hW36fYf6JY+\r\n hAzlh9SSf+BD0rkfGd80j21gh/6aMPU9B/WtLR4fsWlwRHhiu5vqeaq+GdPPiL4n\r\n W8bDdDDN5knGRtj5wfYkAfjQBN49jHh/Q9D8KR4DQxfbLvH8Uz5HP0+YfQiuFije\r\n aVIo1LSOwVVHUk9BXQ+P9QbUvHWrzE8RzmBfonyf0z+Nafwp0P8AtjxtbyyLmCxU\r\n 3L5/vDhB/wB9EH8DQB7v4O8PRaFomn6SuCY1zKw/ic8sfzz+GK7fNZFiMXIPsa08\r\n 0ASbqN1R7qN1AEm6jdUe6jdQBJuo3VHuo3UASbqN1R7qN1AEm6jdUe6jdQA6RRLG\r\n yN0YYrnmQqxU9QcVv7qx7gZuJD/tGi4FSWGOeF4pUDxupVlPQg8EV8seKNFbw94l\r\n vtLbJWGQ+WT/ABIeVP5EV9Xba8Z+N+h7J9P1yNeHBtpiPUZZP03fkKAPIo5HilSS\r\n NiroQysOoI6GvTvijbLquh6D4riUA3UCxT46Biu4fjnePwFeX17DYwf2x8ApYtoe\r\n W0DupPbZIW/9BJFAHk1jOba+hmBxscE/Tv8ApXd+d7155XX21wXtYmJ5KAn8qAOq\r\n +EniD/hFfigtg7FbHVsQFecB2OYzj/e+X6Ma+pq+H9XkeGe1vYWKSxONrKcEEcj+\r\n VfZfhrWY/EPhrTdXiK7bu3SUhTkKxHzL+ByPwoA1aKKKACiiigAooooAKKKKACii\r\n igAooooAK+cf2gdY/tHxnpHh9JAYbSMSyqOzyHof+Aqp/wCBV9HV8Z+KtWbXPijr\r\n GoM+9TdSLGf9hfkT9AKAL/m+9bfwSsxNq+taiT8yIsQH++xY/wDoArlvNruvgcq/\r\n Ztex98Txg/TDY/rQB43qc5utVvLg9ZZ3f82Jr234IaT9n8O32psuGu5xGp9UQf4s\r\n 35V4trVq1lruoWrfehuZIz+DEV9OeAtP/s7wJotvjBNsspHu/wA5/VqTGjo7Y7Z1\r\n P4Vo5rOAIOR2q6rblBHelcCTNGaZmjNMB+aM0zNGaAH5ozTM0ZoAfmjNMzRmgB2a\r\n M03NGaAHFsDJrLb5mLepzV6Z8R47mqm2lcCPbXK/EfSv7V8BapEFzJDH9oT2KHcf\r\n 0BH41122mywpNC8UihkdSrKe4PBouB8a17r4Etnb4OXikcTxXW33GGX+YNeV6r4K\r\n 8Q6Zd3CNo2oNBFIyrMtuxVlBIByBjnrXukGnt4d+FElo52S2+mSF88YkKFiP++ia\r\n oR81VvWcuLSIei1g1pxSbYUX0AoAsai3mWbj0IIr6R+AGqG++Gq2rkbrG6khAHXa\r\n cOP1dvyr5lmk3QuPavcP2Z5v3XiOAsfvW7hf+/gJ/lQB77RRRQAUUUUAFFFFABRR\r\n RQAUUUUAFFFFAFXU71dO0q8vnGVtoHmI9lUn+lfDFhLnUGkPVtx5r7X8YHb4J18+\r\n mnXB/wDIbV8P2z7LhG98UAdD5td98FrxYfEOtadgf6RElwp/3SQR/wCP/pXmfm1f\r\n 0DXH8PeJbDWEBIt5MSqvVozww/ImkBt/Fzw9Jp3jlrmOPEGpgSxkdN/CuPrnB/4F\r\n X0XDAlvBHDGMJGoRR6ADArnvEGg6f420OyljkVwkkd3azr+Bx9COPy9K6jFS2UkM\r\n xUkTY+U0m2jFK47E1FMB9aWi4rDqKbRRcLDqKbRRcLDqKbRRcdh1ITgZpM01st9K\r\n LhYjc7mzSYp+2jbRcLDNtcp4w8f6N4NVI7syT3kg3JbQ4LY/vMT90f5ANdeFrwHw\r\n 7dQ654u1vxLeATSG5KW2/ny17Y9wu0D8aa1E9DYb45yxMGn8KzRwnoxuj/WPFa0X\r\n xM8FeL9Pl0rVjPZJcLsdbnKqec8Op4/HFTPqiSIUfayMMFWGQa5PW/CWhasjNDCt\r\n jcdpIBhT9V6fliqsK5V8TfBu4hg/tHwtcjUrJhvEJcGTHqrDhx+R+teaTCW2meGe\r\n N4pUO1kdSrKfQg9K6e01jxP8OtR2Wl4fs7HcEOXglH+6eh+mD713yT+HvjJpjwyR\r\n JpviiCMmNs8OB7/xL7Hle3ubAeKtLlSM17Z+zV5n9u67j/VfZo93+9uOP614vf2N\r\n zpmoXFjdxmO4t5DHIh7EHFe8/szw/u/Ek5U9bdA3/fwkfypiPfaKKKACiiigAooo\r\n oAKKKKACiiigAoopGZUUsxAUDJJ7UAUNdW2k0K+gu3CQTQPE5Poylf618/8Ah34Z\r\n 6XYxK95EL656s0n+rU+gXv8Aj+lem67qz61feTCSLSI/L/tH+9/hVvS9MR4xJKvy\r\n fwr6+9eHisZUq1PZUXoexh8NCjD2lVanHSeE9LkjKNplgQRjAgUfriuM8RfDO3lj\r\n aTSSbaYDPkuxZH+hPI/l9K94aytWXaYE/AYrG1LSxEhZctF+q1zXxGH99Suje9Ct\r\n 7so2PFfh149m8I3p8Oa+HisA5CM45tmJ6H/ZPX8c173DLHPCk0MiSROoZHQ5DA9C\r\n COorx34g+DhrFk11bJ/xMLdSUIH+tUfw/X0/LvXBeC/iRq/g6QQA/a9NJ+a0kb7v\r\n uh/hP6e1e1h68cRDmW55WIoOhPlex9R4pcVheF/F+jeLbPz9LuQZFH723f5ZI/qP\r\n T3GRW+K1MRuKMVJto20XCxHRUm2jbRcZHRUm2jbRcCOipNtG2i4EeKMVJto20XAj\r\n xTJHSGNpJCFVRkk1PtrC8Q3BAitEP3/mb+lY16vsqbka0KXtJqJQur241J2RCY4B\r\n 2H9fWvn/AMLXxsY7y1b5XWXJH6f0r6LsLMPhT9xevua+ePiBpMvhbx7foiFbe5Y3\r\n EPoUc5wPo2R+FceWVp1JSc+p1ZhTjGMVHobn9r/7VJ/a/wDtVwn9qt6mkOqt717B\r\n 5Z0nibUI7jRnjfBYupT2Of8ADNcxoV9c6Zr1he2bEXEM6MmO5z0/Hp+NVbi6kuXB\r\n c8DoPSu8+HHgi61W/h1i7QxWNu4eIsOZXHTHsD1P4euMq1aNKDnM0pUpVZKMQ+NE\r\n cKfEW4MQG5oImlwP4tuP5Ba9u+Auk/2d8M4Llsb7+4kuOnIAOwD/AMcJ/Gs288P2\r\n d8Wa6tba4ZupliDE/iRXSeHNdGi29vpc0CR2USiOLYuPLUdPqP1+tcNHNKU3yvQ7\r\n auXVILmi7ne0UisrqGUgqRkEd6WvTPOCiiigAooooAKKKKACimu6xozuQqqMknsK\r\n 4XVvEl3qMzQWLNFbjjcOGb3z2HtXPiMTChG8jehh51pWidde6xYWGRcXKKw/gHLf\r\n kK5DWfEsuqqbSzRo4D94nqw/oKyUtFBy5LGtSx08SDew2x+g714lXMatf3IKx61P\r\n BUqHvz1ZDptgZGC4+Qcu3rXSLhVCjgAYFQoqxqFQAKOwp26nRpqkvMmrN1H5Em6k\r\n bDKVYZB4INR7qN1auRnynOalZ7HZAOnKH2rwH4keGv7K1X+0raPFpdsSwA4STuPx\r\n 6/n6V9K6hEJYNwHzJz+FcL4r0SPWtIubJ8DzlyjH+FxyD+f9a5sPV+rV7fZZ01af\r\n 1ijbqj5303U73R9QhvtPuZLe5ibckiHBH+I9u9fRfw6+KVr4sC6bqQS11dRwAcJc\r\n D1X0b1X8R6D5tngktriSCZCkkbFHU9QRwRSRSyQSpLC7RyIwZXU4KkdCDX0jSkjw\r\n LtM+2wKdtrzX4VfEdfFVoNJ1SQLrMC5DHj7Sg/iH+0O4/H1x6aBWL0NFqM20baft\r\n o20rjGbaNtP20baLgM20bafto20XAZto20/bRtouAzbXJ6k3m69J3CYH5D/Guv21\r\n xQbzdSuZD3dv515uZztTSPRy6N5tm3aAJbr6nmub8d+CrXxppKwl1hvoMtbzkZxn\r\n qrf7J/Tr7Ho0OEUegp+6uOlUdOzj0OipBTumfKmreB/Emi3DRXekXRA6SRRmRGHq\r\n GXI/rS6Z4F8T6vIEtdFu8H+OWMxJ/wB9NgV9V7qXdXof2lK22pxfUY33PLPB/wAG\r\n LPTpUvfEUkd7OvK2qZ8pT/tE8t9OB9a9GubJIIwYVCxjjYOij2q8DTZzmB8+lefi\r\n qzrJuZ10YKk/dMkCmTwCWEjHzAZFWAtOC14vtLO53uR0Hg++a50toHbL27bR/unp\r\n /UfhXRVwnhab7J4glticLMpAHuOR+ma7uvtMBV9rQTPncbT5Kzt11Ciiiu05Qooo\r\n oAKKKKAOf8YXLW+i7FODM4Qn25J/lXIW6BIV9SMmuq8bJu0iFv7sw/ka5uIboIz6\r\n qK+ZzibVWzPey2yo38xK30wqKo4AHFYZWtK1m8yIKT8y8GuPCVEm0dGIV0mW91G6\r\n os0m6u7nOXlJd1JuqPdSbqOYfKSFsjFYd9bYLx491rX3VDcxiZOPvDpWFZcy03Rr\r\n SfKz55+KHh82eprq8KYhufllwPuyD/ED8wa8+r6c8QaNb6rp89pcoTDMNrY6qexH\r\n uDXzprmjXOg6rNYXS/Mhyr44dezCvZy7FKrT5Hujzcfh+SfOtmRaVqd3o2q22o2U\r\n pjubeQSIw9R2PqD0Ir7F8N61D4k8OWGrwABLqIOVBzsboy/gwI/Cvi6vpv4Dec3w\r\n 6bzc7BfSiLP93C9Px3V3VFpc4oPWx6ZijFSYoxWFzUjxRipMUYouFiPFGKkxRii4\r\n WI8UYqTFGKLhYjIwCa4KzO55W9TXd3TiKzmkP8EbN+QrhrEfIx9TivJzSWiR6eXL\r\n 4mbAbil3VCDTwa872ljraJQacDUYp4qXVIaJBUdw3yBfWng1A53vnt2rnrV7RsKK\r\n 1IgtPC04LTwtedKZo5GdPI1hqdteqMhWBI9cdR+Ir0WCaO4gSaJgyOAykdxXEzW6\r\n 3ELRv0Pf0p3h3VZNLvP7Nuz+5dvkY9FJ/oa+iyTMIr91I4sZR9rHmjujuKKKK+rP\r\n GCiiigAooooAxfFcXmeH5zjJQqw/MVyVl89nGfTj9a6/xPMsWgXOerAKB7kiuU06\r\n MixQnvk/rXy2ftRkmezl7apP1HFaFLRtuXg1OUppSvn41bao7ua5YjlEi5HXuKca\r\n qAFTkcGpkl3cNwa76eLvozJxtsPNNyacaaa6VWBCbqN1IaaaftENIr3UQYFgOD94\r\n VwfjTwhF4hsBECsd1HzBMw4Hqrex/wDr16Eao3EIYFCOD0PpSjVdKanA15VUi4SP\r\n MdD/AGfNSuZ4pdW1e0jszhiLTc7uPQEgAZ9efpXvWkaRZaHpNtpmnxCK1tk2Iv8A\r\n Mn1JOST6muf8Pao1pP8AYLhvkY/uyex9Poa6zdX0NLEe3gpHiVaHsZcouKXFN3Ub\r\n q0Mx2KMU3dRuoAdijFN3UbqAHYoxTd1IzhFLMQqgZJPAAoAzPEc/2fRpQDhpCEH4\r\n 9f0zXMWce2BPfmjU/Elh4im8jS7hbmC3lMbzJyjPgcKe4Geo45q0qAAAdBXz2aVf\r\n 3nL2PYwceWlfuOFPFNC04CvIdU3Y8U8UwCngVk6xmxWPGKQLTgtOC1zzq3ZN7DQt\r\n PC04LTgtYSmS5DQtUtVtBNamRR88Yz+HetILUN9KlvZyu5H3SAPU0UaslVi47iUn\r\n fQ2/DWoNqGjxtI2ZYz5bk9yO/wCWK165rwVC8elSyNkLJKSvuAAM/wCfSulr9Rws\r\n pSoxct7HjYiKjVko7BRRRW5iFFFBOKAOQ8bTsxs7NT95i5Hv0H8zUUcIjjVB0UYF\r\n N8V8eILKRvubV5PThjmre2vguIqr+sWZ7VD3aMbFcpTSlWClNKV4SqmqkVylNKVZ\r\n KU0pWqqlKRCGK8HkU7IPSnFKaVrohiGh3QhFMNP5pCK3WIGiMiopVyKnIpjDNX7a\r\n 6NEzNvLffHvA+Zf1Fc4PilceD9ZGm+I4pbrTZhvtb2MZkQd1cfxY9euMZyTXZFK8\r\n v+K2kJP4ekuAP3llIHU/7LEAj9Qfwr1spxNqvI9mYYyHPSbW6PZ9E8SaP4jtftOk\r\n ahBdx/xeW3zL/vKeV/EVqZr4ctL260+4W4srma2nX7skMhRh9COa7bSfjH400oBW\r\n 1FL6MdEvIw//AI8MMfzr6d0ux4an3Pq3NGa+d7b9oXWlx9q0Wwl9fKd0/mWqSX9o\r\n fVD/AKrQbNf9+Zm/oKn2bHzo+g91I8qRozyMqooyWY4AFfMeofHXxheZFsbGxHYw\r\n wbj/AOPlh+lcVrPinXfEL7tW1W6uhnIR5DsH0UcD8BVKkwc0fSXif4x+FvDoeKC4\r\n /tS8HSK0YMoP+0/3R+GT7V4X4y+KHiDxkWgml+x6celnbkhT/vnq348e1cVViwtz\r\n d6hbWw6yyqn5nFWoqKuTdydj6E+H2mCx8OadEVw3k+c/+83P9cfhXahaz9HhVYnK\r\n gADCgegFaoWvgcdWc60mfRL3YqK6DAtPC04LTwtedKZLkNC04LTgtPC1jKZDkNC0\r\n 4LTgtPC1lKZDkNC07GKo3uqQWeVB8yX+6p6fU1Uis9U1kgyN5FufXgEew6muzCZd\r\n XxT91aA1Zc0nZFi71m3t8rF+9k/2TwPxpbDRL/W51uL4tDbA8LjBI9h/U1r6boll\r\n YEOE82Yf8tH5x9B2rbR6+vy/IaVC0p6s46uMS0pfeSQwx28KQxKFRBhQOwqSmq2a\r\n dX0KVlZHnN3CiiimAU1qdSEZFAGD4h0k6paDy8CeIkpnv6iubg1eWzP2a/hcMnG7\r\n HP4+v1rvHWqdzaQ3K7Z4UkHYMucV5OYZVSxmstzsoYrkjySV0c8mq2MnSdQf9oEV\r\n Os0En3JY2+jA1JN4b0587YWQ/wCy5/rVCTwtb/8ALOeVf94A/wCFfO1OGJr4JHUs\r\n RQfVovFaaVrKbw/dQ8wXnP4r/LNMKa3a9/NUe4b/AOvXHUyDFQ21NYzpy+GSNYpT\r\n StZsWuFH2XcBQ9yo/oa1IZ4bld0MiuPY9K8urRrUX76LalHcYVppWrBWmlKzVUFI\r\n rlKaUqwUppStVVKUiuUrzv4oXCxeF9TzjLCOMe5LL/8AXr0W6mS2haR/wHqa8/8A\r\n FHhs+K7SO3mu3giEvmvsUEucEDr06mvdyWnKpWUuiFWny0pM+eKK9og+FGhQkGWS\r\n 8nPcPIAP0ArWtvBOgWePK0q3JHeQeZ/6Fmvt3UR4XKzwGp1srpl3LbTFfURnFfRM\r\n Wl21v/qbeKP/AHEC/wAqm+y+1T7TyHyHzbJBNF/rInT/AHlIqOvpb7KCCCoIPYiq\r\n s3hzSrn/AF+mWkhPdoFJ/PFHtPIOQ+c61vDGB4r0jIyPtkX/AKGK9ok+H/hqc5fS\r\n Yx/uO6fyIp9v8PPDdtcRXEOmlJYnDowuJOGByD96iU04tDgrSTO40gZtG/3z/IVp\r\n BayNHm2TPbucbuV+tbYWvzfGp06zTPenLW40LTwtOC04LXnymZOQ0LTgtPC07GBk\r\n 1i5kOQ3GKxLzUZruf7JYAnPBcd/8B70ahfyXs32Ky5B4Zh3/APrVpadpyWUW0cuf\r\n vN6//Wr6TJ8ndZ+1qrQVSoqMby36Ij07RILbEk2JZevPQfQVtLUaLU6LX3FKlCnH\r\n lgrHl1KsqjvJkiGrCVEi1Mi1sZkyVKKjRakpiCiiigAooooAQqDUTR1NRQBSeOoW\r\n irRKg0xoc0rDMtovaoWirVaH2qFoPalYLmNcWUU6bZY1ce46Vjz6E8beZZzMjDoC\r\n f611jQe1RNB7Vz1sNTqq00b08RUp/CzlBf6pZjFxB5ij+Ij+o4qVPEFuQPMhkU+2\r\n DXQtb+1VpNOgkJLwRsfUqDXiVuHcPN3jodSxkH8UfuMs65Z4ziQ+22q0uu7vlt4G\r\n LH+9/gK1jpFqDkW8f/fNOWyjj+5Gq/7oxWNPhulF3kyvrlNbROdNvdXknmXJIHZf\r\n /rdqmNrgYA4rcNt7Uw23tXu4fCU6EeWCOWriJVXrsYZtvamm19q3Da+1N+y+1dHK\r\n Y3MQ2vtSfZfatv7L7UfZfajlC5i/ZfanC19q2Ra+1L9l9qLBcyBbe1PW29q1hbe1\r\n OFt7UWC5g3NlIMTQ53rzx1q/YarFOoSYiOX34BrSFt7VWudEgustgxyH+Je/1FeN\r\n mWURxS5o6M7aGKSjyVPvLgFPArFGg6hH8sF7he3zMv8AKlGg6nNxPejb/vM36V80\r\n +HMS5WOjnpfzmhc6ja2YIkkBb+4vJrIe4vdbkMVupjtx94/4n+lalp4YtojumLTH\r\n 0PA/KtmO1WNQqIFUdABgCvYwHDkKTU6urMZ4qnD4NWZen6XFYx4T5nP3nPU1orF7\r\n VaWD2qVYPavqIU4wXLFaHBObm+aRWWKpljqwsNSiMCrsQQrHUypingYopiCiiigA\r\n ooooA//Z\r\nX-SPOUSE:Manuela Graf\r\nX-EVOLUTION-SPOUSE:Manuela Graf\r\nitem1.X-ABRELATEDNAMES:Manuela Graf\r\nitem1.X-ABLabel:_$!!$_\r\nitem2.X-ABRELATEDNAMES:Manager\r\nitem2.X-ABLabel:_$!!$_\r\nitem3.X-ABRELATEDNAMES:Aufsichtsrat\r\nitem3.X-ABLabel:_$!!$_\r\nitem4.X-ABRELATEDNAMES:Barbara Jonas\r\nitem4.X-ABLabel:_$!!$_\r\nitem5.X-ABRELATEDNAMES:Dominik Maller\r\nitem5.X-ABLabel:_$!!$_\r\nROLE:CTO\r\nROLE:Vorstand\r\nX-MANAGER:Manager\r\nX-MANAGER:Aufsichtsrat\r\nX-EVOLUTION-MANAGER:Manager\r\nX-EVOLUTION-MANAGER:Aufsichtsrat\r\nX-ASSISTANT:Babsi\r\nX-ASSISTANT:Dominik\r\nX-EVOLUTION-ASSISTANT:Barbara Jonas\r\nX-EVOLUTION-ASSISTANT:Dominik Müller\r\nBDAY;VALUE=date:1971-06-21\r\nX-ANNIVERSARY:2000-01-01\\, Testfeier\r\nX-ANNIVERSARY:2003-2-2\\, Blafeier\r\nX-EVOLUTION-ANNIVERSARY:2000-01-01\\, Testfeier\r\nX-EVOLUTION-ANNIVERSARY:2003-2-2\\, Blafeier\r\nIMPP:aim:balbala\r\nIMPP:aim:hakunamatata\r\nX-AIM:balbala\r\nX-AIM:hakunamatata\r\nEMAIL;TYPE=INTERNET:sven@andresen.de\r\nEMAIL;TYPE=INTERNET:andresen@andresen.de\r\nTEL;TYPE=WORK,VOICE:+49 89 11 11 111\r\nTEL;TYPE=WORK,VOICE:+49 234 222 222\r\nTEL;TYPE=WORK,FAX:+49 7373 73\r\nTEL;TYPE=PAGER:+49 160 073 727 272\r\nTEL;TYPE=PAGER:+49 2626 26\r\nTEL;TYPE=CELL,VOICE:+49 39292 82\r\nTEL;TYPE=CELL,VOICE:+49 7272 722\r\nTEL;TYPE=PREF,VOICE:+49 12 34 567\r\nTEL;TYPE=CAR,VOICE:+49 8292 38 383\r\nTEL;TYPE=HOME,VOICE:+49 7327 272 727\r\nTEL;TYPE=HOME,VOICE:+49 7272 7282\r\nTEL;TYPE=HOME,FAX:+49 1010 1\r\nitem6.TEL;TYPE=VOICE:+49 8373 6262\r\nitem6.X-ABLabel:_$!!$_\r\nitem7.TEL;TYPE=VOICE:+61 27 28 73 246\r\nitem7.X-ABLabel:_$!!$_\r\nitem8.TEL;TYPE=FAX:+49 9382 3424\r\nitem8.X-ABLabel:_$!!$_\r\nTEL;TYPE=ISDN:8797\r\nTEL;TYPE=ISDN:98732947234\r\nTEL;TYPE=X-EVOLUTION-RADIO:+49 88 298 723 498 32\r\nTEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34\r\nTEL;TYPE=X-EVOLUTION-TELEX:+49 2763 382 882 28 82\r\nTEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282\r\nTEL;TYPE=MAIN:+49 6237 623 723 84 76\r\nTEL;TYPE=MAIN:+49 9324 32 479 234234\r\nTEL;X-EVOLUTION-CALLBACK:+49 8383 73 723\r\nTEL;X-EVOLUTION-CALLBACK:+49 7363 6363\r\nTEL;TYPE=MODEM:+49 8383 73 723\r\nTEL;TYPE=MODEM:+49 7363 6363\r\nTEL;X-EVOLUTION-TTYTDD:+49 3377 37 373\r\nTEL;X-EVOLUTION-TTYTDD:+49 8378 33\r\nTEL;X-QUICKDIAL:13355\r\nADR;TYPE=WORK;CHARSET=utf-8:PO 373;Andresen AG\\, R&D;Messegasse 7;Passau;Ba\r\n yern;94036;Deutschland\r\nADR;TYPE=WORK;CHARSET=utf-8:6266 AA;andresen Holding\\, Geschäftsleitung;Wei\r\n senstraße 13;Irgendwo;Niedersachsen;34332\r\nADR;TYPE=HOME;CHARSET=utf-8:;;Weisenstraße 13\\r;Irgendwo;;34332\r\nADR;TYPE=X-OTHER:;;Irgendwo;Nirgendwo;Sonstwo;0000;Antarktis\r\nORG:andresen AG;R&D;;XXX\\, 033\r\nORG;CHARSET=utf-8:andresen Holding;Geschäftsleitung;;-\\, 0223\r\nX-HOUSE;TYPE=WORK:XXX\r\nX-HOUSE;TYPE=WORK:-\r\nX-ROOM;TYPE=WORK:033\r\nX-ROOM;TYPE=WORK:0223\r\nLABEL;TYPE=WORK:1. Stock\\, links\r\nLABEL;TYPE=WORK:oder rechts\r\nURL;TYPE=WORK:http://www.andresen.de\r\nURL;TYPE=WORK:http://www.andresens.de\r\nitem9.URL;TYPE=HOME:http://www.zuhause.de\r\nitem9.X-ABLabel:_$!!$_\r\nitem10.URL;TYPE=HOME:http://www.andresen.de/~andresen\r\nitem10.X-ABLabel:_$!!$_\r\nX-BUSINESS-CATEGORY:IT\r\nX-BUSINESS-CATEGORY:Development\r\nKEY;ENCODING=b;TYPE=X-CERT:\r\n LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXlXZ0F3SUJBZ0lK\r\n QUpUeXNHNDV0V3BZTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd0NRWUQKVlFR\r\n R0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFTk1Bc0dBMVVFQnhN\r\n RVEybDBlVEVoTUI4RwpBMVVFQ2hNWVNXNTBaWEp1WlhRZ1YybGtaMmwwY3lCUWRI\r\n a2dUSFJrTVF3d0NnWURWUVFMRkFOU0prUXhGakFVCkJnTlZCQU1URFZOMlpXNGdR\r\n VzVrY21WelpXNHhIekFkQmdrcWhraUc5dzBCQ1FFV0VITjJaVzVBWVc1a2NtVnoK\r\n Wlc0dVpHVXdIaGNOTVRBd05qSXpNRGd5T0RFNFdoY05NVEV3TmpJek1EZ3lPREU0\r\n V2pDQm16RUxNQWtHQTFVRQpCaE1DUVZVeEV6QVJCZ05WQkFnVENsTnZiV1V0VTNS\r\n aGRHVXhEVEFMQmdOVkJBY1RCRU5wZEhreElUQWZCZ05WCkJBb1RHRWx1ZEdWeWJt\r\n VjBJRmRwWkdkcGRITWdVSFI1SUV4MFpERU1NQW9HQTFVRUN4UURVaVpFTVJZd0ZB\r\n WUQKVlFRREV3MVRkbVZ1SUVGdVpISmxjMlZ1TVI4d0hRWUpLb1pJaHZjTkFRa0JG\r\n aEJ6ZG1WdVFHRnVaSEpsYzJWdQpMbVJsTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVB\r\n QTRHTkFEQ0JpUUtCZ1FDdEtPWnJBOXBjdjJWUVpkSEg4YmhhCmZqMlZWMW9Hakxj\r\n Tkt3MktWVkJ6anphQVlyaU9HcnBNWDdhcW1oL3pjNHhBMTVDc1JJYjJoQXpPcDlT\r\n eldvQ00KbXhZcFN5eG8rbUJHUGRYOVcvTStYcStSYUtGSURpdHZyL0xBb2I5N0ov\r\n eWp5R0JDYU4vdExvdG9ZN3F5TjAxUQpWTkRYNkJkcS9GZTFjcUdhcnFvdzNRSURB\r\n UUFCbzRJQkJEQ0NBUUF3SFFZRFZSME9CQllFRkhNaFBPR255aENtCmxWcHlCZHhC\r\n TVczZ2drbS9NSUhRQmdOVkhTTUVnY2d3Z2NXQUZITWhQT0dueWhDbWxWcHlCZHhC\r\n TVczZ2drbS8Kb1lHaHBJR2VNSUdiTVFzd0NRWURWUVFHRXdKQlZURVRNQkVHQTFV\r\n RUNCTUtVMjl0WlMxVGRHRjBaVEVOTUFzRwpBMVVFQnhNRVEybDBlVEVoTUI4R0Ex\r\n VUVDaE1ZU1c1MFpYSnVaWFFnVjJsa1oybDBjeUJRZEhrZ1RIUmtNUXd3CkNnWURW\r\n UVFMRkFOU0prUXhGakFVQmdOVkJBTVREVk4yWlc0Z1FXNWtjbVZ6Wlc0eEh6QWRC\r\n Z2txaGtpRzl3MEIKQ1FFV0VITjJaVzVBWVc1a2NtVnpaVzR1WkdXQ0NRQ1U4ckJ1\r\n T2JWcVdEQU1CZ05WSFJNRUJUQURBUUgvTUEwRwpDU3FHU0liM0RRRUJCUVVBQTRH\r\n QkFGcnVidGpoWVB1RERHVVpQRTQraUo2a3FmdEtXWDFJVzdmTXdtc3BRUWt5CitX\r\n UThSL3AxbURrc3ZEQ3hDYWp2YVduSVI2dGIwbmtCMTFFNmQ0dDhkMkxWTTE4M3dD\r\n UWJtMDRJS05mdkRKOXQKUE4vdHBVTkJrc0VkaXBlMEM1SEgyMnY0RitSSzVUK1lq\r\n M1J6VHZmOTdROVMzTzF3eE5lZkt0NXVUNFFxNUZtdAotLS0tLUVORCBDRVJUSUZJ\r\n Q0FURS0tLS0tCg==\r\nCALURI:http://caldav.andresen.local/sja\r\nFBURL:http://caldav.andresen.local/freebusy\r\nCAPURI:http://caldav.andresen.local/access\r\nCALADRURI:http://caldav.andresen.local/access\r\nX-DESCRIPTION:Beschreibung\r\nX-DESCRIPTION;CHARSET=utf-8:außerdem\r\nNOTE:Nur so ein Test!\r\nCATEGORIES:bla,blubb,test,hihi,oops\r\nEND:VCARD\r\n VCARD 10 1638 1631 \N 10 /user1/addressbook/hans_dieter.vcf db3e92c0ae37268c647949367e2030cc 2011-11-12 18:03:29.962136+13 2011-11-12 18:03:29.962136+13 BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//ALAB//NOSGML Version 0.9//DE\r\nREV;VALUE=date-time:20090124123353Z\r\nUID:uid=schmidt.1208717693\\,ou=Contacts\\,dc=andresen\\,dc=de\r\nX-ABUID:A93F52CB-C15F-1F34-2C49-7A67-0971277F\\:ABPerson\r\nFN:Hans Dieter Schmidt\r\nSORT-STRING:Schmidt\\, Hans Dieter\r\nN:Schmidt;Hans Dieter;;Dr.;Esq.\r\nX-DISPLAYNAME:HaDi Schmidt\r\nX-INITIALS:HW\r\nNICKNAME:HaWe\r\nX-SPOUSE:Maja Schultze\r\nX-EVOLUTION-SPOUSE:Maja Schultze\r\nitem1.X-ABRELATEDNAMES:Maja Schultze\r\nitem1.X-ABLabel:_$!!$_\r\nitem2.X-ABRELATEDNAMES:Barbara Jonas\r\nitem2.X-ABLabel:_$!!$_\r\nitem3.X-ABRELATEDNAMES:Klaus Timm\r\nitem3.X-ABLabel:_$!!$_\r\nROLE:Projektleiter\r\nX-ASSISTANT:Barbara Jonas\r\nX-ASSISTANT:Klaus Timm\r\nX-EVOLUTION-ASSISTANT:Barbara Jonas\r\nX-EVOLUTION-ASSISTANT:Klaus Timm\r\nBDAY;VALUE=date:1977-12-10\r\nBDAY;VALUE=date:1975-11-11\r\nDDAY;VALUE=date:2007-01-02\r\nX-DDAY;VALUE=date:2007-01-02\r\nX-ANNIVERSARY:2000-02-01\\,\r\nX-ANNIVERSARY:2001-02-02\\,\r\nX-EVOLUTION-ANNIVERSARY:2000-02-01\\,\r\nX-EVOLUTION-ANNIVERSARY:2001-02-02\\,\r\nX-EVOLUTION-BLOG-URL:blog.diesistmeineip.de\r\nitem4.URL:blog.diesistmeineip.de\r\nitem4.X-ABLabel:_$!!$_\r\nURL;TYPE=WORK:http://www.tu-hh.de\r\nURL;TYPE=WORK:http://www.telekom.de\r\nitem5.URL;TYPE=HOME:http://www.hadi-schmidt.de\r\nitem5.X-ABLabel:_$!!$_\r\nIMPP:aim:477826262\r\nIMPP:aim:aaab3ttebb3\r\nIMPP:icq:972398472394\r\nIMPP:icq:8972364872634\r\nIMPP:ymsgr:mailaddr@yahoo.co.uk\r\nIMPP:ymsgr:yahoo@yahootar.bla\r\nIMPP:xmpp:jabjab187383\r\nIMPP:xmpp:jabberwookie@starwahrs.co.com\r\nIMPP:msn:blablubb@langedomain.org\r\nIMPP:msn:738246832746\r\nIMPP:skype:hadi.schmidt-skype\r\nIMPP:skype:askjdhasd\r\nIMPP:ichat:ichatichat\r\nIMPP:ichat:second-ichat\r\nIMPP:nm:netnetmeetings\r\nIMPP:nm:vielleicht@eine.email.de\r\nIMPP:gtalk:gooogletalk\r\nIMPP:gtalk:googletalk2\r\nIMPP:sip:ipphon-addr.woauchimmer.de\r\nX-AIM:balbala\r\nX-AIM:hakunamatata\r\nX-AIM;TYPE=WORK:972398472394\r\nX-AIM;TYPE=WORK:8972364872634\r\nX-ICQ:972398472394\r\nX-ICQ:8972364872634\r\nX-JABBER:jabjab187383\r\nX-JABBER:jabberwookie@starwahrs.co.com\r\nX-MSN:blablubb@langedomain.org\r\nX-MSN:738246832746\r\nX-SKYPE-USERNAME:hadi.schmidt-skype\r\nX-SKYPE-USERNAME:askjdhasd\r\nEMAIL;TYPE=INTERNET:ich@hadi-schmidt.de\r\nEMAIL;TYPE=INTERNET:hadi@telekom-d.de\r\nTEL;TYPE=WORK,VOICE:+49 9823 9084\r\nTEL;TYPE=WORK,VOICE:+49 234 234 234\r\nTEL;TYPE=WORK,FAX:+49 7373 73\r\nTEL;TYPE=PAGER:+49 2626 26\r\nTEL;TYPE=CELL,VOICE:+49 7272 722\r\nTEL;TYPE=PREF,VOICE:+49 12 34 567\r\nTEL;TYPE=CAR,VOICE:+49 8292 38 383\r\nTEL;TYPE=HOME,VOICE:+49 7327 272 727\r\nTEL;TYPE=HOME,FAX:+49 40 812 387 21\r\nitem6.TEL;TYPE=VOICE:+49 8373 6262\r\nitem6.X-ABLabel:_$!!$_\r\nitem7.TEL;TYPE=VOICE:+49 7272 72\r\nitem7.X-ABLabel:_$!!$_\r\nTEL;TYPE=ISDN:4234234235\r\nTEL;TYPE=ISDN:98732947234\r\nTEL;TYPE=X-EVOLUTION-RADIO:+49 9872 349 832\r\nTEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34\r\nTEL;TYPE=X-EVOLUTION-TELEX:+49 38 288 228 82\r\nTEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282\r\nTEL;TYPE=MAIN:+49 6237 623 723 84 76\r\r\nTEL;TYPE=MAIN:+49 9324 32 479 234234\r\nTEL;X-EVOLUTION-CALLBACK:+49 8383 73 723\r\nTEL;TYPE=MODEM:+49 8383 73 723\r\nTEL;X-EVOLUTION-TTYTDD:+49 7373 73\r\nTEL;X-EVOLUTION-TTYTDD:+49 8378 33\r\nADR;TYPE=WORK;CHARSET=utf-8:;Uni Harburg\\, -;Innstraße 71;Hamburg-Harburg;\r\n Hamburg;21373;Deutschland\r\nADR;TYPE=HOME;CHARSET=utf-8:;;Weisestraße 13\\r;Irgendwo;;33443\r\nADR;TYPE=X-OTHER:;;Nirgendwo\r\nORG:Uni Harburg;;;033\r\nX-ROOM;TYPE=WORK:033\r\nLABEL;TYPE=WORK:1. Stock\\, links\r\nLABEL;TYPE=WORK:oder rechts\r\nX-BUSINESS-CATEGORY:IT\r\nX-BUSINESS-CATEGORY:Development\r\nCALURI:http://davical.hadi-schmist.home/hadi\r\nFBURL:http://davical.hadi-schmist.home/freebusy\r\nCAPURI:http://davical.hadi-schmist.home/cap\r\nCALADRURI:http://davical.hadi-schmist.home/access\r\nX-DESCRIPTION:Beschreibung\r\nX-DESCRIPTION;CHARSET=utf-8:außerdem\r\nCATEGORIES:uni\r\nEND:VCARD\r\n VCARD 10 1639 1631 \N \. -- -- Data for Name: calendar_alarm; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY calendar_alarm (dav_id, action, trigger, summary, description, next_trigger, component, trigger_state) FROM stdin; 1155 DISPLAY TRIGGER:-PT4320M \N Aaaaa: Aaaaaaaaaaa Aaaa 2011-01-05 14:00:00+13 BEGIN:VALARM\r\nTRIGGER:-PT4320M\r\nDESCRIPTION:Aaaaa: Aaaaaaaaaaa Aaaa\r\nACTION:DISPLAY\r\nEND:VALARM\r\n N 1157 DISPLAY TRIGGER:-PT15M \N Aaaaa: Aaaaaaa aaaaaaa 2011-01-04 18:45:00+13 BEGIN:VALARM\r\nTRIGGER:-PT15M\r\nDESCRIPTION:Aaaaa: Aaaaaaa aaaaaaa\r\nACTION:DISPLAY\r\nEND:VALARM\r\n N 1163 DISPLAY TRIGGER;VALUE=DURATION:-PT15M \N 2006-03-22 22:30:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT15M\r\nEND:VALARM\r\n N 1166 DISPLAY TRIGGER;VALUE=DURATION:-PT1M \N 2005-07-30 07:29:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT1M\r\nEND:VALARM\r\n N 1172 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-08-05 19:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1173 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-02-19 05:30:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1174 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-09-06 19:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1176 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-10-27 03:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1181 DISPLAY TRIGGER;VALUE=DURATION:-P3D \N 2003-10-10 20:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P3D\r\nEND:VALARM\r\n N 1188 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-03-05 22:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1189 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-04-25 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1196 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-09-09 05:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1199 DISPLAY TRIGGER;VALUE=DURATION:-PT5M \N 2002-08-28 03:55:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT5M\r\nEND:VALARM\r\n N 1205 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-10-21 03:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1207 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2005-02-23 22:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1219 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-09-15 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1220 DISPLAY TRIGGER;VALUE=DURATION:-PT1H \N 2002-08-26 23:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT1H\r\nEND:VALARM\r\n N 1222 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-10-16 07:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1230 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-06-15 18:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1231 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-02-25 02:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1236 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-04-04 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1238 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-11-11 02:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1246 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-09-24 06:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1247 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-10-20 01:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1262 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-02-21 01:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1263 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-05-02 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1266 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2005-08-25 02:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1269 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-09-17 00:30:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1272 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2006-04-04 19:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1275 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-10-08 00:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1277 DISPLAY TRIGGER;VALUE=DURATION:-P1W \N 2003-09-30 05:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1W\r\nEND:VALARM\r\n N 1279 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2005-09-04 20:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1286 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-10-26 06:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1293 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-08-25 19:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1294 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-10-21 02:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1296 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-09-15 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1299 DISPLAY TRIGGER;VALUE=DURATION:-PT1M \N 2005-07-30 07:44:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT1M\r\nEND:VALARM\r\n N 1300 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2005-08-08 18:30:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1306 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-09-22 01:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1308 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2005-08-10 23:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1309 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-02-25 03:30:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1312 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2007-01-14 21:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1315 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2005-09-05 19:30:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1319 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-08-18 19:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1327 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-09-22 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1328 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-10-29 01:30:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1330 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-03-11 02:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1331 DISPLAY TRIGGER;VALUE=DURATION:-PT3M \N 2002-08-21 19:27:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT3M\r\nEND:VALARM\r\n N 1336 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-04-10 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1340 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-09-10 23:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1346 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-06-20 00:30:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1347 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-08-31 05:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1362 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-08-17 21:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1363 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-08-18 19:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1364 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-10-09 03:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1373 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-09-08 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1374 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-09-22 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1380 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2005-08-14 21:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1382 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-02-20 00:30:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1383 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-04-23 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1394 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-06-27 18:30:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1406 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-06-03 04:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1407 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-11-09 21:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1409 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2005-01-18 21:30:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1414 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-03-01 05:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1418 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-10-13 21:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1422 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-02-10 23:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1423 DISPLAY TRIGGER;VALUE=DURATION:-PT1H \N 2002-09-05 01:30:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT1H\r\nEND:VALARM\r\n N 1427 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-11-12 06:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1443 DISPLAY TRIGGER;VALUE=DURATION:-P2D \N 2003-08-09 19:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P2D\r\nEND:VALARM\r\n N 1444 DISPLAY TRIGGER;VALUE=DURATION:-P3D \N 2003-11-02 00:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P3D\r\nEND:VALARM\r\n N 1449 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-04-21 23:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1450 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-10-22 05:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1456 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-10-01 02:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1457 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2005-01-09 23:30:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1471 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-04-07 23:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1472 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-09-06 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1484 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-08-06 01:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1486 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2004-09-20 21:30:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1490 DISPLAY TRIGGER;VALUE=DURATION:-PT5M \N 2003-08-19 20:55:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-PT5M\r\nEND:VALARM\r\n N 1493 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-04-02 23:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1494 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-08-07 00:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1500 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2002-03-01 00:00:00+13 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1512 DISPLAY TRIGGER;VALUE=DURATION:-P1D \N 2003-05-20 19:00:00+12 BEGIN:VALARM\r\nDESCRIPTION:\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION:-P1D\r\nEND:VALARM\r\n N 1539 DISPLAY TRIGGER;VALUE=DURATION:-PT10M \N Mozilla Alarm: Morning Meeting 2007-12-11 07:35:00+13 BEGIN:VALARM\r\nTRIGGER;VALUE=DURATION:-PT10M\r\nDESCRIPTION:Mozilla Alarm: Morning Meeting\r\nACTION:DISPLAY\r\nEND:VALARM\r\n N 1540 DISPLAY TRIGGER;VALUE=DURATION:-P2D \N Mozilla Alarm: Release 0.9.3 2007-12-07 13:30:00+13 BEGIN:VALARM\r\nTRIGGER;VALUE=DURATION:-P2D\r\nDESCRIPTION:Mozilla Alarm: Release 0.9.3\r\nACTION:DISPLAY\r\nEND:VALARM\r\n N 1529 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N A Meeting 2006-11-01 09:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061101T073000Z-10480-1000-1-5@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:A Meeting\r\nEND:VALARM\r\n N 1546 AUDIO TRIGGER:-PT15M \N \N 2007-11-25 12:45:00+13 BEGIN:VALARM\r\nX-WR-ALARMUID:2927836F-DF85-4688-901A-9ABE442BFB62\r\nACTION:AUDIO\r\nTRIGGER:-PT15M\r\nATTACH;VALUE=URI:Basso\r\nEND:VALARM\r\n N 1548 AUDIO TRIGGER:-PT15M \N \N 2007-11-26 06:45:00+13 BEGIN:VALARM\r\nX-WR-ALARMUID:F33877C6-563B-4F20-B129-77A5B6C6944E\r\nACTION:AUDIO\r\nTRIGGER:-PT15M\r\nATTACH;VALUE=URI:Basso\r\nEND:VALARM\r\n N 1550 EMAIL TRIGGER:-P8D Alarm notification This is an event reminder 2007-11-15 12:00:00+13 BEGIN:VALARM\r\nX-WR-ALARMUID:F5B2B4CF-E7F2-47B3-8243-8CB829E81122\r\nACTION:EMAIL\r\nDESCRIPTION:This is an event reminder\r\nSUMMARY:Alarm notification\r\nATTENDEE:mailto:andrew@mcmillan.net.nz\r\nTRIGGER:-P8D\r\nEND:VALARM\r\n N 1550 AUDIO TRIGGER:-PT15M \N \N 2007-11-23 11:45:00+13 BEGIN:VALARM\r\nX-WR-ALARMUID:3A336F1D-550D-412F-9BDE-EBE8B03E8A53\r\nACTION:AUDIO\r\nTRIGGER:-PT15M\r\nATTACH;VALUE=URI:Basso\r\nEND:VALARM\r\n N 1567 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Alan Wanston 2006-11-22 12:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061119T201927Z-5101-1000-1-17@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Alan Wanston\r\nEND:VALARM\r\n N 1568 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N ??? 2006-10-30 12:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061029T195821Z-14353-1000-1-6@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:???\r\nEND:VALARM\r\n N 1569 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N James What 2006-11-07 13:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061106T213310Z-4382-1000-1-31@ubu\r\nDESCRIPTION:James What\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1570 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Doctor 2006-11-01 13:15:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061031T194148Z-14353-1000-1-19@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Doctor\r\nEND:VALARM\r\n N 1571 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-10-30 10:15:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061027T022803Z-4264-1000-1-2@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1572 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-10-26 14:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061025T210650Z-21440-1000-1-9@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1573 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-10-25 14:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061020T071222Z-7292-1000-1-2@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1574 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Summer Festival drinks at the loaded hog 2006-09-28 17:15:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060918T011246Z-21149-1000-1-20@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Summer Festival drinks at the loaded hog\r\nEND:VALARM\r\n N 1575 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N IZPAXY 2006-10-30 15:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061029T195827Z-14353-1000-1-7@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:IZPAXY\r\nEND:VALARM\r\n N 1576 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Dubai Day 2006-10-16 08:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061011T232731Z-27445-1000-1-15@ubu\r\nDESCRIPTION:Dubai Day\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1578 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Those who are left will have a drink to celebrate the new calendar 2006-12-22 13:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061219T104635Z-23686-1000-1-22@ubu\r\nDESCRIPTION:Those who are left will have a drink to celebrate the new ca\r\n lendar\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1579 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Donovan 2006-09-18 13:45:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060914T212513Z-15781-1000-1-18@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Donovan\r\nEND:VALARM\r\n N 1580 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N NGOP by-election readiness. 2006-09-11 10:15:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060906T123509Z-5254-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:NGOP by-election readiness.\r\nEND:VALARM\r\n N 1581 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Murray Flenshaw @ Copperstuff 2006-09-07 12:15:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060903T233851Z-31621-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Murray Flenshaw @ Copperstuff\r\nEND:VALARM\r\n N 1582 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Really Geeky Thoughts 2006-09-21 15:45:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060920T052705Z-28285-1000-1-7@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Really Geeky Thoughts\r\nEND:VALARM\r\n N 1583 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Summer Festival 2006-09-27 23:45:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060918T011217Z-21149-1000-1-19@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Summer Festival\r\nEND:VALARM\r\n N 1584 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N 9:am - 2:30pm in Helsinki 2006-09-13 08:45:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060913T003631Z-12694-1000-1-24@ubu\r\nDESCRIPTION:9:am - 2:30pm in Helsinki\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1585 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Steve's Birthday 2006-08-01 12:19:56+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060803T084657Z-6038-1000-1-13@lamb\r\nDESCRIPTION:Steve's Birthday\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1586 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-12-12 09:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061211T020828Z-15443-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1587 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-09-15 09:45:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060914T051626Z-5898-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1588 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N NGOP Meeting 2006-09-19 08:45:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060911T214556Z-21593-1000-1-6@ubu\r\nDESCRIPTION:NGOP Meeting\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1589 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-12-20 13:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061219T225040Z-21169-1000-1-13@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1590 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-11-02 13:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061101T230356Z-1895-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1591 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N Board Meeting 2006-09-25 11:45:00+12 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20060918T071919Z-21149-1000-1-51@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:Board Meeting\r\nEND:VALARM\r\n N 1592 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N IZPAXY Review 2006-11-20 10:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061119T202229Z-5101-1000-1-18@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nDESCRIPTION:IZPAXY Review\r\nEND:VALARM\r\n N 1593 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-10-30 13:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061026T223608Z-4264-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1594 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-10-25 13:15:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061020T071108Z-7292-1000-1-0@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N 1595 DISPLAY TRIGGER;VALUE=DURATION;RELATED=START:-PT15M \N \N 2006-10-12 13:45:00+13 BEGIN:VALARM\r\nX-EVOLUTION-ALARM-UID:20061010T014606Z-6897-1000-1-2@ubu\r\nACTION:DISPLAY\r\nTRIGGER;VALUE=DURATION;RELATED=START:-PT15M\r\nEND:VALARM\r\n N \. -- -- Data for Name: calendar_attendee; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY calendar_attendee (dav_id, status, partstat, cn, attendee, role, rsvp, property, attendee_state, weak_etag) FROM stdin; 1552 \N ACCEPTED User 1 mailto:user1@example.net \N \N ATTENDEE;CN="User 1";PARTSTAT=ACCEPTED:mailto:user1@example.net \N \N 1552 \N NEEDS-ACTION user2 mailto:user2@example.net REQ-PARTICIPANT t X-WR-ATTENDEE;CN=user2;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-\r\n PARTICIPANT;RSVP=TRUE:mailto:user2@example.net \N \N 1553 \N ACCEPTED User 1 mailto:user1@example.net \N \N ATTENDEE;CN="User 1";PARTSTAT=ACCEPTED:mailto:user1@example.net \N \N 1553 \N NEEDS-ACTION user2 mailto:user2@example.net REQ-PARTICIPANT t X-WR-ATTENDEE;CN=user2;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-\r\n PARTICIPANT;RSVP=TRUE:mailto:user2@example.net \N \N 1569 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Andrew Moughtonbeigh;LANGUAGE=en:MAILTO:andrew@example.org \N \N 1569 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1569 \N NEEDS-ACTION David Callenius MAILTO:dcallenius@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org \N \N 1571 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1571 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org \N \N 1571 \N NEEDS-ACTION David Callenius MAILTO:dcallenius@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org \N \N 1572 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1572 \N ACCEPTED David Callenius MAILTO:dcallenius@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=David Calle\r\n nius;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:dcallenius@example.org \N \N 1572 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org \N \N 1572 \N ACCEPTED David Smith MAILTO:dave2@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=David Smith\r\n ;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:dave2@example.org \N \N 1573 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1573 \N NEEDS-ACTION David Callenius MAILTO:dcallenius@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org \N \N 1573 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org \N \N 1573 \N NEEDS-ACTION David Smith MAILTO:dave2@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Smith;LANGUAGE=en:MAILTO:dave2@example.org \N \N 1577 \N \N false andrew@example.org \N f ATTENDEE;RSVP=FALSE;CN=:andrew@example.org \N \N 1578 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Andrew Moughtonbeigh;LANGUAGE=en:MAILTO:andrew@example.org \N \N 1578 \N NEEDS-ACTION \N MAILTO:Boardroom@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;LANGUAGE=en:MAILTO:Boardroom@example.org \N \N 1586 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1586 \N NEEDS-ACTION Gerrold Nimby MAILTO:gerrold@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=Gerrold Nimby;LANGUAGE=en:MAILTO:gerrold@example.org \N \N 1586 \N NEEDS-ACTION David Callenius MAILTO:dcallenius@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org \N \N 1586 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org \N \N 1587 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1587 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org \N \N 1587 \N ACCEPTED Richard Hector MAILTO:richard@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Richard Hec\r\n tor;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:richard@example.org \N \N 1590 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1590 \N NEEDS-ACTION David Callenius MAILTO:dcallenius@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org \N \N 1590 \N NEEDS-ACTION Gerrold Nimby MAILTO:gerrold@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=Gerrold Nimby;LANGUAGE=en:MAILTO:gerrold@example.org \N \N 1590 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org \N \N 1593 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1593 \N TENTATIVE Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=TENTATIVE:MAILTO:andrew@example.org \N \N 1593 \N NEEDS-ACTION David Callenius MAILTO:dcallenius@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org \N \N 1593 \N NEEDS-ACTION Andy Capp MAILTO:andyc@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=Andy Capp;LANGUAGE=en:MAILTO:andyc@example.org \N \N 1594 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1594 \N NEEDS-ACTION Jon Callenius MAILTO:jon@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=Jon Callenius;LANGUAGE=en:MAILTO:jon@example.org \N \N 1594 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org \N \N 1594 \N NEEDS-ACTION David Smith MAILTO:dave2@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Smith;LANGUAGE=en:MAILTO:dave2@example.org \N \N 1595 \N ACCEPTED Ian Winsleigh MAILTO:ian@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=T\r\n RUE;CN=Ian Winsleigh;LANGUAGE=en:MAILTO:ian@example.org \N \N 1595 \N ACCEPTED Andrew Moughtonbeigh MAILTO:andrew@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Andrew Moug\r\n htonbeigh;LANGUAGE=en;PARTSTAT=ACCEPTED:MAILTO:andrew@example.org \N \N 1595 \N NEEDS-ACTION David Callenius MAILTO:dcallenius@example.org REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;CN=David Callenius;LANGUAGE=en:MAILTO:dcallenius@example.org \N \N 1595 \N NEEDS-ACTION \N MAILTO:jo@example.net REQ-PARTICIPANT t ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RS\r\n VP=TRUE;LANGUAGE=en:MAILTO:jo@example.net \N \N 1612 \N NEEDS-ACTION \N mailto:user2@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:\r\n mailto:user2@example.net \N \N 1612 \N NEEDS-ACTION \N mailto:user3@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:\r\n mailto:user3@example.net \N \N 1612 \N NEEDS-ACTION \N mailto:user1@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:\r\n mailto:user1@example.net \N \N 1612 \N NEEDS-ACTION \N mailto:user5@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:\r\n mailto:user5@example.net \N \N 1615 \N NEEDS-ACTION \N mailto:user2@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=1.2:mailto:user2@example.net \N \N 1615 \N NEEDS-ACTION \N mailto:user3@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:\r\n mailto:user3@example.net \N \N 1615 \N NEEDS-ACTION \N mailto:user1@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:\r\n mailto:user1@example.net \N \N 1615 \N NEEDS-ACTION \N mailto:user5@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:\r\n mailto:user5@example.net \N \N 1618 \N NEEDS-ACTION \N mailto:user2@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=1.2:mailto:user2@example.net \N \N 1618 \N NEEDS-ACTION \N mailto:user3@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=1.2:mailto:user3@example.net \N \N 1618 \N NEEDS-ACTION \N mailto:user1@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=3.8:mailto:user1@example.net \N \N 1618 \N NEEDS-ACTION \N mailto:user5@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:\r\n mailto:user5@example.net \N \N 1610 \N NEEDS-ACTION \N mailto:user2@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=1.2:mailto:user2@example.net \N \N 1610 \N NEEDS-ACTION \N mailto:user3@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=1.2:mailto:user3@example.net \N \N 1610 \N NEEDS-ACTION \N mailto:user1@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=3.8:mailto:user1@example.net \N \N 1610 \N NEEDS-ACTION \N mailto:user5@example.net REQ-PARTICIPANT t ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;SCHEDULE-S\r\n TATUS=1.2:mailto:user5@example.net \N \N \. -- -- Data for Name: calendar_item; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY calendar_item (user_no, dav_name, dav_etag, uid, created, last_modified, dtstamp, dtstart, dtend, due, summary, location, description, priority, class, transp, rrule, url, percent_complete, tz_id, status, completed, dav_id, collection_id, first_instance_start, last_instance_end) FROM stdin; 13 /user4/nz_holidays/20081226-1-all-publicholidays-dol.govt.nz.ics b875d6fcbbcc5d04f4032cbc7f5c384d 20081226-1-all-publicholidays-dol.govt.nz 2008-11-17 22:51:21 2008-11-17 22:51:44 2008-11-17 22:51:21 2005-12-26 00:00:00+13 2005-12-27 00:00:00+13 \N Boxing Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY \N \N \N \N \N 1015 1014 \N \N 13 /user4/nz_holidays/20090101-1-all-publicholidays-dol.govt.nz.ics ceee5347770df7fa8ec2e88277ab5726 20090101-1-all-publicholidays-dol.govt.nz 2008-11-17 22:52:12 2008-11-17 23:03:37 2008-11-17 22:52:12 2005-01-01 00:00:00+13 2005-01-02 00:00:00+13 \N New Year's Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY \N \N \N \N \N 1016 1014 \N \N 13 /user4/nz_holidays/20081225-1-all-publicholidays-dol.govt.nz.ics 7bebc7c099b76a4786935b3c7b30d532 20081225-1-all-publicholidays-dol.govt.nz 2008-11-17 22:49:51 2008-11-17 23:51:08 2008-11-17 22:49:51 2005-12-25 00:00:00+13 2005-12-26 00:00:00+13 \N Christmas Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY \N \N \N \N \N 1017 1014 \N \N 13 /user4/nz_holidays/20090410-1-all-publicholidays-dol.govt.nz.ics c133f5c3610eec536604f6f85d6e38a8 20090410-1-all-publicholidays-dol.govt.nz 2008-11-17 23:53:35 2008-11-17 23:54:17 2008-11-17 23:53:35 2009-04-10 00:00:00+12 2009-04-11 00:00:00+12 \N Good Friday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1018 1014 \N \N 13 /user4/nz_holidays/20090206-1-all-publicholidays-dol.govt.nz.ics e97dec1ece17d1b3d4b3f7ca099cf069 20090206-1-all-publicholidays-dol.govt.nz 2008-11-17 23:52:24 2008-11-20 00:26:39 2008-11-17 23:52:24 2005-02-06 00:00:00+13 2005-02-07 00:00:00+13 \N Waitangi Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY \N \N \N \N \N 1019 1014 \N \N 13 /user4/nz_holidays/20090413-1-all-publicholidays-dol.govt.nz.ics f89959922a18af91aa4e71040f3776d8 20090413-1-all-publicholidays-dol.govt.nz 2008-11-17 23:54:55 2008-11-17 23:55:24 2008-11-17 23:54:55 2009-04-13 00:00:00+12 2009-04-14 00:00:00+12 \N Easter Monday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1020 1014 \N \N 13 /user4/nz_holidays/20090425-1-all-publicholidays-dol.govt.nz.ics 41ab02b936390e6c591e3be9642cbc3c 20090425-1-all-publicholidays-dol.govt.nz 2008-11-18 01:19:10 2008-11-20 00:15:37 2008-11-18 01:19:10 2005-04-25 00:00:00+12 2005-04-26 00:00:00+12 \N ANZAC Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY \N \N \N \N \N 1021 1014 \N \N 13 /user4/nz_holidays/20090601-1-all-publicholidays-dol.govt.nz.ics 320ce73f2e17987ce930aacb1d1dd845 20090601-1-all-publicholidays-dol.govt.nz 2008-11-18 01:19:47 2008-11-18 01:20:09 2008-11-18 01:19:47 2005-06-06 00:00:00+12 2005-06-07 00:00:00+12 \N Queen's Birthday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYMONTH=6;BYDAY=1MO \N \N \N \N \N 1022 1014 \N \N 13 /user4/nz_holidays/20091026-1-all-publicholidays-dol.govt.nz.ics 3e91b2a8859691891c512c703e26d4f5 20091026-1-all-publicholidays-dol.govt.nz 2008-11-18 01:21:25 2008-11-18 01:21:50 2008-11-18 01:21:25 2005-10-24 00:00:00+13 2005-10-25 00:00:00+13 \N Labour Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYMONTH=10;BYDAY=4MO \N \N \N \N \N 1023 1014 \N \N 13 /user4/nz_holidays/20090102-1-all-publicholidays-dol.govt.nz.ics 453972f9e37b262b5155553e13ec29a9 20090102-1-all-publicholidays-dol.govt.nz 2008-11-17 23:51:21 2008-11-18 01:23:14 2008-11-17 23:51:21 2005-01-02 00:00:00+13 2005-01-03 00:00:00+13 \N Day after New Year's Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY \N \N \N \N \N 1024 1014 \N \N 13 /user4/nz_holidays/20091226-1-all-publicholidays-dol.govt.nz.ics 87048bb0ac24e632b47acf20573247ad 20091226-1-all-publicholidays-dol.govt.nz 2008-11-18 01:23:44 2008-11-18 01:25:29 2008-11-18 01:23:44 2005-12-27 00:00:00+13 2005-12-28 00:00:00+13 \N Boxing Day Holiday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=2 \N \N \N \N \N 1025 1014 \N \N 13 /user4/nz_holidays/20091228-1-all-publicholidays-dol.govt.nz.ics a47cf54a3fd69f80733fbaae7173b187 20091228-1-all-publicholidays-dol.govt.nz 2008-11-18 01:25:37 2008-11-18 01:26:06 2008-11-18 01:25:37 2005-12-26 00:00:00+13 2005-12-27 00:00:00+13 \N Christmas Day Holiday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYMONTH=12;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=25,26,27,28;BYSETPOS=1 \N \N \N \N \N 1026 1014 \N \N 13 /user4/nz_holidays/20100101-1-all-publicholidays-dol.govt.nz.ics 6f4e142a3475325dc6af10fdd46475db 20100101-1-all-publicholidays-dol.govt.nz 2008-11-18 01:26:34 2008-11-18 01:26:57 2008-11-18 01:26:34 2005-01-03 00:00:00+13 2005-01-04 00:00:00+13 \N New Year's Day Holiday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=1 \N \N \N \N \N 1027 1014 \N \N 13 /user4/nz_holidays/20100607-1-all-publicholidays-dol.govt.nz.ics 7b2c3641069b66925f9d23b5691a9184 20100607-1-all-publicholidays-dol.govt.nz 2008-11-18 01:30:50 2008-11-18 01:31:02 2008-11-18 01:30:50 2005-01-04 00:00:00+13 2005-01-05 00:00:00+13 \N Day after New Year's Day Holiday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYMONTH=1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=1,2,3,4;BYSETPOS=2 \N \N \N \N \N 1028 1014 \N \N 13 /user4/nz_holidays/20100402-1-all-publicholidays-dol.govt.nz.ics ef596d4d606ce76268ce09566355a823 20100402-1-all-publicholidays-dol.govt.nz 2008-11-18 01:28:02 2008-11-18 01:28:11 2008-11-18 01:28:02 2010-04-02 00:00:00+13 2010-04-03 00:00:00+13 \N Good Friday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1029 1014 \N \N 13 /user4/nz_holidays/20100405-1-all-publicholidays-dol.govt.nz.ics e84a4dde3b35c1b917e13e6d3b70ecbd 20100405-1-all-publicholidays-dol.govt.nz 2008-11-18 01:28:17 2008-11-18 01:28:54 2008-11-18 01:28:17 2010-04-05 00:00:00+12 2010-04-06 00:00:00+12 \N Easter Monday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1030 1014 \N \N 13 /user4/nz_holidays/20110422-1-all-publicholidays-dol.govt.nz.ics b38f25befae6b31c2cf496079e452b64 20110422-1-all-publicholidays-dol.govt.nz 2008-11-18 01:43:42 2008-11-18 01:44:04 2008-11-18 01:43:42 2011-04-22 00:00:00+12 2011-04-23 00:00:00+12 \N Good Friday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1031 1014 \N \N 13 /user4/nz_holidays/20110425-1-all-publicholidays-dol.govt.nz.ics ef6d2f39086173ec7003da9109857591 20110425-1-all-publicholidays-dol.govt.nz 2008-11-18 01:44:06 2008-11-18 01:44:30 2008-11-18 01:44:06 2011-04-25 00:00:00+12 2011-04-26 00:00:00+12 \N Easter Monday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1032 1014 \N \N 13 /user4/nz_holidays/20120406-1-all-publicholidays-dol.govt.nz.ics b1c8988852760af2e95f1733ba8e930b 20120406-1-all-publicholidays-dol.govt.nz 2008-11-18 01:50:55 2008-11-18 01:51:23 2008-11-18 01:50:55 2012-04-06 00:00:00+12 2012-04-07 00:00:00+12 \N Good Friday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1033 1014 \N \N 13 /user4/nz_holidays/20120409-1-all-publicholidays-dol.govt.nz.ics 83b97d43c022a6d963f7d8f698479f82 20120409-1-all-publicholidays-dol.govt.nz 2008-11-18 01:51:28 2008-11-18 01:51:39 2008-11-18 01:51:28 2012-04-09 00:00:00+12 2012-04-10 00:00:00+12 \N Easter Monday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1034 1014 \N \N 13 /user4/nz_holidays/20130329-1-all-publicholidays-dol.govt.nz.ics 471c51ff8dc93ed35d6e439ff04c6376 20130329-1-all-publicholidays-dol.govt.nz 2008-11-18 01:55:19 2008-11-18 01:55:35 2008-11-18 01:55:19 2013-03-29 00:00:00+13 2013-03-30 00:00:00+13 \N Good Friday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1035 1014 \N \N 13 /user4/nz_holidays/20130401-1-all-publicholidays-dol.govt.nz.ics c11837d01bf8715e705632a018e43d0b 20130401-1-all-publicholidays-dol.govt.nz 2008-11-18 01:55:40 2008-11-18 01:56:09 2008-11-18 01:55:40 2013-04-01 00:00:00+13 2013-04-02 00:00:00+13 \N Easter Monday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1036 1014 \N \N 13 /user4/nz_holidays/20140418-1-all-publicholidays-dol.govt.nz.ics a2da777808156199b45c1032eea8193f 20140418-1-all-publicholidays-dol.govt.nz 2008-11-18 02:00:24 2008-11-18 02:01:27 2008-11-18 02:01:05 2014-04-18 00:00:00+12 2014-04-19 00:00:00+12 \N Good Friday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1037 1014 \N \N 13 /user4/nz_holidays/20140421-1-all-publicholidays-dol.govt.nz.ics 9baeec1cc40d7c74975800d5fd0312c1 20140421-1-all-publicholidays-dol.govt.nz 2008-11-18 02:01:35 2008-11-18 02:01:55 2008-11-18 02:01:35 2014-04-21 00:00:00+12 2014-04-22 00:00:00+12 \N Easter Monday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1038 1014 \N \N 13 /user4/nz_holidays/20150403-1-all-publicholidays-dol.govt.nz.ics 8ce044e18cc4a9324ce7c6ad4638b468 20150403-1-all-publicholidays-dol.govt.nz 2008-11-18 02:06:31 2008-11-18 02:06:47 2008-11-18 02:06:31 2015-04-03 00:00:00+13 2015-04-04 00:00:00+13 \N Good Friday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1039 1014 \N \N 13 /user4/nz_holidays/20150406-1-all-publicholidays-dol.govt.nz.ics e076c28b13d25ad71e1df5988ce25701 20150406-1-all-publicholidays-dol.govt.nz 2008-11-18 02:07:17 2008-11-18 02:07:53 2008-11-18 02:07:17 2015-04-06 00:00:00+12 2015-04-07 00:00:00+12 \N Easter Monday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1040 1014 \N \N 13 /user4/nz_holidays/20160325-1-all-publicholidays-dol.govt.nz.ics f2db4e9bdd9990d139af2e4c661b1f45 20160325-1-all-publicholidays-dol.govt.nz 2008-11-18 02:12:43 2008-11-18 02:12:53 2008-11-18 02:12:43 2016-03-25 00:00:00+13 2016-03-26 00:00:00+13 \N Good Friday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1041 1014 \N \N 13 /user4/nz_holidays/20160328-1-all-publicholidays-dol.govt.nz.ics 6ce62f49c34b6f8e3a9cdd7de0579ad7 20160328-1-all-publicholidays-dol.govt.nz 2008-11-18 02:12:57 2008-11-18 02:13:23 2008-11-18 02:12:57 2016-03-28 00:00:00+13 2016-03-29 00:00:00+13 \N Easter Monday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1042 1014 \N \N 13 /user4/nz_holidays/20081201-1-all-publicholidays-dol.govt.nz.ics 0244a6847a8817a69c4550e6f953b637 20081201-1-all-publicholidays-dol.govt.nz 2008-11-19 20:01:54 2008-11-19 20:02:27 2008-11-19 20:01:54 2005-11-28 00:00:00+13 2005-11-29 00:00:00+13 \N Westland Anniversary Day (Monday nearest 1st December) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-34,-33,-32,-31,-30,-29,-28 \N \N \N \N \N 1043 1014 \N \N 13 /user4/nz_holidays/20081201-2-all-publicholidays-dol.govt.nz.ics ac30ef8e422d122ac0ef71de27ef25a5 20081201-2-all-publicholidays-dol.govt.nz 2008-11-19 20:02:52 2008-11-19 20:03:04 2008-11-19 20:02:52 2005-11-28 00:00:00+13 2005-11-29 00:00:00+13 \N Chatham Islands Anniversary Day (Monday nearest 30th November) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-35,-34,-33,-32,-31,-30,-29 \N \N \N \N \N 1044 1014 \N \N 13 /user4/nz_holidays/20090126-1-all-publicholidays-dol.govt.nz.ics 70df8c50a4734492ef14844ade5f2e5e 20090126-1-all-publicholidays-dol.govt.nz 2008-11-19 20:03:21 2008-11-19 20:03:34 2008-11-19 20:03:21 2005-01-31 00:00:00+13 2005-02-01 00:00:00+13 \N Auckland Anniversary Day (Monday nearest 29th January) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYYEARDAY=26,27,28,29,30,31,32;BYDAY=MO \N \N \N \N \N 1045 1014 \N \N 13 /user4/nz_holidays/20090119-1-all-publicholidays-dol.govt.nz.ics 915a269139513c9b9e7eab7974cc311e 20090119-1-all-publicholidays-dol.govt.nz 2008-11-19 20:03:50 2008-11-19 20:04:06 2008-11-19 20:03:50 2005-01-24 00:00:00+13 2005-01-25 00:00:00+13 \N Wellington Anniversary Day (Monday nearest 22nd January) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYYEARDAY=19,20,21,22,23,24,25;BYDAY=MO \N \N \N \N \N 1046 1014 \N \N 13 /user4/nz_holidays/20090119-2-all-publicholidays-dol.govt.nz.ics 47021cd8d9b29411129acdba131c3b99 20090119-2-all-publicholidays-dol.govt.nz 2008-11-19 20:04:31 2008-11-19 20:04:43 2008-11-19 20:04:31 2005-01-17 00:00:00+13 2005-01-18 00:00:00+13 \N Southland Anniversary Day (Monday nearest 17th January) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYYEARDAY=14,15,16,17,18,19,20;BYDAY=MO \N \N \N \N \N 1047 1014 \N \N 13 /user4/nz_holidays/20090202-1-all-publicholidays-dol.govt.nz.ics 7ebcfe2f43910e2e076c3a2c99b61a9b 20090202-1-all-publicholidays-dol.govt.nz 2008-11-19 20:05:19 2008-11-19 20:05:30 2008-11-19 20:05:19 2005-01-31 00:00:00+13 2005-02-01 00:00:00+13 \N Nelson Anniversary Day (Monday nearest 1st Feb) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYYEARDAY=29,30,31,32,33,34,35;BYDAY=MO \N \N \N \N \N 1048 1014 \N \N 13 /user4/nz_holidays/20090309-1-all-publicholidays-dol.govt.nz.ics ed648837b1a2a8653a15da01a63829d7 20090309-1-all-publicholidays-dol.govt.nz 2008-11-19 20:06:07 2008-11-19 20:06:22 2008-11-19 20:06:07 2009-03-09 00:00:00+13 2009-03-10 00:00:00+13 \N Taranaki Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1049 1014 \N \N 13 /user4/nz_holidays/20090323-1-all-publicholidays-dol.govt.nz.ics dff0f27711477173a08b05a35b4665cf 20090323-1-all-publicholidays-dol.govt.nz 2008-11-19 20:06:40 2008-11-19 20:06:50 2008-11-19 20:06:40 2009-03-23 00:00:00+13 2009-03-24 00:00:00+13 \N Otago Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1050 1014 \N \N 13 /user4/nz_holidays/20091023-1-all-publicholidays-dol.govt.nz.ics 09637d1f4a796c04c286aa856354d22a 20091023-1-all-publicholidays-dol.govt.nz 2008-11-19 20:07:59 2008-11-19 20:08:09 2008-11-19 20:07:59 2005-10-21 00:00:00+13 2005-10-22 00:00:00+13 \N Hawkes' Bay Anniversary Day (Friday before 4th Monday of October) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=FR \N \N \N \N \N 1051 1014 \N \N 13 /user4/nz_holidays/20091102-1-all-publicholidays-dol.govt.nz.ics f0b7ed4ed459e5cc979b005f22a63f0e 20091102-1-all-publicholidays-dol.govt.nz 2008-11-19 20:08:40 2008-11-19 20:09:28 2008-11-19 20:08:40 2005-10-31 00:00:00+13 2005-11-01 00:00:00+13 \N Marlborough Anniversary Day (Monday after 4th Monday of October) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYDAY=MO;BYYEARDAY=-64,-63,-62,-61,-60,-59,-58 \N \N \N \N \N 1052 1014 \N \N 13 /user4/nz_holidays/20091113-1-all-publicholidays-dol.govt.nz.ics 464b1b6faeb3887179f41bdba511ec48 20091113-1-all-publicholidays-dol.govt.nz 2008-11-19 20:10:08 2008-11-19 20:10:40 2008-11-19 20:10:08 2005-11-11 00:00:00+13 2005-11-12 00:00:00+13 \N Canterbury Anniversary Day (Second Friday after the first Tuesday in November) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=FR \N \N \N \N \N 1053 1014 \N \N 13 /user4/nz_holidays/20090928-1-all-publicholidays-dol.govt.nz.ics ca2c59cfce014c0e364b8e1806c5f76f 20090928-1-all-publicholidays-dol.govt.nz 2008-11-19 20:11:40 2008-11-19 20:11:53 2008-11-19 20:11:40 2005-09-26 00:00:00+12 2005-09-27 00:00:00+12 \N South Canterbury Anniversary Day (4th Monday in September) \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;BYMONTH=9;BYDAY=4MO \N \N \N \N \N 1054 1014 \N \N 13 /user4/nz_holidays/20100308-1-all-publicholidays-dol.govt.nz.ics 36209ff22d99ba4a812794b15e6ffc4b 20100308-1-all-publicholidays-dol.govt.nz 2008-11-19 20:21:08 2008-11-19 20:21:17 2008-11-19 20:21:08 2010-03-08 00:00:00+13 2010-03-09 00:00:00+13 \N Taranaki Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1055 1014 \N \N 13 /user4/nz_holidays/20100322-1-all-publicholidays-dol.govt.nz.ics 516bcca8f85b7d7cb428c0f7c9beec36 20100322-1-all-publicholidays-dol.govt.nz 2008-11-19 20:21:19 2008-11-19 20:21:25 2008-11-19 20:21:19 2010-03-22 00:00:00+13 2010-03-23 00:00:00+13 \N Otago Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1056 1014 \N \N 13 /user4/nz_holidays/20110314-1-all-publicholidays-dol.govt.nz.ics f1198d5c33f000d309498e15c546c4ce 20110314-1-all-publicholidays-dol.govt.nz 2008-11-19 20:31:28 2008-11-19 20:31:39 2008-11-19 20:31:28 2011-03-14 00:00:00+13 2011-03-15 00:00:00+13 \N Taranaki Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1057 1014 \N \N 13 /user4/nz_holidays/20110321-1-all-publicholidays-dol.govt.nz.ics 30aaecb2479eba89243ef363f2e4dd8f 20110321-1-all-publicholidays-dol.govt.nz 2008-11-19 20:32:13 2008-11-19 20:32:47 2008-11-19 20:32:13 2011-03-21 00:00:00+13 2011-03-22 00:00:00+13 \N Otago Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1058 1014 \N \N 13 /user4/nz_holidays/20120312-1-all-publicholidays-dol.govt.nz.ics 41fb1874c8242e9d740aa2c49460d93c 20120312-1-all-publicholidays-dol.govt.nz 2008-11-19 21:49:36 2008-11-19 21:49:43 2008-11-19 21:49:36 2012-03-12 00:00:00+13 2012-03-13 00:00:00+13 \N Taranaki Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1059 1014 \N \N 13 /user4/nz_holidays/20120326-1-all-publicholidays-dol.govt.nz.ics 9426349df25c89995d30c89b1870777b 20120326-1-all-publicholidays-dol.govt.nz 2008-11-19 21:50:04 2008-11-19 21:50:12 2008-11-19 21:50:04 2012-03-26 00:00:00+13 2012-03-27 00:00:00+13 \N Otago Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1060 1014 \N \N 13 /user4/nz_holidays/20130311-1-all-publicholidays-dol.govt.nz.ics 04155b7a3b8a359511ff32bb616b6792 20130311-1-all-publicholidays-dol.govt.nz 2008-11-19 21:59:00 2008-11-19 21:59:26 2008-11-19 21:59:00 2013-03-11 00:00:00+13 2013-03-12 00:00:00+13 \N Taranaki Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1061 1014 \N \N 13 /user4/nz_holidays/20130325-1-all-publicholidays-dol.govt.nz.ics 130ab6f29361c6750ca53c0b4e1de2e0 20130325-1-all-publicholidays-dol.govt.nz 2008-11-19 21:59:51 2008-11-19 21:59:58 2008-11-19 21:59:51 2013-03-25 00:00:00+13 2013-03-26 00:00:00+13 \N Otago Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1062 1014 \N \N 13 /user4/nz_holidays/20140310-1-all-publicholidays-dol.govt.nz.ics 91c65d9846cfe8156fb488a43403999f 20140310-1-all-publicholidays-dol.govt.nz 2008-11-19 22:07:20 2008-11-19 22:07:32 2008-11-19 22:07:20 2014-03-10 00:00:00+13 2014-03-11 00:00:00+13 \N Taranaki Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1063 1014 \N \N 13 /user4/nz_holidays/20140324-1-all-publicholidays-dol.govt.nz.ics b7a17924e6b434e06883ca7f0544b386 20140324-1-all-publicholidays-dol.govt.nz 2008-11-19 22:07:34 2008-11-19 22:07:43 2008-11-19 22:07:34 2014-03-24 00:00:00+13 2014-03-25 00:00:00+13 \N Otago Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1064 1014 \N \N 13 /user4/nz_holidays/20150309-1-all-publicholidays-dol.govt.nz.ics bd5271ae06fc94378fc903cf2e17e56d 20150309-1-all-publicholidays-dol.govt.nz 2008-11-19 22:14:13 2008-11-19 22:14:22 2008-11-19 22:14:13 2015-03-09 00:00:00+13 2015-03-10 00:00:00+13 \N Taranaki Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1065 1014 \N \N 13 /user4/nz_holidays/20150323-1-all-publicholidays-dol.govt.nz.ics fea8698d5cfbbece404cf83ee12d13ad 20150323-1-all-publicholidays-dol.govt.nz 2008-11-19 22:14:35 2008-11-19 22:14:46 2008-11-19 22:14:35 2015-03-23 00:00:00+13 2015-03-24 00:00:00+13 \N Otago Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1066 1014 \N \N 13 /user4/nz_holidays/20160314-1-all-publicholidays-dol.govt.nz.ics 8f6940e24cd4b691ad29f256e1d15343 20160314-1-all-publicholidays-dol.govt.nz 2008-11-19 22:21:43 2008-11-19 22:21:53 2008-11-19 22:21:43 2016-03-14 00:00:00+13 2016-03-15 00:00:00+13 \N Taranaki Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1067 1014 \N \N 13 /user4/nz_holidays/20160321-1-all-publicholidays-dol.govt.nz.ics 02285196185ae58df211b56d8b96d390 20160321-1-all-publicholidays-dol.govt.nz 2008-11-19 22:21:59 2008-11-19 22:22:09 2008-11-19 22:21:59 2016-03-21 00:00:00+13 2016-03-22 00:00:00+13 \N Otago Anniversary Day \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1068 1014 \N \N 13 /user4/us_holidays/64E660BA-86DB-43CD-A067-194149D28471-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 31429e6620b47458fcfe8ee6a258a0ef 64E660BA-86DB-43CD-A067-194149D28471-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:48 2019-04-21 00:00:00+12 2019-04-22 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1070 1069 \N \N 13 /user4/us_holidays/64874200-9494-415C-9FA8-B86F739FFB13-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 069a230e94bfed64e7c86a7eefe37e52 64874200-9494-415C-9FA8-B86F739FFB13-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2004-10-11 00:00:00+13 2004-10-12 00:00:00+13 \N Columbus Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20051009;BYMONTH=10;BYDAY=2MO \N \N \N \N \N 1071 1069 \N \N 13 /user4/us_holidays/468CB2B3-342D-4D1D-B152-F52608E6CB4C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 5c04ee85cbaa65230444d7fbf22dc923 468CB2B3-342D-4D1D-B152-F52608E6CB4C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2004-07-04 00:00:00+12 2004-07-05 00:00:00+12 \N Independence Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060703 \N \N \N \N \N 1072 1069 \N \N 13 /user4/us_holidays/01253561-2B9B-4341-88F5-29A572BB3E75-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics aea3d2fefccc01935df1e5acb480c93c 01253561-2B9B-4341-88F5-29A572BB3E75-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2011-04-24 00:00:00+12 2011-04-25 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1073 1069 \N \N 13 /user4/us_holidays/8EE35D87-548A-4495-BE91-07303C510724-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6dacedf5b8307c856b626bd9951c2ba6 8EE35D87-548A-4495-BE91-07303C510724-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:46 2020-04-12 00:00:00+12 2020-04-13 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1074 1069 \N \N 13 /user4/us_holidays/5D55021E-0C17-49BD-BE73-29F472A75FAD-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics fb64e60ce7d28042d13ce165788a05f8 5D55021E-0C17-49BD-BE73-29F472A75FAD-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2004-01-01 00:00:00+13 2004-01-02 00:00:00+13 \N New Year's Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20051231 \N \N \N \N \N 1075 1069 \N \N 13 /user4/us_holidays/183A097B-7D44-4C66-9569-AA520E7CB8DC-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 92bd242467451b1fe0593fea463a51c5 183A097B-7D44-4C66-9569-AA520E7CB8DC-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2005-10-27 00:00:00+13 2005-10-28 00:00:00+13 \N Navy Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1076 1069 \N \N 13 /user4/us_holidays/EDF531F8-7E53-4604-9F72-16BCD40CD7D2-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 2e4500674f13335a8e69e0d0ffc9220c EDF531F8-7E53-4604-9F72-16BCD40CD7D2-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:42 2024-03-31 00:00:00+13 2024-04-01 00:00:00+13 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1077 1069 \N \N 13 /user4/us_holidays/95DAFE6C-E465-40C1-8FAD-4EAB11CAD26B-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics ae827c753cd95e741ac6091a8aa2f38b 95DAFE6C-E465-40C1-8FAD-4EAB11CAD26B-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:51 2006-04-16 00:00:00+12 2006-04-17 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1078 1069 \N \N 13 /user4/us_holidays/E8C35314-F61A-4649-A4C3-E4F24B2BA454-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 78b611b35dbf7ce9aa4669ab1224b9ca E8C35314-F61A-4649-A4C3-E4F24B2BA454-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:48 2004-01-19 00:00:00+13 2004-01-20 00:00:00+13 \N Martin Luther King Jr.'s Birthday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060115;BYMONTH=1;BYDAY=3MO \N \N \N \N \N 1079 1069 \N \N 13 /user4/us_holidays/0EF392B7-5203-432C-B41B-BB7AFC5CBA6A-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e5bde5057135d7108e93a616eea7be0f 0EF392B7-5203-432C-B41B-BB7AFC5CBA6A-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2012-04-08 00:00:00+12 2012-04-09 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1080 1069 \N \N 13 /user4/us_holidays/BCC001F2-681A-4D72-9631-ACCE8EA480A0-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 9ac00032a0fb06c9a3524ca02da12566 BCC001F2-681A-4D72-9631-ACCE8EA480A0-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2014-04-20 00:00:00+12 2014-04-21 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1081 1069 \N \N 13 /user4/us_holidays/F35052B2-D44B-43F8-9F2C-95149FD385FF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b296df65fa63180074da067a21bad9f4 F35052B2-D44B-43F8-9F2C-95149FD385FF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:51 2005-11-24 00:00:00+13 2005-11-25 00:00:00+13 \N Thanksgiving Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;BYMONTH=11;BYDAY=4TH \N \N \N \N \N 1082 1069 \N \N 13 /user4/us_holidays/8FF1DB95-BC31-48B3-94A8-A519ED090EF7-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b1fb4bc4468c1b1e565342d35d37872a 8FF1DB95-BC31-48B3-94A8-A519ED090EF7-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2006-01-01 00:00:00+13 2006-01-02 00:00:00+13 \N New Year's Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1083 1069 \N \N 13 /user4/us_holidays/AB045233-7D93-490A-AEDC-70710D207055-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics da7207deff60eed5bce96d234529e658 AB045233-7D93-490A-AEDC-70710D207055-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:45 2018-04-01 00:00:00+13 2018-04-02 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1084 1069 \N \N 13 /user4/us_holidays/D2B79EA9-E22C-4F27-BB84-750584839575-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e62cd34746824a782a5b173cf7e6ba7c D2B79EA9-E22C-4F27-BB84-750584839575-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2004-09-06 00:00:00+12 2004-09-07 00:00:00+12 \N Labor Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060903;BYMONTH=9;BYDAY=1MO \N \N \N \N \N 1085 1069 \N \N 13 /user4/us_holidays/B14BF09D-1745-4F98-89D3-98410ACFD9C9-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6625306dccf82547590abdd1f4a86eb7 B14BF09D-1745-4F98-89D3-98410ACFD9C9-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:47 2004-02-12 00:00:00+13 2004-02-13 00:00:00+13 \N Lincoln's Birthday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060211 \N \N \N \N \N 1086 1069 \N \N 13 /user4/us_holidays/B5F73538-5A2E-4518-86F8-4AC2415447BB-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics d8c981f069b7037686371017aaa2e827 B5F73538-5A2E-4518-86F8-4AC2415447BB-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:44 2021-04-04 00:00:00+13 2021-04-05 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1087 1069 \N \N 13 /user4/us_holidays/E1C2F367-726B-4BBC-A6F0-37E31EDA74F0-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b5bdab9f331f49e1635f559fb533764f E1C2F367-726B-4BBC-A6F0-37E31EDA74F0-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:47 2006-09-04 00:00:00+12 2006-09-05 00:00:00+12 \N Labor Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;BYMONTH=9;BYDAY=1MO \N \N \N \N \N 1088 1069 \N \N 13 /user4/us_holidays/467631C8-F6B4-419C-878F-082B8774CC6C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 75cb17d482b1521620b7bbb7ef090127 467631C8-F6B4-419C-878F-082B8774CC6C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:48 2005-03-27 00:00:00+12 2005-03-28 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1089 1069 \N \N 13 /user4/us_holidays/20432B95-74EB-4A97-B6AA-CF307DE25236-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 7cb3939d34bdf04c396f1a00aa943586 20432B95-74EB-4A97-B6AA-CF307DE25236-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2004-05-31 00:00:00+12 2004-06-01 00:00:00+12 \N Memorial Day \N Fly flag half-staff until noon. \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060528;BYMONTH=5;BYDAY=-1MO \N \N \N \N \N 1090 1069 \N \N 13 /user4/us_holidays/AB7564F8-DEC3-4A9B-B228-595138D8F83E-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 083af2aa1dd48cf2d71d458bfc5d254a AB7564F8-DEC3-4A9B-B228-595138D8F83E-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2004-04-11 00:00:00+12 2004-04-12 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1091 1069 \N \N 13 /user4/us_holidays/70F1BEC8-058E-4CA0-A401-9D0AA6D10C25-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics a534558aa8c0911ba042f3965e0bdfb2 70F1BEC8-058E-4CA0-A401-9D0AA6D10C25-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:41 2008-03-23 00:00:00+13 2008-03-24 00:00:00+13 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1092 1069 \N \N 13 /user4/us_holidays/3DDCAA37-8FC9-4602-8161-062DA284C25A-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6b11e32b2cae21d9d1f1b8741cdb2de6 3DDCAA37-8FC9-4602-8161-062DA284C25A-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:42 2006-05-14 00:00:00+12 2006-05-15 00:00:00+12 \N Mother's Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=2SU \N \N \N \N \N 1093 1069 \N \N 13 /user4/us_holidays/4D1563A6-B1B6-4FC3-B68D-C5BC32117935-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e04d1779c58ad40eb7ba7cf84ce81481 4D1563A6-B1B6-4FC3-B68D-C5BC32117935-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2006-07-04 00:00:00+12 2006-07-05 00:00:00+12 \N Independence Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1094 1069 \N \N 13 /user4/us_holidays/8711F720-D78C-4AE3-86CC-4BE1C6A04944-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e79073bbbb718188bcfbb8f682fdae60 8711F720-D78C-4AE3-86CC-4BE1C6A04944-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:45 2022-04-17 00:00:00+12 2022-04-18 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1095 1069 \N \N 13 /user4/us_holidays/7B660B80-30F0-42CC-A32A-4FEE2ECC6515-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics a77af3ae3f194afe804b01977651c87b 7B660B80-30F0-42CC-A32A-4FEE2ECC6515-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2010-04-04 00:00:00+13 2010-04-05 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1096 1069 \N \N 13 /user4/us_holidays/8B7568AE-0F91-48DA-88EE-210E402147BF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e24eb86ee6ffcd7899803c2c8479f896 8B7568AE-0F91-48DA-88EE-210E402147BF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2005-10-10 00:00:00+13 2005-10-11 00:00:00+13 \N Columbus Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;BYMONTH=10;BYDAY=2MO \N \N \N \N \N 1097 1069 \N \N 13 /user4/us_holidays/349DCD34-83E1-42EF-81C7-C051E5B6FAC8-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6c6d6023c291c7e1a3861dcb3368d699 349DCD34-83E1-42EF-81C7-C051E5B6FAC8-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:45 2004-06-14 00:00:00+12 2004-06-15 00:00:00+12 \N Flag Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060613 \N \N \N \N \N 1098 1069 \N \N 13 /user4/us_holidays/B7DA1215-2500-41A6-A40E-706ADD5FFC1E-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e5a3b741f659a0fdd506d8032301ebdb B7DA1215-2500-41A6-A40E-706ADD5FFC1E-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2004-10-27 00:00:00+13 2004-10-28 00:00:00+13 \N Navy Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20051026 \N \N \N \N \N 1099 1069 \N \N 13 /user4/us_holidays/7D553648-4460-4618-977E-12B8DB4516BF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 115d2d1e19f4791f26d538da8fd4a38e 7D553648-4460-4618-977E-12B8DB4516BF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:42 2004-02-16 00:00:00+13 2004-02-17 00:00:00+13 \N Washington's Birthday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060219;BYMONTH=2;BYDAY=3MO \N \N \N \N \N 1100 1069 \N \N 13 /user4/us_holidays/4006A01A-8E57-497A-8061-C504817DEC29-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 12abc9703d71f37fdfe7722fc9af4c35 4006A01A-8E57-497A-8061-C504817DEC29-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:48 2023-04-09 00:00:00+12 2023-04-10 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1101 1069 \N \N 13 /user4/us_holidays/DE7C6F7A-EA80-42C8-A05B-89341A373CA2-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics ae1cebc0bfc73f278164150566666b81 DE7C6F7A-EA80-42C8-A05B-89341A373CA2-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:42 2004-05-15 00:00:00+12 2004-05-16 00:00:00+12 \N Armed Forces Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060519;BYMONTH=5;BYDAY=3SA \N \N \N \N \N 1102 1069 \N \N 13 /user4/us_holidays/64A2DCF3-5A6B-4EF4-A520-BA01CBC97617-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics c7d538d607dc27a42014311cab704f96 64A2DCF3-5A6B-4EF4-A520-BA01CBC97617-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:42 2005-11-11 00:00:00+13 2005-11-12 00:00:00+13 \N Veterans Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1103 1069 \N \N 13 /user4/us_holidays/5155D737-F8AA-4522-8703-D51B4A30AF9C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics e974fcfbad9493d13da6cfe690c830e2 5155D737-F8AA-4522-8703-D51B4A30AF9C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2004-01-20 00:00:00+13 2004-01-21 00:00:00+13 \N Inauguration Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060119 \N \N \N \N \N 1104 1069 \N \N 13 /user4/us_holidays/E44DD94F-150A-4B6E-8692-A53437147FCF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 38a4b51b6c0f11405b7f8f3242572598 E44DD94F-150A-4B6E-8692-A53437147FCF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2006-05-29 00:00:00+12 2006-05-30 00:00:00+12 \N Memorial Day \N Fly flag half-staff until noon. \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=-1MO \N \N \N \N \N 1105 1069 \N \N 13 /user4/us_holidays/DEACF954-F452-4AC2-BB9C-437533BF49A6-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b585bb61386fb89eb90cb5d43fa6c150 DEACF954-F452-4AC2-BB9C-437533BF49A6-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:47 2006-05-20 00:00:00+12 2006-05-21 00:00:00+12 \N Armed Forces Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=3SA \N \N \N \N \N 1106 1069 \N \N 13 /user4/us_holidays/9C3C643D-D138-4AA9-9AB4-F77443E70837-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics c52493fd5ece900625c8e67f7526a328 9C3C643D-D138-4AA9-9AB4-F77443E70837-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2006-09-17 00:00:00+12 2006-09-18 00:00:00+12 \N Constitution Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1107 1069 \N \N 13 /user4/us_holidays/79FC38CA-5D7B-45B9-839B-27B5C8C3A514-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 281e240ed90f179e509b9d9d9bc97b14 79FC38CA-5D7B-45B9-839B-27B5C8C3A514-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:46 2025-04-20 00:00:00+12 2025-04-21 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1108 1069 \N \N 13 /user4/us_holidays/75F65F7C-5D88-45B2-9D95-18F7C8AFEB86-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 92caabd2127bc227e4287826d597e72b 75F65F7C-5D88-45B2-9D95-18F7C8AFEB86-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2004-11-11 00:00:00+13 2004-11-12 00:00:00+13 \N Veterans Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20051110 \N \N \N \N \N 1109 1069 \N \N 13 /user4/us_holidays/7D9E7675-0B5B-4E43-B918-235CD5A9248E-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 6f67ef01d9699932b0d23b5a598228e9 7D9E7675-0B5B-4E43-B918-235CD5A9248E-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2016-03-27 00:00:00+13 2016-03-28 00:00:00+13 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1110 1069 \N \N 13 /user4/us_holidays/DF4DAEB8-7248-4F1F-BA4E-EA8B5BDF5D0C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics a85ab4868a352328dbde189ea77a6e2d DF4DAEB8-7248-4F1F-BA4E-EA8B5BDF5D0C-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:44 2015-04-05 00:00:00+13 2015-04-06 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1111 1069 \N \N 13 /user4/us_holidays/E238FE0B-4E32-43D6-965F-ACC28CC43B21-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics ebb766fb8c2736cd349dec71d22355de E238FE0B-4E32-43D6-965F-ACC28CC43B21-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:43 2006-02-12 00:00:00+13 2006-02-13 00:00:00+13 \N Lincoln's Birthday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1112 1069 \N \N 13 /user4/us_holidays/3BBE9587-1A13-4DF6-8671-08511BC92786-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 7b5bf023bc1acc8d8016169ffa617929 3BBE9587-1A13-4DF6-8671-08511BC92786-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2006-02-20 00:00:00+13 2006-02-21 00:00:00+13 \N Washington's Birthday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;BYMONTH=2;BYDAY=3MO \N \N \N \N \N 1113 1069 \N \N 12 /user3/utf8/6bd0581f-f560-15b4-5d53-f384cc3c7e8c.ics e502d151e0e1dd31cdc9a3990c5642af 6bd0581f-f560-15b4-5d53-f384cc3c7e8c \N 2011-11-12 05:01:29 2007-06-13 11:27:00 2007-06-13 18:00:00+12 2007-06-13 20:30:00+12 \N Aaaaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1141 1126 \N \N 13 /user4/us_holidays/9672014B-DAE5-42AF-B83E-91CE92CE1278-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 524a0e6efc725961050d7569f4cd6fa8 9672014B-DAE5-42AF-B83E-91CE92CE1278-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2004-09-17 00:00:00+12 2004-09-18 00:00:00+12 \N Constitution Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060916 \N \N \N \N \N 1114 1069 \N \N 13 /user4/us_holidays/95C333C1-CEAE-45F0-B448-B8F9F5B768A2-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics d7cbb4e29fa4d0d25e7452df10bc4f25 95C333C1-CEAE-45F0-B448-B8F9F5B768A2-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:47 2007-04-08 00:00:00+12 2007-04-09 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1115 1069 \N \N 13 /user4/us_holidays/5485295A-60A8-4CBF-9574-CE838633DD95-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics b9f7991f8e31e3d0bf5e4155692dd103 5485295A-60A8-4CBF-9574-CE838633DD95-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:45 2006-01-20 00:00:00+13 2006-01-21 00:00:00+13 \N Inauguration Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1116 1069 \N \N 13 /user4/us_holidays/7896BE9D-72E8-4C38-9BC7-203830C6429B-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics d2428f82c728833c6881e744975b2f5e 7896BE9D-72E8-4C38-9BC7-203830C6429B-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:44 2013-03-31 00:00:00+13 2013-04-01 00:00:00+13 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1117 1069 \N \N 13 /user4/us_holidays/57B0B83E-0913-4853-B784-C072F9F990DF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 506b3db5aa020756fc707afd4bd44de0 57B0B83E-0913-4853-B784-C072F9F990DF-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:45 2004-12-25 00:00:00+13 2004-12-26 00:00:00+13 \N Christmas Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20051224 \N \N \N \N \N 1118 1069 \N \N 13 /user4/us_holidays/6E846799-408D-4D86-B3DF-D9946CCDB194-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 1b4379b83954bfcf47692729373fa687 6E846799-408D-4D86-B3DF-D9946CCDB194-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:44 2004-05-09 00:00:00+12 2004-05-10 00:00:00+12 \N Mother's Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20060513;BYMONTH=5;BYDAY=2SU \N \N \N \N \N 1119 1069 \N \N 13 /user4/us_holidays/35EE647D-6E48-4233-B0C4-CCC497684C92-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 71a89792fab6a2e04b2e27d41c90bb35 35EE647D-6E48-4233-B0C4-CCC497684C92-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:51 2017-04-16 00:00:00+12 2017-04-17 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1120 1069 \N \N 13 /user4/us_holidays/555C0D00-991F-48C5-A68B-7E3CBD5780FA-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics f8a9d23b667503befca8d30aade9a205 555C0D00-991F-48C5-A68B-7E3CBD5780FA-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:45 2005-12-25 00:00:00+13 2005-12-26 00:00:00+13 \N Christmas Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1121 1069 \N \N 13 /user4/us_holidays/73C40DD3-C7C0-42BB-95F5-22B1FCE2F240-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 96ad452eb049f3ff4fbf6d4c85800ee6 73C40DD3-C7C0-42BB-95F5-22B1FCE2F240-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:44 2004-11-25 00:00:00+13 2004-11-26 00:00:00+13 \N Thanksgiving Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;UNTIL=20051123;BYMONTH=11;BYDAY=4TH \N \N \N \N \N 1122 1069 \N \N 13 /user4/us_holidays/910ED267-B8DF-4CA7-B867-0ED1A5FD3F23-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics cd9c48b5a2a6d526755dbfb2e6748cbc 910ED267-B8DF-4CA7-B867-0ED1A5FD3F23-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:42 2006-01-16 00:00:00+13 2006-01-17 00:00:00+13 \N Martin Luther King Jr.'s Birthday \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1;BYMONTH=1;BYDAY=3MO \N \N \N \N \N 1123 1069 \N \N 13 /user4/us_holidays/C15CE396-EAA3-49FB-B79F-79AF3D6E5069-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics a1e86276c9c7a9fbdbbce02560c7590f C15CE396-EAA3-49FB-B79F-79AF3D6E5069-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:47 2006-06-14 00:00:00+12 2006-06-15 00:00:00+12 \N Flag Day \N \N \N PUBLIC TRANSPARENT FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1124 1069 \N \N 13 /user4/us_holidays/698F4B6B-C5B9-4AF6-9E38-DF171C8448A5-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF.ics 42d3ce7f961a4115747c26b876afcdd2 698F4B6B-C5B9-4AF6-9E38-DF171C8448A5-7CFA95A3-9734-46AF-A4DC-5FB544AD96AF \N 2011-11-12 05:01:29 2006-02-16 15:12:49 2009-04-12 00:00:00+12 2009-04-13 00:00:00+12 \N Easter Sunday \N \N \N PUBLIC TRANSPARENT \N \N \N \N \N \N 1125 1069 \N \N 12 /user3/utf8/79c0137f-5972-e464-e906-ece96bd86bab.ics 446a595d01e9b2ffd86147fbc5b60a79 79c0137f-5972-e464-e906-ece96bd86bab \N 2011-11-12 05:01:29 2007-06-13 11:26:58 2007-11-11 00:00:00+13 2007-11-12 00:00:00+13 \N Aüa Aaaaaa aaa Aaaaa aaa Aaaaaaaaa-Aaaaüa aaaaaaa aa. Aaaaaaaa \N Aaaaa Aaaa aa 11.11.11 aaaaaaaaa/aaäaßaaa\n\n \N PUBLIC \N \N \N \N \N \N \N 1127 1126 \N \N 12 /user3/utf8/2b4c8b0e-f596-f174-61d8-5c5e4e1408eb.ics d3725eedffe0df116d7eb966a0de3e37 2b4c8b0e-f596-f174-61d8-5c5e4e1408eb \N 2011-11-12 05:01:29 2007-06-13 11:26:58 2007-09-15 00:00:00+12 2007-09-16 00:00:00+12 \N Aaa1111 - aaaaaaaaaaa aaaaaaaaaaa aaa aaaaaa Aaaaaa/Aaa Aaaaaaaaaa aa 11.11.1111 aaa aaaaaaa@a-aaaaaaa.aa\nAaaaaaaaaaaaaaa üaaa aaaaaaa@aaaaaaaa.aa\n\n \N PUBLIC \N \N \N \N \N \N \N 1128 1126 \N \N 12 /user3/utf8/27c4eab7-e8a2-a244-8134-9a0a90611143.ics 3377d49f9540599f84fd1bee4894e182 27c4eab7-e8a2-a244-8134-9a0a90611143 \N 2011-11-12 05:01:29 2007-06-13 11:26:58 2007-08-24 00:00:00+12 2007-08-25 00:00:00+12 \N AAA'11 Aaa Aöaaa, Aaaaaaaaa aaaa://aaa.aaa11.aa/\n\n \N PUBLIC \N \N \N \N \N \N \N 1129 1126 \N \N 12 /user3/utf8/03d0a462-8acf-dfe4-ad47-993178093d6f.ics cbbb2f4a8113136d5ff3fb041a960138 03d0a462-8acf-dfe4-ad47-993178093d6f \N 2011-11-12 05:01:29 2007-06-13 11:26:59 2007-08-20 09:00:00+12 2007-08-20 15:15:00+12 \N Aaaaaaa Aaaaaaaaaaaaaaäa \N \N \N PUBLIC \N \N \N \N \N \N \N 1130 1126 \N \N 12 /user3/utf8/79574526-5d44-7fe4-d571-af2230c6db47.ics be8bf95cf27d2c9b90dfe3667b2d1222 79574526-5d44-7fe4-d571-af2230c6db47 \N 2011-11-12 05:01:29 2007-06-13 11:26:59 2007-07-13 00:00:00+12 2007-07-14 00:00:00+12 \N Aaaa Aaaaaaaaaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1131 1126 \N \N 12 /user3/utf8/5d03d67f-d56f-cd94-49f4-6670f6fc6cd0.ics 2f58c4579898016d836336cd11624b58 5d03d67f-d56f-cd94-49f4-6670f6fc6cd0 \N 2011-11-12 05:01:29 2007-06-13 11:26:59 2007-07-10 09:30:00+12 2007-07-10 12:00:00+12 \N Aaaaaaa aaa Aaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1132 1126 \N \N 12 /user3/utf8/e35dbaee-3f92-2044-3138-f7dff2c5b79c.ics 293c8cedab41b609a34c0e05dde8c629 e35dbaee-3f92-2044-3138-f7dff2c5b79c \N 2011-11-12 05:01:29 2007-06-13 11:26:59 2007-06-30 00:00:00+12 2007-07-01 00:00:00+12 \N Aaaaaa Aaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1133 1126 \N \N 12 /user3/utf8/9151a30f-ba72-6844-a9a3-7dc8b98638a3.ics 9e593b57164d29387faebf774f827372 9151a30f-ba72-6844-a9a3-7dc8b98638a3 \N 2011-11-12 05:01:29 2007-06-13 11:26:59 2007-06-29 00:00:00+12 2007-06-30 00:00:00+12 \N Aaaaaa Aaaaaaaaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1134 1126 \N \N 12 /user3/utf8/7b29f39d-0818-9074-5d01-852171ff92e2.ics fee3796a818ac1c07e0a96f08514ac2c 7b29f39d-0818-9074-5d01-852171ff92e2 \N 2011-11-12 05:01:29 2007-06-13 11:26:59 2007-06-28 19:30:00+12 2007-06-28 22:30:00+12 \N Aaaaaa Aaaaaaaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1135 1126 \N \N 12 /user3/utf8/9b5a5deb-4a87-dd24-e5c7-44b76cbb8d27.ics 440f153780ac5e215a8c82a231b9a71d 9b5a5deb-4a87-dd24-e5c7-44b76cbb8d27 \N 2011-11-12 05:01:29 2007-06-13 11:26:59 2007-06-28 00:00:00+12 2007-06-29 00:00:00+12 \N Aaaaa aaaaa aa Aaaaaaaaa, aa Aaaaa+Aaaa aa aaa Aaaaa \N -A.A. Aaaaaaaöaaaaaa aaa Aaaaaaaaa Aaaaaaaaa (aaaaaa)\n-\n\n \N PUBLIC \N \N \N \N \N \N \N 1136 1126 \N \N 12 /user3/utf8/90fcebac-9dd4-a184-25a6-b74878a72b87.ics cd0770e5af4c6600c0ba1e0cb6d14bbf 90fcebac-9dd4-a184-25a6-b74878a72b87 \N 2011-11-12 05:01:29 2007-06-13 11:26:59 2007-06-27 15:45:00+12 2007-06-27 23:45:00+12 \N Aaaaaaaaaaa Aaaaaaaaa \N \N PUBLIC \N \N \N \N \N \N \N 1137 1126 \N \N 12 /user3/utf8/d36476c4-b33b-e794-6171-adafba7f928c.ics 467515b08c8cf3275a3e2f4c470a11de d36476c4-b33b-e794-6171-adafba7f928c \N 2011-11-12 05:01:29 2007-06-13 11:27:00 2007-06-16 00:00:00+12 2007-06-17 00:00:00+12 \N Aaaaaaaaaa aaa AaaaAaaaaa-Aaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1138 1126 \N \N 12 /user3/utf8/f4874366-9bae-5f84-51a2-56a40c8d906a.ics 5c2d4e53bf69fbd7a22e80d32c5bdfdf f4874366-9bae-5f84-51a2-56a40c8d906a \N 2011-11-12 05:01:29 2007-06-13 11:27:00 2007-06-15 00:00:00+12 2007-06-18 00:00:00+12 \N Aaaaa Aaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1139 1126 \N \N 12 /user3/utf8/6461f988-0dcb-f7e4-d14e-b23cfc544e2d.ics 391758fb9d17216d90356de1da9f8b7e 6461f988-0dcb-f7e4-d14e-b23cfc544e2d \N 2011-11-12 05:01:29 2007-06-13 11:27:00 2007-06-14 00:00:00+12 2007-06-22 00:00:00+12 \N Aaaaaa aa aaa Aüaaaa aaa Aaa aaa Aaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1140 1126 \N \N 12 /user3/utf8/bf1e3dfd-8de6-c164-1daf-5a244a6aa765.ics 4717a2de233813555f030a2aa42909fa bf1e3dfd-8de6-c164-1daf-5a244a6aa765 \N 2011-11-12 05:01:29 2007-06-13 11:27:00 2007-06-13 10:00:00+12 2007-06-13 11:10:00+12 \N Aaaaaaaaa aaa Aaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1142 1126 \N \N 12 /user3/utf8/4a4244de-36a3-f0e4-edc0-1997bf7c6723.ics c31e6d72d343de1a28702d11a79ab782 4a4244de-36a3-f0e4-edc0-1997bf7c6723 \N 2011-11-12 05:01:29 2007-06-13 11:27:00 2007-06-12 18:00:00+12 2007-06-12 20:00:00+12 \N Aaaaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1143 1126 \N \N 12 /user3/utf8/7090de53-1d5d-1294-2d94-0f216633c6fe.ics 2d33d3ee10c87bd0bea30c0c48fbed86 7090de53-1d5d-1294-2d94-0f216633c6fe \N 2011-11-12 05:01:29 2007-06-13 11:27:00 2007-06-12 18:00:00+12 2007-06-12 21:00:00+12 \N AaaAaa11-Aaaaaaaaaaäaaaaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1144 1126 \N \N 12 /user3/utf8/6f1254c9-d1f7-33b4-5147-0f9ee049ad6e.ics b58e6cbc780572d43cd4cb1f1138a75b 6f1254c9-d1f7-33b4-5147-0f9ee049ad6e \N 2011-11-12 05:01:29 2007-06-13 11:27:01 2007-06-12 18:00:00+12 2007-06-12 18:30:00+12 \N Aaaaaaa aaa AaaAaa-Aaaaaaa AaaAaa-Aaaa aaa Aaaaaaaaa \N \N PUBLIC \N \N \N \N \N \N \N 1145 1126 \N \N 12 /user3/utf8/fed2ad70-ba7f-eeb4-917e-e1018b820cff.ics 3877af7d98140b8135447e5b1f059454 fed2ad70-ba7f-eeb4-917e-e1018b820cff \N 2011-11-12 05:01:29 2007-06-13 11:27:01 2007-06-12 16:00:00+12 2007-06-12 17:20:00+12 \N Aaa Aaaaa Aaaaaa aaaaaaaaa Aaa Aaaaaa \N \N PUBLIC \N \N \N \N \N \N \N 1146 1126 \N \N 12 /user3/utf8/7dd107e1-72b5-a5f4-59f1-b61cfc6bdc5f.ics d8745d71ade4f40192f0e492165df0b6 7dd107e1-72b5-a5f4-59f1-b61cfc6bdc5f \N 2011-11-12 05:01:29 2007-06-13 11:27:01 2007-06-12 11:00:00+12 2007-06-12 11:50:00+12 \N Aaaaaaa aaa Aaaaa aa Aaaaaaaaaaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1147 1126 \N \N 12 /user3/utf8/e5ad0205-ad9b-ab44-8dd9-69b1202ccdc5.ics 633d1ae644bc6326819013db9cccf019 e5ad0205-ad9b-ab44-8dd9-69b1202ccdc5 \N 2011-11-12 05:01:29 2007-06-13 11:27:01 2007-06-14 10:00:00+12 2007-06-14 11:00:00+12 \N Aaa aaaaaaaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1148 1126 \N \N 12 /user3/utf8/4043c1ab-e231-e1f4-a1ee-0fe80db05297.ics 1b7a25cd7cea42ebbb408df1c098635e 4043c1ab-e231-e1f4-a1ee-0fe80db05297 \N 2011-11-12 05:01:29 2007-06-13 11:27:02 2007-06-11 18:00:00+12 2007-06-11 18:15:00+12 \N AA/Aaaaaa Aa Aaaaaaa 1.1.1 aaaaaaaaaa (Aaaaa Aaaa Aaaaa) \N \N \N PUBLIC \N \N \N \N \N \N \N 1149 1126 \N \N 12 /user3/utf8/4147afca-79cf-b304-95f0-dce424b3cabd.ics c4a72d8fed8c7ba57fd4ee9ca1ff7c14 4147afca-79cf-b304-95f0-dce424b3cabd \N 2011-11-12 05:01:29 2007-06-13 11:27:02 2007-06-11 16:00:00+12 2007-06-11 18:00:00+12 \N Üaaaa aaaaaaaaa aaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1150 1126 \N \N 12 /user3/utf8/286c0009-1b37-a6d4-455d-57ee009a6f11.ics fafaf462912bc73930f8125dc447b008 286c0009-1b37-a6d4-455d-57ee009a6f11 \N 2011-11-12 05:01:29 2007-06-13 11:27:02 2007-06-11 14:00:00+12 2007-06-11 18:00:00+12 \N Aaaaa aöaaaaaa aaaaaaaa \N Aaaaaaaa Aaaaaa Aaaaaa\nA-Aaaaa aaaaaaaaaa\nAa Aaaaaa aaaaaaa\nAa Aaaaaaa-Aaaa-Aaaaa aaaaaaaaaa \N PUBLIC \N \N \N \N \N \N \N 1151 1126 \N \N 12 /user3/utf8/d565ea32-b018-77c4-a936-a4765b234b99.ics 7d3e6f3049d6d44c58adc01c133037b5 d565ea32-b018-77c4-a936-a4765b234b99 \N 2011-11-12 05:01:29 2007-06-13 11:27:02 2007-06-11 13:15:00+12 2007-06-11 13:45:00+12 \N Aaaaaa aaa Aaaa aaa Aaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1152 1126 \N \N 12 /user3/utf8/61644877-af81-13b4-3dd4-f7970bd97de7.ics 24543ca134facd20f29d516053c75d5c 61644877-af81-13b4-3dd4-f7970bd97de7 \N 2011-11-12 05:01:29 2010-11-23 22:12:34 2010-11-24 13:30:00+13 2010-11-24 14:00:00+13 \N Aa Aaaaaaaaaaa Aaaa Aaaaaaa aa. Aaaaaa aaaaaaaaa Aaaaaaaaaaaaaa A1.111 Aaaaaaaaaaaaaaaaaa\nAaaaaaaaaaaaa, aaaa aa aaaa aa aaa Aaaaaaaaaaaaaaaa aaaaaaa, aüaa Aaaaäaaaaa Aaa\n\nAaa Aaaaaaa, aaaa Aaaaaa aäaaaaaa Aaaaa Aaaaaaaaaaa\n\nAaaaaaaa aaa A-Aaaa aa Aaaaaa Aaaaa AAAAAAAAA "aaaaaa:aaaaaaa@aaaa.aaa-aaaaaaaaa.aa" aaaaaaa@aaaa.aaa-aaaaaaaaa.aa aaaa aaa aaa Aaaaaaa \N PRIVATE \N \N \N \N \N \N \N 1153 1126 \N \N 12 /user3/utf8/87e9e114-3d26-bd84-dd48-8f6023747656.ics 11e0a641a24438b774ee78c509fd0c98 87e9e114-3d26-bd84-dd48-8f6023747656 \N 2011-11-12 05:01:29 2010-12-07 21:59:36 2011-01-06 14:00:00+13 2011-01-06 15:00:00+13 \N Aaaaaaa aaa Aaaaaaäaaaaaaaa Aaaaaaa Aaaaaaaaaäa Aaaaaaaaa - A1.111 Aaa Aaaaaa aaaaaa aaaa aaa aaaaa aaaaaaaaaa: \n* Aaaaaaaaaaaaaa aaa Aaaaaaa aaa Aaaaaaaaaa - Aaaaa aaa Aaaaaaaaa, Aaaaaaaaaaa aaaäß aaa Aaäaaaaaaaaaaaaaaaaaa \n* Aaaaa aaa Aaaaaaaaa aaa Aaaaaaaaaaaa aaa Aaäaaaaaa aaa Aaaaaaaaaaaaaaaa - Aaaaaaaaaaaaaaaaößaa, Aaaaaaaaaaaaaaaa aaa aaaßaa Aaaaaaaaaaaaaaa \n* A-Aaaaaaaa-Aaaaaaaaa aaa Aaaaaaaaaa, Aaaaaaaaaa Aaaaaaaaaaaaaaaaa aaa aaaAA-Aaaaaaaaa, Aaaaaaaaaaaaaaaaa Aaaaaa \n* Aaaaaaaaaaaaa aaa Aaaaaaaaaaaaaaaa aaa 11.11.1111 aaa Aaaaaa aaa aaa Aaaaaaaaa Aaaaaaaaaaaaaa - Aaaaaaaaa Aaaaa, Aaaaaaa Aaaaaaaa \n* Aaaaaaaaaaaaaa aüa Aaaaaaaaaaaaäaaa \N PUBLIC \N \N \N \N \N \N \N 1154 1126 \N \N 12 /user3/utf8/87860d06-861c-7ba4-312e-909b816a274a.ics 3717223d537cfe6958d32efe73265b6f 87860d06-861c-7ba4-312e-909b816a274a \N 2011-11-12 05:01:29 2010-12-30 12:47:51 2011-01-08 14:00:00+13 2011-01-09 00:00:00+13 \N Aaaaaaaaaaa Aaaa Aaaaaaa Aaa aaa aa aaa 1 Aaaaaaa aaaaaa aaaaaa (aaaaaa)\n- aaaaaa aaaaaaaaaa, aaaaaaa aaaaaaaa\n- aaaa aaaaaa aaaaaaa\n- aaa aaaaaaaa aa aaa aäaaaaaa aaaa aaaaaaaaaa\n- aa aaaaaa aaaaaaaa aaaa aa aaaa aaaa. aaaaaaaaa, aaaaaaaa aaaaaa aaa aa \N PUBLIC \N \N \N \N \N \N \N 1155 1126 \N \N 12 /user3/utf8/0df73951-9ac7-ee34-a9c2-d87e1c4a03dc.ics 23964436c5827451ad36ea5b69a7e3bb 0df73951-9ac7-ee34-a9c2-d87e1c4a03dc \N 2011-11-12 05:01:29 2010-12-30 14:50:20 2010-12-28 20:15:00+13 2010-12-28 21:15:00+13 \N Aaaa - Aaa Aaaaaaa (aaa Aaaaaa aaa Aaaaaa) Aaaa Aaaaaaaa \N \N PUBLIC \N \N \N \N \N \N \N 1156 1126 \N \N 12 /user3/utf8/aac9fa24-3d79-5034-49b2-4753079bf247.ics b3bf3b48ae62fb67f51ffbc05fad42c3 aac9fa24-3d79-5034-49b2-4753079bf247 \N 2011-11-12 05:01:29 2011-01-01 13:48:33 2011-01-04 19:00:00+13 2011-01-04 20:00:00+13 \N Aaaaaaa aaaaaaa \N \N \N PRIVATE \N \N \N \N \N \N \N 1157 1126 \N \N 12 /user3/utf8/5eb2c3d3-baed-f874-ad7b-ac797eb89f1d.ics 6932161e7249971f0ab742e149592cfe 5eb2c3d3-baed-f874-ad7b-ac797eb89f1d \N 2011-11-12 05:01:29 2011-01-01 13:49:22 2010-12-30 14:00:00+13 2010-12-30 14:30:00+13 \N AA/Aaaaa Aüa aaaaaa Aaaaaaaa aaaaaaaaaaaa \N \N \N PUBLIC \N \N \N \N \N \N \N 1158 1126 \N \N 12 /user3/utf8/cf670e78-0921-12d4-658c-dd526b702b89.ics bfc877aff3aae2f5e5a55944a7b66102 cf670e78-0921-12d4-658c-dd526b702b89 \N 2011-11-12 05:01:29 2011-01-01 13:50:20 2010-12-31 11:20:00+13 2010-12-31 14:05:00+13 \N AA/Aaaaa Aaaaaaaaaaaaa aaa Aaa \N Aaaaaaaaaaa aaa Aaaaaäaaa aaaa Aaaaa aaaaaaaaaaaa aaa aaaaäaa\nA-Aaaa-Aaaaaaaa aaa Aaaa Aaaaaaaa aaa aaa aaaa aaa Aaaa Aaaaüaaa üaaaaaaaaa\nAaaaaaa aaa Aaaaaaaaaaaaaaaaa aa aaa Aaaaaaaa aaaa Aaaaaaaaa aaa A-Aaaaa aaaaaaaaaa\nAaa Aaaa Aaaaaaaa aaaaaaaaaa aaa Aaaaaaaaa aaaaaaaaa\nAaaaaaaaaaaaaaaa Aaaaaaaa \N PUBLIC \N \N \N \N \N \N \N 1159 1126 \N \N 12 /user3/utf8/1494f18e-5c2d-7f34-9dc1-be23ad5de5b2.ics 90cba392ce9457aefd117543b3a4071a 1494f18e-5c2d-7f34-9dc1-be23ad5de5b2 \N 2011-11-12 05:01:29 2011-01-11 22:02:45 2011-01-11 14:00:00+13 2011-01-11 16:00:00+13 \N Aaaaaaa aaa aaa AAA, Aaaaa Aaaaaaaa aaa Aaaa aa aaa Aaaaaaa aaa Aaaaaaaaaaaaaaaaaaaaaaaaa aaa Aaaaaaaaaa aaa Aaaaaaaaaa aa aaaaaaaaaa Aaaaaaaaaäa Aaaaaaaaa - AAA, Aüaa aaa Aaaa Aaaaaa \N \N PUBLIC \N \N \N \N \N \N \N 1160 1126 \N \N 12 /user3/home/55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB.ics c215044a2fb4c9b2f24f5f558b1cf098 55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB 2008-10-24 20:07:34 2011-11-12 05:01:30 2008-10-24 20:07:45 2008-10-25 23:30:00+13 2008-10-26 00:30:00+13 \N Irregular meeting for User 3 \N \N \N PUBLIC OPAQUE FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12 \N \N Europe/Helsinki \N \N 1161 12 \N \N 12 /user3/home/174F9C2A-1223-40C4-9E06-6E91F2EA9491.ics 6cc47e929c65c2342a578dcba09a2492 174F9C2A-1223-40C4-9E06-6E91F2EA9491 2008-10-25 11:26:48 2011-11-12 05:01:30 2008-10-25 11:26:53 2008-10-24 18:45:00+13 2008-10-24 21:30:00+13 \N Dentist\\'s Council meeting \N \N \N PUBLIC OPAQUE FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR \N \N Europe/Helsinki \N \N 1162 12 \N \N 13 /user4/home/KOrganizer-25397773.546.ics 230ac060f04ac274a6582d68820f72b9 KOrganizer-25397773.546 2006-03-20 20:00:30 2007-01-24 21:35:10 2007-04-17 19:53:23 2006-03-22 22:45:00+12 \N 2006-03-22 11:00:00+12 Event at 2006-03-22 22:45:00 \N \N 5 PUBLIC \N \N \N 100.00 \N \N \N 1163 13 \N \N 13 /user4/home/libkcal-752176592.682.ics 0c82a3f74a46e9e671f9449bd5d5bf3d libkcal-752176592.682 2006-12-03 01:14:20 2007-01-24 21:35:10 2007-04-17 19:53:23 \N \N \N Don't forget to register! \N To register your Palm™ handheld electronically, you must have an Internet connection or a modem connected to your computer.\n\nSpecial rewards are available only for registered users:\n\n- Discounts from Palm™ Software Connections \n- Update and upgrade information\n\nFor more information, go to http://productreg.palm.com.\n 1 PUBLIC \N \N \N 0.00 \N \N \N 1164 13 \N \N 13 /user4/home/KOrganizer-1211065846.551.ics 9720fb757dfba168356870670b4ec7e0 KOrganizer-1211065846.551 2007-02-17 23:00:20 2007-02-21 20:00:44 2007-04-17 19:53:23 2007-03-21 19:15:00+12 2007-03-22 01:00:00+12 \N Event at 2007-03-21 19:15:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1165 13 \N \N 13 /user4/home/KOrganizer-1288241059.115.ics 155d78907b8af30e579fe8bde5d83fa1 KOrganizer-1288241059.115 2005-07-29 19:22:25 2007-01-24 21:34:48 2007-04-17 19:53:23 2005-07-30 07:30:00+12 2005-07-30 07:45:00+12 \N Event at 2005-07-30 07:30:00 test \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1166 13 \N \N 13 /user4/home/libkcal-589255590.706.ics 0e865e3b3c1d4bb4fcc6479aca37ae1d libkcal-589255590.706 2005-08-14 16:09:53 2007-01-24 21:34:48 2007-04-17 19:53:23 2002-09-11 04:00:00+12 2002-09-11 05:00:00+12 \N Event at 2002-09-11 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1167 13 \N \N 13 /user4/home/libkcal-1353942805.140.ics 21d423489c5db8aafaaf7aef78cfc456 libkcal-1353942805.140 2005-08-14 16:09:54 2007-01-24 21:34:48 2007-04-17 19:53:23 2002-09-30 18:30:00+12 2002-09-30 23:45:00+12 \N Event at 2002-09-30 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1168 13 \N \N 13 /user4/home/libkcal-639274358.130.ics adb007edba32c5cd9ec44e6610363747 libkcal-639274358.130 2005-08-14 16:09:55 2007-01-24 21:34:48 2007-04-17 19:53:23 2002-11-02 02:00:00+13 2002-11-02 03:00:00+13 \N Event at 2002-11-02 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1169 13 \N \N 13 /user4/home/libkcal-1052165538.720.ics 25394bbbacf627675f49c4a7a10b6013 libkcal-1052165538.720 2005-08-14 16:09:55 2007-01-24 21:34:48 2007-04-17 19:53:23 2002-11-21 05:00:00+13 2002-11-21 06:00:00+13 \N Event at 2002-11-21 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1170 13 \N \N 13 /user4/home/libkcal-130822969.932.ics b6d4200b17ee869d6abfcce32f5f80c0 libkcal-130822969.932 2005-08-14 16:09:57 2007-01-24 21:34:48 2007-04-17 19:53:23 2003-12-19 21:00:00+13 2003-12-19 21:30:00+13 \N Event at 2003-12-19 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1171 13 \N \N 13 /user4/home/libkcal-723679733.90.ics 97161030f5dd252c61bd38341100480d libkcal-723679733.90 2005-08-14 16:09:58 2007-01-24 21:34:48 2007-04-17 19:53:23 2004-08-06 19:00:00+12 2004-08-06 22:00:00+12 \N Event at 2004-08-06 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1172 13 \N \N 13 /user4/home/libkcal-1123041440.757.ics 7ac70a582abd346dda2d6d398483a848 libkcal-1123041440.757 2005-08-14 16:09:51 2007-01-24 21:34:48 2007-04-17 19:53:23 2002-02-20 05:30:00+13 2002-02-20 07:00:00+13 \N Repeating event starting 2002-02-20 05:30:00 by FREQ=DAILY;UNTIL=20020528T153000Z;INTERVAL=14 \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20020528T153000Z;INTERVAL=14 \N \N \N \N \N 1173 13 \N \N 13 /user4/home/libkcal-1686153385.653.ics 529c09bdc31a083254d88929b98ebb78 libkcal-1686153385.653 2005-08-14 16:09:53 2007-01-24 21:34:48 2007-04-17 19:53:23 2002-09-07 19:00:00+12 2002-09-08 03:00:00+12 \N Event at 2002-09-07 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1174 13 \N \N 13 /user4/home/libkcal-822103046.270.ics bba479212cb1cf65952e96de58f9b493 libkcal-822103046.270 2005-08-14 16:09:55 2007-01-24 21:34:48 2007-04-17 19:53:23 2002-11-07 03:00:00+13 2002-11-07 04:00:00+13 \N Event at 2002-11-07 03:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1175 13 \N \N 13 /user4/home/libkcal-1582464105.706.ics 06ca71191546a67e201477a1bfe7f802 libkcal-1582464105.706 2005-08-14 16:09:57 2007-01-24 21:34:48 2007-04-17 19:53:23 2003-10-28 03:00:00+13 2003-10-28 05:00:00+13 \N Event at 2003-10-28 03:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1176 13 \N \N 13 /user4/home/libkcal-367014638.77.ics 988f07877b4046fba7c76bdf086a0342 libkcal-367014638.77 2007-01-17 07:44:13 2007-01-24 21:34:48 2007-04-17 19:53:23 2007-01-19 21:00:00+13 2007-01-20 03:00:00+13 \N Event at 2007-01-19 21:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1177 13 \N \N 13 /user4/home/KOrganizer-1632032952.718.ics 674424c9115973786c9c8beeb127980f KOrganizer-1632032952.718 2007-01-24 21:27:19 2007-01-24 21:34:48 2007-04-17 19:53:23 2007-03-01 20:30:00+13 2007-03-02 02:00:00+13 \N Event at 2007-03-01 20:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1178 13 \N \N 13 /user4/home/KOrganizer-1759353555.1036.ics c803bc085c7624ec3d8d9d94f504d890 KOrganizer-1759353555.1036 2006-05-24 09:39:47 2007-01-24 21:34:49 2007-04-17 19:53:23 2006-09-21 02:00:00+12 2006-09-21 06:00:00+12 \N Repeating event starting 2006-09-21 02:00:00 by FREQ=WEEKLY;UNTIL=20061004T140000Z;BYDAY=WE \N \N 5 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20061004T140000Z;BYDAY=WE \N \N \N \N \N 1179 13 \N \N 13 /user4/home/libkcal-647789764.670.ics b17897ac869d3866e48c149cbf772a7f libkcal-647789764.670 2005-08-14 16:09:51 2007-01-24 21:34:49 2007-04-17 19:53:23 2003-03-01 05:00:00+13 2003-03-01 12:00:00+13 \N Repeating event starting 2003-03-01 05:00:00 by FREQ=DAILY;UNTIL=20030228T230000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20030228T230000Z \N \N \N \N \N 1180 13 \N \N 13 /user4/home/libkcal-571584239.862.ics db75e5008812222b48075f38efa0bd95 libkcal-571584239.862 2005-08-14 16:09:51 2007-01-24 21:34:49 2007-04-17 19:53:23 2003-10-13 20:00:00+13 2003-10-17 11:00:00+13 \N Repeating event starting 2003-10-13 20:00:00 by FREQ=DAILY;UNTIL=20031016T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20031016T220000Z \N \N \N \N \N 1181 13 \N \N 13 /user4/home/libkcal-1512015300.907.ics 61f8ac3122ab489063d52e6dd45ade5e libkcal-1512015300.907 2005-08-14 16:09:51 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-10-22 19:30:00+13 2002-10-25 11:00:00+13 \N Repeating event starting 2002-10-22 19:30:00 by FREQ=DAILY;UNTIL=20021024T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20021024T220000Z \N \N \N \N \N 1182 13 \N \N 13 /user4/home/libkcal-2114344132.965.ics ce3dfed8df34cf88876de223b976f932 libkcal-2114344132.965 2005-08-14 16:09:53 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-09-23 18:30:00+12 2002-09-23 23:45:00+12 \N Event at 2002-09-23 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1183 13 \N \N 13 /user4/home/libkcal-1424963174.253.ics 07daf30773624e489ab433b3866a0e54 libkcal-1424963174.253 2005-08-14 16:09:55 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-11-06 04:30:00+13 2002-11-06 05:30:00+13 \N Event at 2002-11-06 04:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1184 13 \N \N 13 /user4/home/libkcal-334227107.122.ics 901fcbff7ba9346a2d77f931249cb0d3 libkcal-334227107.122 2005-08-14 16:09:56 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-12-04 20:30:00+13 2002-12-05 02:30:00+13 \N Event at 2002-12-04 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1185 13 \N \N 13 /user4/home/libkcal-680720714.1001.ics 26dff07bc7d7e532b61415061d9f11e6 libkcal-680720714.1001 2005-08-14 16:09:57 2007-01-24 21:34:49 2007-04-17 19:53:23 2004-02-25 02:00:00+13 2004-02-25 04:00:00+13 \N Event at 2004-02-25 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1186 13 \N \N 13 /user4/home/KOrganizer-550940693.954.ics c1c81c78aa9b7b1c6b0534111d5e9fe3 KOrganizer-550940693.954 2007-01-24 21:31:16 2007-01-24 21:34:49 2007-04-17 19:53:23 2007-04-10 18:30:00+12 2007-04-11 00:00:00+12 \N Event at 2007-04-10 18:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1187 13 \N \N 13 /user4/home/libkcal-2066319147.664.ics 31395d107cf657f92b2b13b78a2a150b libkcal-2066319147.664 2005-08-14 16:09:52 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-03-06 22:00:00+13 2002-03-06 23:00:00+13 \N Event at 2002-03-06 22:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1188 13 \N \N 13 /user4/home/libkcal-429195916.943.ics 5d3347a345bc59233202dad2a3334914 libkcal-429195916.943 2005-08-14 16:09:52 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-04-26 00:00:00+12 2002-04-26 00:30:00+12 \N Event at 2002-04-26 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1189 13 \N \N 13 /user4/home/libkcal-744514207.96.ics 299c5281ad9dc3f78d11d769c599eb88 libkcal-744514207.96 2005-08-14 16:09:55 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-11-01 20:30:00+13 2002-11-02 01:45:00+13 \N Event at 2002-11-01 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1190 13 \N \N 13 /user4/home/libkcal-142621045.201.ics 96a9bfac2d4ea613ecf395444f1a23df libkcal-142621045.201 2005-08-14 16:09:55 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-11-05 20:30:00+13 2002-11-06 01:45:00+13 \N Event at 2002-11-05 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1191 13 \N \N 13 /user4/home/libkcal-1989318571.454.ics c642e1bf4ddf0e9924cd2e9ccc4b01e6 libkcal-1989318571.454 2005-08-14 16:09:56 2007-01-24 21:34:49 2007-04-17 19:53:23 2003-01-06 22:00:00+13 2003-01-06 23:00:00+13 \N Event at 2003-01-06 22:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1192 13 \N \N 13 /user4/home/libkcal-724373582.591.ics 31bb2c269b972deb0f5ee728d833eea1 libkcal-724373582.591 2005-08-14 16:09:56 2007-01-24 21:34:49 2007-04-17 19:53:23 2003-01-28 22:00:00+13 2003-01-28 23:00:00+13 \N Event at 2003-01-28 22:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1193 13 \N \N 13 /user4/home/libkcal-481358493.847.ics fb0a99bfcca2ab96dec945f8ab896974 libkcal-481358493.847 2005-08-14 16:09:56 2007-01-24 21:34:49 2007-04-17 19:53:23 2003-05-07 04:00:00+12 2003-05-07 08:00:00+12 \N Event at 2003-05-07 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1194 13 \N \N 13 /user4/home/libkcal-2065263089.283.ics ec5b1718a35e85c0f4a763a356b1d900 libkcal-2065263089.283 2005-08-14 16:09:57 2007-01-24 21:34:49 2007-04-17 19:53:23 2003-08-26 00:00:00+12 2003-08-26 00:30:00+12 \N Event at 2003-08-26 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1195 13 \N \N 13 /user4/home/libkcal-1665923076.160.ics 6d660ae42add1ff3325886a4e4f68d95 libkcal-1665923076.160 2005-08-14 16:09:58 2007-01-24 21:34:49 2007-04-17 19:53:23 2004-09-10 05:00:00+12 2004-09-10 08:00:00+12 \N Event at 2004-09-10 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1196 13 \N \N 13 /user4/home/libkcal-1110641771.1024.ics eb602cfae7ffc07d26576453ea09afaf libkcal-1110641771.1024 2005-08-14 16:09:51 2007-01-24 21:34:49 2007-04-17 19:53:23 2005-02-02 05:00:00+13 2005-02-02 08:00:00+13 \N Repeating event starting 2005-02-02 05:00:00 by FREQ=WEEKLY;UNTIL=20050322T160000Z;BYDAY=TU \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20050322T160000Z;BYDAY=TU \N \N \N \N \N 1197 13 \N \N 13 /user4/home/libkcal-1321212322.195.ics 581a7ea44b3d96d61b1be6f7343394ad libkcal-1321212322.195 2005-08-14 16:09:52 2007-01-24 21:34:49 2007-04-17 19:53:23 2004-08-03 00:00:00+12 2004-08-04 00:00:00+12 \N Repeating event starting 2004-08-03 00:00:00 by FREQ=DAILY;UNTIL=20040804 \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20040804 \N \N \N \N \N 1198 13 \N \N 13 /user4/home/libkcal-959318604.221.ics 486593c854fdef168598a58565cd2b8c libkcal-959318604.221 2005-08-14 16:09:53 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-08-28 04:00:00+12 2002-08-28 05:30:00+12 \N Event at 2002-08-28 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1199 13 \N \N 13 /user4/home/libkcal-1408713853.418.ics 16f4de16ce040ccdc476f39e65367ea9 libkcal-1408713853.418 2005-08-14 16:09:54 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-10-07 19:30:00+13 2002-10-08 00:45:00+13 \N Event at 2002-10-07 19:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1200 13 \N \N 13 /user4/home/libkcal-1077060236.504.ics 1b8fcde822d1363825a774dee918381f libkcal-1077060236.504 2005-08-14 16:09:54 2007-01-24 21:34:49 2007-04-17 19:53:23 2002-10-09 20:00:00+13 2002-10-09 21:00:00+13 \N Event at 2002-10-09 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1201 13 \N \N 13 /user4/home/libkcal-1451704381.591.ics 4e3660aa2b2181e32996c903d82baadd libkcal-1451704381.591 2005-08-14 16:09:54 2007-01-24 21:34:50 2007-04-17 19:53:23 2002-10-11 01:00:00+13 2002-10-11 03:00:00+13 \N Event at 2002-10-11 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1202 13 \N \N 13 /user4/home/libkcal-1204424718.88.ics f76c87b00bff40071cb948f36ea9fc05 libkcal-1204424718.88 2005-08-14 16:09:56 2007-01-24 21:34:50 2007-04-17 19:53:23 2002-12-04 03:00:00+13 2002-12-04 04:00:00+13 \N Event at 2002-12-04 03:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1203 13 \N \N 13 /user4/home/libkcal-1282397005.581.ics c250e5d48f1af4711ae7b2c03039df7a libkcal-1282397005.581 2005-08-14 16:09:57 2007-01-24 21:34:50 2007-04-17 19:53:23 2003-09-26 00:00:00+12 2003-09-26 02:00:00+12 \N Event at 2003-09-26 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1204 13 \N \N 13 /user4/home/libkcal-829569168.688.ics e8a0ce3b527490a32f6eec025c4206ce libkcal-829569168.688 2005-08-14 16:09:57 2007-01-24 21:34:50 2007-04-17 19:53:23 2003-10-22 03:00:00+13 2003-10-22 04:00:00+13 \N Event at 2003-10-22 03:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1205 13 \N \N 13 /user4/home/libkcal-1193972627.889.ics 69b705d511f65514383df84b2e9a58c3 libkcal-1193972627.889 2005-08-14 16:09:51 2007-01-24 21:34:50 2007-04-17 19:53:23 2002-11-26 20:30:00+13 2002-11-29 12:00:00+13 \N Repeating event starting 2002-11-26 20:30:00 by FREQ=DAILY;UNTIL=20021128T230000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20021128T230000Z \N \N \N \N \N 1206 13 \N \N 13 /user4/home/libkcal-1947424919.1052.ics 3692e34d5008477e49f37a025363aa68 libkcal-1947424919.1052 2005-08-14 16:09:51 2007-01-24 21:34:50 2007-04-17 19:53:23 2005-02-24 22:00:00+13 2005-02-25 12:00:00+13 \N Repeating event starting 2005-02-24 22:00:00 by FREQ=DAILY;UNTIL=20050224T230000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20050224T230000Z \N \N \N \N \N 1207 13 \N \N 13 /user4/home/libkcal-1040913699.828.ics a782b7575d9a9d36aec7d4b8757d181f libkcal-1040913699.828 2005-08-14 16:09:53 2007-01-24 21:34:50 2007-04-17 19:53:23 2002-09-16 18:30:00+12 2002-09-16 23:45:00+12 \N Event at 2002-09-16 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1208 13 \N \N 13 /user4/home/libkcal-1294476626.829.ics 9d26031c9aa2e6fa554e952029219d5f libkcal-1294476626.829 2005-08-14 16:09:56 2007-01-24 21:34:50 2007-04-17 19:53:23 2003-05-03 06:00:00+12 2003-05-03 09:00:00+12 \N Event at 2003-05-03 06:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1209 13 \N \N 13 /user4/home/libkcal-1055008174.109.ics 4f991fdecc8eb03f1a8171b8731bb116 libkcal-1055008174.109 2005-08-14 16:09:57 2007-01-24 21:34:50 2007-04-17 19:53:23 2003-06-10 17:00:00+12 2003-06-11 04:00:00+12 \N Event at 2003-06-10 17:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1210 13 \N \N 13 /user4/home/KOrganizer-1396751201.1020.ics deae3b563fc138dc046a3e1b8cc8f7ba KOrganizer-1396751201.1020 2007-01-24 21:29:47 2007-01-24 21:34:50 2007-04-17 19:53:23 2007-03-20 19:30:00+12 2007-03-21 01:00:00+12 \N Event at 2007-03-20 19:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1211 13 \N \N 13 /user4/home/KOrganizer-342324400.1065.ics 5c2f7f6194bb33a6693bcb24a8836cd1 KOrganizer-342324400.1065 2005-08-14 19:59:53 2007-01-24 21:34:50 2007-04-17 19:53:23 2005-12-05 20:00:00+13 2005-12-06 02:00:00+13 \N Event at 2005-12-05 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1212 13 \N \N 13 /user4/home/libkcal-1811699916.176.ics 6f09b9384fdc3a2f8eaf9afb165c8157 libkcal-1811699916.176 2005-08-14 16:09:54 2007-01-24 21:34:50 2007-04-17 19:53:23 2002-10-01 00:00:00+12 2002-10-01 01:30:00+12 \N Event at 2002-10-01 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1213 13 \N \N 13 /user4/home/libkcal-208850055.487.ics 3f8107a0ae24ba1e20f1b42bcf782af1 libkcal-208850055.487 2005-08-14 16:09:54 2007-01-24 21:34:50 2007-04-17 19:53:23 2002-10-09 01:00:00+13 2002-10-09 02:00:00+13 \N Event at 2002-10-09 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1214 13 \N \N 13 /user4/home/libkcal-1710734567.933.ics 14e375587c4a6a5d512e12e268f425d7 libkcal-1710734567.933 2005-08-14 16:09:56 2007-01-24 21:34:50 2007-04-17 19:53:23 2003-05-14 20:00:00+12 2003-05-14 20:30:00+12 \N Event at 2003-05-14 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1215 13 \N \N 13 /user4/home/libkcal-1176148155.421.ics 6ad6c4fe43eb7e39fb3927b310db582e libkcal-1176148155.421 2005-08-14 16:09:57 2007-01-24 21:34:50 2007-04-17 19:53:23 2003-09-04 00:30:00+12 2003-09-04 01:00:00+12 \N Event at 2003-09-04 00:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1216 13 \N \N 13 /user4/home/KOrganizer-1532096742.930.ics e326fd2166baab8d3dbd39191c453ef3 KOrganizer-1532096742.930 2005-08-14 19:50:32 2007-01-24 21:34:50 2007-04-17 19:53:23 2005-10-24 19:00:00+13 2005-10-25 03:00:00+13 \N Event at 2005-10-24 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1217 13 \N \N 13 /user4/home/KOrganizer-1625124712.125.ics 5186792e2862a2c676577c050ba1052d KOrganizer-1625124712.125 2005-08-14 19:49:20 2007-01-24 21:34:50 2007-04-17 19:53:23 2005-10-11 19:00:00+13 2005-10-12 01:00:00+13 \N Event at 2005-10-11 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1218 13 \N \N 13 /user4/home/libkcal-1541763920.239.ics 89a0b30503b977d97e99507ed99789ab libkcal-1541763920.239 2005-08-14 16:09:52 2007-01-24 21:34:50 2007-04-17 19:53:23 2004-09-16 00:00:00+12 2004-09-17 00:00:00+12 \N Repeating event starting 2004-09-16 00:00:00 by FREQ=DAILY;UNTIL=20040917 \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20040917 \N \N \N \N \N 1219 13 \N \N 13 /user4/home/libkcal-1653269400.152.ics 500fc9149b75b13e68e798cc18a0e849 libkcal-1653269400.152 2005-08-14 16:09:53 2007-01-24 21:34:50 2007-04-17 19:53:23 2002-08-27 00:00:00+12 2002-08-27 01:30:00+12 \N Event at 2002-08-27 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1220 13 \N \N 13 /user4/home/libkcal-1192146868.794.ics d262101ef636779ccb302d9e44d2ab9e libkcal-1192146868.794 2005-08-14 16:09:56 2007-01-24 21:34:50 2007-04-17 19:53:23 2003-05-01 00:15:00+12 2003-05-01 01:15:00+12 \N Event at 2003-05-01 00:15:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1221 13 \N \N 13 /user4/home/libkcal-1022004810.636.ics 7df51ee52dc8a522183e1a6924c58d9c libkcal-1022004810.636 2005-08-14 16:09:57 2007-01-24 21:34:50 2007-04-17 19:53:23 2003-10-17 07:00:00+13 2003-10-17 10:00:00+13 \N Event at 2003-10-17 07:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1222 13 \N \N 13 /user4/home/KOrganizer-269370179.1064.ics 61ae1ebb427cf785755b872f803f6e28 KOrganizer-269370179.1064 2007-01-24 21:29:22 2007-01-24 21:34:50 2007-04-17 19:53:23 2007-03-15 20:30:00+13 2007-03-16 02:00:00+13 \N Event at 2007-03-15 20:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1223 13 \N \N 13 /user4/home/KOrganizer-1560165065.218.ics 19b20c2aa413e53b7abda979ab715d95 KOrganizer-1560165065.218 2005-08-14 19:59:28 2007-01-24 21:34:50 2007-04-17 19:53:23 2005-12-02 20:00:00+13 2005-12-03 02:00:00+13 \N Event at 2005-12-02 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1224 13 \N \N 13 /user4/home/libkcal-881600230.996.ics 3434ecc54d6bef8fddc8e7d72479090e libkcal-881600230.996 2005-08-14 16:09:51 2007-01-24 21:34:51 2007-04-17 19:53:23 2003-05-30 20:00:00+12 2003-05-31 10:00:00+12 \N Repeating event starting 2003-05-30 20:00:00 by FREQ=DAILY;UNTIL=20030530T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20030530T220000Z \N \N \N \N \N 1225 13 \N \N 13 /user4/home/libkcal-1959579499.495.ics 6c138109003b6cd1891747977b8b4cfe libkcal-1959579499.495 2005-08-14 16:09:53 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-09-04 18:30:00+12 2002-09-04 23:45:00+12 \N Event at 2002-09-04 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1226 13 \N \N 13 /user4/home/libkcal-1675852008.229.ics c662d49e04bcaf704c72121b484fcf1f libkcal-1675852008.229 2005-08-14 16:09:54 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-10-01 00:00:00+12 2002-10-02 00:00:00+12 \N Event at 2002-10-01 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1227 13 \N \N 13 /user4/home/libkcal-2012437282.982.ics 9e70d30e840549edd628186caa3c9985 libkcal-2012437282.982 2005-08-14 16:09:54 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-10-29 20:30:00+13 2002-10-30 01:45:00+13 \N Event at 2002-10-29 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1228 13 \N \N 13 /user4/home/libkcal-532086566.634.ics 4a35a049366d7cd9d54bfdeaef5ea07a libkcal-532086566.634 2005-08-14 16:09:55 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-11-19 03:30:00+13 2002-11-19 05:30:00+13 \N Event at 2002-11-19 03:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1229 13 \N \N 13 /user4/home/libkcal-2096827521.784.ics 84d72bce068ca2e95e2ec20708252ff5 libkcal-2096827521.784 2005-08-14 16:09:51 2007-01-24 21:34:51 2007-04-17 19:53:23 2004-06-16 18:00:00+12 2004-06-17 10:00:00+12 \N Repeating event starting 2004-06-16 18:00:00 by FREQ=DAILY;UNTIL=20040616T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20040616T220000Z \N \N \N \N \N 1230 13 \N \N 13 /user4/home/libkcal-1371307975.524.ics 4f9b077f599ac2f0d40215ddb79d7ab4 libkcal-1371307975.524 2005-08-14 16:09:52 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-02-26 02:00:00+13 2002-02-26 03:00:00+13 \N Event at 2002-02-26 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1231 13 \N \N 13 /user4/home/libkcal-29501553.142.ics 4d44a6a5303ff48df8bc0f6376ed8244 libkcal-29501553.142 2005-08-14 16:09:58 2007-01-24 21:34:51 2007-04-17 19:53:23 2004-09-04 20:00:00+12 2004-09-05 05:00:00+12 \N Event at 2004-09-04 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1232 13 \N \N 13 /user4/home/libkcal-305027183.821.ics e9d3af266ac2a48e18bcdfa0c0dde086 libkcal-305027183.821 2007-01-17 07:44:13 2007-01-24 21:34:51 2007-04-17 19:53:23 2007-01-26 21:00:00+13 2007-01-26 22:00:00+13 \N Event at 2007-01-26 21:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1233 13 \N \N 13 /user4/home/libkcal-356065993.882.ics 11d05d3c0fa21b2bc1994d2d2cd694e7 libkcal-356065993.882 2007-02-21 20:00:43 2007-02-21 20:00:43 2007-04-17 19:53:23 2007-05-11 00:00:00+12 2007-05-11 02:00:00+12 \N Event at 2007-05-11 00:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1234 13 \N \N 13 /user4/home/KOrganizer-519951890.512.ics 7b2123cf0a49e533f067eb131e9d8659 KOrganizer-519951890.512 2005-08-14 19:59:07 2007-01-24 21:34:51 2007-04-17 19:53:23 2005-12-01 20:00:00+13 2005-12-02 02:00:00+13 \N Event at 2005-12-01 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1235 13 \N \N 13 /user4/home/libkcal-1623898273.769.ics 939be5d42a5f4e99aa7fe9e9e1ef7224 libkcal-1623898273.769 2005-08-14 16:09:52 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-04-05 00:00:00+12 2002-04-05 02:00:00+12 \N Event at 2002-04-05 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1236 13 \N \N 13 /user4/home/libkcal-677943530.1035.ics b4d463838bd6f4458ee54732e3a24c65 libkcal-677943530.1035 2005-08-14 16:09:53 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-09-25 18:30:00+12 2002-09-25 23:45:00+12 \N Event at 2002-09-25 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1237 13 \N \N 13 /user4/home/libkcal-621613832.230.ics cd33fd5d38225cf8ce4d47b2544b206d libkcal-621613832.230 2005-08-14 16:09:58 2007-01-24 21:34:51 2007-04-17 19:53:23 2004-11-12 02:00:00+13 2004-11-12 04:00:00+13 \N Event at 2004-11-12 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1238 13 \N \N 13 /user4/home/libkcal-1320911446.836.ics 14ee7ad1c3b0d75651412b9b0fd245fe libkcal-1320911446.836 2005-08-14 16:09:51 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-10-30 20:30:00+13 2002-10-31 02:15:00+13 \N Repeating event starting 2002-10-30 20:30:00 by FREQ=WEEKLY;UNTIL=20021204T073000Z;BYDAY=WE \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20021204T073000Z;BYDAY=WE \N \N \N \N \N 1239 13 \N \N 13 /user4/home/libkcal-247737881.1034.ics 45997576da5119786415dce226748d77 libkcal-247737881.1034 2005-08-14 16:09:51 2007-01-24 21:34:51 2007-04-17 19:53:23 2005-04-15 18:30:00+12 2005-04-15 23:30:00+12 \N Repeating event starting 2005-04-15 18:30:00 by FREQ=WEEKLY;UNTIL=20050513T063000Z;BYDAY=FR \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20050513T063000Z;BYDAY=FR \N \N \N \N \N 1240 13 \N \N 13 /user4/home/libkcal-145382464.740.ics 7d427eed0d2fc28be3e7a2e3025e6656 libkcal-145382464.740 2005-08-14 16:09:53 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-09-11 18:30:00+12 2002-09-11 23:45:00+12 \N Event at 2002-09-11 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1241 13 \N \N 13 /user4/home/libkcal-817273620.913.ics 3fc436da8c3af0ad289731d64799764a libkcal-817273620.913 2005-08-14 16:09:55 2007-01-24 21:34:51 2007-04-17 19:53:23 2002-11-30 04:00:00+13 2002-11-30 05:00:00+13 \N Event at 2002-11-30 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1242 13 \N \N 13 /user4/home/libkcal-734047853.574.ics 70a7c66830809a6d16831f48c3c6c213 libkcal-734047853.574 2005-08-14 16:09:56 2007-01-24 21:34:51 2007-04-17 19:53:23 2003-01-28 21:00:00+13 2003-01-28 22:00:00+13 \N Event at 2003-01-28 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1243 13 \N \N 13 /user4/home/libkcal-1896176446.680.ics a9b86fb081ba6c49d99b413d0fd8e98d libkcal-1896176446.680 2005-08-14 16:09:56 2007-01-24 21:34:51 2007-04-17 19:53:23 2003-03-18 20:00:00+12 2003-03-19 00:00:00+12 \N Event at 2003-03-18 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1244 13 \N \N 13 /user4/home/libkcal-45118192.951.ics 392377c9a94b5a11b97b05efa69c4eb0 libkcal-45118192.951 2005-08-14 16:09:56 2007-01-24 21:34:51 2007-04-17 19:53:23 2003-05-15 19:00:00+12 2003-05-16 02:00:00+12 \N Event at 2003-05-15 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1245 13 \N \N 13 /user4/home/libkcal-1465969358.564.ics 207ba11b3819d20f3ef8996ac044c02c libkcal-1465969358.564 2005-08-14 16:09:57 2007-01-24 21:34:51 2007-04-17 19:53:23 2003-09-25 06:00:00+12 2003-09-25 08:00:00+12 \N Event at 2003-09-25 06:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1246 13 \N \N 13 /user4/home/libkcal-252164306.653.ics 5f36b463ae273ab5337a409ff643effb libkcal-252164306.653 2005-08-14 16:09:57 2007-01-24 21:34:51 2007-04-17 19:53:23 2003-10-21 01:00:00+13 2003-10-21 03:00:00+13 \N Event at 2003-10-21 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1247 13 \N \N 13 /user4/home/libkcal-1225211214.949.ics 269f65757bde65cdbaa899f5e46c3164 libkcal-1225211214.949 2005-08-14 16:09:57 2007-01-24 21:34:51 2007-04-17 19:53:23 2004-01-26 21:00:00+13 2004-01-26 21:30:00+13 \N Event at 2004-01-26 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1248 13 \N \N 13 /user4/home/KOrganizer-1571060348.340.ics 6bfc465c9e6cf89312abdfd381b47e71 KOrganizer-1571060348.340 2005-08-14 19:43:29 2007-01-24 21:34:51 2007-04-17 19:53:23 2005-09-01 18:00:00+12 2005-09-02 02:00:00+12 \N Event at 2005-09-01 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1249 13 \N \N 13 /user4/home/libkcal-545492870.973.ics bb29b889140d6825b58455301d5653d1 libkcal-545492870.973 2005-08-14 16:09:54 2007-01-24 21:34:52 2007-04-17 19:53:23 2002-10-29 20:30:00+13 2002-10-30 01:45:00+13 \N Event at 2002-10-29 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1250 13 \N \N 13 /user4/home/libkcal-268989763.356.ics 7cc4d2a89876546ca507f740e87c661e libkcal-268989763.356 2005-08-14 16:09:55 2007-01-24 21:34:52 2007-04-17 19:53:23 2002-11-07 20:30:00+13 2002-11-08 01:45:00+13 \N Event at 2002-11-07 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1251 13 \N \N 13 /user4/home/libkcal-223550567.539.ics 22dc3dbfb40bfdaa22d0c00e91efc0e5 libkcal-223550567.539 2005-08-14 16:09:56 2007-01-24 21:34:52 2007-04-17 19:53:23 2003-01-27 23:00:00+13 2003-01-28 00:00:00+13 \N Event at 2003-01-27 23:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1252 13 \N \N 13 /user4/home/libkcal-1931226847.404.ics ae880744275b4998ad3801c5c55d5c2c libkcal-1931226847.404 2005-08-14 16:09:57 2007-01-24 21:34:52 2007-04-17 19:53:23 2003-09-03 02:30:00+12 2003-09-03 03:30:00+12 \N Event at 2003-09-03 02:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1253 13 \N \N 13 /user4/home/libkcal-824353234.758.ics bd5cf29fac9c682236e5dbcc9350caa3 libkcal-824353234.758 2005-08-14 16:09:57 2007-01-24 21:34:52 2007-04-17 19:53:23 2003-10-31 21:00:00+13 2003-10-31 21:30:00+13 \N Event at 2003-10-31 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1254 13 \N \N 13 /user4/home/KOrganizer-1241596503.111.ics a68172e3649db56da60feea78462896a KOrganizer-1241596503.111 2006-03-20 20:02:05 2007-01-24 21:34:52 2007-04-17 19:53:23 2006-03-24 23:00:00+12 2006-03-25 02:00:00+12 \N Event at 2006-03-24 23:00:00 bhs \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1255 13 \N \N 13 /user4/home/KOrganizer-1325946143.757.ics a56d97b8bce94312797fcd9cdd83c927 KOrganizer-1325946143.757 2005-08-14 19:45:06 2007-01-24 21:34:52 2007-04-17 19:53:23 2005-09-22 18:00:00+12 2005-09-23 00:00:00+12 \N Event at 2005-09-22 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1256 13 \N \N 13 /user4/home/libkcal-1171510238.661.ics a3478459f1d1c09b7831fd35d71e2a6c libkcal-1171510238.661 2005-08-14 16:09:51 2007-01-24 21:34:52 2007-04-17 19:53:23 2003-07-11 18:00:00+12 2003-07-13 10:00:00+12 \N Repeating event starting 2003-07-11 18:00:00 by FREQ=DAILY;UNTIL=20030712T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20030712T220000Z \N \N \N \N \N 1257 13 \N \N 13 /user4/home/libkcal-758088585.406.ics cb22b8a0c0c6db37c5d60fda9dce2a01 libkcal-758088585.406 2005-08-14 16:09:52 2007-01-24 21:34:52 2007-04-17 19:53:23 2005-01-28 20:00:00+13 2005-01-30 12:00:00+13 \N Repeating event starting 2005-01-28 20:00:00 by FREQ=DAILY;UNTIL=20050129T230000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20050129T230000Z \N \N \N \N \N 1258 13 \N \N 13 /user4/home/libkcal-1063781651.118.ics 32ad49d30c1f7fc07e9b79433e7ec7ff libkcal-1063781651.118 2005-08-14 16:09:53 2007-01-24 21:34:52 2007-04-17 19:53:23 2002-08-22 19:00:00+12 2002-08-23 00:00:00+12 \N Event at 2002-08-22 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1259 13 \N \N 13 /user4/home/libkcal-98921073.921.ics 3b16c76d81a8c81a79bc77207f282c6f libkcal-98921073.921 2005-08-14 16:09:54 2007-01-24 21:34:52 2007-04-17 19:53:23 2002-10-26 01:00:00+13 2002-10-26 02:00:00+13 \N Event at 2002-10-26 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1260 13 \N \N 13 /user4/home/KOrganizer-1016508863.138.ics 2d337497501e04331bba015063651a19 KOrganizer-1016508863.138 2005-08-14 19:51:08 2007-01-24 21:34:52 2007-04-17 19:53:23 2005-10-28 19:00:00+13 2005-10-29 01:00:00+13 \N Event at 2005-10-28 19:00:00 kl-111 \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1261 13 \N \N 13 /user4/home/libkcal-1082241187.489.ics c0e2c39f13cf51dc3129c294c28f612e libkcal-1082241187.489 2005-08-14 16:09:52 2007-01-24 21:34:52 2007-04-17 19:53:23 2002-02-22 01:00:00+13 2002-02-22 02:30:00+13 \N Event at 2002-02-22 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1262 13 \N \N 13 /user4/home/libkcal-1654956090.979.ics 6680c4b2b72c5aaa87ee9a60861a1fe1 libkcal-1654956090.979 2005-08-14 16:09:52 2007-01-24 21:34:52 2007-04-17 19:53:23 2002-05-03 00:00:00+12 2002-05-03 02:00:00+12 \N Event at 2002-05-03 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1263 13 \N \N 13 /user4/home/libkcal-1955799109.1003.ics 34d5e1c8b9c0e66e2d0b5d3d43899047 libkcal-1955799109.1003 2005-08-14 16:09:56 2007-01-24 21:34:52 2007-04-17 19:53:23 2003-05-21 00:00:00+12 2003-05-21 02:00:00+12 \N Event at 2003-05-21 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1264 13 \N \N 13 /user4/home/libkcal-396989560.1072.ics caa9548a6e0308ff6e1fb716407ef31d libkcal-396989560.1072 2005-08-14 16:09:57 2007-01-24 21:34:52 2007-04-17 19:53:23 2004-08-02 22:00:00+12 2004-08-03 01:00:00+12 \N Event at 2004-08-02 22:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1265 13 \N \N 13 /user4/home/KOrganizer-1757099750.216.ics 2a915412b47c5827e3fbf97c88f1daab KOrganizer-1757099750.216 2005-08-22 19:59:12 2007-01-24 21:34:52 2007-04-17 19:53:23 2005-08-26 02:00:00+12 2005-08-26 04:00:00+12 \N Event at 2005-08-26 02:00:00 Klareboderne \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1266 13 \N \N 13 /user4/home/libkcal-1399279554.704.ics de6d54c2b006cfe26c2963c449748e06 libkcal-1399279554.704 2005-08-14 16:09:51 2007-01-24 21:34:52 2007-04-17 19:53:23 2003-03-26 19:30:00+12 2003-03-27 00:45:00+12 \N Repeating event starting 2003-03-26 19:30:00 by FREQ=WEEKLY;UNTIL=20030507T063000Z;BYDAY=WE \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20030507T063000Z;BYDAY=WE \N \N \N \N \N 1267 13 \N \N 13 /user4/home/libkcal-1379725410.1001.ics c5493fbe6f36c21977ae4cddd327f861 libkcal-1379725410.1001 2005-08-14 16:09:53 2007-01-24 21:34:52 2007-04-17 19:53:23 2002-09-24 00:00:00+12 2002-09-24 01:30:00+12 \N Event at 2002-09-24 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1268 13 \N \N 13 /user4/home/libkcal-1528853965.493.ics d9506aba8816d7fc57ecdff5d2491a0c libkcal-1528853965.493 2005-08-14 16:09:57 2007-01-24 21:34:52 2007-04-17 19:53:23 2003-09-18 00:30:00+12 2003-09-18 01:30:00+12 \N Event at 2003-09-18 00:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1269 13 \N \N 13 /user4/home/libkcal-1208863622.915.ics ab8e2befd47a3e1828770506f43fd3f4 libkcal-1208863622.915 2005-08-14 16:09:57 2007-01-24 21:34:52 2007-04-17 19:53:23 2003-12-17 05:00:00+13 2003-12-17 05:30:00+13 \N Event at 2003-12-17 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1270 13 \N \N 13 /user4/home/KOrganizer-1268251613.1081.ics 26f795fcc6741ca898a8f928988d6ec1 KOrganizer-1268251613.1081 2006-05-24 09:40:34 2007-01-24 21:34:52 2007-04-17 19:53:23 2006-06-09 02:00:00+12 2006-06-09 09:00:00+12 \N Event at 2006-06-09 02:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1271 13 \N \N 13 /user4/home/KOrganizer-1316417293.928.ics 88739e555fe351d23006254e3371d1d4 KOrganizer-1316417293.928 2006-03-20 20:03:34 2007-01-24 21:34:52 2007-04-17 19:53:23 2006-04-05 19:00:00+12 2006-04-06 10:00:00+12 \N Repeating event starting 2006-04-05 19:00:00 by FREQ=DAILY;UNTIL=20060406T070000Z ballerup \N 5 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20060406T070000Z \N \N \N \N \N 1272 13 \N \N 13 /user4/home/KOrganizer-1032814688.266.ics 896810e29645a166c6f421a0dd1bf7a3 KOrganizer-1032814688.266 2005-08-14 19:48:55 2007-01-24 21:34:53 2007-04-17 19:53:23 2005-10-10 19:00:00+13 2005-10-11 03:00:00+13 \N Event at 2005-10-10 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1273 13 \N \N 13 /user4/home/libkcal-275695243.1018.ics 3c5cb07d7fe140209caa32a0c971ffac libkcal-275695243.1018 2005-08-14 16:09:53 2007-01-24 21:34:53 2007-04-17 19:53:23 2002-09-24 04:00:00+12 2002-09-24 05:00:00+12 \N Event at 2002-09-24 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1274 13 \N \N 13 /user4/home/libkcal-1909409644.470.ics 4e82f8a7d51f2b52372d6aff2986ca81 libkcal-1909409644.470 2005-08-14 16:09:54 2007-01-24 21:34:53 2007-04-17 19:53:23 2002-10-09 00:00:00+13 2002-10-09 00:30:00+13 \N Event at 2002-10-09 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1275 13 \N \N 13 /user4/home/libkcal-93108450.1057.ics 15c3c9388bb4b72510643e0af6cd79d4 libkcal-93108450.1057 2005-08-14 16:09:56 2007-01-24 21:34:53 2007-04-17 19:53:23 2003-05-28 19:00:00+12 2003-05-28 20:00:00+12 \N Event at 2003-05-28 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1276 13 \N \N 13 /user4/home/libkcal-1685650426.600.ics 457f4666e811a2f3a0026292d3b1a4a9 libkcal-1685650426.600 2005-08-14 16:09:57 2007-01-24 21:34:53 2007-04-17 19:53:23 2003-10-07 05:00:00+13 2003-10-07 09:00:00+13 \N Event at 2003-10-07 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1277 13 \N \N 13 /user4/home/libkcal-2036447089.264.ics a057b79551081b24c2a6dfdcd06a7615 libkcal-2036447089.264 2005-08-14 16:09:58 2007-01-24 21:34:53 2007-04-17 19:53:23 2005-01-17 22:00:00+13 2005-01-18 05:00:00+13 \N Event at 2005-01-17 22:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1278 13 \N \N 13 /user4/home/KOrganizer-1531501876.687.ics b716cc2683e0825a723f1502cdb71e15 KOrganizer-1531501876.687 2005-08-29 11:18:53 2007-01-24 21:34:53 2007-04-17 19:53:23 2005-09-05 20:00:00+12 2005-09-05 21:00:00+12 \N Event at 2005-09-05 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1279 13 \N \N 13 /user4/home/KOrganizer-400061712.176.ics 3f53cd27fc774a41c42b0b9d8fd44d42 KOrganizer-400061712.176 2005-08-14 19:55:00 2007-01-24 21:34:53 2007-04-17 19:53:23 2005-11-22 20:00:00+13 2005-11-23 12:00:00+13 \N Repeating event starting 2005-11-22 20:00:00 by FREQ=DAILY;COUNT=2 \N \N 3 PUBLIC OPAQUE FREQ=DAILY;COUNT=2 \N \N \N \N \N 1280 13 \N \N 13 /user4/home/libkcal-40588559.687.ics 8c8381cbfbde619d7606ffdf17e66783 libkcal-40588559.687 2005-08-14 16:09:51 2007-01-24 21:34:53 2007-04-17 19:53:23 2003-02-12 20:30:00+13 2003-02-13 01:45:00+13 \N Repeating event starting 2003-02-12 20:30:00 by FREQ=WEEKLY;UNTIL=20030319T073000Z;BYDAY=WE \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20030319T073000Z;BYDAY=WE \N \N \N \N \N 1281 13 \N \N 13 /user4/home/libkcal-1344187686.193.ics 720225e93177b9242132fe680171d50f libkcal-1344187686.193 2005-08-14 16:09:54 2007-01-24 21:34:53 2007-04-17 19:53:23 2002-10-01 04:00:00+12 2002-10-01 05:00:00+12 \N Event at 2002-10-01 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1282 13 \N \N 13 /user4/home/libkcal-186613018.608.ics df546e1b5393f1437ca4fe909624bec9 libkcal-186613018.608 2007-01-17 07:44:12 2007-01-24 21:34:53 2007-04-17 19:53:23 2007-01-18 22:00:00+13 2007-01-19 01:00:00+13 \N Event at 2007-01-18 22:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1283 13 \N \N 13 /user4/home/libkcal-1833164074.354.ics 02fab886f301e7edfb18a3e0799a840c libkcal-1833164074.354 2007-02-21 20:00:43 2007-02-21 20:00:43 2007-04-17 19:53:23 2007-04-12 00:00:00+12 2007-04-12 02:00:00+12 \N Event at 2007-04-12 00:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1284 13 \N \N 13 /user4/home/libkcal-589387468.739.ics 29f521785a167da5d53a7c951e3c0bfe libkcal-589387468.739 2005-08-14 16:09:51 2007-01-24 21:34:53 2007-04-17 19:53:23 2003-06-17 20:00:00+12 2003-06-19 10:00:00+12 \N Repeating event starting 2003-06-17 20:00:00 by FREQ=DAILY;UNTIL=20030618T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20030618T220000Z \N \N \N \N \N 1285 13 \N \N 13 /user4/home/libkcal-1081550300.938.ics 31231ddb1244df02f35b60774672557a libkcal-1081550300.938 2005-08-14 16:09:54 2007-01-24 21:34:53 2007-04-17 19:53:23 2002-10-27 06:00:00+13 2002-10-27 06:30:00+13 \N Event at 2002-10-27 06:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1286 13 \N \N 13 /user4/home/libkcal-1271651172.235.ics e559d37a0cc5991ca26d8eec5ab1809e libkcal-1271651172.235 2005-08-14 16:09:55 2007-01-24 21:34:53 2007-04-17 19:53:23 2002-11-05 20:30:00+13 2002-11-06 01:45:00+13 \N Event at 2002-11-05 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1287 13 \N \N 13 /user4/home/libkcal-1439209644.459.ics 7526fb2e11389d187779b8781626da3a libkcal-1439209644.459 2005-08-14 16:09:55 2007-01-24 21:34:53 2007-04-17 19:53:23 2002-11-12 05:30:00+13 2002-11-12 06:30:00+13 \N Event at 2002-11-12 05:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1288 13 \N \N 13 /user4/home/libkcal-1881284871.807.ics 0889f4bb563307e2613cf334e6acf531 libkcal-1881284871.807 2005-08-14 16:09:55 2007-01-24 21:34:53 2007-04-17 19:53:23 2002-11-27 02:00:00+13 2002-11-27 04:00:00+13 \N Event at 2002-11-27 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1289 13 \N \N 13 /user4/home/libkcal-624141615.157.ics e84eab7f1a381515c98a330f7d893232 libkcal-624141615.157 2005-08-14 16:09:56 2007-01-24 21:34:53 2007-04-17 19:53:23 2002-12-06 04:00:00+13 2002-12-06 05:00:00+13 \N Event at 2002-12-06 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1290 13 \N \N 13 /user4/home/libkcal-672191901.245.ics a3c605ab2bf90f31d36777fcaaeb2632 libkcal-672191901.245 2005-08-14 16:09:56 2007-01-24 21:34:53 2007-04-17 19:53:23 2002-12-10 20:30:00+13 2002-12-11 00:00:00+13 \N Event at 2002-12-10 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1291 13 \N \N 13 /user4/home/libkcal-1541138818.1074.ics 46d7875351699aa9540058483345c787 libkcal-1541138818.1074 2005-08-14 16:09:56 2007-01-24 21:34:53 2007-04-17 19:53:23 2003-05-29 22:00:00+12 2003-05-30 08:00:00+12 \N Event at 2003-05-29 22:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1292 13 \N \N 13 /user4/home/libkcal-1269048507.300.ics 1235236f7781123f86476dd5f021a3fe libkcal-1269048507.300 2005-08-14 16:09:57 2007-01-24 21:34:53 2007-04-17 19:53:23 2003-08-26 19:00:00+12 2003-08-26 20:00:00+12 \N Event at 2003-08-26 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1293 13 \N \N 13 /user4/home/libkcal-768755480.671.ics 4312bc919f1839e4c522923ac44efd57 libkcal-768755480.671 2005-08-14 16:09:57 2007-01-24 21:34:53 2007-04-17 19:53:23 2003-10-22 02:00:00+13 2003-10-22 03:00:00+13 \N Event at 2003-10-22 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1294 13 \N \N 13 /user4/home/libkcal-19706228.125.ics 7d4ef4e195e64e5e1f6fed7b5bcd77c3 libkcal-19706228.125 2005-08-14 16:09:58 2007-01-24 21:34:53 2007-04-17 19:53:23 2004-08-23 18:00:00+12 2004-08-23 19:00:00+12 \N Event at 2004-08-23 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1295 13 \N \N 13 /user4/home/libkcal-1677882372.178.ics 15c37eee01ccb086542747804f307bb4 libkcal-1677882372.178 2005-08-14 16:09:58 2007-01-24 21:34:53 2007-04-17 19:53:23 2004-09-16 00:00:00+12 2004-09-16 02:00:00+12 \N Event at 2004-09-16 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1296 13 \N \N 13 /user4/home/KOrganizer-631336277.241.ics d44d6dda3b638ea67edff13e3cfb44df KOrganizer-631336277.241 2007-01-24 21:32:45 2007-01-24 21:34:53 2007-04-17 19:53:23 2007-05-01 18:30:00+12 2007-05-02 00:00:00+12 \N Event at 2007-05-01 18:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1297 13 \N \N 13 /user4/home/KOrganizer-1659060362.673.ics 46555a427a041946d682b3d320c3086c KOrganizer-1659060362.673 2005-08-14 19:46:51 2007-01-24 21:34:54 2007-04-17 19:53:23 2005-09-27 18:00:00+12 2005-09-28 02:00:00+12 \N Event at 2005-09-27 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1298 13 \N \N 13 /user4/home/KOrganizer-547039492.851.ics 3ba8dfdb1823334152c6e7d4bf16a7fb KOrganizer-547039492.851 2005-07-29 19:27:41 2007-01-24 21:34:54 2007-04-17 19:53:23 2005-07-30 07:45:00+12 2005-07-30 09:45:00+12 \N \N \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1299 13 \N \N 13 /user4/home/KOrganizer-1099949027.1055.ics 60d206cdb712d5d93061fd6eedbfe516 KOrganizer-1099949027.1055 2005-07-29 19:38:44 2007-01-24 21:34:54 2007-04-17 19:53:23 2005-08-09 18:30:00+12 2005-08-10 10:00:00+12 \N Repeating event starting 2005-08-09 18:30:00 by FREQ=DAILY;COUNT=2 Klareboderne \N 3 PUBLIC OPAQUE FREQ=DAILY;COUNT=2 \N \N \N \N \N 1300 13 \N \N 13 /user4/home/libkcal-211720587.187.ics fe6c41da1f46c8fed2f493cbb02779fe libkcal-211720587.187 2005-08-14 16:09:53 2007-01-24 21:34:54 2007-04-17 19:53:23 2002-08-28 00:00:00+12 2002-08-28 03:00:00+12 \N Event at 2002-08-28 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1301 13 \N \N 13 /user4/home/libkcal-548731495.147.ics 7988a857ecb45c3485ca371cda9b785e libkcal-548731495.147 2005-08-14 16:09:55 2007-01-24 21:34:54 2007-04-17 19:53:23 2002-11-05 02:00:00+13 2002-11-05 08:00:00+13 \N Event at 2002-11-05 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1302 13 \N \N 13 /user4/home/libkcal-347215494.1039.ics 66a77abdb0beaeb25e22c70f067471bd libkcal-347215494.1039 2005-08-14 16:09:56 2007-01-24 21:34:54 2007-04-17 19:53:23 2003-05-23 00:00:00+12 2003-05-23 02:00:00+12 \N Event at 2003-05-23 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1303 13 \N \N 13 /user4/home/libkcal-1762813400.161.ics 977ef50122c29d5ed0c9b7599c4b368a libkcal-1762813400.161 2005-08-14 16:09:57 2007-01-24 21:34:54 2007-04-17 19:53:23 2003-07-07 22:00:00+12 2003-07-08 01:00:00+12 \N Event at 2003-07-07 22:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1304 13 \N \N 13 /user4/home/libkcal-1077249209.370.ics 5f0f610b281abda9b85051367f8cc590 libkcal-1077249209.370 2005-08-14 16:09:57 2007-01-24 21:34:54 2007-04-17 19:53:23 2003-09-02 00:00:00+12 2003-09-02 00:30:00+12 \N Event at 2003-09-02 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1305 13 \N \N 13 /user4/home/libkcal-1201928610.547.ics 64a25b712e47372da1e104bb427aa483 libkcal-1201928610.547 2005-08-14 16:09:57 2007-01-24 21:34:54 2007-04-17 19:53:23 2003-09-23 01:00:00+12 2003-09-23 02:00:00+12 \N Event at 2003-09-23 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1306 13 \N \N 13 /user4/home/KOrganizer-1138025243.527.ics 87b14929137c7937ad106e191b3869ff KOrganizer-1138025243.527 2005-08-14 19:56:47 2007-01-24 21:34:54 2007-04-17 19:53:23 2005-11-24 20:00:00+13 2005-11-25 12:00:00+13 \N Repeating event starting 2005-11-24 20:00:00 by FREQ=DAILY;COUNT=2 \N \N 3 PUBLIC OPAQUE FREQ=DAILY;COUNT=2 \N \N \N \N \N 1307 13 \N \N 13 /user4/home/KOrganizer-1944568617.286.ics 3952d1f167f123aca7e019379228516e KOrganizer-1944568617.286 2005-07-29 19:37:55 2007-01-24 21:34:54 2007-04-17 19:53:23 2005-08-11 23:00:00+12 2005-08-12 00:00:00+12 \N Event at 2005-08-11 23:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1308 13 \N \N 13 /user4/home/libkcal-2074581994.559.ics 64b662dd855a1d3e11c67d6c9180f8a1 libkcal-2074581994.559 2005-08-14 16:09:52 2007-01-24 21:34:54 2007-04-17 19:53:23 2002-02-26 03:30:00+13 2002-02-26 04:30:00+13 \N Event at 2002-02-26 03:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1309 13 \N \N 13 /user4/home/libkcal-1539789441.581.ics e553c46626116abea6a44f23b2cd03fd libkcal-1539789441.581 2005-08-14 16:09:55 2007-01-24 21:34:54 2007-04-17 19:53:23 2002-11-15 20:30:00+13 2002-11-16 01:45:00+13 \N Event at 2002-11-15 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1310 13 \N \N 13 /user4/home/libkcal-1240533661.810.ics 5b10fa2faf1cff33cb95b787fbe20aa2 libkcal-1240533661.810 2005-08-14 16:09:57 2007-01-24 21:34:54 2007-04-17 19:53:23 2003-11-06 02:00:00+13 2003-11-06 02:30:00+13 \N Event at 2003-11-06 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1311 13 \N \N 13 /user4/home/libkcal-125650352.185.ics fff3fcbae37b5684fe9d896ee5297236 libkcal-125650352.185 2007-01-17 07:44:02 2007-01-24 21:34:54 2007-04-17 19:53:23 2007-01-15 21:00:00+13 2007-01-16 12:00:00+13 \N Event at 2007-01-15 21:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1312 13 \N \N 13 /user4/home/KOrganizer-738458230.642.ics 74ddd8bd2d6c8e94d553ef0c900fc1b8 KOrganizer-738458230.642 2007-01-24 21:22:58 2007-01-24 21:34:54 2007-04-17 19:53:23 2007-01-30 20:30:00+13 2007-01-31 02:00:00+13 \N Event at 2007-01-30 20:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1313 13 \N \N 13 /user4/home/KOrganizer-1734853127.483.ics f013ff1fcf0a7972682ebe026448da45 KOrganizer-1734853127.483 2007-01-24 21:30:10 2007-01-24 21:34:54 2007-04-17 19:53:23 2007-03-22 19:30:00+12 2007-03-23 01:00:00+12 \N Event at 2007-03-22 19:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1314 13 \N \N 13 /user4/home/KOrganizer-6240027.699.ics 83f6e15bd4111db69583d6c76e75b473 KOrganizer-6240027.699 2005-08-26 09:59:02 2007-01-24 21:34:54 2007-04-17 19:53:23 2005-09-06 19:30:00+12 2005-09-06 21:00:00+12 \N Event at 2005-09-06 19:30:00 Høje Tåstrup \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1315 13 \N \N 13 /user4/home/KOrganizer-668555287.189.ics 30e312279f83806000068bcca2394183 KOrganizer-668555287.189 2005-08-14 20:01:43 2007-01-24 21:34:54 2007-04-17 19:53:23 2005-12-12 20:00:00+13 2005-12-13 02:00:00+13 \N Event at 2005-12-12 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1316 13 \N \N 13 /user4/home/libkcal-863120668.565.ics a3325c0a0d34fb70e498b3ef2a95692f libkcal-863120668.565 2005-08-14 16:09:53 2007-01-24 21:34:54 2007-04-17 19:53:23 2002-09-05 18:30:00+12 2002-09-05 23:45:00+12 \N Event at 2002-09-05 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1317 13 \N \N 13 /user4/home/libkcal-1780424263.776.ics c527c31fac83c710a58dc4fc54e25922 libkcal-1780424263.776 2005-08-14 16:09:56 2007-01-24 21:34:54 2007-04-17 19:53:23 2003-04-29 05:00:00+12 2003-04-29 09:00:00+12 \N Event at 2003-04-29 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1318 13 \N \N 13 /user4/home/libkcal-1364406704.107.ics 89336eb83360721fe04603e1f31bb0ac libkcal-1364406704.107 2005-08-14 16:09:58 2007-01-24 21:34:54 2007-04-17 19:53:23 2004-08-19 19:00:00+12 2004-08-19 22:00:00+12 \N Event at 2004-08-19 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1319 13 \N \N 13 /user4/home/KOrganizer-810745804.721.ics e6913a296f87258356efc2118f528e43 KOrganizer-810745804.721 2005-08-14 20:00:58 2007-01-24 21:34:54 2007-04-17 19:53:23 2005-12-08 20:00:00+13 2005-12-09 02:00:00+13 \N Event at 2005-12-08 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1320 13 \N \N 13 /user4/home/libkcal-765934596.461.ics 79f00f9c411a4e2e122227a92600ba48 libkcal-765934596.461 2005-08-14 16:09:53 2007-01-24 21:34:54 2007-04-17 19:53:23 2002-08-31 03:00:00+12 2002-08-31 04:00:00+12 \N Event at 2002-08-31 03:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1321 13 \N \N 13 /user4/home/libkcal-396229364.599.ics 176ca3709c28d761554c07e4150c335c libkcal-396229364.599 2005-08-14 16:09:53 2007-01-24 21:34:54 2007-04-17 19:53:23 2002-09-06 18:30:00+12 2002-09-06 23:45:00+12 \N Event at 2002-09-06 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1322 13 \N \N 13 /user4/home/libkcal-2131935622.105.ics 86290cf1bd448acef98cf14555bf3a0d libkcal-2131935622.105 2005-08-14 16:09:54 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-09-27 18:30:00+12 2002-09-27 23:45:00+12 \N Event at 2002-09-27 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1323 13 \N \N 13 /user4/home/libkcal-1118149605.948.ics 58d56d60de58fac9e3e50eaafd815f72 libkcal-1118149605.948 2005-08-14 16:09:55 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-12-02 20:30:00+13 2002-12-03 01:45:00+13 \N Event at 2002-12-02 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1324 13 \N \N 13 /user4/home/libkcal-2065957537.505.ics 2c32ee220034cb8a9062f7ebf9b41e46 libkcal-2065957537.505 2005-08-14 16:09:56 2007-01-24 21:34:55 2007-04-17 19:53:23 2003-01-26 05:00:00+13 2003-01-26 11:00:00+13 \N Event at 2003-01-26 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1325 13 \N \N 13 /user4/home/libkcal-1880312065.986.ics fe66ec71f7f3ec69be6580810e588ece libkcal-1880312065.986 2005-08-14 16:09:56 2007-01-24 21:34:55 2007-04-17 19:53:23 2003-05-16 18:00:00+12 2003-05-17 04:00:00+12 \N Event at 2003-05-16 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1326 13 \N \N 13 /user4/home/libkcal-1530393784.511.ics 7b3deaba9e1f287c1a23103620bff754 libkcal-1530393784.511 2005-08-14 16:09:57 2007-01-24 21:34:55 2007-04-17 19:53:23 2003-09-23 00:00:00+12 2003-09-23 01:00:00+12 \N Event at 2003-09-23 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1327 13 \N \N 13 /user4/home/libkcal-1692819609.723.ics f35a0104cd1d9c2ef3e1aeb3bdd9996a libkcal-1692819609.723 2005-08-14 16:09:57 2007-01-24 21:34:55 2007-04-17 19:53:23 2003-10-30 01:30:00+13 2003-10-30 02:00:00+13 \N Event at 2003-10-30 01:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1328 13 \N \N 13 /user4/home/libkcal-267268802.802.ics 396acc1e3399448c4d52cdb4fee8767c libkcal-267268802.802 2005-08-14 16:09:51 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-09-13 18:30:00+12 2002-09-13 23:45:00+12 \N Repeating event starting 2002-09-13 18:30:00 by FREQ=WEEKLY;UNTIL=20020920T063000Z;BYDAY=FR \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20020920T063000Z;BYDAY=FR \N \N \N \N \N 1329 13 \N \N 13 /user4/home/libkcal-183271552.699.ics e08d24d7d804fc90b9d1c60aa31c9eda libkcal-183271552.699 2005-08-14 16:09:52 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-03-12 02:00:00+13 2002-03-12 03:00:00+13 \N Event at 2002-03-12 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1330 13 \N \N 13 /user4/home/libkcal-1564156755.83.ics 19836e504dac444b7fc2ee6b6903bd9c libkcal-1564156755.83 2005-08-14 16:09:53 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-08-21 19:30:00+12 2002-08-21 20:30:00+12 \N Event at 2002-08-21 19:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1331 13 \N \N 13 /user4/home/libkcal-1045090772.930.ics dbbd2e7ba5cfbce2eb1d6515bb6dc08c libkcal-1045090772.930 2005-08-14 16:09:53 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-09-18 18:30:00+12 2002-09-18 23:45:00+12 \N Event at 2002-09-18 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1332 13 \N \N 13 /user4/home/libkcal-1753025426.982.ics 320e46b33fa389b70dcd2ae1e654e14c libkcal-1753025426.982 2005-08-14 16:09:55 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-12-03 02:45:00+13 2002-12-03 03:00:00+13 \N Event at 2002-12-03 02:45:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1333 13 \N \N 13 /user4/home/libkcal-1139684300.385.ics 8384f2e720e4df1e0bbd24637c62894d libkcal-1139684300.385 2005-08-14 16:09:56 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-12-18 04:00:00+13 2002-12-18 05:30:00+13 \N Event at 2002-12-18 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1334 13 \N \N 13 /user4/home/KOrganizer-1782181593.838.ics e8172de86b3463fefe0c9c1d41de5e1a KOrganizer-1782181593.838 2005-08-14 19:45:41 2007-01-24 21:34:55 2007-04-17 19:53:23 2005-09-23 18:00:00+12 2005-09-24 00:00:00+12 \N Event at 2005-09-23 18:00:00 kl-111 \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1335 13 \N \N 13 /user4/home/libkcal-446662745.838.ics d4606f26cbccef73adb72fb944eb5645 libkcal-446662745.838 2005-08-14 16:09:52 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-04-11 00:00:00+12 2002-04-11 00:30:00+12 \N Event at 2002-04-11 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1336 13 \N \N 13 /user4/home/libkcal-232329512.1034.ics 4f95be919872cf4176d6d82b45245bea libkcal-232329512.1034 2005-08-14 16:09:54 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-10-31 20:30:00+13 2002-11-01 01:45:00+13 \N Event at 2002-10-31 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1337 13 \N \N 13 /user4/home/libkcal-388918578.878.ics 4b9e218dc5a3fe24889ee94734d05e9b libkcal-388918578.878 2005-08-14 16:09:55 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-11-29 05:00:00+13 2002-11-29 06:00:00+13 \N Event at 2002-11-29 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1338 13 \N \N 13 /user4/home/libkcal-100829294.645.ics b387886ee72b21ca75385e06d91833b1 libkcal-100829294.645 2005-08-14 16:09:56 2007-01-24 21:34:55 2007-04-17 19:53:23 2003-02-28 04:00:00+13 2003-02-28 05:00:00+13 \N Event at 2003-02-28 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1339 13 \N \N 13 /user4/home/libkcal-30418358.476.ics d31bff2906a592d4a5002a51edb4be4a libkcal-30418358.476 2005-08-14 16:09:57 2007-01-24 21:34:55 2007-04-17 19:53:23 2003-09-11 23:00:00+12 2003-09-12 09:30:00+12 \N Event at 2003-09-11 23:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1340 13 \N \N 13 /user4/home/libkcal-2074841085.871.ics 9b324292d7c27434303bcd0b31c08fa8 libkcal-2074841085.871 2005-08-14 16:09:51 2007-01-24 21:34:55 2007-04-17 19:53:23 2003-06-21 00:00:00+12 2003-06-22 00:00:00+12 \N Event at 2003-06-21 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1341 13 \N \N 13 /user4/home/libkcal-234836881.818.ics 03c43059449b513d43c0c0185d203500 libkcal-234836881.818 2005-08-14 16:09:54 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-10-24 01:00:00+13 2002-10-24 02:30:00+13 \N Event at 2002-10-24 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1342 13 \N \N 13 /user4/home/libkcal-1433402917.322.ics e2ce386d0a8bacbadfbb10c106b9f6cb libkcal-1433402917.322 2005-08-14 16:09:55 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-11-07 05:00:00+13 2002-11-07 06:00:00+13 \N Event at 2002-11-07 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1343 13 \N \N 13 /user4/home/libkcal-1046517717.351.ics d2d1a084600f52de772f5f0a5b45c089 libkcal-1046517717.351 2005-08-14 16:09:56 2007-01-24 21:34:55 2007-04-17 19:53:23 2002-12-13 05:00:00+13 2002-12-13 06:00:00+13 \N Event at 2002-12-13 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1344 13 \N \N 13 /user4/home/libkcal-415496577.724.ics 990f19d0014aead241c6ecbf4db6d55d libkcal-415496577.724 2005-08-14 16:09:56 2007-01-24 21:34:55 2007-04-17 19:53:23 2003-03-23 19:00:00+12 2003-03-24 05:00:00+12 \N Event at 2003-03-23 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1345 13 \N \N 13 /user4/home/libkcal-58675341.127.ics 8a7fa0a3d5eb415c93fdf6eddde8378b libkcal-58675341.127 2005-08-14 16:09:57 2007-01-24 21:34:56 2007-04-17 19:53:23 2003-06-21 00:30:00+12 2003-06-21 01:00:00+12 \N Event at 2003-06-21 00:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1346 13 \N \N 13 /user4/home/libkcal-1804357297.335.ics cd56e34b8d91b9ebd728c3799a22fba9 libkcal-1804357297.335 2005-08-14 16:09:57 2007-01-24 21:34:56 2007-04-17 19:53:23 2003-09-01 05:00:00+12 2003-09-01 05:30:00+12 \N Event at 2003-09-01 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1347 13 \N \N 13 /user4/home/KOrganizer-701998803.821.ics b489baca346504dbd3744fbf6d66c8bc KOrganizer-701998803.821 2007-01-24 21:25:56 2007-01-24 21:34:56 2007-04-17 19:53:23 2007-02-20 20:30:00+13 2007-02-21 02:00:00+13 \N Event at 2007-02-20 20:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1348 13 \N \N 13 /user4/home/libkcal-979542311.1045.ics 2325c515dba82062b8e56bab6a279deb libkcal-979542311.1045 2007-01-24 21:34:47 2007-01-24 21:34:56 2007-04-17 19:53:23 2007-01-23 01:30:00+13 2007-01-23 02:30:00+13 \N Event at 2007-01-23 01:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1349 13 \N \N 13 /user4/home/libkcal-1369467354.953.ics ce7ddb790ddc15a11825600da4a25f07 libkcal-1369467354.953 2005-08-14 16:09:51 2007-01-24 21:34:56 2007-04-17 19:53:23 2003-08-27 18:30:00+12 2003-08-27 23:30:00+12 \N Repeating event starting 2003-08-27 18:30:00 by FREQ=WEEKLY;UNTIL=20031105T073000Z;BYDAY=WE \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20031105T073000Z;BYDAY=WE \N \N \N \N \N 1350 13 \N \N 13 /user4/home/libkcal-862236580.979.ics 8a7c1f17321e3b683a48482fc4d0d7a1 libkcal-862236580.979 2005-08-14 16:09:51 2007-01-24 21:34:56 2007-04-17 19:53:23 2003-08-25 18:30:00+12 2003-08-25 23:30:00+12 \N Repeating event starting 2003-08-25 18:30:00 by FREQ=WEEKLY;UNTIL=20031103T073000Z;BYDAY=MO \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20031103T073000Z;BYDAY=MO \N \N \N \N \N 1351 13 \N \N 13 /user4/home/libkcal-814721216.280.ics 50f2d3d4ce435ee2dc32c898af8df3cb libkcal-814721216.280 2005-08-14 16:09:54 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-10-02 00:00:00+12 2002-10-02 02:00:00+12 \N Event at 2002-10-02 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1352 13 \N \N 13 /user4/home/libkcal-1672206794.625.ics a7e9c2856312f320b29902067758f7aa libkcal-1672206794.625 2005-08-14 16:09:54 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-10-11 19:30:00+13 2002-10-12 00:45:00+13 \N Event at 2002-10-11 19:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1353 13 \N \N 13 /user4/home/libkcal-936783626.511.ics 472d79cd7a27cd3d77008e8325346bf5 libkcal-936783626.511 2005-08-14 16:09:55 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-11-14 03:00:00+13 2002-11-14 04:00:00+13 \N Event at 2002-11-14 03:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1354 13 \N \N 13 /user4/home/libkcal-896129370.1018.ics f472e98b4623af5958ab1e8d3ae11302 libkcal-896129370.1018 2005-08-14 16:09:57 2007-01-24 21:34:56 2007-04-17 19:53:23 2004-06-10 19:30:00+12 2004-06-10 22:00:00+12 \N Event at 2004-06-10 19:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1355 13 \N \N 13 /user4/home/KOrganizer-1744515772.739.ics 32bc33ed4c5717d38e817a3670bcd327 KOrganizer-1744515772.739 2007-01-24 21:31:49 2007-01-24 21:34:56 2007-04-17 19:53:23 2007-04-12 18:30:00+12 2007-04-13 00:00:00+12 \N Event at 2007-04-12 18:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1356 13 \N \N 13 /user4/home/KOrganizer-102081386.996.ics 434d9f897bbd0fed7ebcb2e60b35097d KOrganizer-102081386.996 2005-08-14 19:58:01 2007-01-24 21:34:56 2007-04-17 19:53:23 2005-11-28 20:00:00+13 2005-11-29 02:00:00+13 \N Event at 2005-11-28 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1357 13 \N \N 13 /user4/home/libkcal-2105180231.827.ics 678920a2e38b27b971e847482ded8e7d libkcal-2105180231.827 2005-08-14 16:09:51 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-09-12 18:30:00+12 2002-09-12 23:45:00+12 \N Repeating event starting 2002-09-12 18:30:00 by FREQ=WEEKLY;UNTIL=20020919T063000Z;BYDAY=TH \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20020919T063000Z;BYDAY=TH \N \N \N \N \N 1358 13 \N \N 13 /user4/home/libkcal-340383776.896.ics fbaf2b6752f1f87b185f2e6cfdb6c877 libkcal-340383776.896 2005-08-14 16:09:53 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-09-18 02:30:00+12 2002-09-18 03:30:00+12 \N Event at 2002-09-18 02:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1359 13 \N \N 13 /user4/home/libkcal-769882015.651.ics e6b6e4cf41fbb01222c28a56ec12ff4b libkcal-769882015.651 2005-08-14 16:09:55 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-11-19 03:30:00+13 2002-11-19 05:30:00+13 \N Event at 2002-11-19 03:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1360 13 \N \N 13 /user4/home/libkcal-508293985.968.ics 3f73173b597c5d47aa484793a87392d9 libkcal-508293985.968 2005-08-14 16:09:56 2007-01-24 21:34:56 2007-04-17 19:53:23 2003-05-16 04:00:00+12 2003-05-16 09:00:00+12 \N Event at 2003-05-16 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1361 13 \N \N 13 /user4/home/libkcal-1741929750.230.ics 8526227b79e07d2390e6b11e1d07906e libkcal-1741929750.230 2005-08-14 16:09:57 2007-01-24 21:34:56 2007-04-17 19:53:23 2003-08-18 21:00:00+12 2003-08-18 22:00:00+12 \N Event at 2003-08-18 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1362 13 \N \N 13 /user4/home/libkcal-1006121415.248.ics dd89ac44089dfa174e86556f823cf2b7 libkcal-1006121415.248 2005-08-14 16:09:57 2007-01-24 21:34:56 2007-04-17 19:53:23 2003-08-19 19:00:00+12 2003-08-19 21:00:00+12 \N Event at 2003-08-19 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1363 13 \N \N 13 /user4/home/libkcal-703065367.617.ics c4f6f101881ae2b62356906cd52e4e28 libkcal-703065367.617 2005-08-14 16:09:57 2007-01-24 21:34:56 2007-04-17 19:53:23 2003-10-10 03:00:00+13 2003-10-10 04:30:00+13 \N Event at 2003-10-10 03:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1364 13 \N \N 13 /user4/home/libkcal-1949515845.984.ics 037a4b876b71b7916680abc7e908fcca libkcal-1949515845.984 2005-08-14 16:09:57 2007-01-24 21:34:56 2007-04-17 19:53:23 2004-02-21 02:00:00+13 2004-02-21 02:30:00+13 \N Event at 2004-02-21 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1365 13 \N \N 13 /user4/home/KOrganizer-1650816570.794.ics 0b814e2590f5ac7a7fe2d901a92a28ae KOrganizer-1650816570.794 2006-05-24 09:41:10 2007-01-24 21:34:56 2007-04-17 19:53:23 2006-06-16 22:00:00+12 2006-06-17 07:00:00+12 \N Event at 2006-06-16 22:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1366 13 \N \N 13 /user4/home/libkcal-849984507.747.ics ac4a80cacdf22681a14fb94b841465be libkcal-849984507.747 2005-08-14 16:09:51 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-12-05 20:30:00+13 2002-12-06 12:00:00+13 \N Repeating event starting 2002-12-05 20:30:00 by FREQ=DAILY;UNTIL=20021205T230000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20021205T230000Z \N \N \N \N \N 1367 13 \N \N 13 /user4/home/libkcal-552750671.427.ics 408bccf8bdec9fe2a277ba39b3d92d25 libkcal-552750671.427 2005-08-14 16:09:53 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-08-31 00:00:00+12 2002-08-31 03:00:00+12 \N Event at 2002-08-31 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1368 13 \N \N 13 /user4/home/libkcal-79234141.608.ics b0dee38c354789a48064ef1e016bbcd9 libkcal-79234141.608 2005-08-14 16:09:54 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-10-11 04:30:00+13 2002-10-11 05:30:00+13 \N Event at 2002-10-11 04:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1369 13 \N \N 13 /user4/home/libkcal-164963697.408.ics 798c72dd68778b62ac7297d618764dca libkcal-164963697.408 2005-08-14 16:09:55 2007-01-24 21:34:56 2007-04-17 19:53:23 2002-11-12 02:15:00+13 2002-11-12 03:15:00+13 \N Event at 2002-11-12 02:15:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1370 13 \N \N 13 /user4/home/libkcal-1846504379.590.ics 3876aba7cee2113529e82165136f600f libkcal-1846504379.590 2005-08-14 16:09:55 2007-01-24 21:34:57 2007-04-17 19:53:23 2002-11-15 20:30:00+13 2002-11-16 01:45:00+13 \N Event at 2002-11-15 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1371 13 \N \N 13 /user4/home/libkcal-159554538.440.ics 23b1eca9d70702353a49afc3ec327a7d libkcal-159554538.440 2005-08-14 16:09:57 2007-01-24 21:34:57 2007-04-17 19:53:23 2003-09-08 06:00:00+12 2003-09-08 08:00:00+12 \N Event at 2003-09-08 06:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1372 13 \N \N 13 /user4/home/libkcal-585548585.458.ics 4dd07b865c8f484beae5d527727f2ef7 libkcal-585548585.458 2005-08-14 16:09:57 2007-01-24 21:34:57 2007-04-17 19:53:23 2003-09-09 00:00:00+12 2003-09-09 01:00:00+12 \N Event at 2003-09-09 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1373 13 \N \N 13 /user4/home/libkcal-1099622629.520.ics 46519348d73132f485830308705f79b7 libkcal-1099622629.520 2005-08-14 16:09:57 2007-01-24 21:34:57 2007-04-17 19:53:23 2003-09-23 00:00:00+12 2003-09-23 00:30:00+12 \N Event at 2003-09-23 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1374 13 \N \N 13 /user4/home/KOrganizer-591358863.211.ics 61ed51993e115b86016232acb9f189cb KOrganizer-591358863.211 2007-01-24 21:24:31 2007-01-24 21:34:57 2007-04-17 19:53:23 2007-02-01 20:30:00+13 2007-02-02 02:00:00+13 \N Event at 2007-02-01 20:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1375 13 \N \N 13 /user4/home/KOrganizer-129716648.746.ics deb73f8fc0f1a2293eabb454c09f832a KOrganizer-129716648.746 2007-01-24 21:26:42 2007-01-24 21:34:57 2007-04-17 19:53:23 2007-02-27 21:00:00+13 2007-02-28 02:00:00+13 \N Event at 2007-02-27 21:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1376 13 \N \N 13 /user4/home/KOrganizer-1459780733.285.ics 72d278d5e4bd7a56dec0ffbaf58002ad KOrganizer-1459780733.285 2007-01-24 21:28:06 2007-01-24 21:34:57 2007-04-17 19:53:23 2007-03-06 20:30:00+13 2007-03-07 02:00:00+13 \N Event at 2007-03-06 20:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1377 13 \N \N 13 /user4/home/libkcal-1471533825.612.ics a4355d7a336dc5e51cc0cc1efaf5b732 libkcal-1471533825.612 2007-02-21 20:00:42 2007-02-21 20:00:42 2007-04-17 19:53:23 2007-03-07 02:00:00+13 2007-03-07 04:00:00+13 \N Event at 2007-03-07 02:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1378 13 \N \N 13 /user4/home/KOrganizer-1869628571.468.ics 2454ed96899c8d2c7668d433d3aaa5be KOrganizer-1869628571.468 2005-08-14 20:00:14 2007-01-24 21:34:57 2007-04-17 19:53:23 2005-12-06 20:00:00+13 2005-12-07 02:00:00+13 \N Event at 2005-12-06 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1379 13 \N \N 13 /user4/home/KOrganizer-2016497045.275.ics d8a95f149f315c10748381bc369cab90 KOrganizer-2016497045.275 2005-08-10 20:24:32 2007-01-24 21:34:57 2007-04-17 19:53:23 2005-08-15 21:00:00+12 2005-08-15 23:00:00+12 \N Event at 2005-08-15 21:00:00 Lærerværelset \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1380 13 \N \N 13 /user4/home/libkcal-2039685585.970.ics 5e521088189ac0a4a4bf1e283a303e22 libkcal-2039685585.970 2005-08-14 16:09:51 2007-01-24 21:34:57 2007-04-17 19:53:23 2003-10-22 04:00:00+13 2003-10-22 07:30:00+13 \N Repeating event starting 2003-10-22 04:00:00 by FREQ=WEEKLY;UNTIL=20031216T160000Z;BYDAY=TU \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20031216T160000Z;BYDAY=TU \N \N \N \N \N 1381 13 \N \N 13 /user4/home/libkcal-633146427.453.ics 986ac11a665d56ffe7e92ec89d6047a3 libkcal-633146427.453 2005-08-14 16:09:52 2007-01-24 21:34:57 2007-04-17 19:53:23 2002-02-21 00:30:00+13 2002-02-21 04:00:00+13 \N Event at 2002-02-21 00:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1382 13 \N \N 13 /user4/home/libkcal-2117633683.908.ics bd1bc833f74dd0c44de0f612386b4787 libkcal-2117633683.908 2005-08-14 16:09:52 2007-01-24 21:34:57 2007-04-17 19:53:23 2002-04-24 00:00:00+12 2002-04-24 00:30:00+12 \N Event at 2002-04-24 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1383 13 \N \N 13 /user4/home/libkcal-265144908.324.ics 2b03559e5569eeeb6e17081a33140405 libkcal-265144908.324 2005-08-14 16:09:53 2007-01-24 21:34:57 2007-04-17 19:53:23 2002-08-29 18:30:00+12 2002-08-29 23:45:00+12 \N Event at 2002-08-29 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1384 13 \N \N 13 /user4/home/libkcal-697479598.608.ics 77e14b17cc427d990845b25c3812d59f libkcal-697479598.608 2005-08-14 16:09:56 2007-01-24 21:34:57 2007-04-17 19:53:23 2003-02-05 21:00:00+13 2003-02-05 22:00:00+13 \N Event at 2003-02-05 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1385 13 \N \N 13 /user4/home/libkcal-1065457646.865.ics 913cb4d8fb6f0423bbc7bb38ea018b48 libkcal-1065457646.865 2005-08-14 16:09:56 2007-01-24 21:34:57 2007-04-17 19:53:23 2003-05-08 02:00:00+12 2003-05-08 02:45:00+12 \N Event at 2003-05-08 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1386 13 \N \N 13 /user4/home/libkcal-1571145881.916.ics aff5281889386aca48f078813cd4aa88 libkcal-1571145881.916 2005-08-14 16:09:56 2007-01-24 21:34:57 2007-04-17 19:53:23 2003-05-14 00:00:00+12 2003-05-14 02:00:00+12 \N Event at 2003-05-14 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1387 13 \N \N 13 /user4/home/libkcal-719251466.178.ics 7976520b2f9705ec27dbf7e0bfc95e30 libkcal-719251466.178 2005-08-14 16:09:57 2007-01-24 21:34:57 2007-04-17 19:53:23 2003-07-26 18:00:00+12 2003-07-27 04:00:00+12 \N Event at 2003-07-26 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1388 13 \N \N 13 /user4/home/KOrganizer-2081735588.967.ics 755555cf3747dd5e706dfbc9febb1257 KOrganizer-2081735588.967 2006-02-27 11:01:49 2007-01-24 21:34:57 2007-04-17 19:53:23 2006-05-11 18:00:00+12 2006-05-14 10:00:00+12 \N Repeating event starting 2006-05-11 18:00:00 by FREQ=DAILY;UNTIL=20060514T060000Z \N \N 5 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20060514T060000Z \N \N \N \N \N 1389 13 \N \N 13 /user4/home/KOrganizer-2123856648.160.ics aee916bbb510aa907f5e5345ed3a7863 KOrganizer-2123856648.160 2005-08-14 19:47:46 2007-01-24 21:34:57 2007-04-17 19:53:23 2005-09-30 18:00:00+12 2005-10-01 02:00:00+12 \N Event at 2005-09-30 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1390 13 \N \N 13 /user4/home/libkcal-1653920106.332.ics 441873e53468362756da910cdaeee4bc libkcal-1653920106.332 2005-08-14 16:09:54 2007-01-24 21:34:57 2007-04-17 19:53:23 2002-10-03 02:30:00+12 2002-10-03 04:00:00+12 \N Event at 2002-10-03 02:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1391 13 \N \N 13 /user4/home/libkcal-1681129373.546.ics fb8270da122f7bb5ebcb0b01b10cc0ec libkcal-1681129373.546 2005-08-14 16:09:55 2007-01-24 21:34:57 2007-04-17 19:53:23 2002-11-14 05:00:00+13 2002-11-14 06:00:00+13 \N Event at 2002-11-14 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1392 13 \N \N 13 /user4/home/libkcal-1403092089.280.ics 574335f1c548bb96160114a866e15206 libkcal-1403092089.280 2005-08-14 16:09:56 2007-01-24 21:34:57 2007-04-17 19:53:23 2002-12-11 04:00:00+13 2002-12-11 05:00:00+13 \N Event at 2002-12-11 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1393 13 \N \N 13 /user4/home/libkcal-1712337319.1054.ics 18ce21f90d246227479b222ec67dfe3e libkcal-1712337319.1054 2005-08-14 16:09:57 2007-01-24 21:34:58 2007-04-17 19:53:23 2004-06-28 18:30:00+12 2004-06-28 23:00:00+12 \N Event at 2004-06-28 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1394 13 \N \N 13 /user4/home/KOrganizer-490134801.711.ics 255b5099355c7a2d7e8ce841070663c7 KOrganizer-490134801.711 2005-08-14 19:44:33 2007-01-24 21:34:58 2007-04-17 19:53:23 2005-09-20 18:00:00+12 2005-09-21 00:00:00+12 \N Event at 2005-09-20 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1395 13 \N \N 13 /user4/home/libkcal-36373198.842.ics c8f81cefcca9f9c065e7d2ac62627c64 libkcal-36373198.842 2005-08-14 16:09:55 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-11-28 06:30:00+13 2002-11-28 09:00:00+13 \N Event at 2002-11-28 06:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1396 13 \N \N 13 /user4/home/libkcal-1780538774.1017.ics 16be17d41435f27b644639e416e23066 libkcal-1780538774.1017 2005-08-14 16:09:55 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-12-03 04:10:00+13 2002-12-03 05:00:00+13 \N Event at 2002-12-03 04:10:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1397 13 \N \N 13 /user4/home/libkcal-872967326.863.ics 2e2c312478112b5c5985477c95a9425a libkcal-872967326.863 2005-08-14 16:09:57 2007-01-24 21:34:58 2007-04-17 19:53:23 2003-11-29 02:00:00+13 2003-11-29 03:30:00+13 \N Event at 2003-11-29 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1398 13 \N \N 13 /user4/home/KOrganizer-702492225.521.ics 486949f000d02fcccdda9b6b103460b4 KOrganizer-702492225.521 2007-01-24 21:28:48 2007-01-24 21:34:58 2007-04-17 19:53:23 2007-03-13 20:30:00+13 2007-03-14 02:00:00+13 \N Event at 2007-03-13 20:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1399 13 \N \N 13 /user4/home/libkcal-1595089298.730.ics 5c31cedbead966abb2d6460630585f2b libkcal-1595089298.730 2005-08-14 16:09:51 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-12-03 20:30:00+13 2002-12-04 12:00:00+13 \N Repeating event starting 2002-12-03 20:30:00 by FREQ=DAILY;UNTIL=20021203T230000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20021203T230000Z \N \N \N \N \N 1400 13 \N \N 13 /user4/home/libkcal-917472477.1048.ics 6d929714710621190aeb44458c2869a5 libkcal-917472477.1048 2005-08-14 16:09:52 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-08-21 19:00:00+12 2002-08-21 20:00:00+12 \N Event at 2002-08-21 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1401 13 \N \N 13 /user4/home/libkcal-1750177958.774.ics 273437a0c9b5e6a91b298ebadf0fcc11 libkcal-1750177958.774 2005-08-14 16:09:53 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-09-12 02:30:00+12 2002-09-12 03:30:00+12 \N Event at 2002-09-12 02:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1402 13 \N \N 13 /user4/home/libkcal-379281985.366.ics 65df031f495d5bc5b1022bf1b623d085 libkcal-379281985.366 2005-08-14 16:09:54 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-10-04 18:30:00+12 2002-10-04 23:45:00+12 \N Event at 2002-10-04 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1403 13 \N \N 13 /user4/home/libkcal-209808238.453.ics 716f98cca3fe4ccefbd21071db76b797 libkcal-209808238.453 2005-08-14 16:09:54 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-10-08 01:00:00+13 2002-10-08 02:30:00+13 \N Event at 2002-10-08 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1404 13 \N \N 13 /user4/home/libkcal-253794414.697.ics 16b8e3b8c69a85cde56bbf8bed05d058 libkcal-253794414.697 2005-08-14 16:09:56 2007-01-24 21:34:58 2007-04-17 19:53:23 2003-03-21 04:00:00+12 2003-03-21 10:00:00+12 \N Event at 2003-03-21 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1405 13 \N \N 13 /user4/home/libkcal-425860506.92.ics 53220b84e4feec589f2046cbf2052bea libkcal-425860506.92 2005-08-14 16:09:57 2007-01-24 21:34:58 2007-04-17 19:53:23 2003-06-04 04:00:00+12 2003-06-04 08:00:00+12 \N Event at 2003-06-04 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1406 13 \N \N 13 /user4/home/libkcal-1317643479.828.ics 404cd0642c6d33875a3b0a0c11790193 libkcal-1317643479.828 2005-08-14 16:09:57 2007-01-24 21:34:58 2007-04-17 19:53:23 2003-11-10 21:00:00+13 2003-11-11 06:00:00+13 \N Event at 2003-11-10 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1407 13 \N \N 13 /user4/home/libkcal-937139402.898.ics 04481a757d830238f5ded08951a0460c libkcal-937139402.898 2005-08-14 16:09:57 2007-01-24 21:34:58 2007-04-17 19:53:23 2003-12-13 00:00:00+13 2003-12-13 10:00:00+13 \N Event at 2003-12-13 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1408 13 \N \N 13 /user4/home/libkcal-1932174917.273.ics 4d8ed9021e172d40b6a549d26fc995c6 libkcal-1932174917.273 2005-08-14 16:09:58 2007-01-24 21:34:58 2007-04-17 19:53:23 2005-01-19 21:30:00+13 2005-01-19 22:00:00+13 \N Event at 2005-01-19 21:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1409 13 \N \N 13 /user4/home/KOrganizer-1395173834.699.ics 033e0613c8522eade0d1133b26359fec KOrganizer-1395173834.699 2007-01-24 21:33:05 2007-01-24 21:34:58 2007-04-17 19:53:23 2007-05-03 18:30:00+12 2007-05-04 00:00:00+12 \N Event at 2007-05-03 18:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1410 13 \N \N 13 /user4/home/KOrganizer-1730801416.165.ics 68337bb757bc26d61eadadb99b61ee1f KOrganizer-1730801416.165 2005-08-14 19:58:42 2007-01-24 21:34:58 2007-04-17 19:53:23 2005-11-30 20:00:00+13 2005-12-01 02:00:00+13 \N Event at 2005-11-30 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1411 13 \N \N 13 /user4/home/KOrganizer-406853360.634.ics 1d9ebef3b42f3adae77b1bb61dbf0c81 KOrganizer-406853360.634 2005-08-14 19:43:54 2007-01-24 21:34:58 2007-04-17 19:53:23 2005-09-02 18:00:00+12 2005-09-03 02:00:00+12 \N Event at 2005-09-02 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1412 13 \N \N 13 /user4/home/libkcal-376020341.793.ics 401a32389caa52891fbc7b3919ea9a1e libkcal-376020341.793 2005-08-14 16:09:51 2007-01-24 21:34:58 2007-04-17 19:53:23 2004-06-02 18:00:00+12 2004-06-03 10:00:00+12 \N Repeating event starting 2004-06-02 18:00:00 by FREQ=DAILY;UNTIL=20040602T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20040602T220000Z \N \N \N \N \N 1413 13 \N \N 13 /user4/home/libkcal-1989686502.594.ics 18086515d61a5fc33d9c68a0285001e2 libkcal-1989686502.594 2005-08-14 16:09:52 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-03-02 05:00:00+13 2002-03-02 10:00:00+13 \N Event at 2002-03-02 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1414 13 \N \N 13 /user4/home/libkcal-499949909.792.ics 910732cbec997d33743cab5a02883e45 libkcal-499949909.792 2005-08-14 16:09:53 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-09-13 04:00:00+12 2002-09-13 05:00:00+12 \N Event at 2002-09-13 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1415 13 \N \N 13 /user4/home/libkcal-579646873.861.ics 1e9107760f35313a8a39c999df645611 libkcal-579646873.861 2005-08-14 16:09:53 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-09-17 18:30:00+12 2002-09-17 23:45:00+12 \N Event at 2002-09-17 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1416 13 \N \N 13 /user4/home/libkcal-628821013.246.ics a8335985a0023c6368b8dbb4fd69ee7f libkcal-628821013.246 2005-08-14 16:09:54 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-10-01 18:30:00+12 2002-10-01 23:45:00+12 \N Event at 2002-10-01 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1417 13 \N \N 13 /user4/home/libkcal-1595290417.661.ics 71c7deb64c3e246d6921ebd46ab214a2 libkcal-1595290417.661 2005-08-14 16:09:54 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-10-14 21:00:00+13 2002-10-14 22:00:00+13 \N Event at 2002-10-14 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1418 13 \N \N 13 /user4/home/libkcal-1783404419.679.ics 98cc31e88775d513cfdf291ab0ac5a10 libkcal-1783404419.679 2005-08-14 16:09:54 2007-01-24 21:34:58 2007-04-17 19:53:23 2002-10-21 19:30:00+13 2002-10-22 00:45:00+13 \N Event at 2002-10-21 19:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1419 13 \N \N 13 /user4/home/libkcal-199912874.835.ics 2972be82fdc6aa8e7d16688411ba8c17 libkcal-199912874.835 2005-08-14 16:09:54 2007-01-24 21:34:59 2007-04-17 19:53:23 2002-10-24 03:30:00+13 2002-10-24 05:00:00+13 \N Event at 2002-10-24 03:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1420 13 \N \N 13 /user4/home/libkcal-125820789.94.ics f1a2fa6e3a868a8d8093b5946cb7439a libkcal-125820789.94 2007-02-21 20:00:42 2007-02-21 20:00:42 2007-04-17 19:53:23 2007-03-06 02:00:00+13 2007-03-06 04:00:00+13 \N Event at 2007-03-06 02:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1421 13 \N \N 13 /user4/home/libkcal-928524085.416.ics 53b4b02b96f8a6e34b5d9f553206b036 libkcal-928524085.416 2005-08-14 16:09:52 2007-01-24 21:34:59 2007-04-17 19:53:23 2002-02-11 23:00:00+13 2002-02-12 00:30:00+13 \N Event at 2002-02-11 23:00:00 \N Something or other else 3 PUBLIC OPAQUE \N \N \N \N \N \N 1422 13 \N \N 13 /user4/home/libkcal-2044288932.529.ics a9a2c848f2d1c9d5459ba99c0bae2f75 libkcal-2044288932.529 2005-08-14 16:09:53 2007-01-24 21:34:59 2007-04-17 19:53:23 2002-09-05 02:30:00+12 2002-09-05 03:30:00+12 \N Event at 2002-09-05 02:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1423 13 \N \N 13 /user4/home/libkcal-1738019068.315.ics 44da48692311080699a31d153bbaae18 libkcal-1738019068.315 2005-08-14 16:09:56 2007-01-24 21:34:59 2007-04-17 19:53:23 2002-12-12 02:00:00+13 2002-12-12 04:00:00+13 \N Event at 2002-12-12 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1424 13 \N \N 13 /user4/home/libkcal-1755621387.662.ics ce5ddd69f06efb5ccd16b217b0e07e19 libkcal-1755621387.662 2005-08-14 16:09:56 2007-01-24 21:34:59 2007-04-17 19:53:23 2003-03-01 20:00:00+13 2003-03-02 06:00:00+13 \N Event at 2003-03-01 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1425 13 \N \N 13 /user4/home/libkcal-2129031911.882.ics 1e989a3718c0ad52bc01f000ee473909 libkcal-2129031911.882 2005-08-14 16:09:56 2007-01-24 21:34:59 2007-04-17 19:53:23 2003-05-08 03:00:00+12 2003-05-08 07:00:00+12 \N Event at 2003-05-08 03:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1426 13 \N \N 13 /user4/home/libkcal-957569344.845.ics 2c8de5233d8d81fd58e51c256b8701ce libkcal-957569344.845 2005-08-14 16:09:57 2007-01-24 21:34:59 2007-04-17 19:53:23 2003-11-13 06:00:00+13 2003-11-13 09:30:00+13 \N Event at 2003-11-13 06:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1427 13 \N \N 13 /user4/home/KOrganizer-236679345.661.ics f926e02466503b78a4f2ed3b7aacfabb KOrganizer-236679345.661 2007-02-17 22:54:14 2007-02-21 20:00:44 2007-04-17 19:53:23 2007-03-07 20:30:00+13 2007-03-08 02:00:00+13 \N Repeating event starting 2007-03-07 20:30:00 by FREQ=WEEKLY;COUNT=2;BYDAY=WE \N \N 5 PUBLIC OPAQUE FREQ=WEEKLY;COUNT=2;BYDAY=WE \N \N \N \N \N 1428 13 \N \N 13 /user4/home/KOrganizer-1772890621.111.ics b65ee88dc57488dd5f2ac053f1866236 KOrganizer-1772890621.111 2005-08-14 19:47:19 2007-01-24 21:34:59 2007-04-17 19:53:23 2005-09-29 18:00:00+12 2005-09-30 02:00:00+12 \N Event at 2005-09-29 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1429 13 \N \N 13 /user4/home/libkcal-1823278872.713.ics 917a825f3cbbd6c7ed90f737b93f97c4 libkcal-1823278872.713 2005-08-14 16:09:54 2007-01-24 21:34:59 2007-04-17 19:53:23 2002-10-22 01:00:00+13 2002-10-22 02:00:00+13 \N Event at 2002-10-22 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1430 13 \N \N 13 /user4/home/libkcal-1656896074.730.ics 4262ea91ffd946e6d190b7c5c5c8214a libkcal-1656896074.730 2005-08-14 16:09:54 2007-01-24 21:34:59 2007-04-17 19:53:23 2002-10-22 04:00:00+13 2002-10-22 05:00:00+13 \N Event at 2002-10-22 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1431 13 \N \N 13 /user4/home/libkcal-1365613586.755.ics 197a079349c7a7c5590f61d62df17e32 libkcal-1365613586.755 2005-08-14 16:09:55 2007-01-24 21:34:59 2007-04-17 19:53:23 2002-11-22 20:30:00+13 2002-11-23 01:45:00+13 \N Event at 2002-11-22 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1432 13 \N \N 13 /user4/home/libkcal-857676503.741.ics e737cfa636bf7c1d264f0e5d6e70a280 libkcal-857676503.741 2005-08-14 16:09:56 2007-01-24 21:34:59 2007-04-17 19:53:23 2003-04-25 05:30:00+12 2003-04-25 07:30:00+12 \N Event at 2003-04-25 05:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1433 13 \N \N 13 /user4/home/libkcal-646296168.758.ics 16e9362b76fc7f7dad01afc3a197b5ee libkcal-646296168.758 2005-08-14 16:09:56 2007-01-24 21:34:59 2007-04-17 19:53:23 2003-04-26 18:00:00+12 2003-04-27 04:00:00+12 \N Event at 2003-04-26 18:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1434 13 \N \N 13 /user4/home/libkcal-1069926005.477.ics e16ad1c94dda8caf522fb57acf4ea3a9 libkcal-1069926005.477 2007-01-17 07:44:13 2007-01-24 21:34:59 2007-04-17 19:53:23 2007-01-22 20:30:00+13 2007-01-22 23:00:00+13 \N Event at 2007-01-22 20:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1435 13 \N \N 13 /user4/home/KOrganizer-1604341089.409.ics 58d4229726ba16b1b0db7a976ec61ef5 KOrganizer-1604341089.409 2007-01-24 21:25:01 2007-01-24 21:34:59 2007-04-17 19:53:23 2007-02-06 20:30:00+13 2007-02-07 02:00:00+13 \N Event at 2007-02-06 20:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1436 13 \N \N 13 /user4/home/KOrganizer-226448206.799.ics 029c9c3ad2387a269690d803d606167e KOrganizer-226448206.799 2005-08-14 19:53:09 2007-01-24 21:34:59 2007-04-17 19:53:23 2005-11-11 20:00:00+13 2005-11-12 04:00:00+13 \N Event at 2005-11-11 20:00:00 \N Review 3 PUBLIC OPAQUE \N \N \N \N \N \N 1437 13 \N \N 13 /user4/home/KOrganizer-534221956.209.ics 1ad34075157de4c9dafe107f2f868d69 KOrganizer-534221956.209 2005-08-14 19:52:35 2007-01-24 21:34:59 2007-04-17 19:53:23 2005-11-05 00:00:00+13 2005-11-05 04:00:00+13 \N Event at 2005-11-05 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1438 13 \N \N 13 /user4/home/libkcal-2074181858.934.ics 2ca2894ea623256fab697688a5aace36 libkcal-2074181858.934 2005-08-14 16:09:51 2007-01-24 21:34:59 2007-04-17 19:53:23 2003-09-18 18:00:00+12 2003-09-19 10:00:00+12 \N Repeating event starting 2003-09-18 18:00:00 by FREQ=DAILY;UNTIL=20030918T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20030918T220000Z \N \N \N \N \N 1439 13 \N \N 13 /user4/home/libkcal-1135103303.297.ics 9a1ece093f437c7714a23c8a3523aeff libkcal-1135103303.297 2005-08-14 16:09:54 2007-01-24 21:34:59 2007-04-17 19:53:23 2002-10-02 18:30:00+12 2002-10-02 23:45:00+12 \N Event at 2002-10-02 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1440 13 \N \N 13 /user4/home/libkcal-387454150.1052.ics 937a3cca3f9ed0ba1c7f524f6a23712e libkcal-387454150.1052 2005-08-14 16:09:55 2007-01-24 21:34:59 2007-04-17 19:53:23 2002-12-03 05:30:00+13 2002-12-03 06:30:00+13 \N Event at 2002-12-03 05:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1441 13 \N \N 13 /user4/home/libkcal-1595454741.811.ics 96e4a82337a7f078a81de8200d8ede04 libkcal-1595454741.811 2005-08-14 16:09:56 2007-01-24 21:34:59 2007-04-17 19:53:23 2003-05-02 21:00:00+12 2003-05-02 22:00:00+12 \N Event at 2003-05-02 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1442 13 \N \N 13 /user4/home/libkcal-218275606.213.ics 33a64ca5ce42fa5dc806e8d84eb94c16 libkcal-218275606.213 2005-08-14 16:09:57 2007-01-24 21:34:59 2007-04-17 19:53:23 2003-08-11 19:00:00+12 2003-08-11 21:00:00+12 \N Event at 2003-08-11 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1443 13 \N \N 13 /user4/home/libkcal-1579630913.793.ics aee66e06f2f4ea01a2c5b18b93ca61b8 libkcal-1579630913.793 2005-08-14 16:09:57 2007-01-24 21:34:59 2007-04-17 19:53:23 2003-11-05 00:00:00+13 2003-11-05 00:30:00+13 \N Event at 2003-11-05 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1444 13 \N \N 13 /user4/home/KOrganizer-370516235.812.ics 02b99b82e741fe8d8753994748e2b96a KOrganizer-370516235.812 2007-01-24 21:30:50 2007-01-24 21:34:59 2007-04-17 19:53:23 2007-03-29 18:30:00+12 2007-03-30 00:00:00+12 \N Event at 2007-03-29 18:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1445 13 \N \N 13 /user4/home/KOrganizer-1027531016.315.ics 23f64a02141f6cb8a4a8cde1a18c2152 KOrganizer-1027531016.315 2005-08-14 19:46:20 2007-01-24 21:34:59 2007-04-17 19:53:23 2005-09-26 18:00:00+12 2005-09-27 02:00:00+12 \N Event at 2005-09-26 18:00:00 \N Review 3 PUBLIC OPAQUE \N \N \N \N \N \N 1446 13 \N \N 13 /user4/home/KOrganizer-1254693944.298.ics 6d4dd633f151123c96e76f54119b33ae KOrganizer-1254693944.298 2005-08-14 19:41:17 2007-01-24 21:35:00 2007-04-17 19:53:23 2005-08-31 18:00:00+12 2005-08-31 22:00:00+12 \N Repeating event starting 2005-08-31 18:00:00 by FREQ=WEEKLY;UNTIL=20051109T070000Z;BYDAY=WE kl-111 \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20051109T070000Z;BYDAY=WE \N \N \N \N \N 1447 13 \N \N 13 /user4/home/libkcal-363124201.106.ics 84829146efbfa6eab3f79bd32bb90f60 libkcal-363124201.106 2005-08-14 16:09:52 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-10-28 20:30:00+13 2002-10-29 02:15:00+13 \N Repeating event starting 2002-10-28 20:30:00 by FREQ=WEEKLY;UNTIL=20021202T073000Z;BYDAY=MO \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20021202T073000Z;BYDAY=MO \N \N \N \N \N 1448 13 \N \N 13 /user4/home/libkcal-774247267.873.ics 8097773effde524bd74ac757da3398d4 libkcal-774247267.873 2005-08-14 16:09:52 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-04-22 23:00:00+12 2002-04-23 01:30:00+12 \N Event at 2002-04-22 23:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1449 13 \N \N 13 /user4/home/libkcal-99027505.748.ics c5884e5a5fcf3f2b68944e29f817e403 libkcal-99027505.748 2005-08-14 16:09:54 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-10-23 05:00:00+13 2002-10-23 06:30:00+13 \N Event at 2002-10-23 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1450 13 \N \N 13 /user4/home/libkcal-845126012.339.ics 0bc31a7f351d5f06012c515d8dbd34cf libkcal-845126012.339 2005-08-14 16:09:55 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-11-07 06:00:00+13 2002-11-07 07:00:00+13 \N Event at 2002-11-07 06:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1451 13 \N \N 13 /user4/home/libkcal-1682153210.364.ics 9eea2486c95df504b014ee85c7ecd9d0 libkcal-1682153210.364 2005-08-14 16:09:55 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-11-07 20:30:00+13 2002-11-08 01:45:00+13 \N Event at 2002-11-07 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1452 13 \N \N 13 /user4/home/libkcal-1912083550.790.ics 9fa03465b232340328a5c32ac1be84cf libkcal-1912083550.790 2005-08-14 16:09:55 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-11-23 03:15:00+13 2002-11-23 04:15:00+13 \N Event at 2002-11-23 03:15:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1453 13 \N \N 13 /user4/home/libkcal-2122625345.144.ics a187588b52a71f978f1505e05f6105f7 libkcal-2122625345.144 2005-08-14 16:09:57 2007-01-24 21:35:00 2007-04-17 19:53:23 2003-07-06 04:00:00+12 2003-07-06 09:30:00+12 \N Event at 2003-07-06 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1454 13 \N \N 13 /user4/home/libkcal-1391827491.880.ics 01316680894442a832d3087b40b09849 libkcal-1391827491.880 2005-08-14 16:09:57 2007-01-24 21:35:00 2007-04-17 19:53:23 2003-12-03 02:00:00+13 2003-12-03 03:00:00+13 \N Event at 2003-12-03 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1455 13 \N \N 13 /user4/home/libkcal-557438505.213.ics 27053f3d7db84cdfbc12ccc52447f79b libkcal-557438505.213 2005-08-14 16:09:58 2007-01-24 21:35:00 2007-04-17 19:53:23 2004-10-02 02:00:00+12 2004-10-02 03:00:00+12 \N Event at 2004-10-02 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1456 13 \N \N 13 /user4/home/libkcal-1893863902.247.ics 63132eef275493bc83d46976373d7009 libkcal-1893863902.247 2005-08-14 16:09:58 2007-01-24 21:35:00 2007-04-17 19:53:23 2005-01-10 23:30:00+13 2005-01-11 00:00:00+13 \N Event at 2005-01-10 23:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1457 13 \N \N 13 /user4/home/KOrganizer-1750028846.678.ics 1b84939d84b972f20c825c15c07a7e0c KOrganizer-1750028846.678 2005-08-14 19:58:23 2007-01-24 21:35:00 2007-04-17 19:53:23 2005-11-29 20:00:00+13 2005-11-30 02:00:00+13 \N Event at 2005-11-29 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1458 13 \N \N 13 /user4/home/KOrganizer-531478213.970.ics 71b43f5506cb041ad82cb790855f9839 KOrganizer-531478213.970 2005-08-14 19:51:47 2007-01-24 21:35:00 2007-04-17 19:53:23 2005-10-31 20:00:00+13 2005-11-01 04:00:00+13 \N Event at 2005-10-31 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1459 13 \N \N 13 /user4/home/libkcal-731296952.678.ics 91bb484a03e127bdcb536f98967a3319 libkcal-731296952.678 2005-08-14 16:09:51 2007-01-24 21:35:00 2007-04-17 19:53:23 2003-02-10 20:30:00+13 2003-02-11 01:45:00+13 \N Repeating event starting 2003-02-10 20:30:00 by FREQ=WEEKLY;UNTIL=20030317T073000Z;BYDAY=MO \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20030317T073000Z;BYDAY=MO \N \N \N \N \N 1460 13 \N \N 13 /user4/home/libkcal-998404549.722.ics 7c7ca20b0e5b5425a405878a92a9c2de libkcal-998404549.722 2005-08-14 16:09:51 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-12-12 20:30:00+13 2002-12-13 12:00:00+13 \N Repeating event starting 2002-12-12 20:30:00 by FREQ=DAILY;UNTIL=20021212T230000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20021212T230000Z \N \N \N \N \N 1461 13 \N \N 13 /user4/home/libkcal-1290881671.256.ics ef76173100876bec3cb421fd168eff09 libkcal-1290881671.256 2005-08-14 16:09:53 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-08-28 18:30:00+12 2002-08-28 23:45:00+12 \N Event at 2002-08-28 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1462 13 \N \N 13 /user4/home/libkcal-434321803.401.ics a06e644f07b54bd9f3886256112d1bf0 libkcal-434321803.401 2005-08-14 16:09:54 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-10-05 03:00:00+12 2002-10-05 04:00:00+12 \N Event at 2002-10-05 03:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1463 13 \N \N 13 /user4/home/libkcal-1366801637.899.ics 41f52d8b2168892cdf4f6808301fb203 libkcal-1366801637.899 2005-08-14 16:09:56 2007-01-24 21:35:00 2007-04-17 19:53:23 2003-05-09 18:30:00+12 2003-05-09 23:00:00+12 \N Event at 2003-05-09 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1464 13 \N \N 13 /user4/home/libkcal-1775039090.967.ics 08e33f7b8d666298207352f1fd49a66e libkcal-1775039090.967 2005-08-14 16:09:57 2007-01-24 21:35:00 2007-04-17 19:53:23 2004-02-06 02:00:00+13 2004-02-06 03:00:00+13 \N Event at 2004-02-06 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1465 13 \N \N 13 /user4/home/libkcal-657456592.1036.ics a1e3a1b7c0934b55d94fa16f49a77b91 libkcal-657456592.1036 2005-08-14 16:09:57 2007-01-24 21:35:00 2007-04-17 19:53:23 2004-06-19 04:00:00+12 2004-06-19 09:00:00+12 \N Event at 2004-06-19 04:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1466 13 \N \N 13 /user4/home/KOrganizer-1964974121.664.ics d658f078e8af63523ed9b138deedcfe0 KOrganizer-1964974121.664 2007-01-24 21:30:32 2007-01-24 21:35:00 2007-04-17 19:53:23 2007-03-27 18:30:00+12 2007-03-28 00:00:00+12 \N Event at 2007-03-27 18:30:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1467 13 \N \N 13 /user4/home/libkcal-1536422870.705.ics 1813710860c7e93e62bd0614d0dc07f4 libkcal-1536422870.705 2007-02-21 20:00:43 2007-02-21 20:00:43 2007-04-17 19:53:23 2007-04-20 00:00:00+12 2007-04-20 02:00:00+12 \N Event at 2007-04-20 00:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1468 13 \N \N 13 /user4/home/KOrganizer-1313050303.342.ics a9da101a29c7351ef96cf1364ff1a8a1 KOrganizer-1313050303.342 2005-08-14 19:54:23 2007-01-24 21:35:00 2007-04-17 19:53:23 2005-11-10 20:00:00+13 2005-11-11 02:00:00+13 \N Event at 2005-11-10 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1469 13 \N \N 13 /user4/home/libkcal-95576125.1061.ics 53edb619bb1991ec451c7c4866a0fe1f libkcal-95576125.1061 2005-08-14 16:09:51 2007-01-24 21:35:00 2007-04-17 19:53:23 2005-01-31 20:30:00+13 2005-02-01 01:30:00+13 \N Repeating event starting 2005-01-31 20:30:00 by FREQ=WEEKLY;UNTIL=20050314T073000Z;BYDAY=MO \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20050314T073000Z;BYDAY=MO \N \N \N \N \N 1470 13 \N \N 13 /user4/home/libkcal-1695335249.803.ics 1156b2fc30f269a43f6112310f887e88 libkcal-1695335249.803 2005-08-14 16:09:52 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-04-08 23:00:00+12 2002-04-09 00:00:00+12 \N Event at 2002-04-08 23:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1471 13 \N \N 13 /user4/home/libkcal-1658848585.634.ics 1720f623399ff14dec3b8073f40dca86 libkcal-1658848585.634 2005-08-14 16:09:53 2007-01-24 21:35:00 2007-04-17 19:53:23 2002-09-07 00:00:00+12 2002-09-08 00:00:00+12 \N Event at 2002-09-07 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1472 13 \N \N 13 /user4/home/libkcal-1348102428.775.ics 1466f0d8ea9dd66c02d8d586a5271e2c libkcal-1348102428.775 2005-08-14 16:09:57 2007-01-24 21:35:01 2007-04-17 19:53:23 2003-11-04 02:00:00+13 2003-11-04 03:00:00+13 \N Event at 2003-11-04 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1473 13 \N \N 13 /user4/home/libkcal-1273950378.671.ics f11c9fecb05abd739859198d36075806 libkcal-1273950378.671 2005-08-14 16:09:53 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-09-10 18:30:00+12 2002-09-10 23:45:00+12 \N Event at 2002-09-10 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1474 13 \N \N 13 /user4/home/libkcal-50908146.556.ics 75894bfd6efb9549a4520ec425d39859 libkcal-50908146.556 2005-08-14 16:09:54 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-10-10 19:30:00+13 2002-10-11 00:45:00+13 \N Event at 2002-10-10 19:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1475 13 \N \N 13 /user4/home/libkcal-530242634.686.ics ab0da889390ce50cc1f60d9de3e417ea libkcal-530242634.686 2005-08-14 16:09:55 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-11-19 20:30:00+13 2002-11-20 01:45:00+13 \N Event at 2002-11-19 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1476 13 \N \N 13 /user4/home/libkcal-1345435026.420.ics a997ae30782ff414e7b1db593476ca8d libkcal-1345435026.420 2005-08-14 16:09:56 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-12-18 05:30:00+13 2002-12-18 06:30:00+13 \N Event at 2002-12-18 05:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1477 13 \N \N 13 /user4/home/libkcal-1810768863.741.ics 7fe9fccd5d41ea37baeb6f39622367bf libkcal-1810768863.741 2005-08-14 16:09:57 2007-01-24 21:35:01 2007-04-17 19:53:23 2003-10-30 02:00:00+13 2003-10-30 03:00:00+13 \N Event at 2003-10-30 02:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1478 13 \N \N 13 /user4/home/libkcal-1505368998.256.ics e9c8e4fea41b8c94d1343a60ee536f95 libkcal-1505368998.256 2005-08-14 16:09:58 2007-01-24 21:35:01 2007-04-17 19:53:23 2005-01-13 21:30:00+13 2005-01-14 04:30:00+13 \N Event at 2005-01-13 21:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1479 13 \N \N 13 /user4/home/libkcal-207492094.170.ics 2d4fc66ca6a35d6ca8cc2f64911b01f9 libkcal-207492094.170 2007-01-17 07:44:14 2007-01-24 21:35:01 2007-04-17 19:53:23 2007-02-22 22:00:00+13 2007-02-23 00:00:00+13 \N Event at 2007-02-22 22:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1480 13 \N \N 13 /user4/home/libkcal-43161913.1070.ics f08c11451a5280c347b5e36dc679d160 libkcal-43161913.1070 2005-08-14 16:09:51 2007-01-24 21:35:01 2007-04-17 19:53:23 2003-03-24 19:30:00+12 2003-03-25 00:45:00+12 \N Repeating event starting 2003-03-24 19:30:00 by FREQ=WEEKLY;UNTIL=20030512T063000Z;BYDAY=MO \N \N 3 PUBLIC OPAQUE FREQ=WEEKLY;UNTIL=20030512T063000Z;BYDAY=MO \N \N \N \N \N 1481 13 \N \N 13 /user4/home/libkcal-1881242561.783.ics f697e0791fba802daaefd47231a1d0fd libkcal-1881242561.783 2005-08-14 16:09:54 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-10-23 19:30:00+13 2002-10-24 00:45:00+13 \N Event at 2002-10-23 19:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1482 13 \N \N 13 /user4/home/libkcal-1868356274.192.ics 8e59baf8bc1f255b1c1394743c2a9933 libkcal-1868356274.192 2005-08-14 16:09:56 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-12-09 20:00:00+13 2002-12-10 06:00:00+13 \N Event at 2002-12-09 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1483 13 \N \N 13 /user4/home/libkcal-662090617.196.ics 02262e09c0ac3d19afc67a62b67c8d59 libkcal-662090617.196 2005-08-14 16:09:57 2007-01-24 21:35:01 2007-04-17 19:53:23 2003-08-07 01:00:00+12 2003-08-07 02:00:00+12 \N Event at 2003-08-07 01:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1484 13 \N \N 13 /user4/home/libkcal-903236501.352.ics dcc34b89bc486ed6151c85ecacef7daa libkcal-903236501.352 2005-08-14 16:09:57 2007-01-24 21:35:01 2007-04-17 19:53:23 2003-09-01 21:55:00+12 2003-09-01 22:00:00+12 \N Event at 2003-09-01 21:55:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1485 13 \N \N 13 /user4/home/libkcal-8461016.195.ics 4007cff99b9fe96220738ee6884a0f66 libkcal-8461016.195 2005-08-14 16:09:58 2007-01-24 21:35:01 2007-04-17 19:53:23 2004-09-21 21:30:00+12 2004-09-21 22:00:00+12 \N Event at 2004-09-21 21:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1486 13 \N \N 13 /user4/home/KOrganizer-915657925.108.ics aee92128b05ba7e9df894f8048ef96d4 KOrganizer-915657925.108 2005-08-14 19:52:11 2007-01-24 21:35:01 2007-04-17 19:53:23 2005-11-03 20:00:00+13 2005-11-04 04:00:00+13 \N Event at 2005-11-03 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1487 13 \N \N 13 /user4/home/libkcal-1034179453.1025.ics d551d5c97b111a96cc32f9c66cf55266 libkcal-1034179453.1025 2005-08-14 16:09:54 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-10-31 20:30:00+13 2002-11-01 01:45:00+13 \N Event at 2002-10-31 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1488 13 \N \N 13 /user4/home/libkcal-1564831085.1069.ics 5ad87da93d270b2fb233171c85fde36e libkcal-1564831085.1069 2005-08-14 16:09:55 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-12-03 20:30:00+13 2002-12-04 01:45:00+13 \N Event at 2002-12-03 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1489 13 \N \N 13 /user4/home/libkcal-1650360155.265.ics 9108227822fc80254ccec240ffa5bd3b libkcal-1650360155.265 2005-08-14 16:09:57 2007-01-24 21:35:01 2007-04-17 19:53:23 2003-08-19 21:00:00+12 2003-08-19 22:00:00+12 \N Event at 2003-08-19 21:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1490 13 \N \N 13 /user4/home/KOrganizer-1363807535.433.ics e4b580b6f6dbbc5c16eea08e29bcdff5 KOrganizer-1363807535.433 2005-08-14 20:00:38 2007-01-24 21:35:01 2007-04-17 19:53:23 2005-12-07 20:00:00+13 2005-12-08 02:00:00+13 \N Event at 2005-12-07 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1491 13 \N \N 13 /user4/home/libkcal-1900080537.713.ics 1c27bc5b8c7a3cb2b5d61d8deda55f85 libkcal-1900080537.713 2005-08-14 16:09:51 2007-01-24 21:35:01 2007-04-17 19:53:23 2003-04-14 18:00:00+12 2003-04-21 10:00:00+12 \N Repeating event starting 2003-04-14 18:00:00 by FREQ=DAILY;UNTIL=20030420T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20030420T220000Z \N \N \N \N \N 1492 13 \N \N 13 /user4/home/libkcal-705074019.733.ics 533ce3f8d05604ebd9290125ef831995 libkcal-705074019.733 2005-08-14 16:09:52 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-04-03 23:00:00+12 2002-04-04 00:30:00+12 \N Event at 2002-04-03 23:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1493 13 \N \N 13 /user4/home/libkcal-1753896417.1014.ics 2c13d00e8877d3619ed030de10ea5eeb libkcal-1753896417.1014 2005-08-14 16:09:52 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-08-08 00:00:00+12 2002-08-09 00:00:00+12 \N Event at 2002-08-08 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1494 13 \N \N 13 /user4/home/libkcal-673839817.290.ics 0cb4948d194e939db933a793eabb80ee libkcal-673839817.290 2005-08-14 16:09:53 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-08-29 00:00:00+12 2002-08-29 03:00:00+12 \N Event at 2002-08-29 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1495 13 \N \N 13 /user4/home/libkcal-375156206.1070.ics 8aa5170395ef2fc9e7e147d3c6d511d5 libkcal-375156206.1070 2005-08-14 16:09:53 2007-01-24 21:35:01 2007-04-17 19:53:23 2002-09-26 18:30:00+12 2002-09-26 23:45:00+12 \N Event at 2002-09-26 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1496 13 \N \N 13 /user4/home/libkcal-995462243.318.ics f25630ed1d81319ec30f702a84c3b171 libkcal-995462243.318 2005-08-14 16:09:57 2007-01-24 21:35:02 2007-04-17 19:53:23 2003-08-27 01:30:00+12 2003-08-27 02:30:00+12 \N Event at 2003-08-27 01:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1497 13 \N \N 13 /user4/home/libkcal-876798833.981.ics 36a3485153c032a752b34cc3ad6d369f libkcal-876798833.981 2007-02-21 20:00:42 2007-02-21 20:00:42 2007-04-17 19:53:23 2007-03-09 02:00:00+13 2007-03-09 04:00:00+13 \N Event at 2007-03-09 02:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1498 13 \N \N 13 /user4/home/libkcal-1802748548.853.ics fcadf758dbd9d96a807be50c946e1fa4 libkcal-1802748548.853 2005-08-14 16:09:51 2007-01-24 21:35:02 2007-04-17 19:53:23 2005-01-05 22:00:00+13 2005-01-07 12:00:00+13 \N Repeating event starting 2005-01-05 22:00:00 by FREQ=DAILY;UNTIL=20050106T230000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20050106T230000Z \N \N \N \N \N 1499 13 \N \N 13 /user4/home/libkcal-897641360.629.ics a1e3949ca1af97eae079dc00c46ca85f libkcal-897641360.629 2005-08-14 16:09:52 2007-01-24 21:35:02 2007-04-17 19:53:23 2002-03-02 00:00:00+13 2002-03-03 00:00:00+13 \N Event at 2002-03-02 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1500 13 \N \N 13 /user4/home/libkcal-679398215.853.ics 59986fa68ef5c13d69b6abf5fc246ce0 libkcal-679398215.853 2005-08-14 16:09:54 2007-01-24 21:35:02 2007-04-17 19:53:23 2002-10-25 04:15:00+13 2002-10-25 05:15:00+13 \N Event at 2002-10-25 04:15:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1501 13 \N \N 13 /user4/home/libkcal-1690704588.1077.ics 386f6d9c336998a591640e0be9711004 libkcal-1690704588.1077 2005-08-14 16:09:54 2007-01-24 21:35:02 2007-04-17 19:53:23 2002-11-01 20:30:00+13 2002-11-02 01:45:00+13 \N Event at 2002-11-01 20:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1502 13 \N \N 13 /user4/home/libkcal-989953154.387.ics 8d389ed7d8265aa0295f6795de84a751 libkcal-989953154.387 2005-08-14 16:09:57 2007-01-24 21:35:02 2007-04-17 19:53:23 2003-09-02 22:00:00+12 2003-09-02 23:00:00+12 \N Event at 2003-09-02 22:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1503 13 \N \N 13 /user4/home/KOrganizer-293245651.612.ics d6c6fada59177d6e0416914bb2bf0499 KOrganizer-293245651.612 2005-08-14 19:49:46 2007-01-24 21:35:02 2007-04-17 19:53:23 2005-10-13 19:00:00+13 2005-10-14 01:00:00+13 \N Event at 2005-10-13 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1504 13 \N \N 13 /user4/home/KOrganizer-829920097.578.ics f617b1805edcaa85beececb1241dd71c KOrganizer-829920097.578 2005-08-14 19:48:16 2007-01-24 21:35:02 2007-04-17 19:53:23 2005-10-03 19:00:00+13 2005-10-04 03:00:00+13 \N Event at 2005-10-03 19:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1505 13 \N \N 13 /user4/home/libkcal-1459440544.810.ics 3bd6a05f4eeb9ee0255169f28794ba2f libkcal-1459440544.810 2005-08-14 16:09:51 2007-01-24 21:35:02 2007-04-17 19:53:23 2002-09-19 18:00:00+12 2002-09-20 10:00:00+12 \N Repeating event starting 2002-09-19 18:00:00 by FREQ=DAILY;UNTIL=20020919T220000Z \N \N 3 PUBLIC OPAQUE FREQ=DAILY;UNTIL=20020919T220000Z \N \N \N \N \N 1506 13 \N \N 13 /user4/home/libkcal-606835123.359.ics ef58d9442c02d2492b63ac2fbb12d9aa libkcal-606835123.359 2005-08-14 16:09:53 2007-01-24 21:35:02 2007-04-17 19:53:23 2002-08-30 00:00:00+12 2002-08-30 03:00:00+12 \N Event at 2002-08-30 00:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1507 13 \N \N 13 /user4/home/libkcal-1090755342.393.ics 432e032a51ef7cb41275d92893c996d2 libkcal-1090755342.393 2005-08-14 16:09:53 2007-01-24 21:35:02 2007-04-17 19:53:23 2002-08-30 18:30:00+12 2002-08-30 23:45:00+12 \N Event at 2002-08-30 18:30:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1508 13 \N \N 13 /user4/home/libkcal-40337687.1050.ics 340c49e69843b8ce1dda301cf6fb13b1 libkcal-40337687.1050 2007-02-21 20:00:43 2007-02-21 20:00:43 2007-04-17 19:53:23 2007-05-17 00:00:00+12 2007-05-17 02:00:00+12 \N Event at 2007-05-17 00:00:00 \N \N 5 PUBLIC OPAQUE \N \N \N \N \N \N 1509 13 \N \N 13 /user4/home/KOrganizer-1422474157.849.ics a708e5715a8dcfad9b84ccc3b3627e97 KOrganizer-1422474157.849 2005-08-14 20:01:20 2007-01-24 21:35:02 2007-04-17 19:53:23 2005-12-09 20:00:00+13 2005-12-10 02:00:00+13 \N Event at 2005-12-09 20:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1510 13 \N \N 13 /user4/home/libkcal-1332396888.870.ics 4ce81de5f3340e49da1cee979b8e1c6c libkcal-1332396888.870 2005-08-14 16:09:54 2007-01-24 21:35:02 2007-04-17 19:53:23 2002-10-25 05:00:00+13 2002-10-25 06:00:00+13 \N Event at 2002-10-25 05:00:00 \N \N 3 PUBLIC OPAQUE \N \N \N \N \N \N 1511 13 \N \N 13 /user4/home/libkcal-929822560.1022.ics 26da35fd7cc0ca4dd6d09f9d4f7ae720 libkcal-929822560.1022 2005-08-14 16:09:56 2007-01-24 21:35:02 2007-04-17 19:53:23 2003-05-21 19:00:00+12 2003-05-21 20:00:00+12 \N Event at 2003-05-21 19:00:00 \N Something 3 PUBLIC OPAQUE \N \N \N \N \N \N 1512 13 \N \N 14 /user5/home/naltpirh2vfjfmplmsivuo30t8@google.com.ics 2dac7abaa0d9d26e7b75ed0ce6a2e327 naltpirh2vfjfmplmsivuo30t8@google.com 2009-12-21 03:32:28 2010-08-12 16:13:39 2010-08-12 16:13:39 2010-08-16 15:00:00+12 2010-08-16 18:00:00+12 \N Tango Night Never will you see a space glow like a night of Tango at Tease.\nAll dancers welcome!\n$5 suggested donation \N PUBLIC \N FREQ=MONTHLY;WKST=MO;BYDAY=3SU \N \N America/Los_Angeles \N \N 1513 14 \N \N 14 /user5/home/v3f2otajsto18em4rom3jd4238@google.com.ics d18adb4d57636f47f71a7e04408806cf v3f2otajsto18em4rom3jd4238@google.com 2009-12-21 03:32:28 2011-11-12 05:01:33 2009-08-28 08:37:35 2009-07-08 12:00:00+12 2009-07-08 15:00:00+12 \N Sketch Salone Tease Restaurant & Bar, corner of 2nd & Main Sketch Salone, where the artist in you can come to the surface. Live model Hosted by Kevin Christman\n per bench seat by RSVP or welcome to use a table \N PUBLIC TRANSPARENT FREQ=WEEKLY;WKST=SU;INTERVAL=2;UNTIL=20090921T065959Z;BYDAY=MO \N \N America/Los_Angeles CONFIRMED \N 1514 14 \N \N 15 /User Six/home/55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB.ics c215044a2fb4c9b2f24f5f558b1cf098 55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB 2008-10-24 20:07:34 2011-11-12 05:01:34 2008-10-24 20:07:45 2008-10-25 23:30:00+13 2008-10-26 00:30:00+13 \N Irregular meeting for User 3 \N \N \N PUBLIC OPAQUE FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12 \N \N Europe/Helsinki \N \N 1515 15 \N \N 15 /User Six/home/174F9C2A-1223-40C4-9E06-6E91F2EA9491.ics 9f49231ad46f31932ab26533e99d0d11 174F9C2A-1223-40C4-9E06-6E91F2EA9491 2008-10-25 11:26:48 2011-11-12 05:01:34 2008-10-25 11:26:53 2008-10-24 18:45:00+13 2008-10-24 21:30:00+13 \N Dentist\\'s Council meeting \N \N \N PUBLIC OPAQUE FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR \N \N Europe/Helsinki \N \N 1516 15 \N \N 11 /user2/home/33169d69-2969-4a96-a3e1-2e312b7614e6.ics f2c974ff51cb52cde0668544deb36380 33169d69-2969-4a96-a3e1-2e312b7614e6 2008-10-23 05:49:58 2008-10-23 05:50:44 2008-10-23 05:49:58 2008-10-20 11:00:00+13 2008-10-20 11:30:00+13 \N Near Daily Action Meeting \N \N \N PUBLIC \N FREQ=DAILY;INTERVAL=1;BYDAY=MO,WE,FR \N \N Pacific/Auckland \N \N 1517 11 \N \N 11 /user2/home/047871e3-6b70-4178-9af8-0ceb50f7b092.ics 58cba7e3fafb6080e85619ea77d08c7a 047871e3-6b70-4178-9af8-0ceb50f7b092 2008-10-23 05:49:34 2008-10-23 05:50:59 2008-10-23 05:49:34 2008-10-20 09:00:00+13 2008-10-20 10:00:00+13 \N Weekly Project Meeting \N \N \N PUBLIC \N FREQ=WEEKLY;INTERVAL=1 \N \N Pacific/Auckland \N \N 1518 11 \N \N 11 /user2/home/9429a973-2b13-4b1a-be09-948d75425c45.ics 13249ced6c7527191a003f54f7e3cd25 9429a973-2b13-4b1a-be09-948d75425c45 2008-10-23 05:51:15 2008-10-23 05:51:39 2008-10-23 05:51:15 2008-10-24 14:00:00+13 2008-10-24 15:00:00+13 \N Weekly catch-up \N \N \N PUBLIC \N FREQ=WEEKLY;INTERVAL=1 \N \N Pacific/Auckland \N \N 1519 11 \N \N 11 /user2/home/7d729xc0-0895-012d-124e-002421a2359e.ics 848df16c32fc3ce319083ae84c2603a3 7d729xc0-0895-012d-124e-002421a2359e 2008-03-03 01:53:29 2008-03-03 01:54:22 2008-03-03 01:54:22 2008-10-06 20:00:00+13 2008-10-07 20:00:00+13 \N 1st Monday, 2nd Tuesday, 3rd Thursday & Last Friday \N An all day event on various days. \N PUBLIC \N FREQ=MONTHLY;BYDAY=1MO,2TU,3TH,-1FR;INTERVAL=1 \N \N America/Los_Angeles \N \N 1520 11 \N \N 11 /user2/home/bd262d20-1cdb-012d-1264-002421a2359e.ics 671d4ee904be6c16dd1be076619fe7c0 bd262d20-1cdb-012d-1264-002421a2359e 2008-11-23 21:06:44 2008-11-23 21:07:25 2008-11-23 21:07:25 2008-11-24 12:00:00+13 2008-11-24 13:00:00+13 \N Afternoon run \N PUBLIC \N FREQ=WEEKLY;INTERVAL=1;BYDAY=SU \N \N America/Los_Angeles \N \N 1521 11 \N \N 11 /user2/home/56f0e0e0-f742-012d-680c-002421a2359e.ics e18c0d539b6dcb56df2d266dd4305008 56f0e0e0-f742-012d-680c-002421a2359e 2010-12-31 19:30:25 2011-01-01 00:54:14 2011-01-01 00:54:14 2011-01-28 21:00:00+13 2011-01-29 21:00:00+13 \N Willamette Valley Vineyards at the Oregon Truffle Festival Eugene Oregon The 6th Annual Oregon Truffle Festival will be held in and around Eugene Oregon over three brisk winter days from January 28-30, 2011. Created to celebrate the magnificent Oregon truffles as they reach the peak of ripeness in their native soil, it is the first festival of its kind in North America, dedicated to sharing the experience of the chefs, foragers and fans of Oregon\\'s wild truffles, from their hidden source in the forest to their glory on the table.\n\nThe theme for 2011 is "Slow Food", and Willamette Valley Vineyards will be hosting a gourmet wine luncheon during the festival. Please visit www.oregontrufflefestival.com for more info and to purchase tickets.\n\n \N PUBLIC \N FREQ=DAILY;COUNT=3;INTERVAL=1 http://www.oregontrufflefestival.com \N America/Los_Angeles \N \N 1522 11 \N \N 10 /user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics 2c32a2f8aba853654eb17fe037a4db4d 5A55230C8866CA8D3D325F3A@CA1CBED546AAE36FF3BC722E 2006-11-02 09:02:17 2006-11-04 00:29:21 2006-11-02 09:02:17 2006-11-02 12:30:00+13 2006-11-02 13:30:00+13 \N Lunch with David \N \N \N PUBLIC \N \N \N \N New Zealand Standard Time \N \N 1525 10 \N \N 101 /resource2/home/0A5EA1F0F2691A03E917E85F9F255448-0.ics 75a75e1c7c4546074aab7645b5323738 C8344958F0CC35344E063A04@D76FAF7B10D9E8D2D41F779C 2006-11-08 11:30:35 2006-11-08 11:30:44 2006-11-08 11:30:35 2006-10-30 10:00:00+13 2006-10-30 11:00:00+13 \N Booking resource 2 \N \N \N PUBLIC \N \N \N \N New Zealand Standard Time \N \N 1527 101 \N \N 10 /user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics a1c6404d61190f9574e2bfd69383f144 4aaf8f37-f232-4c8e-a72e-e171d4c4fe54 2006-11-20 04:13:36 2006-11-20 04:17:09 2006-11-20 04:17:09 2006-11-02 10:00:00+13 2006-11-02 11:00:00+13 \N Weekly Project Meeting \N \N 0 PUBLIC \N FREQ=WEEKLY;COUNT=26;INTERVAL=1;BYDAY=TH \N \N /mozilla.org/20050126_1/Pacific/Auckland \N \N 1530 10 \N \N 10 /user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics 08a435c2abaf38f4a50a997343c098a7 9d050be7-8a02-4355-8ed3-02a9fc5f473f 2006-12-23 03:23:50 2006-12-23 03:31:44 2006-12-23 03:31:44 2006-12-23 16:00:00+13 2006-12-23 18:00:00+13 \N Confidential Event In a confidential place \N 0 CONFIDENTIAL \N \N \N \N /mozilla.org/20050126_1/Antarctica/McMurdo CONFIRMED \N 1531 10 \N \N 10 /user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics 5def8ae2b20893a1c7f4dbaeb008f2f1 1906b3ca-4890-468a-9b58-1de74bf2c716 2006-12-23 03:14:15 2006-12-23 03:23:05 2006-12-23 03:23:05 2006-12-23 13:00:00+13 2006-12-23 15:00:00+13 \N Private Event At a private location Private and Confirmed 0 PRIVATE \N \N \N \N /mozilla.org/20050126_1/Pacific/Auckland CONFIRMED \N 1532 10 \N \N 10 /user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics ac90acd649c25070b1a2a17fb31a105a fbd57454-d966-4a14-8341-abe1edb1ae66 2006-12-23 05:16:46 2006-12-23 05:17:13 2006-12-23 05:17:13 2006-12-23 19:00:00+13 2006-12-23 21:00:00+13 \N Tentative Event Never never land \N \N PUBLIC \N \N \N \N /mozilla.org/20050126_1/Antarctica/McMurdo TENTATIVE \N 1533 10 \N \N 10 /user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics 509b0f0d8a3363379f9f5727f5dd74a0 2178279a-aec2-471f-832d-1f6df6203f2f 2007-08-05 20:02:15 2007-08-05 20:15:31 2007-08-05 20:02:15 \N \N \N Incomplete, uncancelled \N This task is incomplete and has not been cancelled (has no status at all) \N PUBLIC \N \N \N \N \N \N \N 1535 10 \N \N 10 /user1/home/917b9e47-b748-4550-a566-657fbe672447.ics cb3d9dc3e8c157f53eba3ea0e1e0f146 917b9e47-b748-4550-a566-657fbe672447 2007-08-05 20:15:57 2007-08-05 20:16:43 2007-08-05 20:15:57 \N \N \N 50% Complete, uncancelled \N This task is in progress (50% complete) and has not been cancelled. \N PUBLIC \N \N \N 50.00 \N IN-PROCESS \N 1536 10 \N \N 10 /user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics 00ad5eb1eb5507884710b0b66aa5d5c4 0575d895-a006-4ed8-9be6-0d1b6b6b1f96 2007-08-05 20:16:47 2007-08-05 20:18:34 2007-08-05 20:16:47 2007-08-07 16:30:00+12 \N 2007-08-07 16:30:00+12 Due 7/8/7 16:30, completed \N Due on 7/8/7 at 4:30pm, but completed alread on 6/8/7 \N PUBLIC \N \N \N 100.00 /mozilla.org/20070129_1/Antarctica/McMurdo COMPLETED \N 1537 10 \N \N 10 /user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics a2990674708634a311bb98a59865ca50 b1679f77-673d-4f46-b3eb-2420e1bba301 2007-08-06 22:32:44 2007-08-06 22:34:11 2007-08-06 22:32:44 2007-08-08 11:15:00+12 \N 2007-08-08 11:15:00+12 A Cancelled Task, with a start and due date \N This is a task with a Start and a Due date, but it has been cancelled. \N PUBLIC \N \N \N \N /mozilla.org/20070129_1/Antarctica/McMurdo CANCELLED \N 1538 10 \N \N 10 /user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics e8060931f30c1798ac58ffbe4ec0bffc e70576e9-c1e0-431e-a507-0386fd82f223 2007-12-03 20:26:30 2007-12-03 20:28:34 2007-12-03 20:26:30 2007-12-11 07:45:00+13 2007-12-11 08:30:00+13 \N Morning Meeting Suzies Coffee Lounge Twice-weekly breakfast meeting \N PUBLIC \N FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH \N \N /mozilla.org/20070129_1/Antarctica/McMurdo \N \N 1539 10 \N \N 10 /user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics 8f581a053df6d833254756dfd7553d37 e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08 2007-12-03 20:29:15 2007-12-03 20:30:21 2007-12-03 20:29:15 2007-12-09 13:30:00+13 \N 2007-12-09 13:30:00+13 Release 0.9.3 \N \N \N PUBLIC \N \N \N 95.00 /mozilla.org/20070129_1/Antarctica/McMurdo IN-PROCESS \N 1540 10 \N \N 10 /user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics 55f02f66966ee150320383803d1e0d34 71e2ae82-7870-11db-c6d6-f6927c144649 2006-05-11 04:37:51 2006-05-11 04:37:51 2006-05-11 04:37:51 2006-11-03 16:00:00+13 2006-11-03 17:45:00+13 \N Beer O'Clock Level 3 \N PUBLIC \N FREQ=WEEKLY;INTERVAL=2;UNTIL=20071222T235900 \N \N Pacific/Auckland CONFIRMED \N 1544 10 \N \N 10 /user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics 6f16959eee5c920b45548840b1e9ea19 da81c0ee-7871-11db-c6d6-f6927c144649 2006-10-24 11:52:17 2006-10-24 11:52:17 2006-10-24 11:52:17 2006-11-03 07:30:00+13 2006-11-03 09:30:00+13 \N Morning Mgmt Mtg Olivia's \N PUBLIC \N FREQ=MONTHLY \N \N \N CONFIRMED \N 1545 10 \N \N 10 /user1/home/20061101T073004Z.ics bcc402382688cb3e8e57379c757dbcb0 20061101T073000Z-10468-1000-1-7@ubu 2006-11-01 07:30:00 2006-11-01 07:30:00 2006-11-01 07:30:00 2006-11-01 10:00:00+13 2006-11-01 11:00:00+13 \N A Changed Meeting \N \N \N PUBLIC \N \N \N \N Pacific/Auckland \N \N 1529 10 \N \N 10 /user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics efd0257efbc898d059c200d1391af060 AAA9318E-37D9-4319-8626-95ECD3D3B243 2007-11-23 09:30:48 2007-11-24 22:48:50 2007-11-24 22:48:50 2007-11-25 13:00:00+13 2007-11-25 19:00:00+13 \N BBQ @ ML's ML's House \N \N PUBLIC OPAQUE \N \N \N Pacific/Auckland \N \N 1546 10 \N \N 10 /user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA.ics 6079c141bc189326bf2432a8426c4242 6C8A0D88-E1F9-4FC1-9EDD-DA258ABF2CFA 2007-11-24 08:37:09 2007-11-24 08:42:39 2007-11-24 08:42:39 2007-11-26 07:00:00+13 2007-11-26 17:00:00+13 \N Go to work \N \N \N PUBLIC OPAQUE FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU \N \N Pacific/Auckland \N \N 1548 1547 \N \N 10 /user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/E6BC62F3-77C6-4FB7-BDD3-6882E2F1BE74.ics 18134bbb51c8e25919c92a0d6265f789 E6BC62F3-77C6-4FB7-BDD3-6882E2F1BE74 2007-11-24 22:07:49 2007-11-24 22:09:25 2007-11-24 22:09:25 2004-01-01 12:00:00+13 \N 2010-02-17 00:00:00+13 Celebrate a significant birthday \N Organise a party 5 PUBLIC \N \N \N \N Pacific/Auckland \N \N 1549 1547 \N \N 101 /resource2/home/3C1BF85D-3F28-413F-844F-80EBD33B8EE6.ics c057c3eb789b944e76f4d77fccf36ea1 3C1BF85D-3F28-413F-844F-80EBD33B8EE6 2007-11-24 22:15:21 2007-11-24 22:19:00 2007-11-24 22:19:00 2007-11-23 12:00:00+13 2007-11-23 14:00:00+13 \N Beard Meeting \N Lunch will be needed \N PUBLIC OPAQUE FREQ=MONTHLY;INTERVAL=1;BYDAY=4FR \N \N Pacific/Auckland \N \N 1550 101 \N \N 11 /user2/.in/15f40cce00b378332164188cf779f0d6.ics a7c061339ba234f532610cd45ebed7e4 174F9C2A-1223-40C4-9E06-6E91F2EA9491 2008-10-25 11:26:48 2008-10-25 11:27:07 2008-10-25 11:27:07 2008-10-22 18:45:00+13 2008-10-24 21:30:00+13 \N test meeting \N \N \N PUBLIC OPAQUE \N \N \N Europe/Helsinki \N \N 1552 1551 \N \N 10 /user1/.in/15f40cce00b378332164188cf779f0d6.ics a7c061339ba234f532610cd45ebed7e4 174F9C2A-1223-40C4-9E06-6E91F2EA9491 2008-10-25 11:26:48 2008-10-25 11:27:07 2008-10-25 11:27:07 2008-10-22 18:45:00+13 2008-10-24 21:30:00+13 \N test meeting \N \N \N PUBLIC OPAQUE \N \N \N Europe/Helsinki \N \N 1553 1541 \N \N 10 /user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics 257b9df4aaf573a578af4aadd033abf4 70D23799-4A68-4905-AB9F-4D47BA693CFD 2009-10-06 22:58:07 2009-10-06 22:58:08 2009-10-06 22:58:08 2009-10-06 01:00:00+13 2009-10-06 02:00:00+13 \N New Event \N \N \N PUBLIC OPAQUE \N \N \N Europe/Prague \N \N 1555 10 \N \N 10 /user1/home/0544-gzip-PUT.ics 6ddd18264a9d40c1c9d37a005eeb7e4f 0544-gzip-PUT 2011-10-04 15:35:07 2011-10-04 15:35:07 2011-10-04 15:35:07 2011-10-05 14:00:00+13 2011-10-05 15:00:00+13 \N In Central Europe, 2pm, Oct 5th for 1 hour \N \N \N PUBLIC OPAQUE \N \N \N Somewhere_in_Central_Europe \N \N 1556 10 \N \N 10 /user1/home/0545-deflate-PUT.ics 4a3aa58a3e11487e87d87024465d4182 0545-deflate-PUT 2011-10-04 15:35:07 2011-10-04 15:35:07 2011-10-04 15:35:07 2011-10-07 10:00:00+13 2011-10-07 11:00:00+13 \N In Prague, 10am, Oct 7th for 1 hour \N \N \N PUBLIC OPAQUE \N \N \N Prague_in_Central_Europe \N \N 1557 10 \N \N 10 /user1/collection/Daily_NY_5pm.ics 7b70c8c0621b4daac509b8198e9e13d8 DE916949-731D-4DAE-BA93-48A38B2B2030 2009-05-15 09:53:26 2009-05-15 09:53:26 2009-05-15 09:53:26 2006-01-02 11:00:00+13 2006-01-02 12:00:00+13 \N Daily_NY_5pm \N \N \N PUBLIC \N FREQ=DAILY;INTERVAL=1;COUNT=1000 \N \N America/New_York \N \N 1561 1560 \N \N 10 /user1/collection/All_Day_NY_JAN1.ics c056350d3c91ac45724c0f9773778941 C68DADAD-37CE-44F7-8A37-52E1D02E29CA 2009-05-15 09:53:26 2009-05-15 09:53:26 2009-05-15 09:53:26 2006-01-01 00:00:00+13 2006-01-02 00:00:00+13 \N All_Day_NY_JAN1 \N \N \N PUBLIC \N \N \N \N \N \N \N 1562 1560 \N \N 10 /user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 2a09ef8c6a9e0b6bc16228359b99d8e7 MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74 2008-10-24 22:07:49 2008-10-27 07:43:26 2008-10-27 07:43:26 2008-11-21 16:00:00+13 2008-11-21 19:00:00+13 \N Woohoo! Time to Par-tay! \N Have a microparty. All the best parties are monthly! \N PUBLIC \N FREQ=MONTHLY;INTERVAL=1;BYDAY=3FR \N \N Pacific/Auckland \N \N 1565 10 \N \N 10 /user1/anotherone/20060803T084628Z-6040-1000-1-6@lamb.ics b0af6a15f1d8a7188bb50a5265ae0734 20060803T084628Z-6040-1000-1-6@lamb 2006-08-03 08:46:28 2006-08-03 08:46:57 2006-08-03 08:46:28 2006-08-01 12:34:56+12 2006-08-02 12:34:56+12 \N Steve's Private Birthday \N \N \N PRIVATE OPAQUE FREQ=YEARLY;INTERVAL=1 \N \N \N \N \N 1585 1566 \N \N 10 /user1/home/PUT-eastern-time.ics 0b17d5f4102e63037d2ae732e4ca563d PUT-eastern-time 2010-10-10 01:46:39 2010-10-10 01:46:39 2010-10-09 21:45:24 2011-09-13 03:00:00+12 2011-09-13 03:30:00+12 \N Psychic's Anonymous Meeting You will know when you arrive \N \N PUBLIC \N \N \N \N (UTC-05:00) Eastern Time (US & Canada) \N \N 1596 10 \N \N 10 /user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 165746adbab8bc0c8336a63cc5332ff2 DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74 2008-10-24 22:07:49 2008-10-24 22:09:25 2008-10-24 22:09:25 2008-11-14 00:00:00+13 2008-11-15 00:00:00+13 \N Party all day! \N Have a party. All the best parties are monthly! \N PUBLIC \N FREQ=MONTHLY;INTERVAL=1;BYDAY=2FR \N \N Pacific/Auckland \N \N 1564 10 \N \N 10 /user1/anotherone/20061029T195821Z-14356-1000-1-12@ubu.ics f88f6e26787a25375428231cf023bcf1 20061029T195821Z-14356-1000-1-12@ubu 2006-10-29 19:58:22 2006-10-29 19:58:22 2006-10-29 19:58:21 2006-10-30 13:00:00+13 2006-10-30 14:00:00+13 \N ??? \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1568 1566 \N \N 10 /user1/anotherone/20061119T201927Z-5105-1000-5103-8@ubu.ics 9c79e22dd04b662134ec18cdd3db4792 20061119T201927Z-5105-1000-5103-8@ubu 2006-11-19 20:19:29 2006-11-19 20:19:51 2006-11-19 20:19:27 2006-11-22 13:00:00+13 2006-11-22 13:30:00+13 \N Alan Wanston, FudgeFactory \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1567 1566 \N \N 10 /user1/anotherone/20061105T211651Z-4384-1000-1-7@ubu.ics 16393a861fdd010b183a5a1ef51fb4dd 20061105T211651Z-4384-1000-1-7@ubu 2006-11-05 21:16:56 2006-11-06 21:33:10 2006-11-05 21:16:51 2006-11-07 14:00:00+13 2006-11-07 15:00:00+13 \N James What Copperstuff I am looking at hosting a custom Web application on a Linux Debian server. \nFrom what I understand you can provide the complete solution in terms of hosting and support. \nI am currently looking into hosting providers as well as looking for some Debian admin skilled resource.\n \N PUBLIC OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1569 1566 \N \N 10 /user1/anotherone/20061031T194148Z-14356-1000-1-14@ubu.ics ceeb47ba9a4cc6c93d343c959db11483 20061031T194148Z-14356-1000-1-14@ubu 2006-10-31 19:41:49 2006-10-31 19:41:49 2006-10-31 19:41:48 2006-11-01 13:30:00+13 2006-11-01 14:30:00+13 \N Doctor \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1570 1566 \N \N 10 /user1/anotherone/20061027T005242Z-5029-1001-1-1@dolmein.ics 4f658e55f47ecabb5c3efcff4da93e36 20061027T005242Z-5029-1001-1-1@dolmein 2006-10-27 02:28:16 2006-10-27 02:28:16 2006-10-27 01:02:32 2006-10-30 10:30:00+13 2006-10-30 11:30:00+13 \N Interview Linus Pauling \N I've already spoken to each of you about this, this is just to ensure that it is in my calender :-) \N PRIVATE OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1571 1566 \N \N 10 /user1/anotherone/20060912T233427Z-12681-1000-1-5@ubu.ics fbe0feb306166d493fbe9edff9807548 20060912T233427Z-12681-1000-1-5@ubu 2006-09-13 00:35:45 2006-09-13 00:36:31 2006-09-12 23:34:27 2006-09-13 09:00:00+12 2006-09-13 14:30:00+12 \N 9:am - 2:30pm in Helsinki \N \N \N PUBLIC OPAQUE \N \N \N \N \N \N 1584 1566 \N \N 10 /user1/anotherone/20061025T210650Z-21440-1000-1-8@ubu.ics 365d06a4afd49d910ba70d932801acf9 20061025T210650Z-21440-1000-1-8@ubu 2006-10-25 21:09:02 2006-10-25 21:09:02 2006-10-25 19:32:58 2006-10-26 15:00:00+13 2006-10-26 16:00:00+13 \N Performance Review - David C \N \N \N PRIVATE OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1572 1566 \N \N 10 /user1/anotherone/20061019T022314Z-5014-1001-1-1@dolmein.ics ac0317209a64e15ac9b7eda408ef9d1b 20061019T022314Z-5014-1001-1-1@dolmein 2006-10-20 07:12:45 2006-10-20 07:12:45 2006-10-19 02:24:52 2006-10-25 15:00:00+13 2006-10-25 16:00:00+13 \N Performance Review - David C \N \N \N PRIVATE OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1573 1566 \N \N 10 /user1/anotherone/20060918T011246Z-21151-1000-1-10@ubu.ics 62486c3599358477c356d1edd07f95bf 20060918T011246Z-21151-1000-1-10@ubu 2006-09-18 01:12:51 2006-09-18 01:12:51 2006-09-18 01:12:46 2006-09-28 17:30:00+12 2006-09-28 20:00:00+12 \N Summer Festival drinks at the loaded hog \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1574 1566 \N \N 10 /user1/anotherone/20061029T195827Z-14356-1000-1-13@ubu.ics f688eed63d79ce17c10a02d5cdf1cfe6 20061029T195827Z-14356-1000-1-13@ubu 2006-10-29 19:58:28 2006-10-29 19:58:28 2006-10-29 19:58:27 2006-10-30 16:00:00+13 2006-10-30 17:00:00+13 \N IZPAXY \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1575 1566 \N \N 10 /user1/anotherone/20061011T232622Z-27447-1000-1-6@ubu.ics 8b30e3ae6d24cc88bf5e72ee4fb51d6b 20061011T232622Z-27447-1000-1-6@ubu 2006-10-11 23:26:57 2006-10-11 23:27:31 2006-10-11 23:26:22 2006-10-16 09:00:00+13 2006-10-16 17:00:00+13 \N Dubai Day \N \N \N PUBLIC OPAQUE \N \N \N \N \N \N 1576 1566 \N \N 10 /user1/anotherone/86203AFD481A6C42892013E6E0C4845D039A2543@AKEXBE02.telecom.tcnz.net.ics 621885941033781f3462950c9bc2844b 86203AFD481A6C42892013E6E0C4845D039A2543@AKEXBE02.telecom.tcnz.net 2006-10-05 23:07:24 2006-10-05 23:07:24 2006-10-05 23:07:24 2007-01-20 09:30:00+13 2007-01-20 09:30:00+13 \N Reminder for Mark for Absolom Livasathan's PGP WF Services cost request \N From Absolom.Livasathan@example.com Fri Oct 6 12:00:02 2006\n \N PUBLIC \N \N \N \N \N \N \N 1577 1566 \N \N 10 /user1/anotherone/20061009T214137Z-5718-1001-1-1@dolmein.ics 559b8c776d6cab34a86dad9304649040 20061009T214137Z-5718-1001-1-1@dolmein 2006-10-10 01:46:39 2006-10-10 01:46:39 2006-10-09 21:45:24 2006-10-12 14:00:00+13 2006-10-12 15:00:00+13 \N Sysadmin Interview Copperstuff, Level 2, 150 Walthias St \N \N PRIVATE OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1595 1566 \N \N 10 /user1/anotherone/20061219T104451Z-28207-1000-1-8@ubu.ics 48442c494e80c936f62ab3dedfed19d0 20061219T104451Z-28207-1000-1-8@ubu 2006-12-19 10:46:35 2006-12-19 10:46:35 2006-12-19 10:44:51 2006-12-22 14:00:00+13 2006-12-22 15:00:00+13 \N Those who are left will have a drink to celebrate the new calendar The Boardroom \N \N PUBLIC OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1578 1566 \N \N 10 /user1/anotherone/20060914T212513Z-15783-1000-1-11@ubu.ics 967453ee71d6bcb9d69b4adf83b40553 20060914T212513Z-15783-1000-1-11@ubu 2006-09-14 21:35:52 2006-09-14 21:35:52 2006-09-14 21:25:13 2006-09-18 14:00:00+12 2006-09-18 15:00:00+12 \N Donovan \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1579 1566 \N \N 10 /user1/anotherone/20060906T123509Z-5231-1000-1-5@ubu.ics 928d0f0366934dd46d99ed93b1d269a5 20060906T123509Z-5231-1000-1-5@ubu 2006-09-07 09:37:48 2006-09-07 09:37:48 2006-09-06 12:35:09 2006-09-11 10:30:00+12 2006-09-11 12:00:00+12 \N NGOP by-election readiness. \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1580 1566 \N \N 10 /user1/anotherone/20060903T233851Z-31623-1000-1-5@ubu.ics 92e380d82aa7aee9d51a798ef2513649 20060903T233851Z-31623-1000-1-5@ubu 2006-09-03 23:38:56 2006-09-03 23:38:56 2006-09-03 23:38:51 2006-09-07 12:30:00+12 2006-09-07 13:30:00+12 \N Murray Flenshaw @ Copperstuff \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1581 1566 \N \N 10 /user1/anotherone/20060920T052705Z-28287-1000-1-5@ubu.ics 74d71aebcd274d278791b3dad214fa76 20060920T052705Z-28287-1000-1-5@ubu 2006-09-20 05:27:22 2006-09-21 01:26:57 2006-09-20 05:27:05 2006-09-21 16:00:00+12 2006-09-21 17:00:00+12 \N Really Geeky Thoughts \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1582 1566 \N \N 10 /user1/anotherone/20060918T011217Z-21151-1000-1-9@ubu.ics fa714e1248dc234f8b9d99b714c1fd13 20060918T011217Z-21151-1000-1-9@ubu 2006-09-18 01:12:18 2006-09-18 01:12:18 2006-09-18 01:12:17 2006-09-28 00:00:00+12 2006-09-30 00:00:00+12 \N Summer Festival \N \N \N PUBLIC \N \N \N \N \N \N \N 1583 1566 \N \N 10 /user1/anotherone/20061210T214816Z-5064-1001-1-0@dolmein.ics 72e3c96dc0b764d7d173dd9d835787ec 20061210T214816Z-5064-1001-1-0@dolmein 2006-12-11 02:08:41 2006-12-11 02:08:41 2006-12-10 21:50:58 2006-12-12 10:00:00+13 2006-12-12 11:00:00+13 \N Interview - Arthur Williams \N I think you all have had a copy of Arthur Williams's CV passed onto you. \N PRIVATE OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1586 1566 \N \N 10 /user1/anotherone/20060907T213951Z-5189-1001-1-0@dolmein.ics e892a467e0d74a8b8bc04021049ca46d 20060907T213951Z-5189-1001-1-0@dolmein 2006-09-14 05:17:01 2006-09-14 05:17:01 2006-09-14 04:27:19 2006-09-15 10:00:00+12 2006-09-15 11:00:00+12 \N Sysadmin -> Development \N \N \N PRIVATE OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1587 1566 \N \N 10 /user1/anotherone/20060905T231045Z-16025-1000-1-6@ubu.ics 0b7e7d2067fc4796d7c62d4527f24d15 20060905T231045Z-16025-1000-1-6@ubu 2006-09-07 09:37:32 2006-09-11 21:45:56 2006-09-05 23:10:45 2006-09-19 09:00:00+12 2006-09-19 12:00:00+12 \N NGOP Meeting \N \N \N PUBLIC OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1588 1566 \N \N 10 /user1/anotherone/DC9C0944-D80A-426D-A4A4-6003C72BA7B5.ics 69283d8740fbf70f5af724ef34ab282e DC9C0944-D80A-426D-A4A4-6003C72BA7B5 2006-12-19 22:50:56 2006-12-19 22:50:56 2006-12-19 19:54:27 2006-12-20 14:00:00+13 2006-12-20 15:00:00+13 \N Really Geeky round table \N \N \N PUBLIC OPAQUE \N \N \N Pacific/Auckland \N \N 1589 1566 \N \N 10 /user1/anotherone/20061101T224855Z-5026-1001-1-0@dolmein.ics b5d8c7c11e4488c430155f053b3b2969 20061101T224855Z-5026-1001-1-0@dolmein 2006-11-01 23:04:24 2006-11-01 23:04:24 2006-11-01 22:50:11 2006-11-02 14:00:00+13 2006-11-02 15:00:00+13 \N Sysadmin Interview \N \N \N PRIVATE OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1590 1566 \N \N 10 /user1/anotherone/20060918T071919Z-21151-1000-1-13@ubu.ics 74cc48fb529dd80b7ee24fbf39ac9181 20060918T071919Z-21151-1000-1-13@ubu 2006-09-18 07:19:21 2006-09-18 07:19:21 2006-09-18 07:19:19 2006-09-25 12:00:00+12 2006-09-25 13:30:00+12 \N Board Meeting \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1591 1566 \N \N 10 /user1/anotherone/20061119T202229Z-5105-1000-5103-9@ubu.ics fdbf955864dcd5f98c1bab83f1e96607 20061119T202229Z-5105-1000-5103-9@ubu 2006-11-19 20:22:31 2006-11-19 20:22:31 2006-11-19 20:22:29 2006-11-20 11:00:00+13 2006-11-20 12:00:00+13 \N IZPAXY Review \N \N \N PUBLIC \N \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1592 1566 \N \N 10 /user1/anotherone/20061026T222249Z-5029-1001-1-0@dolmein.ics c719ef9a84a9c3bc8997c1fa123768d4 20061026T222249Z-5029-1001-1-0@dolmein 2006-10-26 22:37:00 2006-10-26 22:37:00 2006-10-26 22:30:20 2006-10-30 14:00:00+13 2006-10-30 16:00:00+13 \N ABC \N Mark and Tom from ABC would like to discuss the work required and estimate for the work they would like us to do - "start to become specific about things". Expectations of work, issues and solutions. \N PRIVATE OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1593 1566 \N \N 10 /user1/anotherone/20061019T022147Z-5014-1001-1-0@dolmein.ics e4ba9a5b1e03a3362145cb582b499e15 20061019T022147Z-5014-1001-1-0@dolmein 2006-10-20 07:11:44 2006-10-20 07:11:44 2006-10-19 02:22:47 2006-10-25 13:30:00+13 2006-10-25 14:30:00+13 \N Performance Review - Jon C \N \N \N PRIVATE OPAQUE \N \N \N /softwarestudio.org/Olson_20011030_5/Pacific/Auckland \N \N 1594 1566 \N \N 15 /User Six/home/c0f7c860-1345-012d-125f-002421a2359e.ics 4d7d14bee6ce017c086e6f1de56f1641 c0f7c860-1345-012d-125f-002421a2359e 2010-03-16 16:20:26 2010-03-16 16:21:03 2010-03-16 16:21:03 2010-08-07 19:00:00+12 2010-08-08 19:00:00+12 \N 2nd Annual Lobsterfest: will you come? Chamisal Vineyards\\, Oregon 2nd Annual Lobsterfest\nSaturday, August 7\nTime to be announced, @Chamisal Vineyards @1pm\n$85 members; $100 non members. Inquire for special group pricing. Will you come? \N PUBLIC \N \N \N \N America/Los_Angeles \N \N 1601 15 \N \N 11 /user2/home/thiswillworkfine.ics 9a8d7696ee2e0a0f1f4170fe4f094a3a 9f81cd8a-b1c2-4f72-9f12-1ddbddd69342 2010-03-18 04:44:09 2010-03-18 04:44:51 2010-03-18 04:44:51 2010-03-22 18:00:00+13 2010-03-22 19:00:00+13 \N Test adding an event to a bound collection Somewhere else This event is being added to a bound collection. \N PUBLIC \N FREQ=WEEKLY;INTERVAL=2 \N \N Pacific/Auckland \N \N 1604 11 \N \N 11 /user2/home/thiswillalsobegood.ics 1c7895f11787e71fd6dbe3260d72d4a0 A51AC037-E6F9-4E03-872C-7DFE0B67D1FF 2010-03-18 21:04:57 2010-03-18 21:05:57 2010-03-18 21:05:57 2004-01-01 12:00:00+13 \N 2010-03-26 00:00:00+13 Release DAViCal 0.9.9 \N \N 0 PUBLIC \N \N \N \N Pacific/Auckland \N \N 1609 11 \N \N 11 /user2/.in/70399cd7-50a4-4be4-a665-af593e19a7fd.ics 8d057fb2fc98a8d36f2cc19f0d8fa16c 70399cd7-50a4-4be4-a665-af593e19a7fd 2010-03-19 10:32:47 2010-03-19 10:56:20 2010-03-19 10:56:20 2010-03-22 16:00:00+13 2010-03-22 17:00:00+13 \N An invited event. Black tie with pink polka dots is essential. Do not bring a leopard. Any leopards which do attend will be forcibly chained to a nearby fence. \N \N \N PUBLIC OPAQUE \N \N \N \N \N \N 1611 1551 \N \N 11 /user2/home/70399cd7-50a4-4be4-a665-af593e19a7fd.ics ea6b316ca24db20f5eb37d1abd60f8c1 70399cd7-50a4-4be4-a665-af593e19a7fd 2010-03-19 10:32:47 2010-03-19 10:56:20 2010-03-19 10:56:20 2010-03-22 16:00:00+13 2010-03-22 17:00:00+13 \N An invited event. Black tie with pink polka dots is essential. Do not bring a leopard. Any leopards which do attend will be forcibly chained to a nearby fence. \N \N \N PUBLIC OPAQUE \N \N \N \N \N \N 1612 11 \N \N 12 /user3/.in/70399cd7-50a4-4be4-a665-af593e19a7fd.ics 8d057fb2fc98a8d36f2cc19f0d8fa16c 70399cd7-50a4-4be4-a665-af593e19a7fd 2010-03-19 10:32:47 2010-03-19 10:56:20 2010-03-19 10:56:20 2010-03-22 16:00:00+13 2010-03-22 17:00:00+13 \N An invited event. Black tie with pink polka dots is essential. Do not bring a leopard. Any leopards which do attend will be forcibly chained to a nearby fence. \N \N \N PUBLIC OPAQUE \N \N \N \N \N \N 1614 1613 \N \N 12 /user3/home/70399cd7-50a4-4be4-a665-af593e19a7fd.ics ea6b316ca24db20f5eb37d1abd60f8c1 70399cd7-50a4-4be4-a665-af593e19a7fd 2010-03-19 10:32:47 2010-03-19 10:56:20 2010-03-19 10:56:20 2010-03-22 16:00:00+13 2010-03-22 17:00:00+13 \N An invited event. Black tie with pink polka dots is essential. Do not bring a leopard. Any leopards which do attend will be forcibly chained to a nearby fence. \N \N \N PUBLIC OPAQUE \N \N \N \N \N \N 1615 12 \N \N 14 /user5/.in/70399cd7-50a4-4be4-a665-af593e19a7fd.ics 8d057fb2fc98a8d36f2cc19f0d8fa16c 70399cd7-50a4-4be4-a665-af593e19a7fd 2010-03-19 10:32:47 2010-03-19 10:56:20 2010-03-19 10:56:20 2010-03-22 16:00:00+13 2010-03-22 17:00:00+13 \N An invited event. Black tie with pink polka dots is essential. Do not bring a leopard. Any leopards which do attend will be forcibly chained to a nearby fence. \N \N \N PUBLIC OPAQUE \N \N \N \N \N \N 1617 1616 \N \N 14 /user5/home/70399cd7-50a4-4be4-a665-af593e19a7fd.ics ea6b316ca24db20f5eb37d1abd60f8c1 70399cd7-50a4-4be4-a665-af593e19a7fd 2010-03-19 10:32:47 2010-03-19 10:56:20 2010-03-19 10:56:20 2010-03-22 16:00:00+13 2010-03-22 17:00:00+13 \N An invited event. Black tie with pink polka dots is essential. Do not bring a leopard. Any leopards which do attend will be forcibly chained to a nearby fence. \N \N \N PUBLIC OPAQUE \N \N \N \N \N \N 1618 14 \N \N 13 /user4/base/calendar/anothergoodleopard.ics ea6b316ca24db20f5eb37d1abd60f8c1 70399cd7-50a4-4be4-a665-af593e19a7fd 2010-03-19 10:32:47 2010-03-19 10:56:20 2010-03-19 10:56:20 2010-03-22 16:00:00+13 2010-03-22 17:00:00+13 \N An invited event. Black tie with pink polka dots is essential. Do not bring a leopard. Any leopards which do attend will be forcibly chained to a nearby fence. \N \N \N PUBLIC OPAQUE \N \N \N \N \N \N 1610 1606 \N \N 13 /user4/base/newcalendar/73d1f980-ec28-012c-11f9-002421a2359e.ics 228540edb5690f6e8adb855aaa98ee98 73d1f980-ec28-012c-11f9-002421a2359e 2010-01-25 21:42:26 2010-01-25 21:42:35 2010-01-25 21:42:35 2010-01-06 11:00:00+13 2010-01-06 12:00:00+13 \N HELLO \N PUBLIC \N \N \N \N America/Los_Angeles \N \N 1620 1619 \N \N 13 /user4/base/newcalendar/939afe30-0f86-012d-1259-002421a2359e.ics 83516c50151ea62ca04fd02f4f6af695 939afe30-0f86-012d-1259-002421a2359e 2010-03-11 21:54:22 2010-03-11 22:08:44 2010-03-11 22:08:44 2010-03-13 08:00:00+13 2010-03-15 12:00:00+13 \N Youngberg Hill @ McMinniville Wine & Food Festival March 12-14th McMinniville Wine & Food Festival\nCome visit Youngberg Hill at this wonderful festival. \nwww.macwfc.org\n\n \N PUBLIC \N \N http://www.macwfc.org \N America/Los_Angeles \N \N 1621 1619 \N \N 13 /user4/base/newcalendar/12cbff90-0f8a-012d-1259-002421a2359e.ics d7773e205d1992a23af9840dcf944e3b 12cbff90-0f8a-012d-1259-002421a2359e 2010-03-11 22:19:24 2010-03-11 22:24:51 2010-03-11 22:24:51 2010-07-11 11:00:00+12 2010-07-11 15:30:00+12 \N Youngberg Hill @ Uncorked, Oregon Wine & Art Auction 11400 Westland Lane, Dayton OR July 10th - Uncorked, Oregon Wine & Art Auction\n\nCome join Youngberg Hill for this wonderful event. \N PUBLIC \N \N http://www.theoregonwineandartauction.org/ \N America/Los_Angeles \N \N 1622 1619 \N \N 13 /user4/base/newcalendar/242afc80-0f8c-012d-1259-002421a2359e.ics 7387e025ed4fb1f0ec39e0dfca36942d 242afc80-0f8c-012d-1259-002421a2359e 2010-03-11 22:34:12 2010-03-11 23:11:18 2010-03-11 23:11:18 2010-07-23 13:30:00+12 2010-07-23 14:00:00+12 \N Pre- IPNC Winemaker Dinner @ Youngberg Hill July 22nd - PRE-IPNC Winemaker Dinner @ Youngberg Hill.\n\nDetails to follow. \N PUBLIC \N \N \N \N America/Los_Angeles \N \N 1623 1619 \N \N 13 /user4/base/newcalendar/950ca060-0f87-012d-1259-002421a2359e.ics 7054218fa2a9e561b9e0ac0f1f8a6e0e 950ca060-0f87-012d-1259-002421a2359e 2010-03-11 22:01:34 2010-03-11 22:03:08 2010-03-11 22:03:08 2010-05-03 13:00:00+12 2010-05-03 16:30:00+12 \N Youngberg Hill Winemaker Dinner @ The Stephanie Inn Cannon Beach, OR May 2 - Stephanie Inn Winemaker Dinner @ Cannon Beach\nCome join Youngberg Hill Vineyards & Inn for this wonderful experience. Details at \nwww.stephanie-inn.com\n\n \N PUBLIC \N \N http://www.stephanie-inn.com \N America/Los_Angeles \N \N 1624 1619 \N \N 13 /user4/base/newcalendar/4887b3b0-0f91-012d-1259-002421a2359e.ics 0e091d7cf1ea4f613199a2a60090a7e1 4887b3b0-0f91-012d-1259-002421a2359e 2010-03-11 23:11:01 2010-03-11 23:11:01 2010-03-11 23:11:01 2010-07-17 10:00:00+12 2010-07-17 11:00:00+12 \N New Event \N PUBLIC \N \N \N \N America/Los_Angeles \N \N 1625 1619 \N \N 13 /user4/base/newcalendar/ed3beb90-0f8a-012d-1259-002421a2359e.ics a5972f272523b97d6cade1486a8b1c40 ed3beb90-0f8a-012d-1259-002421a2359e 2010-03-11 22:25:31 2010-03-11 22:33:12 2010-03-11 22:33:12 2010-07-18 05:00:00+12 2010-07-18 12:00:00+12 \N Discover McMinnville AVA 16250 SW Oldsville Rd, McMinnville OR July 17th - Discover McMinnville AVA\n\nParticipating Wineries Include:\nBrittan Vineyards, Coeur de Terre Vineyard, Coleman Vineyard, Maysara Vineyard, Seufert Winery, Stony Mountain Vineyard, Yamhill Valley Vineyards and Youngberg Hill Vineyard \N PUBLIC \N \N http://www.mcminnvilleava.org/event.htm \N America/Los_Angeles \N \N 1626 1619 \N \N 13 /user4/base/newcalendar/626c1f10-0f91-012d-1259-002421a2359e.ics 29665951ecbafebf365e664ecc7eb25f 626c1f10-0f91-012d-1259-002421a2359e 2010-03-11 23:11:44 2010-03-12 06:40:55 2010-03-12 06:40:55 2010-08-13 13:00:00+12 2010-08-13 15:30:00+12 \N Linfield Chamber Benefit @ Youngberg Hill 10660 SW Youngberg Hill Road, McMinniville OR August 12th - Linfield Chamber Benefit @ Youngberg Hill\n\nDetails to follow \N PUBLIC \N \N http://www.youngberghill.com \N America/Los_Angeles \N \N 1627 1619 \N \N 13 /user4/base/newcalendar/b0362430-0f88-012d-1259-002421a2359e.ics e9bdeacf16eb2b71f9625ab01113bb6b b0362430-0f88-012d-1259-002421a2359e 2010-03-11 22:09:29 2010-03-11 22:12:06 2010-03-11 22:12:06 2010-05-30 06:00:00+12 2010-06-01 12:00:00+12 \N Youngberg Hill Vineyard & Inn - Memorial Weekend 10660 SW Youngberg Hill Road Memorial Weekend\nYoungberg Hill will be open from 11:00 to 5:00 on Saturday, Sunday, & Monday. We will be highlighting our 2007 Jordan & Natasha Block Pinot Noir as well as our newly released 2009 Pinot Gris. We will have cheeses, breads, and treats available, plus the greatest view.\n\nTasting fee of $5, complimentary tastings for our Wine Club members. \n \N PUBLIC \N \N http://www.youngberghill.com \N America/Los_Angeles \N \N 1628 1619 \N \N \. -- -- Data for Name: collection; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY collection (user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, created, modified, public_events_only, publicly_readable, collection_id, default_privileges, is_addressbook, resourcetypes, schedule_transp, timezone, description) FROM stdin; 1 /admin/ /admin/home/ 21232f297a57a5a743894a0e4a801fc3 admin home t 2009-06-03 00:00:00+12 2009-06-04 00:00:00+12 f f 1 \N f opaque \N 2 /andrew/ /andrew/home/ d914e3ecf6cc481114a3f534a5faf90b andrew home t 2009-06-03 00:00:00+12 2009-06-04 00:00:00+12 f f 2 \N f opaque \N 20 /manager1/ /manager1/home/ c240642ddef994358c96da82c0361a58 manager1 home t 2009-06-03 00:00:00+12 2009-06-04 00:00:00+12 f f 20 \N f opaque \N 30 /assistant1/ /assistant1/home/ dfe43d4450dbcb11c1e9882fe076c0a0 assistant1 home t 2009-06-03 00:00:00+12 2009-06-04 00:00:00+12 f f 30 \N f opaque \N 200 /resmgr1/ /resmgr1/home/ 6bb6911d146e4ee0a55a162aa7e9202b resmgr1 home t 2009-06-03 00:00:00+12 2009-06-04 00:00:00+12 f f 200 \N f opaque \N 300 /teamclient1/ /teamclient1/home/ edc1a74f98499d4a547a7c23125cabf2 teamclient1 home t 2009-06-03 00:00:00+12 2009-06-04 00:00:00+12 f f 300 \N f opaque \N 1 /admin/ /admin/addresses/ 21232f297a57a5a743894a0e4a801fc3 admin addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 51 \N t opaque \N 2 /andrew/ /andrew/addresses/ d914e3ecf6cc481114a3f534a5faf90b andrew addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 52 \N t opaque \N 10 /user1/ /user1/addresses/ 24c9e15e52afc47c225b757e7bee1f9d user1 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 60 \N t opaque \N 11 /user2/ /user2/addresses/ 7e58d63b60197ceb55a1c487989a3720 user2 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 61 \N t opaque \N 12 /user3/ /user3/addresses/ 92877af70a45fd6a2ed7fe81e1236b78 user3 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 62 \N t opaque \N 13 /user4/ /user4/addresses/ 3f02ebe3d7929b091e3d8ccfde2f3bc6 user4 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 63 \N t opaque \N 14 /user5/ /user5/addresses/ 0a791842f52a0acfbb3a783378c066b8 user5 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 64 \N t opaque \N 15 /User Six/ /User Six/addresses/ 28e06afe6d538a7e84518750357ef98d User Six addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 65 \N t opaque \N 20 /manager1/ /manager1/addresses/ c240642ddef994358c96da82c0361a58 manager1 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 70 \N t opaque \N 30 /assistant1/ /assistant1/addresses/ dfe43d4450dbcb11c1e9882fe076c0a0 assistant1 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 80 \N t opaque \N 100 /resource1/ /resource1/addresses/ 0f01ceea381503f677cedeea5758c902 resource1 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 150 \N t opaque \N 101 /resource2/ /resource2/addresses/ dc821452bd61ee969b231eab2f4aa761 resource2 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 151 \N t opaque \N 200 /resmgr1/ /resmgr1/addresses/ 6bb6911d146e4ee0a55a162aa7e9202b resmgr1 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 250 \N t opaque \N 300 /teamclient1/ /teamclient1/addresses/ edc1a74f98499d4a547a7c23125cabf2 teamclient1 addresses f 1957-07-26 00:00:00+12 1998-03-16 00:00:00+12 f f 350 \N t opaque \N 15 /User Six/ /User Six/home/ be0625fe3cfb8e2f552d9c5d008a5ec3 User Six home t 2009-06-03 00:00:00+12 2011-11-12 18:02:38.628203+13 f f 15 \N f opaque \N 10 /user1/ /user1/home/ 7e1c9a5e005cb3192ef305837033e271 User 1's Calendaranza t 2009-06-03 00:00:00+12 2011-11-12 18:02:29.938583+13 f f 10 \N f opaque Europe/Prague 101 /resource2/ /resource2/home/ 699c4f2bdb1bc22c2175ea779fd97479 resource2 home t 2009-06-03 00:00:00+12 2011-11-12 18:01:54.638356+13 f f 101 \N f opaque \N 100 /resource1/ /resource1/home/ 38acb5a3ae5617edc98ddce6f5ffaa38 resource1 home t 2009-06-03 00:00:00+12 2011-11-12 18:02:29.938583+13 f f 100 \N f opaque \N 13 /user4/ /user4/nz_holidays/ ebeec1c6ec8a3b619af611adbced5ca9 New Zealand Public Holidays t 2011-11-12 18:01:28.496644+13 2011-11-12 18:01:28.554248+13 f f 1014 \N f opaque \N 13 /user4/ /user4/us_holidays/ 5a8c44444986c4726b7ea9af4e654cc2 US Holidays t 2011-11-12 18:01:29.069362+13 2011-11-12 18:01:29.109066+13 f f 1069 \N f opaque \N 12 /user3/ /user3/utf8/ 4390cbf2db4d5d2292595ee0b5168fb3 utf8 t 2011-11-12 18:01:29.638229+13 2011-11-12 18:01:29.65711+13 f f 1126 \N f opaque \N 13 /user4/ /user4/home/ bef9dce8ea6e7a3f286f644b9680db9e mir-test t 2009-06-03 00:00:00+12 2011-11-12 18:01:30.744506+13 f f 13 \N f opaque \N 10 /user1/ /user1/created/ bac273dae96780a3c8ed0c032266322c created t 2011-11-12 18:01:35.273576+13 2011-11-12 18:01:35.273576+13 f f 1523 \N f opaque \N 101 /resource2/ /resource2/mulberry/ dd73d59d29f256fa22836cde6d629ffd mulberry t 2011-11-12 18:01:37.185386+13 2011-11-12 18:01:37.185386+13 f f 1526 \N f opaque \N 100 /resource1/ /resource1/mozilla/ 3d7629c721375907f4cf757fedc2293d A Pretty Name t 2011-11-12 18:01:42.473171+13 2011-11-12 18:01:42.473171+13 f f 1534 \N f opaque \N 10 /user1/ /user1/.out/ 1 User 1 Outbox f 2011-11-12 18:01:47.06714+13 2011-11-12 18:01:47.06714+13 f f 1542 \N f opaque \N 12 /user3/ /user3/home/ 5723e68d4eaef520f2b18370874914f1 user3 home t 2009-06-03 00:00:00+12 2011-11-12 18:03:01.534476+13 f f 12 \N f opaque \N 10 /user1/ /user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ ac192d10783fff90598af2facc8259df iCal Calendar t 2011-11-12 18:01:53.013479+13 2011-11-12 18:01:54.389418+13 f f 1547 \N f opaque \N 10 /user1/ /user1/.in/ 0389feae460444b4b5db3b16c94b1e43 User 1 Inbox f 2011-11-12 18:01:46.691619+13 2011-11-12 18:01:55.207844+13 f f 1541 \N f opaque \N 11 /user2/ /user2/.out/ 1 User 2 Outbox f 2011-11-12 18:01:55.535071+13 2011-11-12 18:01:55.535071+13 f f 1554 \N f opaque \N 10 /user1/ /user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/ 9ea60de39e80e2cff4216448984a5ee7 Untitled t 2011-11-12 18:02:01.945401+13 2011-11-12 18:02:01.945401+13 f f 1558 \N f opaque \N 10 /user1/ /user1/SOHO collection/ ef070277779ceec24677ad0a7e54e0af home t 2011-11-12 18:02:04.20553+13 2011-11-12 18:02:04.399489+13 f f 1559 \N f opaque \N 10 /user1/ /user1/collection/ e0fcc6a901645df3e00a290dc8a02387 collection t 2011-11-12 18:02:04.596171+13 2011-11-12 18:02:05.045318+13 f f 1560 \N f opaque \N 15 /User Six/ /User Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ d0711d9c33f6c22359ee83adb7751cda Space Calendar t 2011-11-12 18:02:26.843474+13 2011-11-12 18:02:26.843474+13 f f 1597 \N f opaque \N 15 /User Six/ /User Six/basic "Extended MKCOL"/ 670b39b9e393f6273bb680d2fd94df1a Extended MKCOL Calendar t 2011-11-12 18:02:27.25057+13 2011-11-12 18:02:27.25057+13 f f 1598 \N f opaque \N 15 /User Six/ /User Six/addressbook "Extended MKCOL"/ 5848ac341f4e027ceea7c3b98851b303 Extended MKCOL Address Book f 2011-11-12 18:02:27.436068+13 2011-11-12 18:02:27.436068+13 f f 1599 \N t opaque \N 10 /user1/ /user1/anotherone/ d28a7507a92f6f6b368c87a65808155e anotherone t 2011-11-12 18:02:25.497437+13 2011-11-12 18:02:29.469906+13 f f 1566 \N f opaque \N 13 /user4/ /user4/.out/ 1 User 4 Outbox f 2011-11-12 18:02:36.87136+13 2011-11-12 18:02:36.87136+13 f f 1600 \N f opaque \N 13 /user4/ /user4/base/ ae93907cb03bc025b8e733eb61f3a09e A normal collection f 2011-11-12 18:02:59.644231+13 2011-11-12 18:02:59.644231+13 f f 1605 \N f opaque \N 13 /user4/base/ /user4/base/newcalendar/ cb0b91b58d99fd869355038c35be73a0 newcalendar t 2011-11-12 18:03:01.890109+13 2011-11-12 18:03:01.904358+13 f f 1619 \N f opaque \N 11 /user2/ /user2/.in/ 7c1ce371d95e91e3853da0c46d541e22 User 2 Inbox f 2011-11-12 18:01:55.153282+13 2011-11-12 18:03:01.534476+13 f f 1551 \N f opaque \N 11 /user2/ /user2/home/ 5723e68d4eaef520f2b18370874914f1 User 2's Calendar, as uploaded by Admin t 2009-06-03 00:00:00+12 2011-11-12 18:03:01.534476+13 f f 11 \N f opaque \N 12 /user3/ /user3/.in/ 7c1ce371d95e91e3853da0c46d541e22 User 3 Inbox f 2011-11-12 18:03:01.534476+13 2011-11-12 18:03:01.534476+13 f f 1613 \N f opaque \N 14 /user5/ /user5/.in/ 7c1ce371d95e91e3853da0c46d541e22 User 5 Inbox f 2011-11-12 18:03:01.534476+13 2011-11-12 18:03:01.534476+13 f f 1616 \N f opaque \N 14 /user5/ /user5/home/ 5723e68d4eaef520f2b18370874914f1 user5 home t 2009-06-03 00:00:00+12 2011-11-12 18:03:01.534476+13 f f 14 \N f opaque \N 13 /user4/base/ /user4/base/calendar/ 5723e68d4eaef520f2b18370874914f1 A sub collection t 2011-11-12 18:02:59.837117+13 2011-11-12 18:03:01.534476+13 f f 1606 \N f opaque \N 10 /user1/ /user1/addressbook/ f545b8a26c501b1b1cb033b4a3b8de4c User 1's Addresses f 2011-11-12 18:03:24.876339+13 2011-11-12 18:03:32.210587+13 f f 1631 \N t opaque \N 11 /user2/ /user2/addressbook/ 949d7371ea974484d6b5fc2444495570 User 2's Addresses f 2011-11-12 18:03:33.778171+13 2011-11-12 18:03:33.778171+13 f f 1642 \N t opaque \N \. -- -- Data for Name: dav_binding; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY dav_binding (bind_id, bound_source_id, access_ticket_id, dav_owner_id, parent_container, dav_name, dav_displayname, external_url, type) FROM stdin; 1602 11 KNP0znpQ 1005 /user4/ /user4/user2/ Updated Displayname with PROPPATCH \N \N 1603 10 TZpLPt4E 1005 /user4/ /user4/user1/ User 1's Calendaranza \N \N 1607 10 TZpLPt4E 1005 /user4/base/ /user4/base/user1/ User 1's Calendaranza \N \N 1608 11 KNP0znpQ 1005 /user4/base/ /user4/base/user2/ User 2's Calendar, as uploaded by Admin \N \N 1630 1605 \N 1005 /user4/ /user4/boundbase/ A normal collection \N \N \. -- -- Data for Name: freebusy_ticket; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY freebusy_ticket (ticket_id, user_no, created) FROM stdin; \. -- -- Data for Name: grants; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY grants (by_principal, by_collection, to_principal, privileges, is_group) FROM stdin; 1002 \N 1009 000000000001001011000111 f 1008 \N 1009 000000000001001011000111 f 1011 \N 1012 111111111111111111111111 t 1010 \N 1012 111111111111111111111111 t 1009 \N 1013 000000000001001000000001 t 1002 \N 1013 000000000001001000000001 t 1008 \N 1013 000000000001001000000001 t \N 10 1005 000000000000001000110001 \N 1002 \N 1005 000000000001001000100001 \N \. -- -- Data for Name: group_member; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY group_member (group_id, member_id) FROM stdin; 1012 1002 1012 1003 1012 1009 1013 1008 1013 1002 1013 1009 \. -- -- Data for Name: locks; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY locks (dav_name, opaquelocktoken, type, scope, depth, owner, timeout, start) FROM stdin; /user1/home/i1278618276.ics 94959f71-e1fe-0ee4-ad60-1692de3a93ee write exclusive 0 http://andrew.mcmillan.net.nz/node/5/ 00:05:00 2011-11-12 18:02:12.976244 \. -- -- Data for Name: principal; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY principal (principal_id, type_id, user_no, displayname, default_privileges) FROM stdin; 1 1 1 DAViCal Administrator 000000000000000000000000 1001 1 2 Andrew McMillan 000000001111111000000000 1003 1 11 User 2 000000001111111000000000 1004 1 12 User 3 000000001111111000000000 1005 1 13 User 4 000000001111111000000000 1006 1 14 User 5 000000001111111000000000 1007 1 15 User 6 000000001111111000000000 1008 1 20 Manager 1 000000001111111000000000 1009 1 30 Assistant 1 000000001111111000000000 1010 2 100 Resource 1 000000001111111000000001 1011 2 101 Resource 2 000000001111111000000001 1012 3 200 Resource Managers 000000001111111000000000 1013 3 300 Team for Client1 000000001111111000000000 1002 1 10 User 1 000000000000000000000000 \. -- -- Data for Name: principal_type; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY principal_type (principal_type_id, principal_type_desc) FROM stdin; 1 Person 2 Resource 3 Group \. -- -- Data for Name: property; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY property (dav_name, property_name, property_value, changed_on, changed_by) FROM stdin; /user1/6E20BB7C-EFD9-4F0F-9BDC-5335E04D47E0/ http://apple.com/ns/ical/:calendar-color #391B71A0 2011-11-12 18:01:53.013479 10 /user1/home/ http://apple.com/ns/ical/:calendar-color #0252D4FF 2011-11-12 18:01:57.921111 10 /user1/home/ http://apple.com/ns/ical/:calendar-order 1 2011-11-12 18:01:58.078026 10 /user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/ http://apple.com/ns/ical/:calendar-color #391B71A0 2011-11-12 18:02:01.945401 10 /user1/VTODO-EFD9-4F0F-9BDC-5335E04D47E0/ urn:ietf:params:xml:ns:caldav:supported-calendar-component-set \n \n 2011-11-12 18:02:01.945401 10 /user1/SOHO collection/ urn:ietf:params:xml:ns:caldav:supported-calendar-component-set \n \n \n \n \n \n 2011-11-12 18:02:04.20553 10 /user1/SOHO collection/ urn:ietf:params:xml:ns:caldav:calendar-description Calendar description 2011-11-12 18:02:04.399489 10 /user1/SOHO collection/ com.apple.ical::calendarcolor #FF8000FF 2011-11-12 18:02:04.399489 10 /user1/collection/ urn:ietf:params:xml:ns:caldav:calendar-description My sample calendar\ndescription 2011-11-12 18:02:04.596171 10 /User Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/ http://apple.com/ns/ical/:calendar-color #391B71A0 2011-11-12 18:02:26.843474 15 /user4/user2/ http://xmlns.dotcal.com/dotcal:icon_uri http://eventful.com/favicon.ico 2011-11-12 18:02:58.402392 13 /user4/base/calendar/ urn:ietf:params:xml:ns:caldav:schedule-calendar-transp \n \n 2011-11-12 18:02:59.837117 13 /user4/base/user3/ http://xmlns.dotcal.com/dotcal:icon_uri http://eventful.com/favicon.ico 2011-11-12 18:03:02.609714 13 \. -- -- Data for Name: relationship; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY relationship (from_user, to_user, rt_id, confers) FROM stdin; 200 100 1 111111111111111111111111 200 101 1 111111111111111111111111 10 200 1 111111111111111111111111 11 200 1 111111111111111111111111 30 200 1 111111111111111111111111 30 20 2 000000000001001011000111 30 10 2 000000000001001011000111 20 300 3 000000000001001000000001 10 300 3 000000000001001000000001 30 300 3 000000000001001000000001 300 20 3 000000000001001000000001 300 10 3 000000000001001000000001 300 30 3 000000000001001000000001 11 10 4 000000000001001000000000 10 11 4 000000000001001000000000 \. -- -- Data for Name: relationship_type; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY relationship_type (rt_id, rt_name, rt_togroup, confers, rt_fromgroup, bit_confers) FROM stdin; 1 Administers \N A \N 111111111111111111111111 2 Can read/write to \N RW \N 000000000001001011000111 3 Can read from \N R \N 000000000001001000000001 4 Can see free/busy time of \N F \N 000000000001001000000000 \. -- -- Data for Name: role_member; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY role_member (role_no, user_no) FROM stdin; 1 1 1 2 4 100 4 101 2 200 2 300 \. -- -- Data for Name: roles; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY roles (role_no, role_name) FROM stdin; 1 Admin 2 Group 3 Public 4 Resource \. -- -- Data for Name: session; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY session (session_id, user_no, session_start, session_end, session_key, session_config) FROM stdin; \. -- -- Data for Name: supported_locales; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY supported_locales (locale, locale_name_en, locale_name_locale) FROM stdin; en English English de German Deutsch es_AR Spanish (Argentina) Español (Argentina) es_VE Spanish (Venezuela) Español (Venezuela) et Estonian Eesti fr French Français hu Hungarian Magyar it Italian Italiano ja Japanese 日本語 nb Norwegian Bokmål nl Netherlands Nederlands pl Polish Polski pt_BR Brazilian Portuguese Brazilian Portuguese pt_PT Portuguese Portuguese ru Russian Русский sv Swedish Svenska \. -- -- Data for Name: sync_changes; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY sync_changes (sync_time, collection_id, sync_status, dav_id, dav_name) FROM stdin; 2011-11-12 18:01:39.459601+13 10 201 1529 /user1/home/20061101T073004Z.ics 2011-11-12 18:01:41.187811+13 10 201 1530 /user1/home/4aaf8f37-f232-4c8e-a72e-e171d4c4fe54.ics 2011-11-12 18:01:41.728576+13 10 201 1531 /user1/home/9d050be7-8a02-4355-8ed3-02a9fc5f473f.ics 2011-11-12 18:01:41.927861+13 10 201 1532 /user1/home/1906b3ca-4890-468a-9b58-1de74bf2c716.ics 2011-11-12 18:01:42.13381+13 10 201 1533 /user1/home/fbd57454-d966-4a14-8341-abe1edb1ae66.ics 2011-11-12 18:01:42.647306+13 10 201 1535 /user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics 2011-11-12 18:01:42.845786+13 10 201 1536 /user1/home/917b9e47-b748-4550-a566-657fbe672447.ics 2011-11-12 18:01:43.042644+13 10 201 1537 /user1/home/0575d895-a006-4ed8-9be6-0d1b6b6b1f96.ics 2011-11-12 18:01:43.241225+13 10 201 1538 /user1/home/b1679f77-673d-4f46-b3eb-2420e1bba301.ics 2011-11-12 18:01:45.320294+13 10 201 1539 /user1/home/e70576e9-c1e0-431e-a507-0386fd82f223.ics 2011-11-12 18:01:45.562107+13 10 201 1540 /user1/home/e6eb5bc9-f7f9-4a0a-94e8-8e90eefc7d08.ics 2011-11-12 18:01:50.519194+13 10 201 1544 /user1/home/71e2ae82-7870-11db-c6d6-f6927c144649.ics 2011-11-12 18:01:50.746705+13 10 201 1545 /user1/home/da81c0ee-7871-11db-c6d6-f6927c144649.ics 2011-11-12 18:01:51.62059+13 10 200 1529 /user1/home/20061101T073004Z.ics 2011-11-12 18:01:52.566629+13 10 201 1546 /user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics 2011-11-12 18:01:52.806139+13 10 200 1546 /user1/home/AAA9318E-37D9-4319-8626-95ECD3D3B243.ics 2011-11-12 18:01:58.805213+13 10 201 1555 /user1/home/70D23799-4A68-4905-AB9F-4D47BA693CFD.ics 2011-11-12 18:01:59.924378+13 10 201 1556 /user1/home/0544-gzip-PUT.ics 2011-11-12 18:02:00.12613+13 10 201 1557 /user1/home/0545-deflate-PUT.ics 2011-11-12 18:02:05.972662+13 10 201 1563 /user1/home/i1278618276.ics 2011-11-12 18:02:06.35789+13 10 404 1563 /user1/home/i1278618276.ics 2011-11-12 18:02:07.657085+13 10 201 1564 /user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 2011-11-12 18:02:07.889979+13 10 201 1565 /user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 2011-11-12 18:02:26.484588+13 10 201 1596 /user1/home/PUT-eastern-time.ics 2011-11-12 18:02:29.244717+13 10 404 \N /user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 2011-11-12 18:02:29.469906+13 10 201 1564 /user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 2011-11-12 18:02:29.688526+13 10 404 \N /user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 2011-11-12 18:02:29.938583+13 10 201 1564 /user1/home/DAYPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics 2011-11-12 18:03:28.435723+13 1631 201 1635 /user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf 2011-11-12 18:03:28.770336+13 1631 200 1635 /user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf 2011-11-12 18:03:29.083913+13 1631 201 1636 /user1/addressbook/van_houtte.vcf 2011-11-12 18:03:29.356976+13 1631 201 1637 /user1/addressbook/mustrmahn.vcf 2011-11-12 18:03:29.658466+13 1631 201 1638 /user1/addressbook/andresenesq.vcf 2011-11-12 18:03:29.962136+13 1631 201 1639 /user1/addressbook/hans_dieter.vcf 2011-11-12 18:03:30.255235+13 1631 201 1640 /user1/addressbook/Jörg_Test-Roßdeutscher_2_0.vcf 2011-11-12 18:03:32.210587+13 1631 201 1641 /user1/addressbook/Jörg_Test-Roßdeutscher_3_0.vcf \. -- -- Data for Name: sync_tokens; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY sync_tokens (sync_token, collection_id, modification_time) FROM stdin; 1 10 2011-11-12 18:01:38.681169+13 2 10 2011-11-12 18:02:02.581755+13 3 10 2011-11-12 18:02:02.810619+13 4 10 2011-11-12 18:02:38.85582+13 5 10 2011-11-12 18:02:39.375219+13 6 11 2011-11-12 18:03:03.300234+13 7 1631 2011-11-12 18:03:27.271674+13 8 1631 2011-11-12 18:03:35.04901+13 \. -- -- Data for Name: timezones; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY timezones (our_tzno, tzid, olson_name, active, last_modified, etag, vtimezone) FROM stdin; 1 Europe/Helsinki Europe/Helsinki f 2011-11-12 05:01:30 \N BEGIN:VTIMEZONE\r\nTZID:Europe/Helsinki\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19810329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nTZNAME:EEST\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19961027T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nTZNAME:EET\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\n 2 America/Los_Angeles America/Los_Angeles f 2011-11-12 05:01:33 \N BEGIN:VTIMEZONE\r\nTZID:America/Los_Angeles\r\nX-LIC-LOCATION:America/Los_Angeles\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\n 3 Pacific/Auckland Pacific/Auckland f 2011-11-12 05:01:34 \N BEGIN:VTIMEZONE\r\nTZID:Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19700927T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=9\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=4\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\n 4 New Zealand Standard Time Pacific/Auckland f 2011-11-12 18:01:35.97247 \N BEGIN:VTIMEZONE\r\nLAST-MODIFIED:20040110T032845Z\r\nTZID:New Zealand Standard Time\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:DAYLIGHT\r\nDTSTART:20000404T020000\r\nRRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4\r\nTZNAME:NZDT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nDTSTART:20001026T020000\r\nRRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10\r\nTZNAME:NZST\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\n 5 /softwarestudio.org/Olson_20011030_5/Pacific/Auckland Pacific/Auckland f 2011-11-12 18:01:39.459601 \N BEGIN:VTIMEZONE\r\nTZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n 6 /mozilla.org/20050126_1/Pacific/Auckland Pacific/Auckland f 2011-11-12 18:01:41.187811 \N BEGIN:VTIMEZONE\r\nTZID:/mozilla.org/20050126_1/Pacific/Auckland\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n 7 /mozilla.org/20050126_1/Antarctica/McMurdo Antarctica/McMurdo f 2011-11-12 18:01:41.728576 \N BEGIN:VTIMEZONE\r\nTZID:/mozilla.org/20050126_1/Antarctica/McMurdo\r\nX-LIC-LOCATION:Antarctica/McMurdo\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n 8 /mozilla.org/20070129_1/Antarctica/McMurdo Antarctica/McMurdo f 2011-11-12 18:01:43.042644 \N BEGIN:VTIMEZONE\r\nTZID:/mozilla.org/20070129_1/Antarctica/McMurdo\r\nX-LIC-LOCATION:Antarctica/McMurdo\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700315T030000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SU;BYMONTH=3\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=10\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n 9 Europe/Prague Europe/Prague f 2011-11-12 18:01:58.238241 \N BEGIN:VTIMEZONE\r\nTZID:Europe/Prague\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nDTSTART:19810329T020000\r\nTZNAME:GMT+02:00\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nDTSTART:19961027T030000\r\nTZNAME:GMT+01:00\r\nTZOFFSETTO:+0100\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\n 10 Somewhere_in_Central_Europe \N f 2011-11-12 18:01:59.924378 \N BEGIN:VTIMEZONE\r\nTZID:Somewhere_in_Central_Europe\r\nX-MICROSOFT-CDO-TZID:4\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nDTSTART:19810329T020000\r\nTZNAME:GMT+02:00\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nDTSTART:19961027T030000\r\nTZNAME:GMT+01:00\r\nTZOFFSETTO:+0100\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\n 11 Prague_in_Central_Europe \N f 2011-11-12 18:02:00.12613 \N BEGIN:VTIMEZONE\r\nTZID:Prague_in_Central_Europe\r\nX-MICROSOFT-CDO-TZID:4\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nDTSTART:19810329T020000\r\nTZNAME:GMT+02:00\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nDTSTART:19961027T030000\r\nTZNAME:GMT+01:00\r\nTZOFFSETTO:+0100\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\n 12 America/New_York America/New_York f 2011-11-12 00:02:04.813125 \N BEGIN:VTIMEZONE\r\nTZID:America/New_York\r\nLAST-MODIFIED:20051220T211408Z\r\nBEGIN:STANDARD\r\nDTSTART:20051030T060000\r\nTZOFFSETTO:-0500\r\nTZOFFSETFROM:+0000\r\nTZNAME:EST\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nDTSTART:20060402T010000\r\nTZOFFSETTO:-0400\r\nTZOFFSETFROM:-0500\r\nTZNAME:EDT\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n 13 (UTC-05:00) Eastern Time (US & Canada) America/New_York f 2011-11-12 00:02:26.484588 \N BEGIN:VTIMEZONE\r\nTZID:(UTC-05:00) Eastern Time (US & Canada)\r\nBEGIN:STANDARD\r\nDTSTART:16010101T020000\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nDTSTART:16010101T020000\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n \. -- -- Data for Name: tmp_password; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY tmp_password (user_no, password, valid_until) FROM stdin; \. -- -- Data for Name: tz_aliases; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY tz_aliases (our_tzno, tzalias) FROM stdin; \. -- -- Data for Name: tz_localnames; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY tz_localnames (our_tzno, locale, localised_name, preferred) FROM stdin; \. -- -- Data for Name: usr; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY usr (user_no, active, email_ok, joined, updated, last_used, username, password, fullname, email, config_data, date_format_type, locale) FROM stdin; 1 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N admin **nimda DAViCal Administrator calendars@example.net \N E \N 2 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N andrew **x Andrew McMillan andrew@catalyst.net.nz \N E \N 11 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N user2 **user2 User 2 user2@example.net \N E \N 12 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N user3 **user3 User 3 user3@example.net \N E \N 13 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N user4 **user4 User 4 user4@example.net \N E \N 14 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N user5 **user5 User 5 user5@example.net \N E \N 15 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N User Six **user6 User 6 user6@example.net \N E \N 20 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N manager1 **manager1 Manager 1 manager1@example.net \N E \N 30 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N assistant1 **assistant1 Assistant 1 assistant1@example.net \N E \N 100 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N resource1 *salt*unpossible Resource 1 resource1@example.net \N E \N 101 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N resource2 *salt*unpossible Resource 2 resource2@example.net \N E \N 200 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N resmgr1 *salt*unpossible Resource Managers resource-managers@example.net \N E \N 300 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2009-06-02 00:00:00+12 \N teamclient1 *salt*unpossible Team for Client1 team-client1@example.net \N E \N 10 t 2011-11-12 00:00:00+13 2009-06-01 00:00:00+12 2011-11-12 18:02:14.593923+13 \N user1 **user1 User 1 user1@example.net \N E \N \. -- -- Data for Name: usr_setting; Type: TABLE DATA; Schema: public; Owner: davical_dba -- COPY usr_setting (user_no, setting_name, setting_value) FROM stdin; \. -- -- Name: access_ticket_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY access_ticket ADD CONSTRAINT access_ticket_pkey PRIMARY KEY (ticket_id); -- -- Name: addressbook_resource_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY addressbook_resource ADD CONSTRAINT addressbook_resource_pkey PRIMARY KEY (dav_id); -- -- Name: caldav_data_dav_id_key; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY caldav_data ADD CONSTRAINT caldav_data_dav_id_key UNIQUE (dav_id); -- -- Name: caldav_data_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY caldav_data ADD CONSTRAINT caldav_data_pkey PRIMARY KEY (user_no, dav_name); -- -- Name: calendar_attendee_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY calendar_attendee ADD CONSTRAINT calendar_attendee_pkey PRIMARY KEY (dav_id, attendee); -- -- Name: calendar_item_dav_id_key; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY calendar_item ADD CONSTRAINT calendar_item_dav_id_key UNIQUE (dav_id); -- -- Name: calendar_item_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY calendar_item ADD CONSTRAINT calendar_item_pkey PRIMARY KEY (user_no, dav_name); -- -- Name: collection_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY collection ADD CONSTRAINT collection_pkey PRIMARY KEY (collection_id); -- -- Name: collection_user_no_dav_name_key; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY collection ADD CONSTRAINT collection_user_no_dav_name_key UNIQUE (user_no, dav_name); -- -- Name: dav_binding_dav_name_key; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY dav_binding ADD CONSTRAINT dav_binding_dav_name_key UNIQUE (dav_name); -- -- Name: dav_binding_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY dav_binding ADD CONSTRAINT dav_binding_pkey PRIMARY KEY (bind_id); -- -- Name: freebusy_ticket_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY freebusy_ticket ADD CONSTRAINT freebusy_ticket_pkey PRIMARY KEY (ticket_id); -- -- Name: locks_opaquelocktoken_key; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY locks ADD CONSTRAINT locks_opaquelocktoken_key UNIQUE (opaquelocktoken); -- -- Name: principal_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY principal ADD CONSTRAINT principal_pkey PRIMARY KEY (principal_id); -- -- Name: principal_type_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY principal_type ADD CONSTRAINT principal_type_pkey PRIMARY KEY (principal_type_id); -- -- Name: property_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY property ADD CONSTRAINT property_pkey PRIMARY KEY (dav_name, property_name); -- -- Name: relationship_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY relationship ADD CONSTRAINT relationship_pkey PRIMARY KEY (from_user, to_user, rt_id); -- -- Name: relationship_type_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY relationship_type ADD CONSTRAINT relationship_type_pkey PRIMARY KEY (rt_id); -- -- Name: roles_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY roles ADD CONSTRAINT roles_pkey PRIMARY KEY (role_no); -- -- Name: session_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY session ADD CONSTRAINT session_pkey PRIMARY KEY (session_id); -- -- Name: supported_locales_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY supported_locales ADD CONSTRAINT supported_locales_pkey PRIMARY KEY (locale); -- -- Name: sync_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY sync_tokens ADD CONSTRAINT sync_tokens_pkey PRIMARY KEY (sync_token); -- -- Name: timezones_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY timezones ADD CONSTRAINT timezones_pkey PRIMARY KEY (our_tzno); -- -- Name: timezones_tzid_key; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY timezones ADD CONSTRAINT timezones_tzid_key UNIQUE (tzid); -- -- Name: unique_path; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY collection ADD CONSTRAINT unique_path UNIQUE (dav_name); -- -- Name: unique_user; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY principal ADD CONSTRAINT unique_user UNIQUE (user_no); -- -- Name: usr_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY usr ADD CONSTRAINT usr_pkey PRIMARY KEY (user_no); -- -- Name: usr_setting_pkey; Type: CONSTRAINT; Schema: public; Owner: davical_dba; Tablespace: -- ALTER TABLE ONLY usr_setting ADD CONSTRAINT usr_setting_pkey PRIMARY KEY (user_no, setting_name); -- -- Name: caldav_data_collection_id_fkey; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE INDEX caldav_data_collection_id_fkey ON caldav_data USING btree (collection_id); -- -- Name: calendar_item_collection_id_fkey; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE INDEX calendar_item_collection_id_fkey ON calendar_item USING btree (collection_id); -- -- Name: grants_pk1; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE UNIQUE INDEX grants_pk1 ON grants USING btree (by_principal, to_principal); -- -- Name: grants_pk2; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE UNIQUE INDEX grants_pk2 ON grants USING btree (by_collection, to_principal); -- -- Name: group_member_pk; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE UNIQUE INDEX group_member_pk ON group_member USING btree (group_id, member_id); -- -- Name: group_member_sk; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE INDEX group_member_sk ON group_member USING btree (member_id); -- -- Name: locks_dav_name_idx; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE INDEX locks_dav_name_idx ON locks USING btree (dav_name); -- -- Name: properties_dav_name_idx; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE INDEX properties_dav_name_idx ON property USING btree (dav_name); -- -- Name: sync_processing_index; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE INDEX sync_processing_index ON sync_changes USING btree (collection_id, dav_id, sync_time); -- -- Name: usr_sk1_unique_username; Type: INDEX; Schema: public; Owner: davical_dba; Tablespace: -- CREATE UNIQUE INDEX usr_sk1_unique_username ON usr USING btree (lower(username)); -- -- Name: dav_principal_delete; Type: RULE; Schema: public; Owner: davical_dba -- CREATE RULE dav_principal_delete AS ON DELETE TO dav_principal DO INSTEAD (DELETE FROM usr WHERE (usr.user_no = old.user_no); DELETE FROM principal WHERE (principal.principal_id = old.principal_id); ); -- -- Name: dav_principal_insert; Type: RULE; Schema: public; Owner: davical_dba -- CREATE RULE dav_principal_insert AS ON INSERT TO dav_principal DO INSTEAD (INSERT INTO usr (user_no, active, joined, updated, username, password, fullname, email, email_ok, date_format_type, locale) VALUES (COALESCE(new.user_no, nextval('usr_user_no_seq'::regclass)), COALESCE(new.user_active, true), now(), now(), new.username, new.password, COALESCE(new.fullname, new.displayname), new.email, new.email_ok, COALESCE(new.date_format_type, 'E'::text), new.locale); INSERT INTO principal (user_no, principal_id, type_id, displayname, default_privileges) VALUES (COALESCE(new.user_no, currval('usr_user_no_seq'::regclass)), COALESCE(new.principal_id, nextval('dav_id_seq'::regclass)), new.type_id, COALESCE(new.displayname, new.fullname), COALESCE(new.default_privileges, (0)::bit(24))); ); -- -- Name: dav_principal_update; Type: RULE; Schema: public; Owner: davical_dba -- CREATE RULE dav_principal_update AS ON UPDATE TO dav_principal DO INSTEAD (UPDATE usr SET user_no = new.user_no, active = new.user_active, updated = now(), username = new.username, password = new.password, fullname = new.fullname, email = new.email, email_ok = new.email_ok, date_format_type = new.date_format_type, locale = new.locale WHERE (usr.user_no = old.user_no); UPDATE principal SET principal_id = new.principal_id, type_id = new.type_id, displayname = new.displayname, default_privileges = new.default_privileges WHERE (principal.principal_id = old.principal_id); ); -- -- Name: alarm_changed; Type: TRIGGER; Schema: public; Owner: davical_dba -- CREATE TRIGGER alarm_changed AFTER UPDATE ON calendar_alarm FOR EACH ROW EXECUTE PROCEDURE alarm_changed(); -- -- Name: caldav_data_modified; Type: TRIGGER; Schema: public; Owner: davical_dba -- CREATE TRIGGER caldav_data_modified AFTER INSERT OR DELETE OR UPDATE ON caldav_data FOR EACH ROW EXECUTE PROCEDURE caldav_data_modified(); -- -- Name: caldav_data_sync_dav_id; Type: TRIGGER; Schema: public; Owner: davical_dba -- CREATE TRIGGER caldav_data_sync_dav_id AFTER INSERT OR UPDATE ON caldav_data FOR EACH ROW EXECUTE PROCEDURE sync_dav_id(); -- -- Name: collection_modified; Type: TRIGGER; Schema: public; Owner: davical_dba -- CREATE TRIGGER collection_modified AFTER UPDATE ON collection FOR EACH ROW EXECUTE PROCEDURE collection_modified(); -- -- Name: grants_modified; Type: TRIGGER; Schema: public; Owner: davical_dba -- CREATE TRIGGER grants_modified AFTER INSERT OR UPDATE ON grants FOR EACH ROW EXECUTE PROCEDURE grants_modified(); -- -- Name: principal_modified; Type: TRIGGER; Schema: public; Owner: davical_dba -- CREATE TRIGGER principal_modified AFTER UPDATE ON principal FOR EACH ROW EXECUTE PROCEDURE principal_modified(); -- -- Name: usr_modified; Type: TRIGGER; Schema: public; Owner: davical_dba -- CREATE TRIGGER usr_modified AFTER UPDATE ON usr FOR EACH ROW EXECUTE PROCEDURE usr_modified(); -- -- Name: access_ticket_dav_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY access_ticket ADD CONSTRAINT access_ticket_dav_owner_id_fkey FOREIGN KEY (dav_owner_id) REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: access_ticket_target_collection_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY access_ticket ADD CONSTRAINT access_ticket_target_collection_id_fkey FOREIGN KEY (target_collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: access_ticket_target_resource_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY access_ticket ADD CONSTRAINT access_ticket_target_resource_id_fkey FOREIGN KEY (target_resource_id) REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: addressbook_address_adr_dav_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY addressbook_address_adr ADD CONSTRAINT addressbook_address_adr_dav_id_fkey FOREIGN KEY (dav_id) REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: addressbook_address_email_dav_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY addressbook_address_email ADD CONSTRAINT addressbook_address_email_dav_id_fkey FOREIGN KEY (dav_id) REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: addressbook_address_tel_dav_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY addressbook_address_tel ADD CONSTRAINT addressbook_address_tel_dav_id_fkey FOREIGN KEY (dav_id) REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: addressbook_resource_dav_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY addressbook_resource ADD CONSTRAINT addressbook_resource_dav_id_fkey FOREIGN KEY (dav_id) REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: caldav_data_collection_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY caldav_data ADD CONSTRAINT caldav_data_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: caldav_data_logged_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY caldav_data ADD CONSTRAINT caldav_data_logged_user_fkey FOREIGN KEY (logged_user) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE SET DEFAULT DEFERRABLE; -- -- Name: caldav_data_user_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY caldav_data ADD CONSTRAINT caldav_data_user_no_fkey FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: caldav_exists; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY calendar_item ADD CONSTRAINT caldav_exists FOREIGN KEY (user_no, dav_name) REFERENCES caldav_data(user_no, dav_name) MATCH FULL ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: calendar_alarm_dav_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY calendar_alarm ADD CONSTRAINT calendar_alarm_dav_id_fkey FOREIGN KEY (dav_id) REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: calendar_attendee_dav_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY calendar_attendee ADD CONSTRAINT calendar_attendee_dav_id_fkey FOREIGN KEY (dav_id) REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: calendar_item_collection_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY calendar_item ADD CONSTRAINT calendar_item_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: calendar_item_tz_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY calendar_item ADD CONSTRAINT calendar_item_tz_id_fkey FOREIGN KEY (tz_id) REFERENCES timezones(tzid); -- -- Name: calendar_item_user_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY calendar_item ADD CONSTRAINT calendar_item_user_no_fkey FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: collection_timezone_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY collection ADD CONSTRAINT collection_timezone_fkey FOREIGN KEY (timezone) REFERENCES timezones(tzid) ON UPDATE CASCADE ON DELETE SET NULL; -- -- Name: collection_user_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY collection ADD CONSTRAINT collection_user_no_fkey FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: dav_binding_access_ticket_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY dav_binding ADD CONSTRAINT dav_binding_access_ticket_id_fkey FOREIGN KEY (access_ticket_id) REFERENCES access_ticket(ticket_id) ON UPDATE CASCADE ON DELETE SET NULL; -- -- Name: dav_binding_bound_source_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY dav_binding ADD CONSTRAINT dav_binding_bound_source_id_fkey FOREIGN KEY (bound_source_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: dav_binding_dav_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY dav_binding ADD CONSTRAINT dav_binding_dav_owner_id_fkey FOREIGN KEY (dav_owner_id) REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: freebusy_ticket_user_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY freebusy_ticket ADD CONSTRAINT freebusy_ticket_user_no_fkey FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: grants_by_collection_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY grants ADD CONSTRAINT grants_by_collection_fkey FOREIGN KEY (by_collection) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: grants_by_principal_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY grants ADD CONSTRAINT grants_by_principal_fkey FOREIGN KEY (by_principal) REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: grants_to_principal_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY grants ADD CONSTRAINT grants_to_principal_fkey FOREIGN KEY (to_principal) REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: group_member_group_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY group_member ADD CONSTRAINT group_member_group_id_fkey FOREIGN KEY (group_id) REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: group_member_member_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY group_member ADD CONSTRAINT group_member_member_id_fkey FOREIGN KEY (member_id) REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: principal_type_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY principal ADD CONSTRAINT principal_type_id_fkey FOREIGN KEY (type_id) REFERENCES principal_type(principal_type_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE; -- -- Name: principal_user_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY principal ADD CONSTRAINT principal_user_no_fkey FOREIGN KEY (user_no) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE; -- -- Name: property_changed_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY property ADD CONSTRAINT property_changed_by_fkey FOREIGN KEY (changed_by) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE SET DEFAULT; -- -- Name: relationship_from_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY relationship ADD CONSTRAINT relationship_from_user_fkey FOREIGN KEY (from_user) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: relationship_rt_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY relationship ADD CONSTRAINT relationship_rt_id_fkey FOREIGN KEY (rt_id) REFERENCES relationship_type(rt_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: relationship_to_user_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY relationship ADD CONSTRAINT relationship_to_user_fkey FOREIGN KEY (to_user) REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: role_member_role_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY role_member ADD CONSTRAINT role_member_role_no_fkey FOREIGN KEY (role_no) REFERENCES roles(role_no); -- -- Name: role_member_user_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY role_member ADD CONSTRAINT role_member_user_no_fkey FOREIGN KEY (user_no) REFERENCES usr(user_no) ON DELETE CASCADE; -- -- Name: session_user_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY session ADD CONSTRAINT session_user_no_fkey FOREIGN KEY (user_no) REFERENCES usr(user_no) ON DELETE CASCADE; -- -- Name: sync_changes_collection_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY sync_changes ADD CONSTRAINT sync_changes_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: sync_tokens_collection_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY sync_tokens ADD CONSTRAINT sync_tokens_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE; -- -- Name: tmp_password_user_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY tmp_password ADD CONSTRAINT tmp_password_user_no_fkey FOREIGN KEY (user_no) REFERENCES usr(user_no); -- -- Name: tz_aliases_our_tzno_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY tz_aliases ADD CONSTRAINT tz_aliases_our_tzno_fkey FOREIGN KEY (our_tzno) REFERENCES timezones(our_tzno); -- -- Name: tz_localnames_our_tzno_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY tz_localnames ADD CONSTRAINT tz_localnames_our_tzno_fkey FOREIGN KEY (our_tzno) REFERENCES timezones(our_tzno); -- -- Name: usr_setting_user_no_fkey; Type: FK CONSTRAINT; Schema: public; Owner: davical_dba -- ALTER TABLE ONLY usr_setting ADD CONSTRAINT usr_setting_user_no_fkey FOREIGN KEY (user_no) REFERENCES usr(user_no) ON DELETE CASCADE; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- Name: access_ticket; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE access_ticket FROM PUBLIC; REVOKE ALL ON TABLE access_ticket FROM davical_dba; GRANT ALL ON TABLE access_ticket TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE access_ticket TO davical_app; -- -- Name: addressbook_address_adr; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE addressbook_address_adr FROM PUBLIC; REVOKE ALL ON TABLE addressbook_address_adr FROM davical_dba; GRANT ALL ON TABLE addressbook_address_adr TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE addressbook_address_adr TO davical_app; -- -- Name: addressbook_address_email; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE addressbook_address_email FROM PUBLIC; REVOKE ALL ON TABLE addressbook_address_email FROM davical_dba; GRANT ALL ON TABLE addressbook_address_email TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE addressbook_address_email TO davical_app; -- -- Name: addressbook_address_tel; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE addressbook_address_tel FROM PUBLIC; REVOKE ALL ON TABLE addressbook_address_tel FROM davical_dba; GRANT ALL ON TABLE addressbook_address_tel TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE addressbook_address_tel TO davical_app; -- -- Name: addressbook_resource; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE addressbook_resource FROM PUBLIC; REVOKE ALL ON TABLE addressbook_resource FROM davical_dba; GRANT ALL ON TABLE addressbook_resource TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE addressbook_resource TO davical_app; -- -- Name: awl_db_revision; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE awl_db_revision FROM PUBLIC; REVOKE ALL ON TABLE awl_db_revision FROM davical_dba; GRANT ALL ON TABLE awl_db_revision TO davical_dba; GRANT SELECT ON TABLE awl_db_revision TO davical_app; -- -- Name: dav_id_seq; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON SEQUENCE dav_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE dav_id_seq FROM davical_dba; GRANT ALL ON SEQUENCE dav_id_seq TO davical_dba; GRANT SELECT,UPDATE ON SEQUENCE dav_id_seq TO davical_app; -- -- Name: caldav_data; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE caldav_data FROM PUBLIC; REVOKE ALL ON TABLE caldav_data FROM davical_dba; GRANT ALL ON TABLE caldav_data TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE caldav_data TO davical_app; -- -- Name: calendar_alarm; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE calendar_alarm FROM PUBLIC; REVOKE ALL ON TABLE calendar_alarm FROM davical_dba; GRANT ALL ON TABLE calendar_alarm TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE calendar_alarm TO davical_app; -- -- Name: calendar_attendee; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE calendar_attendee FROM PUBLIC; REVOKE ALL ON TABLE calendar_attendee FROM davical_dba; GRANT ALL ON TABLE calendar_attendee TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE calendar_attendee TO davical_app; -- -- Name: calendar_item; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE calendar_item FROM PUBLIC; REVOKE ALL ON TABLE calendar_item FROM davical_dba; GRANT ALL ON TABLE calendar_item TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE calendar_item TO davical_app; -- -- Name: collection; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE collection FROM PUBLIC; REVOKE ALL ON TABLE collection FROM davical_dba; GRANT ALL ON TABLE collection TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE collection TO davical_app; -- -- Name: dav_binding; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE dav_binding FROM PUBLIC; REVOKE ALL ON TABLE dav_binding FROM davical_dba; GRANT ALL ON TABLE dav_binding TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE dav_binding TO davical_app; -- -- Name: principal; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE principal FROM PUBLIC; REVOKE ALL ON TABLE principal FROM davical_dba; GRANT ALL ON TABLE principal TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE principal TO davical_app; -- -- Name: usr; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE usr FROM PUBLIC; REVOKE ALL ON TABLE usr FROM davical_dba; GRANT ALL ON TABLE usr TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE usr TO davical_app; -- -- Name: dav_principal; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE dav_principal FROM PUBLIC; REVOKE ALL ON TABLE dav_principal FROM davical_dba; GRANT ALL ON TABLE dav_principal TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE dav_principal TO davical_app; -- -- Name: freebusy_ticket; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE freebusy_ticket FROM PUBLIC; REVOKE ALL ON TABLE freebusy_ticket FROM davical_dba; GRANT ALL ON TABLE freebusy_ticket TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE freebusy_ticket TO davical_app; -- -- Name: grants; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE grants FROM PUBLIC; REVOKE ALL ON TABLE grants FROM davical_dba; GRANT ALL ON TABLE grants TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE grants TO davical_app; -- -- Name: group_member; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE group_member FROM PUBLIC; REVOKE ALL ON TABLE group_member FROM davical_dba; GRANT ALL ON TABLE group_member TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE group_member TO davical_app; -- -- Name: locks; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE locks FROM PUBLIC; REVOKE ALL ON TABLE locks FROM davical_dba; GRANT ALL ON TABLE locks TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE locks TO davical_app; -- -- Name: principal_type; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE principal_type FROM PUBLIC; REVOKE ALL ON TABLE principal_type FROM davical_dba; GRANT ALL ON TABLE principal_type TO davical_dba; GRANT SELECT ON TABLE principal_type TO davical_app; -- -- Name: principal_type_principal_type_id_seq; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON SEQUENCE principal_type_principal_type_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE principal_type_principal_type_id_seq FROM davical_dba; GRANT ALL ON SEQUENCE principal_type_principal_type_id_seq TO davical_dba; GRANT SELECT,UPDATE ON SEQUENCE principal_type_principal_type_id_seq TO davical_app; -- -- Name: property; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE property FROM PUBLIC; REVOKE ALL ON TABLE property FROM davical_dba; GRANT ALL ON TABLE property TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE property TO davical_app; -- -- Name: relationship; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE relationship FROM PUBLIC; REVOKE ALL ON TABLE relationship FROM davical_dba; GRANT ALL ON TABLE relationship TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE relationship TO davical_app; -- -- Name: relationship_type; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE relationship_type FROM PUBLIC; REVOKE ALL ON TABLE relationship_type FROM davical_dba; GRANT ALL ON TABLE relationship_type TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE relationship_type TO davical_app; -- -- Name: relationship_type_rt_id_seq; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON SEQUENCE relationship_type_rt_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE relationship_type_rt_id_seq FROM davical_dba; GRANT ALL ON SEQUENCE relationship_type_rt_id_seq TO davical_dba; GRANT SELECT,UPDATE ON SEQUENCE relationship_type_rt_id_seq TO davical_app; -- -- Name: role_member; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE role_member FROM PUBLIC; REVOKE ALL ON TABLE role_member FROM davical_dba; GRANT ALL ON TABLE role_member TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE role_member TO davical_app; -- -- Name: roles; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE roles FROM PUBLIC; REVOKE ALL ON TABLE roles FROM davical_dba; GRANT ALL ON TABLE roles TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE roles TO davical_app; -- -- Name: roles_role_no_seq; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON SEQUENCE roles_role_no_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE roles_role_no_seq FROM davical_dba; GRANT ALL ON SEQUENCE roles_role_no_seq TO davical_dba; GRANT SELECT,UPDATE ON SEQUENCE roles_role_no_seq TO davical_app; -- -- Name: session; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE session FROM PUBLIC; REVOKE ALL ON TABLE session FROM davical_dba; GRANT ALL ON TABLE session TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE session TO davical_app; -- -- Name: session_session_id_seq; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON SEQUENCE session_session_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE session_session_id_seq FROM davical_dba; GRANT ALL ON SEQUENCE session_session_id_seq TO davical_dba; GRANT SELECT,UPDATE ON SEQUENCE session_session_id_seq TO davical_app; -- -- Name: supported_locales; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE supported_locales FROM PUBLIC; REVOKE ALL ON TABLE supported_locales FROM davical_dba; GRANT ALL ON TABLE supported_locales TO davical_dba; GRANT SELECT ON TABLE supported_locales TO davical_app; -- -- Name: sync_changes; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE sync_changes FROM PUBLIC; REVOKE ALL ON TABLE sync_changes FROM davical_dba; GRANT ALL ON TABLE sync_changes TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE sync_changes TO davical_app; -- -- Name: sync_tokens; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE sync_tokens FROM PUBLIC; REVOKE ALL ON TABLE sync_tokens FROM davical_dba; GRANT ALL ON TABLE sync_tokens TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE sync_tokens TO davical_app; -- -- Name: sync_tokens_sync_token_seq; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON SEQUENCE sync_tokens_sync_token_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE sync_tokens_sync_token_seq FROM davical_dba; GRANT ALL ON SEQUENCE sync_tokens_sync_token_seq TO davical_dba; GRANT SELECT,UPDATE ON SEQUENCE sync_tokens_sync_token_seq TO davical_app; -- -- Name: timezones; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE timezones FROM PUBLIC; REVOKE ALL ON TABLE timezones FROM davical_dba; GRANT ALL ON TABLE timezones TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE timezones TO davical_app; -- -- Name: timezones_our_tzno_seq; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON SEQUENCE timezones_our_tzno_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE timezones_our_tzno_seq FROM davical_dba; GRANT ALL ON SEQUENCE timezones_our_tzno_seq TO davical_dba; GRANT SELECT,UPDATE ON SEQUENCE timezones_our_tzno_seq TO davical_app; -- -- Name: tmp_password; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE tmp_password FROM PUBLIC; REVOKE ALL ON TABLE tmp_password FROM davical_dba; GRANT ALL ON TABLE tmp_password TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE tmp_password TO davical_app; -- -- Name: tz_aliases; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE tz_aliases FROM PUBLIC; REVOKE ALL ON TABLE tz_aliases FROM davical_dba; GRANT ALL ON TABLE tz_aliases TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE tz_aliases TO davical_app; -- -- Name: tz_localnames; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE tz_localnames FROM PUBLIC; REVOKE ALL ON TABLE tz_localnames FROM davical_dba; GRANT ALL ON TABLE tz_localnames TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE tz_localnames TO davical_app; -- -- Name: usr_setting; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON TABLE usr_setting FROM PUBLIC; REVOKE ALL ON TABLE usr_setting FROM davical_dba; GRANT ALL ON TABLE usr_setting TO davical_dba; GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE usr_setting TO davical_app; -- -- Name: usr_user_no_seq; Type: ACL; Schema: public; Owner: davical_dba -- REVOKE ALL ON SEQUENCE usr_user_no_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE usr_user_no_seq FROM davical_dba; GRANT ALL ON SEQUENCE usr_user_no_seq TO davical_dba; GRANT SELECT,UPDATE ON SEQUENCE usr_user_no_seq TO davical_app; -- -- PostgreSQL database dump complete -- davical-1.1.1/testing/tests/ischedule/3041-iSchedule-POST-freebusy.test0000644000000000000000000000303211711704476022375 0ustar # # Testing for iSchedule POST for free/busy # TYPE=POST URL=http://regression.host/.well-known/ischedule HEADER=X-DAViCal-Flush-Cache: true HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEADER=iSchedule-version: 1.0 HEADER=Originator: mailto:manager1@example.net HEADER=Recipient: mailto:user1@example.net HEADER=Content-Type: text/calendar; component=VFREEBUSY; method=REQUEST HEADER=DKIM-Signature: v=1; a=rsa-sha256; s=cal; d=caldav; c=simple-http; q=dns/txt; l=461; t=1327606990; h=Host:Originator:Recipient:Content-Type:iSchedule-Version; bh=Dnd3WvL8kUGlFHPMafcrxUHfUqp+JHz44wfDQczsX5g=; b=dXZABHimLzLylHlnMdb9CC+i0VxCBYcBSunZxDVHwyJk11V9pzhue5RAzZJwGv2Ty0mrsEVsixQqJeFnUDHIOH39MVdIHtN5tyCAwgvNAQ8A8D6gaUct+8QAC0BQSw3Uk5aPW4n4+f12UXBrqDYbBJPftmuKoFvee7muChhJA5Ua665cebX9IunSVhF3eD6OP+C0KrCqICNo59wRoYaku+uw83jVJ8imznkQ7kpv4Hwe+sXMzgddoEXzkPQxeoDinMPtP4DFNoV0ShiM8o9DJ37n4wzLHaZfaXeCa/KtwlqnTGysvLi6XS9ENiQGa3aQTpLEMjLOvaFRefypLWoqzQ== #AUTH=manager1:manager1 BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN VERSION:2.0 METHOD:REQUEST PRODID:-//Apple Inc.//iCal 4.0.4//EN BEGIN:VFREEBUSY UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 DTEND:20111008T110000Z ATTENDEE:mailto:user1@example.net DTSTART:20111004T110000Z X-CALENDARSERVER-MASK-UID:E1A13F04-iCal-schedule DTSTAMP:20111019T085957Z ORGANIZER:mailto:manager1@example.net SUMMARY:Availability for mailto:manager1@example.net and mailto:user1@ex ample.net END:VFREEBUSY END:VCALENDAR ENDDATA REPLACE=/DTSTAMP:\d{8}T\d{6}Z/DTSTAMP:yyyymmddThhmmssZ/ davical-1.1.1/testing/tests/ischedule/3041-iSchedule-POST-freebusy.result0000644000000000000000000000142011712322200022711 0ustar mailto:user1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20111004T110000Z DTEND:20111008T110000Z FREEBUSY:20111005T140000Z/20111005T150000Z FREEBUSY:20111005T184500Z/20111005T193000Z FREEBUSY:20111007T100000Z/20111007T110000Z UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 ORGANIZER:mailto:manager1@example.net ATTENDEE:mailto:user1@example.net END:VFREEBUSY END:VCALENDAR davical-1.1.1/testing/tests/ischedule/3040-iSchedule-POST-freebusy.test0000644000000000000000000000303211711704476022374 0ustar # # Testing for iSchedule POST for free/busy # TYPE=POST URL=http://regression.host/.well-known/ischedule HEADER=X-DAViCal-Flush-Cache: true HEADER=DAVKit/4.0.3 (732.2); CalendarStore/4.0.4 (997.7); iCal/4.0.4 (1395.7); Mac OS X/10.6.8 (10K549) HEADER=iSchedule-version: 1.0 HEADER=Originator: mailto:manager1@example.net HEADER=Recipient: mailto:user1@example.net HEADER=Content-Type: text/calendar; component=VFREEBUSY; method=REQUEST HEADER=DKIM-Signature: v=1; a=rsa-sha256; s=cal; d=caldav; c=simple-http; q=dns/txt; l=461; t=1327295130; h=Host:Originator:Recipient:Content-Type:iSchedule-Version; bh=fp2XWRh4wwpKaSre3oMIDTZZISC+QuEHviUafTr4aT0=; b=O+u2QGEnuY8ZILDAznzkWCuFjvH+q+STP48Ylg657U+heASKaoE8mdEyvE5nRtFCdpbuWLX8EtmD/VpacqBDxFf48XcW9TpFU7KszllXKx7ZGN9rOjgO1/znmzN1xPG5PNMWlBNTteQCaDiifNoChtyBTIFtMjYWFxUy4cp+cW5dMQDwEgHrJCiP54jRw+e1OsHJFFpWZ32l0+4An4aZneJX0ByrbGzieEK3SiDqAM1TvOk37tIcw/jeUX5lpcC43uowPTx3ErckbymHqoewOVdwMEM/WdhyioLe+W6jzdQW1Mjvo6LCveipIrD6CojGi7YeEqEzgaAcU/O3/pu4kw== #AUTH=manager1:manager1 BEGINDATA BEGIN:VCALENDAR CALSCALE:GREGORIAN VERSION:2.0 METHOD:REQUEST PRODID:-//Apple Inc.//iCal 4.0.4//EN BEGIN:VFREEBUSY UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 DTEND:20111019T110000Z ATTENDEE:mailto:user1@example.net DTSTART:20111018T110000Z X-CALENDARSERVER-MASK-UID:E1A13F04-iCal-schedule DTSTAMP:20111019T085957Z ORGANIZER:mailto:manager1@example.net SUMMARY:Availability for mailto:manager1@example.net and mailto:user1@ex ample.net END:VFREEBUSY END:VCALENDAR ENDDATA REPLACE=/DTSTAMP:\d{8}T\d{6}Z/DTSTAMP:yyyymmddThhmmssZ/ davical-1.1.1/testing/tests/ischedule/3040-iSchedule-POST-freebusy.result0000644000000000000000000000121411712322200022711 0ustar mailto:user1@example.net 2.0;Success BEGIN:VCALENDAR PRODID:-//davical.org//NONSGML AWL Calendar//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:REPLY BEGIN:VFREEBUSY DTSTAMP:yyyymmddThhmmssZ DTSTART:20111018T110000Z DTEND:20111019T110000Z UID:E9F98477-A9C2-43F9-8371-CBA0CBCB0300 ORGANIZER:mailto:manager1@example.net ATTENDEE:mailto:user1@example.net END:VFREEBUSY END:VCALENDAR davical-1.1.1/davical.spec.in0000644000000000000000000000413211633117640012671 0ustar %define issnapshot @@ISSNAPSHOT@@ %define gitrev @@GITREV@@ %if 0%{issnapshot} %define snapshotversionstring .%{gitrev}git %define snapshotpackagestring -git%{gitrev} %endif Name: davical Summary: CalDAV Server Version: @@VERSION@@ Release: 1%{?snapshotversionstring}%{?dist} Group: System Environment/Daemons License: GPL and LGPL Source: http://debian.mcmillan.net.nz/packages/davical/davical-%{version}%{?snapshotpackagestring}.tar.gz URL: http://davical.org/ BuildArch: noarch BuildRequires: php-awl BuildRequires: sed Requires: php php-gettext php-pgsql Requires: postgresql postgresql-server Requires: php-awl Requires: perl-YAML Requires: perl-DBD-Pg %description The DAViCal CalDAV Server is designed to trivially store CalDAV calendars, such as those from Evolution, Sunbird/Lightning, Mulberry, iCal, iPhone or SOHO Organizer, in a central location, providing shared calendars, free/busy publication and a basic administration interface. %prep %setup -q -n "davical-%{version}%{?snapshotpackagestring}" %build sed -i "s#set_include_path('../inc:../htdocs:/usr/share/awl/inc');#set_include_path('/usr/share/davical/inc:/usr/share/davical/htdocs:/usr/share/php/awl/inc');#" scripts/sync-remote-caldav.php sed -i 's:../../awl/inc:%{_datadir}/php/awl/inc:' htdocs/always.php sed -i 's:AWL_LOCATION="../awl":AWL_LOCATION="%{_datadir}/php/awl":' scripts/po/rebuild-translations.sh make %install install -D -p -m 755 scripts/sync-remote-caldav.php %{buildroot}/%{_bindir}/sync-remote-caldav mkdir -p %{buildroot}%{_datadir}/%{name} cp -a dba htdocs locale inc %{buildroot}/%{_datadir}/%{name} install -D -p -m 644 config/example-config.php %{buildroot}/%{_sysconfdir}/%{name}/config.php install -D -p -m 644 config/apache-davical.conf %{buildroot}/%{_sysconfdir}/httpd/conf.d/davical.conf %files %defattr(-,root,root) %{_datadir}/%{name}/* %config(noreplace) %{_sysconfdir}/%{name}/config.php %config(noreplace) %{_sysconfdir}/httpd/conf.d/%{name}.conf %{_bindir}/sync-remote-caldav %doc README ChangeLog %changelog * Tue Feb 22 2011 Felix Möller - 0.9.9.4 - Initial Version of DAViCal package davical-1.1.1/.tx/0000755000000000000000000000000011776303357010530 5ustar davical-1.1.1/.tx/config0000644000000000000000000000021111651601111011667 0ustar [davical.messagespot] file_filter = po/.po source_file = po/messages.pot source_lang = en [main] host = http://www.transifex.net davical-1.1.1/Makefile0000755000000000000000000000350711704220743011453 0ustar #!/usr/bin/make -f # package := davical majorversion := $(shell sed -n 's:\([0-9\.]*\)[-a-f0-9-]*:\1:p' VERSION) gitrev := 0 version := $(majorversion) issnapshot := 0 snapshot : gitrev = $(shell git rev-parse --short HEAD) snapshot : version = $(majorversion)-git$(gitrev) snapshot : issnapshot = 1 .PHONY: nodocs nodocs: htdocs/always.php built-po .PHONY: all all: htdocs/always.php built-docs built-po built-docs: docs/api/phpdoc.ini htdocs/*.php inc/*.php docs/translation.rst phpdoc -c docs/api/phpdoc.ini || echo "NOTICE: Failed to build optional API docs" rst2pdf docs/translation.rst || echo "NOTICE: Failed to build ReST docs" touch $@ built-po: htdocs/always.php scripts/po/rebuild-translations.sh po/*.po scripts/po/rebuild-translations.sh touch $@ # # Insert the current version number into always.php # htdocs/always.php: inc/always.php.in scripts/build-always.sh VERSION dba/davical.sql scripts/build-always.sh <$< >$@ # # Build a release .tar.gz file in the directory above us # .PHONY: release release: built-docs VERSION -ln -s . $(package)-$(version) sed 's:@@VERSION@@:$(majorversion):' davical.spec.in | \ sed 's:@@ISSNAPSHOT@@:$(issnapshot):' | \ sed 's:@@GITREV@@:$(gitrev):' > davical.spec echo "git ls-files |grep -v '.git'|sed -e s:^:$(package)-$(version)/:" tar czf ../$(package)-$(version).tar.gz \ --no-recursion --dereference $(package)-$(version) \ $(shell git ls-files |grep -v '.git'|sed -e s:^:$(package)-$(version)/:) \ $(shell find $(package)-$(version)/docs/api/ ! -name "phpdoc.ini" ) \ davical.spec rm $(package)-$(version) .PHONY: snapshot snapshot: release .PHONY: clean clean: rm -f built-docs built-po -find . -name "*~" -delete -rm docs/translation.pdf -rm davical.spec .PHONY: clean-all clean-all: clean -find docs/api/* ! -name "phpdoc.ini" ! -name ".gitignore" -delete davical-1.1.1/config/0000755000000000000000000000000011776303357011264 5ustar davical-1.1.1/config/debug-config.php0000644000000000000000000000435711217772737014341 0ustar debug_email /** * If you want to debug you have to set to 1 one of this variable * and then you can look at the error log of PHP for example : * $c->dbg["ALL"] = 1; * and then tail -f /var/log/apache2/error_log (or wherever PHP errors are logged). * * in the code a line like this: * dbg_error_log( "Login", "blabla %s blalba %s",first_string, second_string ); * will produce in apache error log and if $c->dbg['Login'] ==1 : "blabla first_string blalba second_string" * using format rules as for printf and related functions. */ // $c->dbg["ALL"] = 1; // $c->dbg["request"] = 1; // The request headers & content // $c->dbg['response'] = 1; // The response headers & content // $c->dbg["component"] = 1; // $c->dbg['caldav'] = 1; // $c->dbg['querystring'] = 1; // $c->dbg['icalendar'] = 1; // $c->dbg['ics'] = 1; // $c->dbg['login'] = 1; // $c->dbg['options'] = 1; // $c->dbg['get'] = 1; // $c->dbg['put'] = 1; // $c->dbg['propfind'] = 1; // $c->dbg['proppatch'] = 1; // $c->dbg['report'] = 1; // $c->dbg['principal'] = 1; // $c->dbg['user'] = 1; // $c->dbg['vevent'] = 1; // $c->dbg['rrule'] = 1; /** * default is 'davical' used to prefix debugging messages but will only need to change * if you are running multiple DAViCal servers logging into the same place. */ // $c->sysabbr = 'davical'; /** * As yet we only support quite a limited range of options. When we see clients looking * for more than this we will work to support them further. So we can see clients trying * to use such methods there is a configuration option to override and allow lying about * what is available. * ex : $c->override_allowed_methods = "PROPPATCH,OPTIONS, GET, HEAD, PUT, DELETE, PROPFIND, MKCOL, MKCALENDAR, LOCK, UNLOCK, REPORT" * Don't muck with this unless you are trying to write code to support a new option! */ // $c->override_allowed_methods = "PROPPATCH, OPTIONS, GET, HEAD, PUT, DELETE, PROPFIND, MKCOL, MKCALENDAR, LOCK, UNLOCK, REPORT" davical-1.1.1/config/example-config.php0000644000000000000000000004335211711704476014676 0ustar pg_connect[] = 'dbname=davical port=5432 user=general' * The application will attempt to * connect to the database, successively applying connection parameters from * the array in $c->pg_connect. * used in the web interface but also the caldav Server */ $c->pg_connect[] = "dbname=davical user=davical_app"; // $c->pg_connect[] = "dbname=davical user=davical_app port=5433 host=somehost password=mypass"; /**************************** ********* Desirable ********* *****************************/ /** * default : DAViCal CalDAV Server * Is used to specify the authentication realm of the server, as well as * being used as a name to display in various places. */ // $c->system_name = "DAViCal CalDAV Server"; /** * default: true * If true, then VTODO requested from someone other than the admmin or owner * of a calendar will not get any answer. Often these todo are only relevant * to the owner, but in some shared calendar situations they might not be in * which case you should set this to false. */ // $c->hide_TODO = false; /** * default: true * If true, then calendars accessed via WebDAV will only be readonly. Any * changes to them must be applied via CalDAV. * * You may want to set this to false during your initial setup to make it * easier for people to PUT whole calendars as part of the conversion of * their data. After this it is recommended to turn it off so that clients * which have been misconfigured are readily identifiable. */ // $c->readonly_webdav_collections = false; /*************************************************************************** * * * ADMIN web Interface * * * ***************************************************************************/ /** * Displayed on the login page to indicate who you should ask if you have * problems logging on. Also for the "From" of the email sent when a user * has lost his password and click on the login page * on "Help! I've forgotten my password" */ $c->admin_email ='calendar-admin@example.com'; /** * default=true * if true the admin web interface will * have link on name to access details *

The "enable_row_linking" option controls whether javascript is used * to make the entire row clickable in browse lists in the administration * pages. Since this doesn't work in Konqueror you may want to set this * to false if you expect people to be using Konqueror with the DAViCal * administration pages.

*/ // $c->enable_row_linking = true; /** * These should be an array of style sheets with a path specified relative * to the root directory. Used for overriding display styles in the admin * interface. * e.g. : $c->local_styles = array('/css/my.css'); **/ // $c->local_styles = array(); // $c->print_styles = array(); /*************************************************************************** * * * Caldav Server * * * ***************************************************************************/ /** * The "collections_always_exist" value defines whether a MKCALENDAR * command is needed to create a calendar collection before calendar * resources can be stored in it. You will want to leave this to the * default (true) if people will be using Evolution or Sunbird / * Lightning against this because that software does not support the * creation of calendar collections. * Default: true */ $c->collections_always_exist = false; /** * The name of a user's "home" calendar. This will be created for each * new user. * Default: 'home' */ // $c->home_calendar_name = 'home'; /** * An array of groups / permissions which should be automatically added * for each new user created. This is a crude mechanism which we * will hopefully manage to work out some better approach for in the * future. For now, create an array that looks something like: * array( 9 => 'R', 4 => 'A' ) * to create a 'read' relationship to user_no 9 and an 'all' relation * with user_no 4. * Default: none */ // $c->default_relationships = array(); /** * An array of the privileges which will be configured for a user by default * from the possible set of real privileges: * 'read', 'write-properties', 'write-content', 'unlock', 'read-acl', 'read-current-user-privilege-set', * 'bind', 'unbind', 'write-acl', 'read-free-busy', * 'schedule-deliver-invite', 'schedule-deliver-reply', 'schedule-query-freebusy', * 'schedule-send-invite', 'schedule-send-reply', 'schedule-send-freebusy' * * Or also from these aggregated privileges: * 'write', 'schedule-deliver', 'schedule-send', 'all' */ // $c->default_privileges = array('read-free-busy', 'schedule-query-freebusy'); /** * An array of fields on the usr record which should be set to specific * values when the users are created. * Default: none */ // $c->template_usr = array( 'active' => true, // 'locale' => 'it_IT', // 'date_format_type' => 'E', // 'email_ok' => date('Y-m-d') // ); /** * If true, then remote scheduling will be enabled. There is a possibility * of receiving spam events in calendars if enabled, you will at least know * what domain the spam came from as domain key signatures are required for * events to be accepted. * * You probably need to setup Domain Keys for your domain as well as the * appropiate DNS SRV records. * * for example, if DAViCal is installed on cal.example.com you should have * DNS SRV records like this: * _ischedules._tcp.example.com. IN SRV 0 1 443 cal.example.com * _ischedule._tcp.example.com. IN SRV 0 1 80 cal.example.com * * DNS TXT record for signing outbound requests * example: * cal._domainkey.example.com. 86400 IN TXT "k=rsa\; t=s\; p=PUBKEY" * Default: false */ //$c->enable_scheduling = true; /** * Domain Key domain to use when signing outbound scheduling requests, this * is the domain with the public key in a TXT record as shown above. * * TODO: enable domain/signing by per user keys, patches welcome. * Default: none */ //$c->scheduling_dkim_domain = ''; /** * Domain Key selector to use when signing outbound scheduling requests. * * TODO: enable selectors/signing by per user keys, patches welcome. * Default: 'cal' */ //$c->scheduling_dkim_selector = 'cal'; /* * Domain Key private key * Required if you want to enable outbound remote server scheduling * Default: none */ /* $c->schedule_private_key = 'PRIVATE-KEY-BASE-64-DATA'; */ /* * External subscription (BIND) minimum refresh interval * Required if you want to enable remote binding ( webcal subscriptions ) * Default: none */ /* $c->external_refresh = 60; */ /*************************************************************************** * * * External Authentication Sources * * * ***************************************************************************/ /** * Allow specifying another way to control access of the user by authenticating * him against other drivers such has LDAP (the default is the PgSQL DB) * $c->authenticate_hook['call'] should be set to the name of the plugin and must * be a valid function that will be call like this: * call_user_func( $c->authenticate_hook['call'], $username, $password ) * * The login mecanism is made in 2 places: * - for the web interface in: index.php that calls DAViCalSession.php that extends * Session.php (from AWL libraries) * - for the caldav client in: caldav.php that calls BasicAuthSession.php * Both Session.php and BasicAuthSession.php check against the * authenticate_hook['call'], although for BasicAuthSession.php this will be for * each page. For Session.php this will only occur during login. * * $c->authenticate_hook['config'] should be set up with any configuration data * needed by the authenticate call for the moment used only in awl/inc/AuthPlugins.php * and he used to authenticate the user should be at least 'password,user_no' * awl/inc/AuthPlugins.php is a sample file not used by showing what could be * a hook * * $c->authenticate_hook['optional'] = true; can be set to try default authentication * as well in case the configured hook should report a failure. */ /********************************/ /******* Other AWL hook *********/ /********************************/ // require_once('auth-functions.php'); // $c->authenticate_hook = array( // 'call' => 'AuthExternalAwl', // 'config' => array( // // A PgSQL database connection string for the database containing user records // 'connection' => 'dbname=wrms host=otherhost port=5433 user=general', // // Which columns should be fetched from the database // 'columns' => "user_no, active, email_ok, joined, last_update AS updated, last_used, username, password, fullname, email", // // a WHERE clause to limit the records returned. // 'where' => "active AND org_code=7" // ) // ); /********************************/ /*********** LDAP hook **********/ /********************************/ /* * For Active Directory go down to the next example. */ //$c->authenticate_hook['call'] = 'LDAP_check'; //$c->authenticate_hook['config'] = array( // 'host' => 'www.tennaxia.net', //host name of your LDAP Server // 'port' => '389', //port /* For the initial bind to be anonymous leave bindDN and passDN commented out */ // DN to bind to this server enabling to perform request // 'bindDN'=> 'cn=manager,cn=internal,dc=tennaxia,dc=net', // Password of the previous bindDN to bind to this server enabling to perform request // 'passDN'=> 'xxxxxxxx', // 'protocolVersion' => '3', //Version of LDAP protocol to use // 'baseDNUsers'=> 'dc=tennaxia,dc=net', //where to look at valid user // 'filterUsers' => 'objectClass=kolabInetOrgPerson', //filter which must validate a user according to RFC4515, i.e. surrounded by brackets // 'baseDNGroups' => 'ou=divisions,dc=tennaxia,dc=net', //where to look for groups // 'filterGroups' => 'objectClass=groupOfUniqueNames', //filter with same rules as filterUsers /** /!\ "username" should be set and "updated" must be set **/ // 'mapping_field' => array("username" => "uid", // "updated" => "modifyTimestamp", // "fullname" => "cn" , // "email" =>"mail" // ), //used to create the user based on his ldap properties // 'group_mapping_field' => array("username" => "cn", // "updated" => "modifyTimestamp", // "fullname" => "cn" , // "members" =>"memberUid" // ), //used to create the group based on the ldap properties /** used to set default value for all users, will be overcharged by ldap if defined also in mapping_field **/ // 'default_value' => array("date_format_type" => "E","locale" => "fr_FR"), /** foreach key set start and length in the string provided by ldap example for openLDAP timestamp : 20070503162215Z **/ // 'format_updated'=> array('Y' => array(0,4),'m' => array(4,2),'d'=> array(6,2),'H' => array(8,2),'M'=>array(10,2),'S' => array(12,2)), // 'startTLS' => 'yes', // Require that TLS is used for LDAP? // If ldap_start_tls is not working, it is probably // because php wants to validate the server's // certificate. Try adding "TLS_REQCERT never" to the // ldap configuration file that php uses (e.g. /etc/ldap.conf // or /etc/ldap/ldap.conf). Of course, this lessens security! // 'scope' => 'subtree', // Search scope to use, defaults to subtree. // // Allowed values: base, onelevel, subtree. // // ); // // /* If there is some user you do not want to sync from LDAP, put their username in this list */ // $c->do_not_sync_from_ldap = array( 'admin' => true ); // //include('drivers_ldap.php'); /* * Use the following LDAP example if you are using Active Directory * * You will need to change host, passDN and DOMAIN in bindDN * and baseDNUsers. */ //$c->authenticate_hook['call'] = 'LDAP_check'; //$c->authenticate_hook['config'] = array( // 'host' => 'ldap://ldap.example.net', // 'bindDN' => 'auth@DOMAIN', // 'passDN' => 'secret', // 'baseDNUsers' => 'dc=DOMAIN,dc=local', // 'protocolVersion' => 3, // 'optReferrals' => 0, // 'filterUsers' => '(&(objectcategory=person)(objectclass=user)(givenname=*))', // 'mapping_field' => array("username" => "uid", // "fullname" => "cn" , // "email" => "mail"), // 'default_value' => array("date_format_type" => "E","locale" => "en_NZ"), // 'format_updated' => array('Y' => array(0,4),'m' => array(4,2),'d'=> array(6,2),'H' => array(8,2),'M'=>array(10,2),'S' => array(12,2)) // ); // // /* If there is some user you do not want to sync from LDAP, put their username in this list */ // $c->do_not_sync_from_ldap = array( 'admin' => true ); // //include('drivers_ldap.php'); /** * Authentication against PAM using the Squid helper script. */ //$c->authenticate_hook = array( // 'call' => 'SQUID_PAM_check', // 'config' => array( 'script' => '/usr/bin/pam_auth', 'email_base' => 'example.com' ) // ); //include('drivers_squid_pam.php'); /** * Authentication against PAM/system password database using pwauth. */ //$c->authenticate_hook = array('call' => 'PWAUTH_PAM_check', // 'config' => array('path' => '/usr/sbin/pwauth', // 'email_base' => 'example.com')); //include('drivers_pwauth_pam.php'); /** * The default locale will be "en_NZ"; * If you are in a non-English locale, you can set the default_locale * configuration to one of the supported locales. * * Supported Locales (at present, see: "select * from supported_locales ;" for a full list) * * "de_DE", "en_NZ", "es_AR", "fr_FR", "nl_NL", "ru_RU" * * If you want locale support you probably know more about configuring it than me, but * at this stage it should be noted that all translations are UTF-8, and pages are * served as UTF-8, so you will need to ensure that the UTF-8 versions of these locales * are supported on your system. * * People interested in providing new translations are directed to the Wiki: * http://wiki.davical.org/w/Translating_DAViCal **/ // $c->default_locale = "en_NZ"; /** * Default will be $_SERVER['SERVER_NAME']; * This is used to construct URLs which are passed in the answers to the client. You may * want to force this to a specific domain in responses if your system is accessed by * multiple names, otherwise you probably won't need to change it. */ // $c->domain_name; /** * Used as a fallback for the TZID of an event where one is not supplied as part * of a VEVENT. The local (server) time zone will be used as a default. */ // $c->local_tzid; /** * Many people want this, but it may be a security issue for you, so it is * disabled by default. If you enable it, then confidential / private events * will be visible to the 'organizer' or 'attendee' lists. The reason that * this becomes a security issue is that this identification needs to be based * on the user's e-mail address. The user's e-mail address is generally * something which they can set, so they could change it to be the address of * an attendee of a meeting and then would be able to read the meeting. * * Without this, the only person who can view/change PRIVATE or CONFIDENTIAL * events in a calendar is someone with full administrative rights to the calendar * usually the owner. * * If the only person that devious is your sysadmin then you probably already * enabled this option... */ // $c->allow_get_email_visibility = false; /*************************************************************************** * * * Push Notification Server * * * ***************************************************************************/ /* * This enable XMPP PubSub push notifications to clients that request them. * N.B. this will publish urls for ALL updates and does NOT restrict * subscription permissions on the jabber server! That means anyone with * read access to the pubsub tree of your jabber server can watch for updates, * they will only see URL's to the updated entries not the calendar data. * * Only tested with ejabberd 2.0.x */ // $c->notifications_server = array( 'host' => $_SERVER['SERVER_NAME'], // jabber server hostname // 'jid' => 'user@example.com', // user(JID) to login/ publish as 'password' => '', // password for above account // // 'debug_jid' => 'otheruser@example.com' // send a copy of all publishes to this jid // ); // include ( 'pubsub.php' ); davical-1.1.1/config/imap_pam_conf_php.txt0000644000000000000000000000045611633117640015457 0ustar /** * Authentication against IMAP using the imap_open function. */ $c->authenticate_hook['call'] = 'IMAP_PAM_check'; $c->authenticate_hook['config'] = array( 'imap_url' => '{localhost:993/imap/ssl/novalidate-cert}', 'email_base' => 'example.com' ); include('drivers_imap_pam.php'); davical-1.1.1/config/example-administration.yml0000644000000000000000000000210311215137004016437 0ustar # # Administration Configuration file (sample) # # This file is only used by command-line programs accessing the DAViCal # database for maintenance. It should be as secure as you can make it # since it contains passwords and connection details for a more powerful # database connection. Mode 600 is recommended. # # This file should be called 'administration.yml' in the config directory. # ## ## The database username for connecting with sufficient rights to create ## tables, functions and granting access to other users. admin_db_user: davical_dba ## ## The password. Leading and trailling spaces are stripped, so don't do that #admin_db_pass: very, very 5ecret ## ## The hostname/IP. Not needed if using unix sockets to a local server. #admin_db_host: 2401:170:20:17::1024:0 #admin_db_host: 172.17.217.2 #admin_db_host: dbserver.davical.net ## ## The database name admin_db_name: davical ## ## The database port. Not needed if it is the default '5432' #admin_db_port: 5432 ## ## The name of the database user the web application uses to connect app_db_user: davical_app davical-1.1.1/config/other-config.php0000644000000000000000000000533111633117640014351 0ustar something * which are (or might appear to be) configuration items. This file contains * some documentation for them, but it is strongly recommended that you should * not touch any of these. Either you will break the application or they will * have no effect because they are simply calculated internally. */ /** * Set automatically according to $_SERVER['SCRIPT_NAME'] * It will be used to set the address of each tab of the web interface, * to set the relative address of images and so forth. You probably should * not change it unless you know why you want to. */ // $c->base_url /** * Automatically set according to $_SERVER['DOCUMENT_ROOT'], but could be overridden * if that gets it wrong for some reason. */ // $c->base_directory = "/not/here"; /** * Used to set the timeouts applying to the LOCK method. */ // $c->default_lock_timeout; // $c->maximum_lock_timeout; /** * default = true; * If set, DAViCal will store each unique time zone used in any calendar to speed * future timezone interpretation. */ // $c->save_time_zone_defs; /** * Internal variable used to contain arrays of stylesheets or javascripts * which are needed by the page being displayed. */ // Usually internally assigned, but you may want to set it to something meaningful // if you are writing your own pages within the admin interface. // $c->scripts = array(); // $c->stylesheets = array(); /** * Internal variable to display page's title * in the web interface */ // Usually internally assigned, but you may want to set it to something meaningful // if you are writing your own pages within the admin interface. // $c->page_title; /** * Internal array variable to hold error messages to be displayed on top of page * in the web interface */ // Usually internally assigned, but you may want to append meaningful messages // to this array if you are writing your own pages within the admin interface. //$c->messages; /** * These 6 next properties are extracted automatically from the Changelog * used to give informtion for debugging */ // Internally assigned // $c->code_debian, // $c->code_major, // $c->code_minor, // $c->code_patch, // $c->code_pkgver, // $c->code_version, /** * Used internally to know the revision of the database schema and display * in HTTP error anwser in the header */ // Internally assigned // $c->schema_major // $c->schema_minor // $c->schema_patch // $c->schema_version /** * This property is used to enforce regular ordering of query results so * that the regression test output is deterministically ordered. In * real life this is not important, and it is a performance hit, so it * should not usually be enabled anywhere else. */ // $c->strict_result_ordering = boolean; davical-1.1.1/config/apache-davical.conf0000644000000000000000000000065711633117640014753 0ustar # DAViCal Calendar Server Alias /davical /usr/share/davical/htdocs DirectoryIndex index.php index.html AllowOverride None Order allow,deny Allow from all AcceptPathInfo On php_value include_path /usr/share/php/awl/inc php_value magic_quotes_gpc 0 php_value register_globals 0 php_value error_reporting "E_ALL & ~E_NOTICE" php_value default_charset "utf-8" davical-1.1.1/ChangeLog0000644000000000000000000017706511776150052011601 0ustar 2012-07-04 Andrew McMillan * CalDAV client library: Handle multiple "Allow" header lines. * Fix checking of Basic Auth headers. 2012-07-03 Andrew McMillan * Fix ldap driver to handle numeric usernames correctly. 2012-07-02 Andrew McMillan * Deny calendar-query report on root, principal or addressbook Even if recursive report is enabled. 2012-06-30 Andrew McMillan * Handle allprop and ommission of prop tag in calendar-query. * Better timezone handling for parsed alarm times. 2012-06-28 Andrew McMillan * Include memory in statistics debug. * Add an option to kill the current process after exceeding a memory limit. 2012-06-27 Andrew McMillan * Fix DISTINCT clause where DAViCal is configured to allow recursive calendars. 2012-06-26 Andrew McMillan * Fix debian bug #656392 - correct detection of suhosin.server_strip status. 2012-06-25 Andrew McMillan * Catch 'events' without a DTSTART gracefully and ignore them. 2012-06-21 Andrew McMillan * Fix notification of deletes when hide_older_than is set. 2012-06-19 Andrew McMillan * Fix call to BuildDeadPropertyXML. 2012-06-17 Andrew McMillan * Release 1.1.0 * Allow a configurable path replacement regex. 2012-06-14 Andrew McMillan * Decide whether we can write the principal before we refer to it... * When a VEVENT has an invalid repeat frequency we pretend it is DAILY. And log an error, just to be obnoxious. 2012-06-11 Andrew McMillan * Allow a user delegated write access to the principal to maintain it. 2012-05-30 Andrew McMillan * Fix some niggles with setup.php and spurious logged errors. 2012-05-28 Andrew McMillan * Handle relative file references better, * Add support for $c->hide_older_than to this report. 2012-05-20 Andrew McMillan * Updated & new regression tests for various XML processing changes. * Simplify using GetPath() method. * Use fully namespaced tags. * Fix storing / regurgitating of XML fragments in dead properties. Requires updated AWL to match. 2012-05-15 Andrew McMillan * Add support by Ján Máté for arbitrary collections to create on user creation. * Don't disable upload field. Use library to create 'append mode' field. 2012-05-14 Andrew McMillan * Test result of PROPFIND on / * Further tests for BIND, particular transitive BINDs. * Retry contacting LDAP server and fail with 503 if unavailable. * Reduce unnecessary logging. * Bugfix replacing $row->dav_id with $row->collection_id. * We should error 500 when we have an exception that isn't caught. 2012-05-07 Frank Steinberg * Attendees can only modify own event instance and own PARTSTAT 2012-05-05 Andrew McMillan * A function which can expand collections inside collections. * When a bind is made to an existing bind, bind to the target of that. * When logging failed anonymous access, don't crash and burn. * When matching a URL something missing a trailing slash could also be a binding. 2012-05-03 Andrew McMillan * A more efficient query for GET including sub-collections. * Fix getctag replacement in this test. * Current regression test results. * A default timezone if there is not one set in the PHP configuration. * Changes to the way XML is created, and (to a lesser extent) parsed. * Merge 'Brief' header support into support for "Prefer" * Always default the timezone to something, even if the user did not. 2012-04-30 Andrew McMillan * Simple changes for new XML processing. * Add log_caldav_action() hook on addressbook writes. * If there are no instances ensure earliest_start still gets a value. 2012-04-22 Andrew McMillan * Make it possible to see output from /setup.php when DB is unavailable. 2012-04-09 Daniel Aleksandersen * Fix failing principal creation for new users using IMAP PAM * Provide user feedback when php5-imap is missing. 2012-04-19 Andrew McMillan * Need $request globally in this function * Correct response code for PROPPATCH and add support for Brief header. 2012-04-18 Andrew McMillan * Handle modified which is just YYYYMMDDHHMMSS with no indication of datedness. * Fix bug in "Edit" of existing grant. * Don't try and initialize gettext unless it's installed. 2012-04-17 Andrew McMillan * Further fixes to WebDAV synchronization. * Remove davical upgrade log on debian package removal. 2012-04-16 Andrew McMillan * Changes to the way PROPPATCH returns errors. 2012-04-11 Andrew McMillan * Make sure we increment the sync-token on PUT / DELETE. * Don't log response for a 404 to reduce log noise. 2012-04-10 Andrew McMillan * Add another hook since sometimes we want the action hook to be post commit. 2012-04-06 Andrew McMillan * Make it so that PUT of a calendar collection becomes a synchronisation. 2012-04-05 Andrew McMillan * Do a bit_or() among multiple privilege settings. 2012-04-04 Andrew McMillan * Fix default URL for FindPrincipal() ensure If-Match etag is quoted. * Refactor checking of If-*-Match headers into a single place. 2012-03-22 Andrew McMillan * Get rid of potential warning on early use of date() * Basic support for RFC5995 - Using POST to add collection members. * Better privilege checking on POST scheduling actions. * Fix a bug in GET on collections. * Slight header changes as a result of caldav proxy changes. * Allow complete disabling of handling for Apple's old calendar-proxy. * Changes to Depth handling. 2012-03-19 Andrew McMillan * Fix for collections where sync_token does not compute. 2012-03-17 Andrew McMillan * Principals don't (yet) have a sync-token. * We should respond with sync-token if PROPFIND asks too. 2012-03-16 Andrew McMillan * Correct HTTP date formatting function. * Remove chance of unset variable warning. 2012-03-13 Andrew McMillan * Don't log 401 response since it's so frequent. * Add a basic status/method/uri in front of each logged error. 2012-03-12 Rob Ostensen * Add the ability to override dns for iSchedule using a global variable $icfg 2012-03-12 Rob Ostensen * Skip empty domains in iSchedule setup page 2012-03-12 Andrew McMillan * Allow dav_test to be used against random SSL certs. * Add $c->auto_refresh_duration option to set a auto refresh on any GET calendar. * Handle HTTP date formatting for non-english locales (force English names). * Silence the warning if this is not initialised. 2012-03-11 Rob Ostensen * verify required headers are signed * add disallowed header check and some comments 2012-03-07 Rob Ostensen * fix a few external BIND import bugs 2012-03-11 Andrew McMillan * iSchedule administration helper. 2012-03-02 Andrew McMillan * Changed default Depth for PROPFIND. * Changes due to responding that VPOLL/VAVAILABILITY are OK. * Fix bug introduced with iSchedule support. * Fix defaulting of Depth value for newer PHP versions. 2012-02-24 Andrew McMillan * Add a command-line script to export a single calendar to stdout. * Split major functionality out of GET into it's own include. * Only send a Content-Length if the length is > 0 2012-02-21 Andrew McMillan * Override the "don't PUT a whole calendar" option. * A command-line script to load a calendar from an iCalendar file. 2012-02-06 Andrew McMillan * Detect unsupported sync-level and return specified error. * Force casting of user_no to integer. 2012-02-02 Andrew McMillan * Work from new iana timezone registry. 2012-02-01 Rob Ostensen * ischedule: more correct error codes * remove some of the debugging cruft * ischedule: fake session info when writing scheduling collections 2012-01-31 Rob Ostensen * ischedule: correctly set the attendee value on freebusy replies * ischedule: actually add attendee to freebusy reply ics 2012-02-01 Andrew McMillan * Implement support for 'Brief' header. Also add VPOLL and VAVAILABILITY to list of supported components. * Don't include the example .htaccess on Debian systems. 2012-01-25 Andrew McMillan * Correct variable name used parsing RFC5545 duration. 2012-01-23 Andrew McMillan * Fix problems calling import collection from external contexts. * Allow specifying that this test will use Digest authentication. * Clean up content-type checking so it's not so noisy on null content. 2012-01-17 Andrew McMillan * Make the 'append' option work. 2012-01-31 Rob Ostensen * ischedule: make invites and replies work * iSchedule: minor fix * iSchedule changes: fix signed domain, better error handling, cleanups * ischedule freebusy should work now * closer to a working version 2012-01-30 Rob Ostensen * fix xml queries 2012-01-27 Rob Ostensen * debug logging and some typo fixes * return calendar contents if present otherwise return status * initial tests for remote iSchedule requests signed using test keys * remote scheduling requests should work now, still need to handle ADD/CANCEL requests 2012-01-25 Andrew McMillan * Correct variable name used parsing RFC5545 duration. 2012-01-23 Andrew McMillan * Fix problems calling import collection from external contexts. * Allow specifying that this test will use Digest authentication. * Clean up content-type checking so it's not so noisy on null content. 2012-01-17 Rob Ostensen * iSchedule internal round trip with headers and body signing then verification working 2012-01-17 Andrew McMillan * Make the 'append' option work. 2012-01-16 Rob Ostensen * reformatting to match the rest of DAViCal and a few code changes 2012-01-15 Andrew McMillan * * Use If-Modified-Since-HTTP-Header * Fix remote time comparison * Compute version only once * Use automatic Makefile variables * Make several targets .PHONY 2012-01-14 Andrew McMillan * Probably a smidgin more efficient this way around. * LDAP driver should not log password unless password logging is specifically on. * Release 1.0.2 2012-01-13 Andrew McMillan * Handle VCARD adr/tel/email which have multiple types. * Set the default URL to the default calendar name rather than /home/ * Enable the file upload for addressbook collections. * Handle addressbook import along with calendar import. * Write UID and REV property n VCARD if they are missing. * Fix bug in scheduling on POST request. * Fix permissions on user create via external auth. 2012-01-12 Andrew McMillan * Allow for silly programs that send content-type XML with a GET request. * Support use of HTTP_AUTHORIZATION in addition to AUTHORIZATION cgi. * Add a default min_age for external binds. 2012-01-06 Rob Ostensen * Prevent external binds from being created/updated if curl is missing. * Add check to setup page to test whether curl is installed. 2012-01-05 Andrew McMillan * Release 1.0.1 2012-01-04 Andrew McMillan * Release 1.0 2011-12-14 Andrew McMillan * Handle bound resources correctly in sync-collection report. * Catch missing-xml in request separately from invalid-xml. 2011-12-07 Andrew McMillan * Add the "CardDAV" word into DAViCal's description. * Improve expand performance by only doing expansion if we know we need it. 2011-12-03 Andrew McMillan * Use supplied content_type even on zero-length requests. 2011-12-03 Rob Ostensen * When creating an external bind don't consider local host as external 2011-11-30 Andrew McMillan * Strip URL-unfriendly characters from UID before using it as URL segment. 2011-11-29 Andrew McMillan * Slightly more helpful 403 response. 2011-11-27 Andrew McMillan * Fix logic error in hide_TODO setting. * Make hide_alarm work on bound resources. 2011-11-26 Andrew McMillan * Correct bug in sync-collection report response. * Fix BIT24 casting for the LDAP driver. 2011-11-25 Andrew McMillan * Remove password from LDAP log messages. 2011-11-22 Andrew McMillan * Fix for MOVE into a bound location. 2011-11-21 Andrew McMillan * Tooltips for schedule-deliver and schedule-send. * Current localisations from Transifex. * The tooltips for schedule-send and schedule-deliver should be different! * Correctly calculate the next alarm time. * Update e-mail address to current one, mention wiki. 2011-11-09 Andrew McMillan * Make sync-collection handle new format for sync token. * Don't allow a / in the UID to infect the path on import. 2011-11-09 Rob Ostensen * Fix propfind depth:1 on bind to external url 2011-11-02 Andrew McMillan * Handle DELETE scheduling actions. * Force output buffers to be flushed, if they're turned on. * Correct handling of empty CardDAV:address-data element in request. 2011-11-01 Andrew McMillan * Update refresh-alarms script to newer style initialisation. * Fix handling of active flag for general external authentication mechanisms. * Update website to reflect new default calendar name. 2011-10-31 Andrew McMillan * Rationalise confidential event rewriting. 2011-10-30 Andrew McMillan * Add the $c->hide_alarms functionality into DAVResource class. 2011-10-28 Andrew McMillan * Allow LDAP sync to work if the date is reasonable and no 'format_updated' is set. * We don't need to test for the PostgreSQL non-PDO drivers now. * Switch out deprecated LDAP mappings before we use them anywhere. * Fix LDAP user creation where memcached support is off. 2011-10-27 Andrew McMillan * Add test for PHP filter module and wiki links for each test. 2011-10-25 Andrew McMillan * Updates to Brazilian Portuguese, German and Dutch translations. * We need $c to be global here. * A couple more places restricting numeric usernames. 2011-10-25 Rob Ostensen * External bind changes, added a clean up button, urls now show for external collections and added a few strings for translation 2011-10-24 Andrew McMillan * Release 0.9.9.7 * More fixes to CalDAV Scheduling - Handle REPLY from ATTENDEE accepting/declining meeting. - Handle processing on ORGANIZER further changing meeting. 2011-10-24 Andrew McMillan * Release 0.9.9.7 * More work on CalDAV Scheduling - Handle REPLY from ATTENDEE accepting/declining meeting. - Handle processing on ORGANIZER further changing meeting. 2011-10-20 Andrew McMillan * Add a config setting to force unnecessary FBTYPE parameter in freebusy response. * Fix errors in PROPPATCH response. * More work on CalDAV Scheduling - Update the SCHEDULE-STATUS parameter correctly. - Don't include ETag in PUT response when scheduling actions occur. - Write scheduling resources to attendee calendars for modifications. 2011-10-18 Andrew McMillan * A basic, untested, handler for /autodiscover/autodiscover.xml * Make sure default relationships are created. * Fix various brokenness with LDAP introduced in 0.9.9.5 2011-10-16 Andrew McMillan * Support an array of server_auth_type since Kerberos can send different ones. 2011-10-14 Andrew McMillan * Fix tools.php to allow importing of a directory of calendars again. * Fix various data casting issues, particularly to handle integer usernames. 2011-10-07 Rob Ostensen * Add a page to list externally bound calendars. 2011-09-14 Rob Ostensen * Add a check to the setup page for the php calendar extension 2011-10-07 Andrew McMillan * Fail more gracefully on crap encoding input. * Test for 'deflate' content encoding. * Rewrite calendar-query handling of time-range constraints. 2011-10-06 Andrew McMillan * Fix a regression in lock handling. * Fix handling where supplied content-type header is busted. * Set limits & defaults on lock duration. * Implement support for proposed tzid parameter on list requests. 2011-10-05 Andrew McMillan * Various fixes to timezone server implementation. 2011-10-05 Andrew McMillan * Support gzip/deflate/compress encoding of incoming entity for PUT etc. * Add protocol://hostname onto HTTP Location header per spec. 2011-10-05 Andrew McMillan * Fix handling of .well-known where the base handler is not caldav.php 2011-10-04 Andrew McMillan * Updated MKCOL/MKCALENDAR to support setting a supported-calendar-component-set * Change sync-token response to be a URI, per spec. * Correctly create the addressbook collection as an addressbook. 2011-10-01 Andrew McMillan * Fix the way default privileges are set for the SQL. 2011-09-30 Andrew McMillan * Get rid of unsightly error due to removal of time_zone table. 2011-09-28 Andrew McMillan * Fix bug handling COUNT= with BYDAY=multiple and FREQ=WEEKLY * Fix handling of BYMONTHDAY=-N in repeat rules. 2011-09-23 Andrew McMillan * Release 0.9.9.6 2011-09-22 Andrew McMillan * Implement Timezone Server Protocol per -02 draft RFC * Add a script that can be run from cron to sync from LDAP. * Fix accidental null assignments on update from external authentication (LDAP) 2011-09-20 Andrew McMillan * Add timezone and scheduling to the default regression set. * Provide an alternative 1.2.10a patch with fixed check_db_revision(). 2011-09-19 Andrew McMillan * Rewrite time-range SQL clauses for clarity and correctness. 2011-09-17 Andrew McMillan * Tests for open-ended time-range calendar-query. * Fix an error in calendar-query handling of time-range queries. 2011-09-14 Andrew McMillan * Migrate away from deprecated iCalendar class. * Ensure username is initialised to something appropriate from LDAP * Allow null dtstart to match any range, as per Scheduling Draft. 2011-09-14 Rob Ostensen * add a check to the setup page for the php calendar extension 2011-09-13 Rob Ostensen * skip scheduling attendees with schedule-agent set to something other than server 2011-09-10 Andrew McMillan * Write schedule resources to attendee calendars and inboxes on PUT. 2011-09-09 Andrew McMillan * Add test of error response for a REPORT which is not supported. * Add support for the CalDAV:schedule-default-calendar-URL property. 2011-09-08 Andrew McMillan * Rename caldav-PUT.php to reflect it's calendaring association. * Decruftify, and allow the squid pam to use 'path' instead of 'script' in it's config. * Fix PROPPATCH behaviour on bound resources. 2011-09-07 Andrew McMillan * Correct handling of PUT with unreferenced VTIMEZONE 2011-08-29 Andrew McMillan * Restore default relationships, which still have utility in complex environments. 2011-08-28 Andrew McMillan * Workaround MacOS X 10.6 Addressbook cannot login to CardDav with '@' in username 2011-08-26 Andrew McMillan * Only include override components if they happen within the period. * Change to depend on postgresql-client >= 8.1 and AWL = 0.47-1 2011-06-28 Rob Ostensen * Add support for remote url BINDing 2011-08-25 Andrew McMillan * PROPPATCH is allowed on binds. * Make locale handling use stuff pulled from transifex.net * Add Brazilian Portuguese and Mexican Spanish. 2011-08-24 Andrew McMillan * Test results including calendar-auto-schedule header as default. * Fix calendar-query handling of properties. 2011-08-23 Andrew McMillan * Fix XML output of block. * Handle following & a single-ended time filter. 2011-06-01 Andrew McMillan * Allow the calendar-query expansion to return all events in floating time. 2011-05-22 Andrew McMillan * Setup test should recognise "Off" as well as "0" 2011-05-18 Andrew McMillan * Add first cut implementation of principal-match report. 2011-05-13 Andrew McMillan * When sync-collection is asked for data, only return it if < 50 rows. 2011-04-03 Andrew McMillan * Ensure dav_id_seq is initialized to a non-colliding value. * Add support for Digest authentication. 2011-04-01 Andrew McMillan * When an import event has no UID we reluctantly assign one. 2011-03-13 Andrew McMillan * A more complete fix for weird passwords with LDAP. * Apparently an attempt to bind with an empty password will return TRUE! 2011-03-03 Felix Möller * Add explaination for translators. 2011-03-03 Andrew McMillan * Fix bug in schedule status response where there is no authority. 2011-02-27 Felix Möller * Sync german translation with Transifex. 2011-02-23 Andrew McMillan * Fix sort order of members listed in a group. * Add support for locking with memcached during delete to avoid deadlocks. 2011-02-22 Andrew McMillan * Force line endings to consistent CRLF in GET. 2011-02-22 Felix Möller * Producing tarballs now which can be build by rpmbuild -ta davical.tar.gz 2011-02-22 Andrew McMillan * Check for LDAP module, but only if LDAP is configured. 2011-02-21 Felix Möller * add automatic building of translation documentation * Remove obsoleted strings from translation * Adding documentation for translators 2011-02-21 Andrew McMillan * Move from extract.pl to standard xgettext 2011-01-22 Felix Möller * Removing the last traces of RSCDS and renaming it to DAViCal. 2011-02-21 Andrew McMillan * Build AWL desired version string as quoted value. 2011-02-20 Andrew McMillan * Correct error message for unsupported report request. 2011-01-21 Andrew McMillan * Ensure resources are always returned with CRLF rather than just LF. 2011-01-18 Andrew McMillan * Skip alarms with bogus trigger data. 2011-01-15 Andrew McMillan * Block invalid tickets from having access. 2011-01-14 Andrew McMillan * Add norwegian and estonian translation files. 2011-01-12 Andrew McMillan * Validate alarm date-time or duration before adding it to the DB. 2011-01-04 Andrew McMillan * Finally give up on the SQL rrule pre-processing. * Move debug logged password behind specific 'password' debug setting. * Obfuscate event data when reader only has read-free-busy permission. 2011-01-03 Andrew McMillan * List all of a user's calendar homes * Extend default_privileges to members of a group. 2010-12-31 Andrew McMillan * Add support for caching of feed, and uncaching on collection change. 2010-12-30 Andrew McMillan * Let auth realm be 'per Principal' to work around Mozilla #247486 * IMAP PAM authentication from Oliver Schulze 2010-12-28 Andrew McMillan * Release 0.9.9.4 2010-12-27 Andrew McMillan * Refactor PUT functions to set modified/created dates more correctly. 2010-12-27 Leho Kraav * add et_EE to support locales 2010-12-26 Andrew McMillan * Fix errors in po files pointed out by Transifex uploading. * A new AtomFeed class for building an Atom feed. * Switch to creating an atom feed, which is a better feed standard. 2010-12-26 Leho Kraav * A new URL to provide an RSS feed of a calendar's changes. 2010-12-26 Andrew McMillan * Refactored RRule to add support for initialisation from a vProperty. 2010-12-25 Andrew McMillan * Remove all reference to PgQuery * Extensive refactoring of principal-edit, plus support for creating tickets. * Add support for writing scheduling resources on PUT. * Improve support for handling floating time. * Add cil for internal issue tracking. 2010-12-08 Andrew McMillan * Cut access with invalid/expired tickets out immediately. 2010-12-07 Andrew McMillan * Handle empty PROPFIND, don't blow up on invalid XML. 2010-11-30 Andrew McMillan * /.well-known/* now returns a 301 redirect, per spec. * Use text/vcard for content type in advance of ratification of spec. * Properly handle addressbooks in multiget. * Hide authorization headers in logging. * Update sync-collection REPORT to match -04 of draft. * Replace index.php with caldav.php when we find it in our path. 2010-11-27 Andrew McMillan * Be pedantic about checking user is active before we let them in. * Specify the SRV record examples with leading _ as they should be. 2010-11-21 Andrew McMillan * Fix SQL for group handling from Michael Braun. * Add principal-collection-set to standard responses for DAVResource. * Correct typo in POST handling. 2010-11-20 Andrew McMillan * Also update displayname if fullname is changed. 2010-10-02 Daniel Aleksandersen * remove old screenshots * updated iPhone client configuration with new screenshots 2010-11-19 Andrew McMillan * Handle stuff like DTSTART;TZID=America/New_York:20101119T231307 2010-11-14 Andrew McMillan * Script to refresh calendar_alarms with next instance time. 2010-11-09 Andrew McMillan * Don't let auth functions create duplicate home calendars. 2010-11-06 Andrew McMillan * Patch for caldav sync from Pierre-Arnaud Poudret. * Add ACL to the supported methods. * Change regression runner to look for sample data with tests. * Correct version number typo. * Always grant 'DAV::read' privilege from principal to group members. 2010-11-05 Andrew McMillan * Use expanded time specifiers in format since %Y doesn't work on Windows. * Support recursive REPORT query if configured to allow it. 2010-11-04 Andrew McMillan * Add a new WritableCollection object which we will use for PUT. * Use text/vcard rather than older text/x-vcard. * Support event properties in changed part of sync-response. * Rename variable to work around Pg 9.0 reserved name. 2010-11-01 Andrew McMillan * Switch from regular expression which may not work in old/odd PHP. 2010-10-31 Andrew McMillan * Support getlastmodified property in REPORT requests. 2010-10-16 Andrew McMillan * Fix typo in iTIP CANCEL handling. 2010-10-15 Andrew McMillan * Turn on calendar-auto-schedule header if $c->enable_auto_schedule * Add various additional checks into /setup.php * Add knowledge of desired parallel AWL version to setup. 2010-10-10 Andrew McMillan * Fix various minor CardDAV bugs. * Omit the for event outside the time range - when expanded. * Fix privilege_to_bits function to set 'all' correctly & work with recent postgres 2010-10-08 Andrew McMillan * Don't supply freebusy for 0-duration events. * Another regression test for free/busy catching many events. * Add an event with a thoroughly bogus tzid to ensure we cope. * Check for some supported stuff very early so we can show it is missing. * Better display of bindings. * Add postgreSQL 9.0 as a possibility. * Fix warning when using basic authentication fallback. * Fix handling of iCalendar durations containing negative elements. * Handle events which don't have either DTEND *or* DURATION. * Rewrite __construct() method of RepeatRuleDateTimeZone to be more robust. 2010-09-25 Andrew McMillan * Release 0.9.9.3 * Rename 'Import Calendars' to 'Tools' since LDAP is more likely. * Add an 'all' regression set which creates the initial DB for the others. * If we get an unknown sync token, just sync everything. * Minor refactoring of DAVResource. * Consistently use ETags with quoting. * Add configuration option to use older 'sync-response' tag. * Provide correct getcontenttype property for addressbook resources. 2010-09-24 Andrew McMillan * Allow basic auth to supply login credentials. * Display the bindings a principal has access to. * Fix various bugs with handling of addressbook resources. 2010-09-23 Andrew McMillan * Regression tests need to check sync on addressbook collections. * Make the sync report work with non-calendar resources. * Fix write_sync_changes to cope with non-calendar resources. 2010-09-21 Andrew McMillan * Release 0.9.9.2 * [principal/collection edit] Add display of tickets and bindings. 2010-09-20 Andrew McMillan * [collection-edit] Handle some errors more gracefully. 2010-09-16 Jim Hague * PAM auth - get user name from a comma-less passwd comment field. 2010-09-14 Andrew McMillan * Remove built docs for files no longer present in DAViCal. * Improve resiliency of sync-caldav script. * Uncomment the addressbook-query report. 2010-09-13 Andrew McMillan * Warn if we're being expected to log actions, but have no function. 2010-09-12 Andrew McMillan * Tweaking OPTIONS output. * Whoops: we weren't sending an ETag on PUT for non-Calendar resources. 2010-09-11 Andrew McMillan * [setup] Detect whether suhosin.server.strip is set and discourage it. * [index] Allow for a HEAD request on / to be served here too. * [principal edit] Ensure the id is > 0 for us to fetch the record. * [sync-collection report] Fix to work with bound collections. 2010-09-02 Andrew McMillan * Ensure we get a duration, and default to 1 day if not. * Handle a level of indirection in Binds of binds. * Try harder to get the right duration for an event. 2010-08-31 Andrew McMillan * Wrap calendar-specific things for PROPFIND in an IsCalendar() test. 2010-08-30 Andrew McMillan * Refactored free/busy handling to a single core routine with RRule-2 * Add support for weeks in durations. * Switch event expansion to use vComponent.php rather than iCalendar. * Add a getUserByEMail() function. 2010-08-29 Andrew McMillan * Coerce the content-type on PUT. 2010-08-28 Andrew McMillan * Add initial support for addressbook-query REPORT. 2010-08-24 Andrew McMillan * OPTIONS should be available to someone with any of the read permissions. 2010-08-18 Andrew McMillan * Print stage of processing for diagnostic reasons. * Update WebDAV Sync to support -03 of draft * Order drop-down list of principals by displayname. * Allow principal-property-search(-set) REPORT requests on any URL. * Add optional parameter to 'simple' interface to allow action logging. * Add all/any option to NeedPrivilege method also. 2010-08-14 Jens Zahner * Fixes to LDAP group handling by Jens Zahner 2010-06-29 Andrew McMillan * Results of returning applicable permissions by resourcetype. * Respond with supported-report error if the report is unsupported. * Default type to 'resource' for privileges display. * Remove uninitialised variable possibility. 2010-06-28 Andrew McMillan * Add parameter for masking privilege output to only applicable set. * Check for existence of target resource before we check for READ perm. * Better guessing of content-type when we get a bad/missing one. * Rewrite the way the DAV header is produced. 2010-06-27 Andrew McMillan * Don't allow PUT of non-calendar/address resources into calendars/addressbooks. * Add support for carddav / caldav well-known URLs. Fix short open tag. * Update regression tests for DAV support header change. * Add indication of support for addressbook. 2010-06-23 Andrew McMillan * Correct return code on PUT modified. * Send a correct content-type on GET. * Rename event() to resource() since it might not be an event. * When we PUT a vcard set the caldav_type to VCARD. * Try and read dav_principal since the remote usr record no longer suffices. 2010-06-17 Andrew McMillan * A fix for problems with character output in the user configuration. * Allow for the send_page_header() function to be overridden. * Also remove '/' from potential ticket charset. * Updated Deutsch translation. 2010-05-30 Andrew McMillan * Add a weak_etag field to the calendar_attendee table. 2010-05-27 Andrew McMillan * Updated results with fixed RFC5545 wrapping/escaping. 2010-05-19 Andrew McMillan * Handle VCARD on PUT. * Add ability to start a regression suite from a DB dump. * Add a hack so older Mozilla calendar versions don't see auto-schedule. 2010-05-17 Andrew McMillan * Add a hack to work around Lightning/Sunbird bug #463392 * These AwlQuery classes are ow thoroughly migrated into AWL. 2010-05-14 Michael Trausch * A module for authorization by way of the "pwauth" program 2010-05-12 Andrew McMillan * A few minor database changes. * A few improvements to database creation. Inspired by Peter Eisentraut's blog post about writing scripts for PostgreSQL. * Add support for the addressbook-multiget REPORT. Untested. * Fix if_addressbook for / * Add a check for gettext availability. 2010-05-07 Andrew McMillan * Add a function to convert iCalendar interval syntax into SQL. * Move RRule expansion functions into RRule include. 2010-04-29 Andrew McMillan * Add facility to append to a calendar with ?mode=append on PUT * RDATE/EXDATE can occur multiply, as well as contain multiple dates. 2010-04-28 Andrew McMillan * When a timezone is supplied, but not used in the event, pretend it was. 2010-04-26 Andrew McMillan * Improved sync to cope slightly better if remote data already present. * Don't complain if the event includes an unused timezone. 2010-04-20 Andrew McMillan * Log the response regardless, if it is status 400 or greater. * Hide the output of that upgrade away in the var/log directory. * Attempt to run the database update on upgrade, but ignore failure. 2010-04-19 Andrew McMillan * Fix lintian error. * Release 0.9.9 2010-04-17 Andrew McMillan * Updated changelog for release 0.9.9 * Add SQL query to test 244 to highlight the correct results. 2010-04-16 Andrew McMillan * Switch to put caldav_data.* in result list after calendar_item.* * Switch to use RenderGMT() to render these dates. * Updated freebusy results from RenderGMT() fix. * Fix RenderGMT() to render GMT correctly. 2010-04-15 Andrew McMillan * all should depend on the new location for always.php * Use the new olson_from_tzstring() function to extract the Olson tz. * Connection/Keep-alive headers removed. * Don't report Connection: and Keep-alive: headers. 2010-04-14 Andrew McMillan * Preparing to release 0.9.9 2010-04-17 Andrew McMillan * Release 0.9.9 * Fix RenderGMT() to render actual GMT time & use more widely. 2010-04-15 Andrew McMillan * Use the new olson_from_tzstring() function to extract the Olson tz. 2010-04-13 Andrew McMillan * Allow configuration of $c->restrict_admin_roles. * Try to clarify principal actions with better prompts. * Inactive users should not still be able to access their calendars. 2010-04-12 Andrew McMillan * Provide visual feedback when users cannot edit a page. 2010-04-03 Andrew McMillan * Cope with Google occasionally setting the CREATED date to 0000 year. * A new trigger allowing calendar_alarm.component to be edited. The trigger will then cause the caldav_data record to be updated with the new alarm component, and the etag is changed. * Force ticket_id to be cast to text, even if it looks like a number. * Force casting to text on setting DAV properties. * Add facility to GET on collection of collections. Including bound collections into the resultset. 2010-04-01 Andrew McMillan * Only log start of script if that specific debug is configured. * Support statistics logging for interactive pages too. 2010-03-31 Andrew McMillan * Switch recommended source to pgp.net.nz for the repository key. 2010-03-30 Andrew McMillan * Correct PUT response code for create vs update. * Add some statistical logging for script/database execution times. 2010-03-29 Andrew McMillan * Add initial support for arbitray text objects in collections. * Fix logging type on MOVE and remove redundant code. * Remove any expired locks before testing if a lock is active. 2010-03-27 Andrew McMillan * Add some support for VALUE=DATE in our DateTime wrapper. 2010-03-25 Andrew McMillan * Check for unbind permission on container before DELETE. 2010-03-24 Andrew McMillan * Now PROPPATCH works on bindings. * Teach set_dav_property() about dav_bindings. * Error correctly when the destination parent collection does not exist. * Improved approach for reading parent collection. * Initialise the parent_container when constructing from a row. * Handle duplicate attendee lines in one VEVENT. * Add configurable locale directory from Aurelien. 2010-03-23 Andrew McMillan * Ignore sync-cache droppings from sync script testing. 2010-03-23 Rob Ostensen * scheduling spec section 6.4, deliver event with scheduling status to users inbox 2010-03-23 Andrew McMillan * Move always.php into the webroot for easier setup. Also add some 'search for the AWL includes' code into it for even more easier setup. * Explode out Attendees and Alarms on PUT/import collection too. * Updated dav_test now looks for DATA= as simple filename. 2010-03-22 Andrew McMillan * Enforce Pacific/Auckland timezone when running regression tests. * Default to internal expansion of :name SQL parameters. * Now parsing out VALARM components on PUT. * AwlQuery restructuring for wider use and easier PgQuery transition. * Add permissions for new tables in DB 1.2.8 2010-03-21 Rob Ostensen * first run at ldap group support 2010-03-19 Rob Ostensen * include number of items in dav collection on collection edit page 2010-03-20 Andrew McMillan * Improved logging of failed queries. * Regression test example configuration, with comments. * Update DAV header. * Don't exclude NULL DTSTART if reporting on scheduling collection. * Support schedule-calendar-transp property. * Properly insert resourcetypes on MKCOL. * Handle resourcetypes regardless of XML format. * Provide a more useful error output on an XML parser failure. * Split out home & freebusy sets into their own functions. * Remove the freebusy_set from the collection. 2010-03-19 Andrew McMillan * Fix parent-set response on collections. 2010-03-18 Rob Ostensen * warn if there are no active admin users 2010-03-18 Andrew McMillan * Fix deactivation of users no longer in LDAP. * Siwtch to use an object for the updated users row. * Correct fix for privileges INSERT. * Standardise on the double-cast for getting decimal -> privilege bits. * Fix PROPPATCH handling of CardDAV addressbook setting. * Confirm lock is removed by DELETE. * Test failure to remove a lock due to wrong lock token. * Add support for PUT on individual resources within a bind. * Catch the privileges on resources via a bound ticket. * Restructure and add support for DELETE on a Bind. * Add a test header and log it to help find which tests cause problems. * Remove ancient hack to cope with broken Evolution < v1.9 * Add $c->skip_bad_event_on_import configuration setting. This will allow failure on import of collections to apply only to an individual event, rather than failing the whole collection. * Add support for resource-id and parent-set properties. * Can now apply arbitrary resourcetypes to collections. * Add an extra resourcetype to a binding to indicate it's a binding. * Finish migrating all DAViCal code to AwlQuery. * Remove the old screen for showing a collection. 2010-03-17 Aurelien Requiem * Don't include self as a potential group member. * Updated i18n & French translation. 2010-03-17 Andrew McMillan * Show calendar properties on creation. * Using original displayname for binds. * Add support for persistent connections. * Add support for PROPPATCH displayname on a bind. 2010-03-16 Andrew McMillan * No dependence on DAViCalUser.php is needed any longer. * Fix sf.net #2970729 * Remove old DAViCalUser class * Remove old relationship_types maintenance program. 2010-03-15 Andrew McMillan * Make calendar-query report work with bound collections. * GET now working with bound resources. * Getting bindings to work as seamlessly as possible. 2010-03-14 Andrew McMillan * Correct privilege checking for modification of collection. * Working BIND and PROPFIND of bound resources. * Fix incorrect reference in PreconditionFailed() method. * Update installation docs. * Added MatchResource() method for matching by resource_id. * Removed references to old style $debuggroups. * Added build-depends on libawl-php (closes: debian bts #573687) 2010-03-13 Andrew McMillan * New regression tests for things using tickets. * RRULE expansion now working correctly. * Enhance the exception handler to display a forward trace 2010-03-12 Andrew McMillan * Minor adjustments to handling 'infinity' for ticket timeout. * Switch from AllowedTo() to HavePrivilegeTo() to support tickets. * Allow ticket based access as well as public calendars. 2010-03-12 Aurelien Requiem * Updated french translation, with further i18n fixes to setup. 2010-03-12 Andrew McMillan * Add principal_id to PublicSession. 2010-03-11 Andrew McMillan * Fix uninitialised variable errors in new scheduling code. * Some updates to the caldav client library and an example script. * Nail the last (hopefully) missing reference to base_url. * Handle 'infinity' for the ticket timeout. * create-database.sh does not need to specify bash. 2010-03-10 Andrew McMillan * Adding Upgrader class to AwlDatabase and tidying things somewhat. * Starting work on a PHP database upgrader. * Switch some library code to LGPLv3 license. 2010-03-10 Rob Ostensen * Don't write to resources we don't have privileges to * Scheduling extentions working with iCal 4 2010-03-10 Andrew McMillan * Reinstate PostgreSQL 8.1 support into the Debian control file. 2010-03-09 Andrew McMillan * New Svenska localisation from Emil Lundberg * Need to depend on new version of AWL. * Migrated DELETE to AwlQuery wrapper. 2010-03-08 Andrew McMillan * Rewrite OPTIONS response to use DAVResource. * AwlQuery::QDo() method for quick queries where we don't parse the resultset. * Add configuration setting to optionally restrict /setup.php to admin. 2010-03-07 Andrew McMillan * Link to the DAViCal website, rather than SourceForge. * Check precondition to disallow creating collections in a schedule-inbox. * Move PreconditionFailed and MalformedRequest into $request methods. * Switch to HavePrivilegeTo() to ensure we catch tickets. * Correct misspelled __LINE__ references. 2010-03-06 Andrew McMillan * Check permission on MOVE destination. * Add an empty response to the DAV::group property. * All schedule-deliver privileges should be included in default. * Use NeedPrivilege to respond to access denied. 2010-03-05 Andrew McMillan * Provide some rudimentary statistics about the setup. * With readonly_webdav_collections set we should write nothing! * Check we have actually got an XML body if we got a content-type XML. * Correct setup of locale. 2010-03-04 Andrew McMillan * Properly respond with elements inside * Validating user/collection names. Updating fullname/displayname. * Some long overdue updates to the installation docs. * Switch always.php over to AwlQuery. 2010-03-03 Andrew McMillan * Migrate MKCOL script to AwlQuery wrapper. * Add transaction helpers to query class. 2010-03-02 Andrew McMillan * Updated collection / principal edit, with better l10n. 2010-02-28 Andrew McMillan * Correct allprop/include processing. * Use 'Revoke' rather than 'Delete' for grants, and 'Remove' for group members. * Add an option to restrict visible contents to a limited date range. 2010-02-27 Andrew McMillan * Tweak privileges_list() to work in older Pg versions. 2010-02-26 Andrew McMillan * Tweak 'we don't support this' response to scheduling requests. 2010-02-26 Masahiro Mikami * Updated Japanese localisation. 2010-02-26 Andrew McMillan * Modification of protected properties should be a 403. 2010-02-25 Andrew McMillan * Strip slashes from collection names. They're too confusing. * Add a config item to exclude some users from LDAP sync. 2010-02-25 Andrew McMillan * Release 0.9.8.3 * Assign correct resourcetype on collection maintenance. 2010-02-24 Andrew McMillan * Apparently CentOS 5 doesn't have DateTime class in it's PHP :-( * Allow active/inactive setting to edit principal. * Add a menu link to list inactive principals. * Fix the 'ALL' button action in grants update. * Correct 'ALL' privilege to 24 bits. * Move location of CSS submenus slightly. * Don't display a grant/collection stuff until a user is created. * Provide passthru on icons, images, css and js files. 2010-02-23 Andrew McMillan * Release 0.9.8.2 * Include inactive support for RRULE expansion. 2010-02-23 Masahiro Mikami * Updated Japanese translation. 2010-02-23 Emmanuel Seyman * Updated French translation. 2010-02-22 Andrew McMillan * Expanding functionality in RepeatRuleDateTime class. 2010-02-20 Andrew McMillan * Setup page is now able to detect the PDO pgsql drivers. * Don't require a person to be logged in to see setup.php if their setup is so screwed they can't even connect to a database... * Making things more localisable. 2010-02-19 Vincent Van Houtte * Updated Dutch translation. 2010-02-18 Andrew McMillan * Use htmlspecialchars rather than htmlentities, which screws up translations. * Remove link to old users browse page. 2010-02-22 lebarjack * Updated required software documentation * Added a Gentoo installation paragraph * Updated needed depnedencies 2010-02-18 Andrew McMillan * Add better localisation support to principal / collection edit screens. * Default user to davical_dba & provide more help regarding .pgpass files. * Remove reference to relationships, which are so passe now. * Admin: support deleting principals / collections with confirmation. * dav_principal: add a rule for deleting. * admin: Support setting a principal to be 'Administrator' * AwlDB: Attempt some better error handling. 2010-02-17 Andrew McMillan * PROPPATCH: Setting properties on Principals now working. * always: Initialise the AWL db connection. * PUT Functions: add support for X-WR-CALNAME in uploaded calendars. * Edit Collections: Fix privileges to do this, and editing of privs. 2010-02-15 Andrew McMillan * A new RepeatRule object to be used for expanding events. 2010-02-13 Andrew McMillan * Include the browse javascript for row linking. * Make admin stuff work better in a subfolder. * Correct URLs for subfolder operation in principal edit. * Remove flush() calls from pubsub. 2010-02-11 Peter Schaefer-Hutter * Updated german translation. 2010-02-03 Andrew McMillan * Release 0.9.8.1 * Update the sync changes for deletion of a calendar. * Always report DELETE action in sync-changes * Report correct href with DELETE action in sync report. 2010-02-01 Andrew McMillan * Remove misguided include logic. * Editor widget class has been moved into AWL. 2010-01-30 Andrew McMillan * Fix up the javascript around enabling fields when calendar/addressbook. * Move version display to setup.php and do basic dependency checks. 2010-01-27 Andrew McMillan * Allow config files to be under /usr/local 2010-01-11 Andrew McMillan * We don't need to reference a $action . '.js' file. * Create a default calendar when a User or Resource principal is created. 2010-01-10 Andrew McMillan * Add a utility IsCreate() method opposite to IsUpdate(). * Try and reduce the odds of an extra quote in the password. 2009-12-28 Andrew McMillan * Basic support for the ACL method. Working, but needs work. * Improve logging of parameterised queries. 2009-12-27 Andrew McMillan * DAV::owner should be wrapped with DAV::property in DAV::ace response. * Return 406 Not Acceptable for invalid XML request. * Refactor principal-property-search REPORT. * Use calendar-user-address-set for search rather than CS extension. * Move DAVResource inclusion to REPORT wrapper. * Comment out debugging messages for peformance. * Fix problems with logging of failed queries. * Add pass-through for PDO ErrorInfo() method. * New regression tests and updated results. * Add support for principal-search-property-set REPORT per RFC3744 * Refactor the construction of DAV::acl and report owner acl 2009-12-26 Andrew McMillan * Current regression test results. * Move MKCOL/MKCALENDAR to NeedPrivilege() * Correct log facility. * Strip redundant code from CalDAVRequest * Revert misguided namespacing change on Not Found properties. * Move response for supported-lock and supported-privilege-set into DAVResource.php * Fix logic for calculating by_email * New style privilege checking. * Switch to NeedPrivilege() method for checking privileges. * Switch privileges to use the new model. 2009-12-24 Andrew McMillan * Release 0.9.8 * Slightly updated TODO. * Move the Allow response back into OPTIONS where it really belongs. * Deny setting of deprecated free-busy-set. * iCal4 wants to see 'calendar-proxy' in the DAV header. 2009-12-24 Patrick Näf Moser * Updated german translation. 2009-12-23 Andrew McMillan * Updated results including ACL support indication. * Regression test for caldav:calendar-timezone retrieval. * Move caldav:calendar-timezone into the collection table. * Basic framework for starting on ACL method handler. * COMMIT with the same DB connection we BEGAN on! * Remove irrlevant functionality to CreateDefaultRelationships. A stub is retained in case external organisations have written some auth plugin which does use it. * Correct logic when processing directory of files. * A couple more tests for iCal4 interoperability. 2009-12-22 Andrew McMillan * Depend on correct libawl-php version. 2009-12-21 Andrew McMillan * Display DAViCal version & schema wanted / actual versions. * Kill the schedule-in/out box on upgrade so they are recreated. * Clarify menu wording. Remove relationships page (yay!). * Add simple placeholder pages for planned setup / upgrade activities. * Force function parameter types for older PostgreSQL versions. * Remove unused functions. 2009-12-21 Rob Ostensen * Publish/Subscribe notification for DAViCal by Rob Ostensen. 2009-12-21 Andrew McMillan * Switched everything over to the new permissions model. 2009-12-16 Andrew McMillan * Better use of getent to extract user fullname. Debian bug #561288. 2009-12-13 Andrew McMillan * Retitle 'New User' to 'New Principal' * Link to create a new collection. * Allow for creation of new calendars for a user_no. 2009-12-11 Andrew McMillan * Correctly create a principal record for the administrator. * We now need to create a principal record along with a usr one. 2009-12-08 Andrew McMillan * Make the username field larger. * Replacement for older caldav-client which goes further. Now handles discovery of the principal URL and the user's calendars. * Test for current-user-principal support. * Fix handling of DELETE followed by CREATE case. * Restore support for current-user-principal property. 2009-12-05 Andrew McMillan * Provide some better visual feedback when grants/members are added/changed. 2009-12-04 Andrew McMillan * Try and clarify the terminology for bind/unbind. * Another attempt at supporting older DB versions. * Fix initialisation of empty array for older Pg versions. * Allow building of built-po without building everything else. * Rename davical.php to admin.php which is more appropriate. * Correct for active column removed from principal. 2009-11-27 Andrew McMillan * Add/edit grants on collections. * Now able to edit /create grants to specific users or groups. * Use first perl in path. * Add some page-end padding. * Ensure we still get active if we got a real boolean. * Add some error avoidance to SetLookup. 2009-11-24 Andrew McMillan * Output with updates to upgrade-davical-database * Allow admin / principal to add groups to themselves 2009-11-23 Andrew McMillan * Add support for the X-HTTP-Method-Override header. 2009-11-22 Andrew McMillan * New screens for browsing/editing Principals & Collections. * CSS tweaks for new maintenance screens. * Fix conversion of Resource users. * New functions for listing memberships, members and privileges. * Document default privileges in example config. * Add default privileges setting. Move privileges functions out of DAVResource.php * Granting for collection_id rather than dav_name now. * Grant access to dav_principal view. * Don't have an 'active' column on the principal. * Definition of a dav_principal writable view of usr+principal * Add ability to apply a folder of SQL rather than just a single file. 2009-11-15 Andrew McMillan * Add support for supported-method-set / suported-report-set * Sprinkle some minimal CardDAV support in there. 2009-11-14 Andrew McMillan * A basic regression test for the expand-property report. * Add expand-property report to the supported reports. * Move URL deconstruction into DeconstructURL function. * Implement the expand-property report. 2009-11-12 Andrew McMillan * New PROPFIND implementation. * Correct format & group-member* responses. 2009-11-07 Andrew McMillan * Be as lazy as possible about doing that horrible proxy query. 2009-11-05 Andrew McMillan * Add some more fields onto the collections table. * Only respond with freebusy to a VFREEBUSY request. 2009-11-04 Andrew McMillan * Add MOVE to the supported method set. * Allow for replacing the regression.host in headers as well. * Updated test results, mostly due to adding a newline to dav_test output. 2009-11-02 Andrew McMillan * Regression tests for the supported-* properties. * New tests following the iCal4 client through one path. * Support for the DAV MOVE method. * Add a dav_name() accessor for forward compatibility. * List support for the DAV::sync-collection report 2009-11-02 Rob Ostensen * First cut of support for pubsub push notifications by Rob Ostensen. 2009-11-02 Andrew McMillan * Correct response for schedule-inbox. * Improving response on non-existent resources. * Add a test for existence of the referenced principal. * Return supported-calendar-component-set only on a calendar. 2009-10-30 Andrew McMillan * Allow test case to be fully specified on the command line by filename. 2009-10-30 Matthias Mohr * Translatability improvements from Matthias Mohr. 2009-10-28 Andrew McMillan * Implementations of supported-report-set and supported-method-set. 2009-10-27 Andrew McMillan * Translate 'Delete User' button as pointed out by Matthias Mohr * Revert include changes on further evaluation. * Also collect the current user principal record into $session. * Updated translation from Matthias Mohr. * Menu restructuring. * Updates to styles, including CSS menus. * Update the help page to point to more useful links. * Add DB version upgrade detection code. * Add a script for building always.php to include DB version also. * Correct translations URL. * Structure changes for grants on collections. * Be more robust about finding the AWL code location. * Revert to require_once(). 2009-10-23 Andrew McMillan * Release 0.9.7.6 * Fix return value from include so PHP doesn't exit. 2009-10-22 Andrew McMillan * Release 0.9.7.5 * Fix inclusion of auth-functions.php and classBrowser.php * New Deutsch translation by Matthias Mohr. 2009-10-07 Andrew McMillan * Release 0.9.7.4 * Fix setting of relationships in user administration. * Add option to make freebusy information public. * Correct structure of supported-privilege-set response. * Move server-specific properties from CalDAVPrincipal to CalDAVRequest. 2009-10-06 Andrew McMillan * Release 0.9.7.3 2009-09-25 Andrew McMillan * Fix overzealous URL encoding of mailto:username@domain.com * Expand permissions on both sides of the group expansion. * Update licensing to note external LGPL sources * Add a 'Delete User' option. * Add facility to create collection without uploading VCALENDAR * Add ability to set calendar as public on creation. 2009-09-14 Andrew McMillan * Allow admin access to be restricted to a particular domain. 2009-09-11 Andrew McMillan * Add support for /principals/users/username so iPhone (& possibly also iCal) users have a simpler setup experience. * Expand privileges to work with iPhone OS 3.1 * Release 0.9.7.2 2009-09-05 Andrew McMillan * Fix call-time pass by reference warnings. 2009-09-02 Andrew McMillan * Allow disabling of CalDAV Proxy support for performance on large sites. * Update website content. * Ensure elements are urldecoded in calendar-multiget 2009-09-02 Andrew McMillan * Allow disabling of CalDAV Proxy support for performance on large sites. 2009-08-29 Andrew McMillan * Restructure PUT handling to give easier API possibilities. 2009-08-24 Andrew McMillan * Fix broken SQL when selecting user list for group. * Ensure incoming URLs are decoded before we process them. * Add ability to log caldav actions * Updated French translation. 2008-06-30 Andrew McMillan * Remove the out of date update-rscds-database script. * Rename RSCDS*(.php) to DAViCal*(.php) * Rename RSCDSUser (.php) to DAViCalUser (.php) 2009-06-27 Andrew McMillan * Make e-mail lookup be case-insensitive if possible 2009-06-22 Andrew McMillan * Release 0.9.7 * Add debug logging of response/request and related headers. 2009-06-20 Andrew McMillan * Various fixes for compatibility with iPhone v3 OS. 2009-06-16 Andrew McMillan * Align freebusy.php parameter handling with proposed standard. 2009-06-15 Andrew McMillan * Allow free/busy permission to grant access to obfuscated calendar. 2009-06-13 Andrew McMillan * Stubbed implementation of calendar proxy. 2009-05-12 Andrew McMillan * Switch to RRULE functions for more accurate overlap calculation. 2009-04-17 Andrew McMillan * Added support for publicly_readable attribute of collection when accessing a /public.php/user/collection/ path. 2009-04-11 Andrew McMillan * Allow configuration of site wide user default values. davical-1.1.1/.cil0000644000000000000000000000045311633117640010557 0ustar UseGit: 1 StatusStrict: 1 StatusOpenList: New StatusOpenList: InProgress StatusClosedList: Finished DefaultNewStatus: New LabelStrict: 1 LabelAllowedList: Type-Enhancement LabelAllowedList: Type-Defect LabelAllowedList: Priority-High LabelAllowedList: Priority-Medium LabelAllowedList: Priority-Low davical-1.1.1/issues/0000755000000000000000000000000011776303360011324 5ustar davical-1.1.1/issues/i_80a8c1df.cil0000644000000000000000000000231311633117640013536 0ustar Summary: Invite external users from iCal gives error Status: New CreatedBy: Andrew McMillan AssignedTo: Inserted: 2010-12-29T23:38:10 Updated: 2010-12-29T23:38:10 Here what I've found on the logs when try to add a not davical user, with version 0.9.9.4: :***************** Response Header **************** headers:-->X-Powered-By: PHP/5.2.5 headers:-->Server: 0.9 headers:-->DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule headers:-->DAV: extended-mkcol, calendar-proxy, bind headers:-->ETag: "2969f85aaf1bd94c74929d57a8629703" headers:-->X-DAViCal-Version: DAViCal/0.9.9; DB/1.2.9 headers:-->Content-type: text/xml; charset="utf-8" :******************** Response ******************** response:--> response:--> response:--> response:--> response:--> mailto:joe.user@gmail.com response:--> response:--> 3.7;Invalid Calendar User response:--> response:--> response:--> response:--> and then iCal reports an error 403. davical-1.1.1/issues/i_1378ca0a.cil0000644000000000000000000000066011633117640013452 0ustar Summary: DAVResource should sometimes obfuscate resource data Status: Finished CreatedBy: Andrew McMillan AssignedTo: Andrew McMillan Inserted: 2011-01-02T21:25:18 Updated: 2011-01-04T04:06:12 When freebusy permissions are available, DAVResource will sometimes be called on to provide the real resource data, and in such cases an obfuscated version of the resource data should be used. davical-1.1.1/issues/i_54a5f811.cil0000644000000000000000000000236411633117640013404 0ustar Summary: add rss/atom feed support for collections Status: New CreatedBy: leho AssignedTo: DueDate: Comment: 0a7fac52 Inserted: 2010-12-25T13:53:22 Updated: 2010-12-26T17:50:10 It is usually not possible to easily or reliably notice newly created events in multi-user multi-calendar scenarios, especially if some events are created further in future or past i.e. far out of current (monthly, multi-week) views. RSS/Atom feeds provide a solution to this. TODO: * multiple-VEVENT (1/x) i.e. recurring and them handling * DTSTAMP handling in addition to CREATED and LAST-MODIFIED, otherwise we have feed entries that have modification times in the future - ...because feed's setModified is using time() right now, also mustfix * Thunderbird RSS doesn't show a changed event as new, why is this and what to do about it? * Thunderbird doesn't display feed item content in new window, but does display it in preview and in tab. Wtf? * choose a parameter to ORDER BY (caldav_data.modified might not be the best option, perhaps calendar_item.last_modified) * check up on isset()'s usefulness after new re $dt_created and them * send whole collection on first feed pull. is there a way to differentiate when the client has freshly added the feed? davical-1.1.1/issues/i_b053479c.cil0000644000000000000000000000051611633117640013403 0ustar Summary: Implement propertySearch() method in DAVPrincipal Status: New CreatedBy: Andrew McMillan AssignedTo: Inserted: 2011-01-02T02:18:17 Updated: 2011-01-02T02:18:17 The propertySearch() method in DAVPrincipal is currently stubbed in but it might actually be a reasonable way of doing that. Review and fix. davical-1.1.1/issues/i_425c24ae.cil0000644000000000000000000000225711633117640013460 0ustar Summary: Group does not confer default permission to members Status: Finished CreatedBy: Andrew McMillan AssignedTo: Andrew McMillan Inserted: 2010-12-29T23:42:42 Updated: 2011-01-02T21:10:16 A member of a group should have a minimum of the default permission granted to them when accessing things owned directly by that group. It would appear that is not the case: Travis Williams reports: I'm having a little trouble with group permissions. I created a group called test. I set the privileges granted to all users to read. I then created a few collections and said use the default privileges. I created a new user and made him part of the test group but he can't read the collection unless i 1) give him explicit permissions or 2) I have to give the group specific permissions to that collection (even though it is that groups collection). Am I misunderstanding how this works? Basicall I want to have a group with a bunch of collections (read only), and when I add a new principal to that group I want them to get read permissions to the collections, and when I add a new collection I want everyone to be able to read it. Thanks! Travis davical-1.1.1/issues/README.txt0000644000000000000000000000020411633117640013012 0ustar This directory is used by CIL to track issues and feature requests. The home page for CIL is at http://www.chilts.org/project/cil/ davical-1.1.1/issues/i_d4c0bd2d.cil0000644000000000000000000000044111633117640013606 0ustar Summary: Add support for Windows timezones Status: New CreatedBy: Andrew McMillan AssignedTo: Inserted: 2011-02-01T10:31:35 Updated: 2011-02-01T10:31:35 Windows uses a whole nother range of timezones and we need to add something to translate them into Olson names. davical-1.1.1/issues/i_ae4b9fa2.cil0000644000000000000000000000250111633117640013614 0ustar Summary: Fix handling of schedule-calendar-transparent response Status: New CreatedBy: Andrew McMillan AssignedTo: Inserted: 2010-11-28T09:50:55 Updated: 2010-11-28T09:50:55 I'm seeing this in the query response to iOS4.2 on an iPhone: <urn:ietf:params:xml:ns:caldav:opaque/> which doesn't look pretty. The incoming request looks like: User-Agent: DAVKit/5.0 (767); iCalendar/5.0 (79); iPhone/4.2.1 8C148 Depth: 1 Content-Type: text/xml Content-Length: 785 davical-1.1.1/issues/i_6a80503d.cil0000644000000000000000000000051511633117640013374 0ustar Summary: It should be possible to import a file of vcards Status: New CreatedBy: Andrew McMillan AssignedTo: Inserted: 2011-01-04T20:08:27 Updated: 2011-01-04T20:08:27 In collection edit you can upload a calendar, but it should also be possible to upload a file of vcards if the collection is an addressbook. davical-1.1.1/issues/c_0a7fac52.cil0000644000000000000000000000137411633117640013530 0ustar Issue: 54a5f811 CreatedBy: Leho Kraav Inserted: 2010-12-26T17:43:10 Updated: 2010-12-26T17:43:10 i think feed.php is almost feature-complete and bug-free now. here's a list of stuff that happened while you were sleeping (wrap-up for irc monologue): * fixed escaping special characters for xml content, my 761 item feed works now * fixed escaping and hyperlinking content in correct order, so browser gets real <> instead of <> for tags * fixed Time string concatenation ($p_time) * added et_EE support to dba/supported_locales.sql, growled about rebuild script looking at .sql for language support info. why not iterate through ./po/? * migrated to using strftime instead of DateTime->format, because strftime actually support locales davical-1.1.1/inc/0000755000000000000000000000000011776303360010562 5ustar davical-1.1.1/inc/pubsub.php0000644000000000000000000006326611362722273012607 0ustar status = "online"; $this->setupXmlParser (); } // figure out what server to connect to and make the connection, returns true if successful, false otherwise private function connect () { if ( ! isset ( $this->jid ) ) return $this->connection = false; if ( ! isset ( $this->idle ) ) $this->idle = true; if ( ! isset ( $this->resource ) ) $this->resource = 'caldav' . getmypid(); if ( ! preg_match ( '/^\//', $this->resource ) ) $this->resource = '/' . $this->resource; $temp = explode ( '@', $this->jid ); $this->username = $temp[0]; if ( ! isset ( $this->server ) ) { $this->server = $temp[1]; } $r = dns_get_record("_xmpp-client._tcp.". $this->server , DNS_SRV); if ( 0 < count ( $r ) ) { $this->original_server = $this->server; $this->server = $r[0]['target']; $this->original_port = $this->port; $this->port = $r[0]['port']; } if ( ! isset ( $this->port ) ) $this->port = 5222; if ( 'ssl' == $this->tls || ( ! isset ( $this->tls ) && 5223 == $this->port ) ) $url = 'ssl://' . $this->server; elseif ( 'tls' == $this->tls || ( ! isset ( $this->tls ) && 5222 == $this->port ) ) $url = 'tcp://' . $this->server; else $url = 'tcp://' . $this->server; if ( isset ( $this->original_server ) ) $this->server = $this->original_server; $this->connection = stream_socket_client ( $url . ':' . $this->port, $errno, $errstring, 10, STREAM_CLIENT_ASYNC_CONNECT ); if ( false === $this->connection ) { if ( $errno != 0 ) $log = $errstring; return false; } $this->initializeQueue ( ); socket_set_blocking ( $this->connection, false ); return true; } // handles the features tag, mostly related to authentication private function handleFeatures ( &$node ) { if ( $this->debug ) $this->log ( 'handling features' ); if ( 'STARTTLS' == $node->firstChild->nodeName ) { $this->sendQueue[] = ""; return; } $elements = $this->query ( '*/MECHANISM', $node ); if ( ! is_null ( $elements ) && $elements !== false ) { if ( $this->debug ) $this->log ( " found " . $elements->length . " matching MECHANISM nodes "); $auth_mech = array (); foreach ( $elements as $e ) $auth_mech[] = $e->nodeValue; if ( in_array ( 'PLAIN', $auth_mech ) ) $this->sendQueue[] = "" . base64_encode("\x00" . preg_replace('/@.*$/','',$this->jid) . "\x00" . $this->password) . ""; elseif ( in_array ( 'DIGEST-MD5', $auth_mech ) ) // this code and the associated function are UNTESTED { $this->sendQueue[] = ""; $this->recvHandlers['challenge'] = 'digestAuth' ; } $this->recvHandlers['success'] = 'handleSuccess' ; } $elements = $this->query ( '*/BIND', $node ); if ( ! is_null ( $elements ) && $elements->length > 0 ) { // failure if we don't hit this, not sure how we can detect that failure yet. if ( $this->debug ) $this->log ( " found " . $elements->length . " matching BIND nodes "); $this->ready = true; } } // handle proceed tag/enable tls private function enableTLS ( $node ) { stream_set_blocking ( $this->connection, true ); stream_socket_enable_crypto ( $this->connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT ); stream_set_blocking ( $this->connection, false ); $this->sendQueue[] = "<"."?xml version=\"1.0\"?".">\n\n"; } // do digest auth private function digestAuth ( &$node ) { // this code is based solely on the description found @ http://web.archive.org/web/20050224191820/http://cataclysm.cx/wip/digest-md5-crash.html // UNTESTED please shoot me an email if you get this to work !! $contents = $node->nodeValue; if ( ! is_null ( $elements ) ) { $challlenge = array (); $parts = explode ( ',', base64_decode ( $contents ) ); foreach ( $parts as $text ) { $temp = explode ( '=', $text ); $challenge[$temp[0]] = $temp[1]; } if ( $challenge['realm'] == $this->server ) // might fail need to handle a response with multiple realms { $cnonce = md5((mt_rand() * time() / mt_rand())+$challenge['nonce']); $X = md5 ( preg_replace('/@.*$/','',$this->jid) . ':' . $this->server . ':' . $this->password, true ); $HA1 = md5 ( $X . ':' . $challenge['nonce'] . ':' . $cnonce . ':' . $this->jid . $this->resource ); $HA2 = md5 ( "AUTHENTICATE:xmpp/" . $this->server ); $resp = md5 ( $HA1 . ':' . $challenge['nonce'] . ':00000001:' . $cnonce . ':auth' . $HA2 ); $this->sendQueue[] = "" . base64_encode("username=\"" . preg_replace('/@.*$/','',$this->jid) . "\"," . "realm=\"" . $this->server . "\",nonce=\"" . $challenge['nonce'] . "\",cnonce=\"". $cnonce . "\"," . "nc=00000001,qop=auth,digest-uri=\"xmpp/" . $this->server . "\",response=" . $resp . ",charset=utf-8,authzid=\"". $this->jid . $this->resource . "\"" ) . "" // note the PID component to the resource, just incase ; } elseif ( $challenge['rspauth'] ) $this->sendQueue[] = "" ; } } // do basic setup to get the connection logged in and going private function handleSuccess ( &$node ) { $this->loggedIn = true; $this->sendQueue[] = "<"."?xml version=\"1.0\"?".">\n\n"; $this->sendQueue[] = "" . preg_replace('/^\//','',$this->resource) . ""; $this->recvHandlers['stream:error'] = 'handleError' ; $this->recvHandlers['iq'] = 'handleIq' ; $this->recvHandlers['message'] = 'handleMessage' ; $this->mesgcount = 1; } // do something with standard iq messages also does some standard setup like setting presence private function handleIq ( &$node ) { if ( $this->debug ) $this->log ( "Handle IQ id:" . $node->getAttribute ( 'id' ) . ' type:' . $node->getAttribute ( 'type' ) . ""); if ( $node->getAttribute ( 'type' ) == 'result' || $node->getAttribute ( 'type' ) == 'error' ) { $commandId = $node->getAttribute ( 'id' ); $this->command[$commandId] = true; if ( isset ( $this->handleCommand[$commandId] ) ) { $this->finishedCommands[$commandId] = true; if ( method_exists ( $this, $this->handleCommand[$commandId] ) ) call_user_func_array ( array ( $this, $this->handleCommand[$commandId] ), array ( &$node ) ); else call_user_func_array ( $this->handleCommand[$commandId], array ( &$node ) ); } } if ( $node->getAttribute ( 'id' ) == $this->mesgcount && $this->mesgcount < 3 ) { $this->sendQueue[] = ""; $this->sendQueue[] = ""; } if ( $node->getAttribute ( 'id' ) == '2' && $this->command['2'] == true ) { $this->nextreply = $this->mesgcount++; $this->sendQueue[] = "" . $this->status . ''; $this->ready = true; } } // do something with standard messages private function handleMessage ( &$node ) { if ( $node->getAttribute ( 'type' ) == 'chat' ) { $this->command[$node->getAttribute ( 'id' )] = true; $elements = $this->query ( '//*/body', $node ); if ( 0 < $elements->length ) { $temp = $elements->items(0); if ( $this->debug ) $this->log ( "received message " . $temp->nodeValue ); } } } // handle stream errors by logging a message and closing the connection private function handleError ( &$node ) { $this->log ( 'STREAM ERROR OCCURRED! XMPP closing connection, this is probably a bug' ); $this->idle = false; $this->close (); } // disco a pubsub collection private function disco ( $to, $type, $name ) { $msg = $this->mesgcount++; $send = ""; $send .= " "; $send .= ""; $this->handleCommand[$msg] = 'discoResult'; $this->sendQueue[] = $send; $this->go(); } // result from disco private function discoResult ( &$node ) { if ( $this->debug ) $this->log ( $node->ownerDocument->saveXML($node) ); $id = $node->getAttribute ( 'id' ); $identity = $this->query ( '*/IDENTITY', $node ); if ( @is_array ( $this->pubsub [ 'create' ] [ $id ] ) && 0 == $identity->length ) { $this->pubsubCreateNode( $this->pubsub [ 'create' ] [ $id ] [ 0 ], $this->pubsub [ 'create' ] [ $id ] [ 1 ], $this->pubsub [ 'create' ] [ $id ] [ 2 ], $this->pubsub [ 'create' ] [ $id ] [ 3 ] ); } } // send a message to a jid public function sendMessage ( $to, $message ) { $msg = $this->mesgcount++; $out .= ""; $out .= "" . $message . ""; $this->sendQueue[] = $out; $this->go(); } // get a pubsub collection/leaf node and create if it doesn't exist public function pubsubCreate ( $to, $type, $name, $configure = null ) { if ( 1 > strlen ( $to ) ) $to = 'pubsub.' . $this->server; if ( 1 > strlen ( $type ) ) $type = 'set'; if ( 'hometree' == $this->pubsubLayout ) $node = '/home/' . $this->server . '/' . $this->username . $name; else $node= $name; $this->pubsub['create'][$this->mesgcount+1] = array ( $to, $type, $name, $configure ); $this->disco ( $to, 'info', $node ); } // create a pubsub collection/leaf node private function pubsubCreateNode ( $to, $type, $name, $configure = null ) { if ( 'hometree' == $this->pubsubLayout ) $node = '/home/' . $this->server . '/' . $this->username . $name; else $node= $name; $msg = $this->mesgcount++; $out = ''; $out .= ''; if ( $configure ) $out .= '' . $configure .' '; else $out .= ''; $out .= ''; $out .= ''; $this->sendQueue[] = $out; $this->handleCommand[ $msg ] = 'pubsubResult'; $this->go(); } // configure a pubsub collection or leaf public function pubsubConfig ( $to, $type, $name ) { if ( 'hometree' == $this->pubsubLayout ) $node = '/home/' . $this->server . '/' . $this->username . $name; else $node= $name; $msg = $this->mesgcount++; $out = ''; $out .= ''; $out .= ''; $out .= ''; $this->handleCommand[ $msg ] = 'pubsubResult'; $this->sendQueue[] = $out; $this->go(); } // delete a pubsub collection or leaf public function pubsubDelete ( $to, $type, $name ) { if ( 'hometree' == $this->pubsubLayout ) $node = '/home/' . $this->server . '/' . $this->username . $name; else $node= $name; $msg = $this->mesgcount++; $out = ''; $out .= ''; $out .= ''; $out .= ''; $this->handleCommand[ $msg ] = 'pubsubResult'; $this->sendQueue[] = $out; $this->go(); } // purge a pubsub collection or leaf public function pubsubPurge ( $to, $type, $name ) { if ( 'hometree' == $this->pubsubLayout ) $node = '/home/' . $this->server . '/' . $this->username . $name; else $node= $name; $msg = $this->mesgcount++; $out = ''; $out .= ''; $out .= ''; $out .= ''; $this->handleCommand[ $msg ] = 'pubsubResult'; $this->sendQueue[] = $out; $this->go(); } // publish to a pubsub collection public function pubsubPublish ( $to, $type, $name, $contents, $nodeId ) { if ( 1 > strlen ( $to ) ) $to = 'pubsub.' . $this->server; if ( 1 > strlen ( $type ) ) $type = 'set'; if ( 1 > strlen ( $nodeId ) ) $id = "id='$nodeId'"; else $id = ''; if ( 'hometree' == $this->pubsubLayout ) $node = '/home/' . $this->server . '/' . $this->username . $name; else $node= $name; $msg = $this->mesgcount++; $out = ''; $out .= ''; if ( preg_match ( '/^' . $contents . ''; $out .= ''; $out .= ''; $this->sendQueue[] = $out; $this->handleCommand[ $msg ] = 'pubsubResult'; $this->go(); } // subscribe to a pubsub collection,leaf or item private function pubsubSubscribe ( $to, $type, $name ) { $msg = $this->mesgcount++; if ( 'hometree' == $this->pubsubLayout ) $node = '/home/' . $this->server . '/' . $this->username . $name; else $node= $name; $out = ''; $out .= ''; $out .= ''; $out .= ''; $this->sendQueue[] = $out; $this->handleCommand[ $msg ] = 'pubsubResult'; $this->go(); } private function pubsubResult ( &$node ) { if ( $this->debug ) $this->log ( "pubsub RESULT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); if ( $node->getAttribute ( 'type' ) == 'error' ) { $errnode = $this->query ( 'ERROR', $node ); if ( $errnode->length > 0 && ( '403' == $errnode->item( 0 )->getAttribute ( 'code' ) || '500' == $errnode->item( 0 )->getAttribute ( 'code' ) ) ) { if ( 'CREATE' == $node->firstChild->firstChild->tagName ) { $pubnode = $node->firstChild->firstChild->getAttribute ( 'node' ); if ( $this->debug ) $this->log ( "403 error during CREATE for node '" . $pubnode . "' "); $name = preg_replace ( '/^.*?\/' . $this->username . '\//','', $pubnode ); $newnode = ''; if ( ! in_array ( 'create', $this->pubsubNext ) ) { $a = array ( ); foreach ( explode ( '/', $name ) as $v ) { $newnode .= '/' . $v; $a[] = array ( 'call' => 'create', 'to' => $node->getAttribute ( 'from' ), 'name' => $newnode ); } foreach ( array_reverse ( $a ) as $v ) array_unshift ( $this->pubsubNext, $v ); $this->pubsubDoNext ( ); } } } elseif ( $errnode->length > 0 && '404' == $errnode->item( 0 )->getAttribute ( 'code' ) ) { if ( 'PUBLISH' == $node->firstChild->firstChild->tagName ) { $pubnode = $node->firstChild->firstChild->getAttribute ( 'node' ); if ( $this->debug ) $this->log ( "404 error during PUBLISH for node '" . $pubnode . "' "); $publish = $this->query ( '//*/PUBLISH', $node ); $this->pubsubNext[] = array ( 'call' => 'publish', 'to' => $node->getAttribute ( 'from' ), 'name' => preg_replace ( '/^.*?\/' . $this->username . '/','', $pubnode ) , 'contents' => $publish->item( 0 )->firstChild->nodeValue ); if ( $this->debug ) $this->log ( "attempting to create node '" . $this->pubsubNext[0]['name'] . "' "); $this->pubsubCreateNode ( $node->getAttribute ( 'from' ) ,'set', preg_replace ( '/^.*?\/' . $this->username . '/','', $pubnode ) ); } } elseif ( $errnode->length > 0 && '409' == $errnode->item( 0 )->getAttribute ( 'code' ) ) { if ( 'CANCEL' == $errnode->item( 0 )->firstChild->tagName || 'CONFLICT' == $errnode->item( 0 )->firstChild->tagName ) $this->pubsubDoNext ( ); } } elseif ( 0 < count ( $this->pubsubNext ) ) $this->pubsubDoNext ( ); } // do next pubsub request private function pubsubDoNext ( ) { if ( 0 < count ( $this->pubsubNext ) ) { $pub = array_shift ( $this->pubsubNext ); if ( 'publish' == $pub['call'] ) { if ( $this->debug ) $this->log ( "attempting to publish to node '" . $pub['name'] . "' contents '" . $pub['contents'] . "'"); $this->pubsubPublish ( $pub[$to], 'set', $pub['name'], $pub['contents'] ); } if ( 'create' == $pub['call'] ) { if ( $this->debug ) $this->log ( "attempting to create node '" . $pub['name'] . "' "); $this->pubsubCreateNode ( $pub[$to], 'set', $pub['name'] ); } } } // do basic setup to get the connection logged in and going private function initializeQueue ( ) { $this->loggedIn = false; $this->streamTagBegin = '<'."?xml version='1.0'?".">"; $this->streamTagEnd = ''; $this->sendQueue[] = $this->streamTagBegin; $this->recvHandlers['stream:features'] = 'handleFeatures' ; $this->recvHandlers['features'] = 'handleFeatures' ; $this->recvHandlers['proceed'] = 'enableTLS' ; } // send data out the socket private function send ( $data ) { $len = strlen ( $data ); if ( $this->debug ) $this->log ( "SEND: $data"); if ( false !== $this->connection ) { if ( fwrite ( $this->connection, $data, $len) === $len ) return true; else return false; } return false; } // receive any data waiting on the socket private function recv () { if ( false !== $this->connection ) { $data = ''; $data = fgets ( $this->connection, 4096 ); if ( 4094 < strlen ( $data ) ) { $count = 0; while ( 0 != strlen ( $moredata = fgets ( $this->connection, 1024 ) ) && 20 < $count++ ) { $data .= $moredata; usleep ( 10 ); } } if ( 0 < strlen ( $data ) ) { $data = preg_replace ( '/^<\?xml version=\'1.0\'\?'.'>/', '', $data ); $this->stream .= $data; if ( $this->debug ) $this->log ( "RECV: $data" ); return $data; } else return false; } return false; } private function go () { $this->recvQueue = implode ( '', $this->sendQueue ); $count = 0; $this->moredata = false; while ( false !== $this->connection ) { if ( 0 < count ( $this->sendQueue ) ) { $count = 0; while ( $data = array_shift ( $this->sendQueue ) ) $this->send ( $data ); } $data = $this->recv ( ); xml_parse ( $this->xmlparser, $data, false ); while ( $rnode = array_shift ( $this->recvTags ) ) { $rname = strtolower ( $rnode->localName ); if ( $this->debug ) $this->log ( " processing $rname "); if ( isset ( $this->recvHandlers[$rname] ) ) //&& is_callable ( $this->recvHandlers[$r->name] ) ) { if ( method_exists ( $this, $this->recvHandlers[$rname] ) ) call_user_func_array ( array ( $this, $this->recvHandlers[$rname] ), array ( &$rnode ) ); else call_user_func_array ( $this->recvHandlers[$rname], array ( &$rnode ) ); } } $count++; if ( $count > 20 ) { if ( $this->idle === true ) { $count = 0; usleep ( 200 ); } else { if ( $this->ready == true && count ( $this->handleCommand ) <= count ( $this->command ) ) { $count = 0; return ; } } } else usleep ( 20 ); } } // xml parser start element private function startElement ( $parser, $name, $attrs ) { $this->depth++; $namespace = ''; if ( 'STREAM:STREAM' == $name ) $this->processDepth++; foreach ( $attrs as $k => $v ) if ( preg_match ( '/^xmlns:?(.*)/i', $k, $matches ) ) { if ( strlen ( $matches[1] ) > 0 && ! isset ( $this->namespaces [ $matches[1] ] ) ) { $this->xquery->registerNamespace ( $matches[1], $v ); $this->namespaces [ $matches[1] ] = $v; $namespace = $v; if ( $this->debug ) $this->log ( " adding namespace $k => $v "); } } if ( $namespace != '' ) $node = $this->doc->createElementNS ( $namespace, $name ); else $node = $this->doc->createElement ( $name ); foreach ( $attrs as $k => $v ) $node->setAttribute ( strtolower ( $k ), $v ); $this->currentXMLNode = $this->currentXMLNode->appendChild ( $node ); } // xml parser start element private function endElement ( $parser, $name ) { $this->depth--; //if ( $this->debug ) $this->log ( "depth: " . $this->depth . " processDepth: " . $this->processDepth . " "); if ( $this->depth == $this->processDepth || 'STREAM:STREAM' == $name || 'STREAM:FEATURES' == $name || 'PROCEED' == $name ) { if ( $this->debug ) $this->log ( " adding $name to tags to process "); array_push ( $this->recvTags, $this->currentXMLNode ); // replace with tag } $this->currentXMLNode = $this->currentXMLNode->parentNode; } // xml parser start element private function parseData ( $parser, $text ) { $this->currentXMLNode->appendChild ( $this->doc->createTextNode ( $text ) ); } // xml parser start element private function setupXmlParser ( ) { $this->depth = 0; $this->xmlparser = xml_parser_create ( ); xml_set_object ( $this->xmlparser, $this ); xml_set_element_handler ( $this->xmlparser, 'startElement', 'endElement' ); xml_set_character_data_handler ( $this->xmlparser, 'parseData' ); $this->doc = new DOMDocument (); $this->xquery = new DOMXpath ( $this->doc ); $this->xquery->registerNamespace ( 'stream', 'http://etherx.jabber.org/streams' ); $this->currentXMLNode = $this->doc->appendChild ( $this->doc->createElement ( 'start' ) ); } // xml XPath query private function query ( $expression, &$node = '' ) { if ( '' == $node ) return $this->xquery->query ( $expression ); else return $this->xquery->query ( $expression , $node ); } // open xmpp connection, will accept jid and password public function open ( $jid = null, $password = null) { if ( null != $jid ) $this->jid = $jid; if ( null != $password ) $this->password = $password; $this->ready = false; if ( false !== $this->connect () ) { sleep(2); $this->go (); } else return false; return true; } public function close () { if ( false !== $this->connection ) { $this->send ( ''); fclose ( $this->connection ); $this->connection = false; } } // add a send or recv handler, direction = [ send | recv ], command = command to handle, handler = function ref public function addHandler ( $direction, $command, $handler ) { if ( 'send' == $direction ) $this->sendHandler[$command] = $handler; if ( 'recv' == $direction ) $this->recvHandler[$command] = $handler; } // handle logging private function log ( $message ) { error_log ( 'XMPP: ' . $message ); //echo 'XMPP: ' . $message . "\n"; } } /** * * Log the action * * @param string $action_type INSERT / UPDATE or DELETE * * @param string $uid The UID of the modified item * * @param integer $user_no The user owning the containing collection. * * @param integer $collection_id The ID of the containing collection. * * @param string $dav_name The DAV path of the item, relative to the DAViCal base path * */ function log_caldav_action( $action_type, $uid, $user_no, $collection_id, $dav_name ) { global $c; $t = new xmpp(); $t->tls = 'none'; $t->idle = false; if ( 1 == $c->dbg["ALL"] || 1 == $c->dbg["push"] ) $t->debug = true ; else $t->debug = false ; // for now use a flat node tree layout $t->pubsubLayout = 'flat'; // get the principal_id for this collection, that's what the client will be looking for $qry = new AwlQuery ('SELECT principal_id FROM principal JOIN collection USING (user_no) WHERE collection_id= :collection_id', array( ':collection_id' => $collection_id ) ); $qry->Exec('pubsub'); $row = $qry->Fetch(); $t->open ( $c->notifications_server['jid'], $c->notifications_server['password'] ); if ( isset ( $c->notifications_server['debug_jid'] ) ) $t->sendMessage ( $c->notifications_server['debug_jid'], "ACTION: $action_type\nUSER: $user_no\nDAV NAME: $dav_name\nPRINCIPAL ID: " . $row->principal_id ); $t->pubsubCreate ( '', 'set', '/davical-' . $row->principal_id, 'http://jabber.org/protocol/pubsub#node_configopenplist-apple' ); $t->pubsubPublish ( '', 'set', '/davical-' . $row->principal_id , 'davical' . $uid . '', $uid ); $t->close(); } davical-1.1.1/inc/caldav-REPORT-sync-collection.php0000644000000000000000000001610311770570142016640 0ustar * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ $responses = array(); /** * Build the array of properties to include in the report output */ $sync_level = $xmltree->GetPath('/DAV::sync-collection/DAV::sync-level'); if ( empty($sync_level) ) { $sync_level = $request->depth; } else { $sync_level = $sync_level[0]->GetContent(); if ( $sync_level == 'infinity' ) $sync_level = DEPTH_INFINITY; else $sync_level = 1; } if ( $sync_level == DEPTH_INFINITY ) { $request->PreconditionFailed(403, 'DAV::sync-traversal-supported','This server does not support sync-traversal'); } $sync_tokens = $xmltree->GetPath('/DAV::sync-collection/DAV::sync-token'); $sync_token = $sync_tokens[0]->GetContent(); if ( !isset($sync_token) ) $sync_token = 0; $sync_token = intval(str_ireplace('data:,', '', $sync_token )); dbg_error_log( 'sync', " sync-token: %s", $sync_token ); $proplist = array(); $props = $xmltree->GetPath('/DAV::sync-collection/DAV::prop/*'); if ( !empty($props) ) { foreach( $props AS $k => $v ) { $proplist[] = $v->GetNSTag(); } } function display_status( $status_code ) { return sprintf( 'HTTP/1.1 %03d %s', intval($status_code), getStatusMessage($status_code) ); } $collection = new DAVResource( $request->path ); if ( !$collection->Exists() ) { $request->DoResponse( 404 ); } $bound_from = $collection->bound_from(); $collection_path = $collection->dav_name(); $request_via_binding = ($bound_from != $collection_path); $params = array( ':collection_id' => $collection->GetProperty('collection_id'), ':sync_token' => $sync_token ); $sql = "SELECT new_sync_token( :sync_token, :collection_id)"; $qry = new AwlQuery($sql, $params); if ( !$qry->Exec("REPORT",__LINE__,__FILE__) || $qry->rows() <= 0 ) { $request->DoResponse( 500, translate("Database error") ); } $row = $qry->Fetch(); if ( !isset($row->new_sync_token) ) { /** If we got a null back then they gave us a sync token we know not of, so provide a full sync */ $sync_token = 0; $params[':sync_token'] = $sync_token; if ( !$qry->QDo($sql, $params) || $qry->rows() <= 0 ) { $request->DoResponse( 500, translate("Database error") ); } $row = $qry->Fetch(); } $new_token = $row->new_sync_token; if ( $sync_token == $new_token ) { // No change, so we just re-send the old token. $responses[] = new XMLElement( 'sync-token', 'data:,'.$new_token ); } else { $hide_older = ''; if ( isset($c->hide_older_than) && intval($c->hide_older_than) > 0 ) $hide_older = " AND (CASE WHEN caldav_data.caldav_type<>'VEVENT' OR calendar_item.dtstart IS NULL THEN true ELSE calendar_item.dtstart > (now() - interval '".intval($c->hide_older_than)." days') END)"; if ( $sync_token == 0 ) { $sql = <<= (SELECT modification_time FROM sync_tokens WHERE sync_token = :sync_token) EOSQL; if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) { $sql .= " ORDER BY collection.collection_id, lower(sync_changes.dav_name), sync_changes.sync_time"; } else { $sql .= " ORDER BY collection.collection_id, sync_changes.dav_name, sync_changes.sync_time"; } } $qry = new AwlQuery($sql, $params ); $last_dav_name = ''; $first_status = 0; if ( $qry->Exec("REPORT",__LINE__,__FILE__) ) { if ( $qry->rows() > 50 ) { // If there are more than 50 rows to send we should not send full data in response ... $c->sync_resource_data_ok = false; } while( $object = $qry->Fetch() ) { if ( $request_via_binding ) $object->dav_name = str_replace( $bound_from, $collection_path, $object->dav_name); if ( $object->dav_name == $last_dav_name ) { /** The complex case: this is the second or subsequent for this dav_id */ if ( $object->sync_status == 404 ) { array_pop($responses); $resultset = array( new XMLElement( 'href', ConstructURL($object->dav_name) ), new XMLElement( 'status', display_status($object->sync_status) ) ); $responses[] = new XMLElement( 'response', $resultset ); $first_status = 404; } else if ( $object->sync_status == 201 && $first_status == 404 ) { // ... Delete ... Create ... is indicated as a create, but don't forget we started with a delete array_pop($responses); $dav_resource = new DAVResource($object); $resultset = $dav_resource->GetPropStat($proplist,$reply); array_unshift($resultset, new XMLElement( 'href', ConstructURL($object->dav_name))); $responses[] = new XMLElement( 'response', $resultset ); } /** Else: * the object existed at start and we have multiple modifications, * or, * the object didn't exist at start and we have subsequent modifications, * but: * in either case we simply stick with our existing report. */ } else { /** The simple case: this is the first one for this dav_id */ if ( $object->sync_status == 404 ) { $resultset = array( new XMLElement( 'href', ConstructURL($object->dav_name) ), new XMLElement( 'status', display_status($object->sync_status) ) ); $first_status = 404; } else { $dav_resource = new DAVResource($object); $resultset = $dav_resource->GetPropStat($proplist,$reply); array_unshift($resultset, new XMLElement( 'href', ConstructURL($object->dav_name))); $first_status = $object->sync_status; } $responses[] = new XMLElement( 'response', $resultset ); $last_dav_name = $object->dav_name; } } $responses[] = new XMLElement( 'sync-token', 'data:,'.$new_token ); } else { $request->DoResponse( 500, translate("Database error") ); } } $multistatus = new XMLElement( "multistatus", $responses, $reply->GetXmlNsArray() ); $request->XMLResponse( 207, $multistatus ); davical-1.1.1/inc/caldav-DELTICKET.php0000644000000000000000000000333311362722273014034 0ustar * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log('DELTICKET', 'method handler'); require_once('DAVResource.php'); if ( ! $request->HavePrivilegeTo('DAV::unbind') && $request->ticket->owner() != $session->principal_id ) { $request->NeedPrivilege('DAV::unbind'); } if ( ! isset($request->ticket) ) { if ( isset($_GET['ticket']) || isset($_SERVER['HTTP_TICKET']) ) { $r = new DAVResource($request->path); if ( ! $r->Exists() ) { $request->PreconditionFailed(404,'not-found'); } else { $request->PreconditionFailed(412,'ticket-does-not-exist','The specified ticket does not exist'); } } else $request->MalformedRequest('No ticket specified'); } $qry = new AwlQuery('DELETE FROM access_ticket WHERE ticket_id=:ticket_id', array( ':ticket_id' => $request->ticket->id() ) ); if ( $qry->Exec('DELTICKET', __LINE__, __FILE__) ) { $request->DoResponse( 204 ); } $request->DoResponse( 500 ); davical-1.1.1/inc/check_UTF8.php0000644000000000000000000001734311217772737013176 0ustar 0xFFFF. Occurrances of the BOM are ignored. Surrogates * are not allowed. * * Returns false if the input string isn't a valid UTF-8 octet sequence. */ function utf8ToUnicode(&$str) { $mState = 0; // cached expected number of octets after the current octet // until the beginning of the next UTF8 character sequence $mUcs4 = 0; // cached Unicode character $mBytes = 1; // cached expected number of octets in the current sequence $out = array(); $len = strlen($str); for($i = 0; $i < $len; $i++) { $in = ord($str{$i}); if (0 == $mState) { // When mState is zero we expect either a US-ASCII character or a // multi-octet sequence. if (0 == (0x80 & ($in))) { // US-ASCII, pass straight through. $out[] = $in; $mBytes = 1; } else if (0xC0 == (0xE0 & ($in))) { // First octet of 2 octet sequence $mUcs4 = ($in); $mUcs4 = ($mUcs4 & 0x1F) << 6; $mState = 1; $mBytes = 2; } else if (0xE0 == (0xF0 & ($in))) { // First octet of 3 octet sequence $mUcs4 = ($in); $mUcs4 = ($mUcs4 & 0x0F) << 12; $mState = 2; $mBytes = 3; } else if (0xF0 == (0xF8 & ($in))) { // First octet of 4 octet sequence $mUcs4 = ($in); $mUcs4 = ($mUcs4 & 0x07) << 18; $mState = 3; $mBytes = 4; } else if (0xF8 == (0xFC & ($in))) { /* First octet of 5 octet sequence. * * This is illegal because the encoded codepoint must be either * (a) not the shortest form or * (b) outside the Unicode range of 0-0x10FFFF. * Rather than trying to resynchronize, we will carry on until the end * of the sequence and let the later error handling code catch it. */ $mUcs4 = ($in); $mUcs4 = ($mUcs4 & 0x03) << 24; $mState = 4; $mBytes = 5; } else if (0xFC == (0xFE & ($in))) { // First octet of 6 octet sequence, see comments for 5 octet sequence. $mUcs4 = ($in); $mUcs4 = ($mUcs4 & 1) << 30; $mState = 5; $mBytes = 6; } else { /* Current octet is neither in the US-ASCII range nor a legal first * octet of a multi-octet sequence. */ return false; } } else { // When mState is non-zero, we expect a continuation of the multi-octet // sequence if (0x80 == (0xC0 & ($in))) { // Legal continuation. $shift = ($mState - 1) * 6; $tmp = $in; $tmp = ($tmp & 0x0000003F) << $shift; $mUcs4 |= $tmp; if (0 == --$mState) { /* End of the multi-octet sequence. mUcs4 now contains the final * Unicode codepoint to be output * * Check for illegal sequences and codepoints. */ // From Unicode 3.1, non-shortest form is illegal if (((2 == $mBytes) && ($mUcs4 < 0x0080)) || ((3 == $mBytes) && ($mUcs4 < 0x0800)) || ((4 == $mBytes) && ($mUcs4 < 0x10000)) || (4 < $mBytes) || // From Unicode 3.2, surrogate characters are illegal (($mUcs4 & 0xFFFFF800) == 0xD800) || // Codepoints outside the Unicode range are illegal ($mUcs4 > 0x10FFFF)) { return false; } if (0xFEFF != $mUcs4) { // BOM is legal but we don't want to output it $out[] = $mUcs4; } //initialize UTF8 cache $mState = 0; $mUcs4 = 0; $mBytes = 1; } } else { /* ((0xC0 & (*in) != 0x80) && (mState != 0)) * * Incomplete multi-octet sequence. */ return false; } } } return $out; } /** * Takes an array of ints representing the Unicode characters and returns * a UTF-8 string. Astral planes are supported ie. the ints in the * input can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates * are not allowed. * * Returns false if the input array contains ints that represent * surrogates or are outside the Unicode range. */ function unicodeToUtf8(&$arr) { $dest = ''; foreach ($arr as $src) { if($src < 0) { return false; } else if ( $src <= 0x007f) { $dest .= chr($src); } else if ($src <= 0x07ff) { $dest .= chr(0xc0 | ($src >> 6)); $dest .= chr(0x80 | ($src & 0x003f)); } else if($src == 0xFEFF) { // nop -- zap the BOM } else if ($src >= 0xD800 && $src <= 0xDFFF) { // found a surrogate return false; } else if ($src <= 0xffff) { $dest .= chr(0xe0 | ($src >> 12)); $dest .= chr(0x80 | (($src >> 6) & 0x003f)); $dest .= chr(0x80 | ($src & 0x003f)); } else if ($src <= 0x10ffff) { $dest .= chr(0xf0 | ($src >> 18)); $dest .= chr(0x80 | (($src >> 12) & 0x3f)); $dest .= chr(0x80 | (($src >> 6) & 0x3f)); $dest .= chr(0x80 | ($src & 0x3f)); } else { // out of range return false; } } return $dest; } function check_string($ics){ $ics_file = explode("\n",$ics); foreach($ics_file as $line => $str){ if(false === utf8ToUnicode($str)){ $error[] = $line; } } if(isset($error) && is_array($error)){ foreach($error as $line){ dbg_error_log( "LOG check_string","error on lines % invalid character in string %s" , ($line +1),$ics_file[$line] ); return false; } } else { dbg_error_log( "LOG check_string","the string is UTF8 compliant"); return true; } } ?>davical-1.1.1/inc/caldav-PROPFIND.php0000644000000000000000000002575511755642303013762 0ustar * @copyright Catalyst .Net Ltd, Andrew McMillan * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log('PROPFIND', 'method handler'); $request->NeedPrivilege( array('DAV::read', 'urn:ietf:params:xml:ns:caldav:read-free-busy','DAV::read-current-user-privilege-set') ); require_once('iCalendar.php'); require_once('XMLDocument.php'); require_once('DAVResource.php'); $reply = new XMLDocument( array( 'DAV:' => '' ) ); if ( !isset($request->xml_tags) ) { // Empty body indicates DAV::allprop request according to RFC4918 $property_list = array('DAV::allprop'); } else { $position = 0; $xmltree = BuildXMLTree( $request->xml_tags, $position); if ( !is_object($xmltree) ) { $request->DoResponse( 403, translate("Request body is not valid XML data!") ); } $allprop = $xmltree->GetPath('/DAV::propfind/*'); $property_list = array(); foreach( $allprop AS $k1 => $propwrap ) { switch ( $propwrap->GetNSTag() ) { case 'DAV::allprop': $property_list[] = 'DAV::allprop'; break; case 'DAV::propname': $property_list[] = 'DAV::propname'; break; default: // prop, include $subprop = $propwrap->GetElements(); foreach( $subprop AS $k => $v ) { if ( is_object($v) && method_exists($v,'GetTag') ) $property_list[] = $v->GetNSTag(); } } } } /** * Add the calendar-proxy-read/write pseudocollections * @param responses array of responses to which to add the collections */ function add_proxy_response( $which, $parent_path ) { global $request, $reply, $c, $session, $property_list; if ($parent_path != $request->principal->dav_name()) { dbg_error_log( 'PROPFIND', 'Not returning proxy response since "%s" != "%s"', $parent_path, $request->principal->dav_name() ); return null; // Nothing to proxy for } $collection = (object) ''; if ( $which == 'read' ) { $proxy_group = $request->principal->ReadProxyGroup(); } else if ( $which == 'write' ) { $proxy_group = $request->principal->WriteProxyGroup(); } dbg_error_log( 'PROPFIND', 'Returning proxy response to "%s" for "%s"', $which, $parent_path ); $collection->parent_container = $parent_path; $collection->dav_name = $parent_path.'calendar-proxy-'.$which.'/'; $collection->is_calendar = 'f'; $collection->is_addressbook = 'f'; $collection->is_principal = 't'; $collection->is_proxy = 't'; $collection->proxy_type = $which; $collection->type = 'proxy'; $collection->dav_displayname = $collection->dav_name; $collection->collection_id = 0; $collection->user_no = $session->user_no; $collection->username = $session->username; $collection->email = $session->email; $collection->created = date('Ymd\THis'); $collection->dav_etag = md5($c->system_name . $collection->dav_name . implode($proxy_group) ); $collection->proxy_for = $proxy_group; $collection->resourcetypes = sprintf('', $which); $collection->in_freebusy_set = 'f'; $collection->schedule_transp = 'transp'; $collection->timezone = null; $collection->description = ''; $resource = new DAVResource($collection); return $resource->RenderAsXML($property_list, $reply); } /** * Get XML response for items in the collection * If '/' is requested, a list of visible users is given, otherwise * a list of calendars for the user which are parented by this path. */ function get_collection_contents( $depth, $collection, $parent_path = null ) { global $c, $session, $request, $reply, $property_list; $bound_from = $collection->bound_from(); $bound_to = $collection->dav_name(); if ( !isset($parent_path) ) $parent_path = $collection->dav_name(); dbg_error_log('PROPFIND','Getting collection contents: Depth %d, Path: %s, Bound from: %s, Bound to: %s', $depth, $collection->dav_name(), $bound_from, $bound_to ); $date_format = iCalendar::HttpDateFormat(); $responses = array(); if ( ! $collection->IsCalendar() && ! $collection->IsAddressbook() ) { /** * Calendar/Addressbook collections may not contain collections, so we are only looking in the other ones */ $params = array( ':session_principal' => $session->principal_id, ':scan_depth' => $c->permission_scan_depth ); if ( $bound_from == '/' ) { $sql = "SELECT usr.*, '/' || username || '/' AS dav_name, md5(username || updated::text) AS dav_etag, "; $sql .= "to_char(joined at time zone 'GMT',$date_format) AS created, "; $sql .= "to_char(updated at time zone 'GMT',$date_format) AS modified, "; $sql .= 'FALSE AS is_calendar, TRUE AS is_principal, FALSE AS is_addressbook, \'principal\' AS type, '; $sql .= 'principal_id AS collection_id, '; $sql .= 'principal.* '; $sql .= 'FROM usr JOIN principal USING (user_no) '; $sql .= "WHERE (pprivs(:session_principal::int8,principal.principal_id,:scan_depth::int) & 1::BIT(24))::INT4::BOOLEAN "; $sql .= 'ORDER BY usr.user_no'; } else { $qry = new AwlQuery('SELECT * FROM dav_binding WHERE dav_binding.parent_container = :this_dav_name ORDER BY bind_id', array(':this_dav_name' => $bound_from)); if( $qry->Exec('PROPFIND',__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $binding = $qry->Fetch() ) { $resource = new DAVResource($binding->dav_name); if ( $resource->IsExternal() ) { require_once("external-fetch.php"); update_external ( $resource ); } if ( $resource->HavePrivilegeTo('DAV::read', false) ) { $resource->set_bind_location( str_replace($bound_from,$bound_to,$binding->dav_name)); $responses[] = $resource->RenderAsXML($property_list, $reply); if ( $depth > 0 ) { $responses = array_merge($responses, get_collection_contents( $depth - 1, $resource, $binding->dav_name ) ); } } } } $sql = 'SELECT principal.*, collection.*, \'collection\' AS type '; $sql .= 'FROM collection LEFT JOIN principal USING (user_no) '; $sql .= 'WHERE parent_container = :this_dav_name '; $sql .= "AND (path_privs(:session_principal::int8,collection.dav_name,:scan_depth::int) & 1::BIT(24))::INT4::BOOLEAN "; $sql .= ' ORDER BY collection_id'; $params[':this_dav_name'] = $bound_from; } $qry = new AwlQuery($sql, $params); if( $qry->Exec('PROPFIND',__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $subcollection = $qry->Fetch() ) { $resource = new DAVResource($subcollection); $resource->set_bind_location( str_replace($bound_from,$bound_to,$subcollection->dav_name)); $responses[] = $resource->RenderAsXML($property_list, $reply); if ( $depth > 0 ) { $responses = array_merge($responses, get_collection_contents( $depth - 1, $resource, str_replace($resource->parent_path(), $parent_path, $resource->dav_name() ) ) ); } } } if ( (!isset($c->disable_caldav_proxy) || $c->disable_caldav_proxy == false) && $collection->IsPrincipal() ) { // Caldav Proxy: 5.1 par. 2: Add child resources calendar-proxy-(read|write) dbg_error_log('PROPFIND','Adding calendar-proxy-read and write. Path: %s', $bound_from ); $response = add_proxy_response('read', $bound_from ); if ( isset($response) ) $responses[] = $response; $response = add_proxy_response('write', $bound_from ); if ( isset($response) ) $responses[] = $response; } } /** * freebusy permission is not allowed to see the items in a collection. Must have at least read permission. */ if ( $collection->HavePrivilegeTo('DAV::read', false) ) { dbg_error_log('PROPFIND','Getting collection items: Depth %d, Path: %s', $depth, $bound_from ); $privacy_clause = ' '; $time_limit_clause = ' '; if ( $collection->IsCalendar() ) { if ( ! $collection->HavePrivilegeTo('all', false) ) { $privacy_clause = " AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) "; } if ( isset($c->hide_older_than) && intval($c->hide_older_than > 0) ) { $time_limit_clause = " AND calendar_item.dtstart > (now() - interval '".intval($c->hide_older_than)." days') "; } } $sql = 'SELECT collection.*, principal.*, calendar_item.*, caldav_data.*, '; $sql .= "to_char(coalesce(calendar_item.created, caldav_data.created) at time zone 'GMT',$date_format) AS created, "; $sql .= "to_char(coalesce(calendar_item.last_modified, caldav_data.modified) at time zone 'GMT',$date_format) AS modified, "; $sql .= 'summary AS dav_displayname '; $sql .= 'FROM caldav_data LEFT JOIN calendar_item USING( dav_id, user_no, dav_name, collection_id) '; $sql .= 'LEFT JOIN collection USING(collection_id,user_no) LEFT JOIN principal USING(user_no) '; $sql .= 'WHERE collection.dav_name = :collection_dav_name '.$time_limit_clause.' '.$privacy_clause; if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) $sql .= " ORDER BY caldav_data.dav_id"; $qry = new AwlQuery( $sql, array( ':collection_dav_name' => $bound_from) ); if( $qry->Exec('PROPFIND',__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $item = $qry->Fetch() ) { if ( $bound_from != $bound_to ) { $item->bound_from = $item->dav_name; $item->dav_name = str_replace($bound_from,$bound_to,$item->dav_name); } $resource = new DAVResource($item); $responses[] = $resource->RenderAsXML($property_list, $reply, $parent_path ); } } } return $responses; } /** * Something that we can handle, at least roughly correctly. */ $responses = array(); if ( $request->IsProxyRequest() ) { $response = add_proxy_response($request->proxy_type, $request->principal->dav_name() ); if ( isset($response) ) $responses[] = $response; } else { $resource = new DAVResource($request->path); if ( ! $resource->Exists() ) { $request->PreconditionFailed( 404, 'must-exist', translate('That resource is not present on this server.') ); } $resource->NeedPrivilege('DAV::read'); if ( $resource->IsExternal() ) { require_once("external-fetch.php"); update_external ( $resource ); } if ( $resource->IsCollection() ) { dbg_error_log('PROPFIND','Getting collection contents: Depth %d, Path: %s', $request->depth, $resource->dav_name() ); $responses[] = $resource->RenderAsXML($property_list, $reply); if ( $request->depth > 0 ) { $responses = array_merge($responses, get_collection_contents( $request->depth - 1, $resource ) ); } } elseif ( $request->HavePrivilegeTo('DAV::read',false) ) { $responses[] = $resource->RenderAsXML($property_list, $reply); } } $xmldoc = $reply->Render('multistatus', $responses); $etag = md5($xmldoc); header('ETag: "'.$etag.'"'); $request->DoResponse( 207, $xmldoc, 'text/xml; charset="utf-8"' ); davical-1.1.1/inc/caldav-client.php0000644000000000000000000004221411633117640014000 0ustar * @copyright Andrew McMillan * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ /** * A class for accessing DAViCal via CalDAV, as a client * * @package awl */ class CalDAVClient { /** * Server, username, password, calendar * * @var string */ var $base_url, $user, $pass, $calendar, $entry, $protocol, $server, $port; /** * The useragent which is send to the caldav server * * @var string */ var $user_agent = 'DAViCalClient'; var $headers = array(); var $body = ""; var $requestMethod = "GET"; var $httpRequest = ""; // for debugging http headers sent var $xmlRequest = ""; // for debugging xml sent var $httpResponse = ""; // for debugging http headers received var $xmlResponse = ""; // for debugging xml received /** * Constructor, initialises the class * * @param string $base_url The URL for the calendar server * @param string $user The name of the user logging in * @param string $pass The password for that user * @param string $calendar The name of the calendar (not currently used) */ function CalDAVClient( $base_url, $user, $pass, $calendar = '' ) { $this->user = $user; $this->pass = $pass; $this->calendar = $calendar; $this->headers = array(); if ( preg_match( '#^(https?)://([a-z0-9.-]+)(:([0-9]+))?(/.*)$#', $base_url, $matches ) ) { $this->server = $matches[2]; $this->base_url = $matches[5]; if ( $matches[1] == 'https' ) { $this->protocol = 'ssl'; $this->port = 443; } else { $this->protocol = 'tcp'; $this->port = 80; } if ( $matches[4] != '' ) { $this->port = intval($matches[4]); } } else { trigger_error("Invalid URL: '".$base_url."'", E_USER_ERROR); } } /** * Adds an If-Match or If-None-Match header * * @param bool $match to Match or Not to Match, that is the question! * @param string $etag The etag to match / not match against. */ function SetMatch( $match, $etag = '*' ) { $this->headers[] = sprintf( "%s-Match: %s", ($match ? "If" : "If-None"), $etag); } /* * Add a Depth: header. Valid values are 0, 1 or infinity * * @param int $depth The depth, default to infinity */ function SetDepth( $depth = '0' ) { $this->headers[] = 'Depth: '. ($depth == '1' ? "1" : ($depth == 'infinity' ? $depth : "0") ); } /** * Add a Depth: header. Valid values are 1 or infinity * * @param int $depth The depth, default to infinity */ function SetUserAgent( $user_agent = null ) { if ( !isset($user_agent) ) $user_agent = $this->user_agent; $this->user_agent = $user_agent; } /** * Add a Content-type: header. * * @param int $type The content type */ function SetContentType( $type ) { $this->headers[] = "Content-type: $type"; } /** * Split response into httpResponse and xmlResponse * * @param string Response from server */ function ParseResponse( $response ) { $pos = strpos($response, 'httpResponse = trim($response); } else { $this->httpResponse = trim(substr($response, 0, $pos)); $this->xmlResponse = trim(substr($response, $pos)); } } /** * Output http request headers * * @return HTTP headers */ function GetHttpRequest() { return $this->httpRequest; } /** * Output http response headers * * @return HTTP headers */ function GetHttpResponse() { return $this->httpResponse; } /** * Output xml request * * @return raw xml */ function GetXmlRequest() { return $this->xmlRequest; } /** * Output xml response * * @return raw xml */ function GetXmlResponse() { return $this->xmlResponse; } /** * Send a request to the server * * @param string $relative_url The URL to make the request to, relative to $base_url * * @return string The content of the response from the server */ function DoRequest( $relative_url = "" ) { if(!defined("_FSOCK_TIMEOUT")){ define("_FSOCK_TIMEOUT", 10); } $headers = array(); $headers[] = $this->requestMethod." ". $this->base_url . $relative_url . " HTTP/1.1"; $headers[] = "Authorization: Basic ".base64_encode($this->user .":". $this->pass ); $headers[] = "Host: ".$this->server .":".$this->port; foreach( $this->headers as $ii => $head ) { $headers[] = $head; } $headers[] = "Content-Length: " . strlen($this->body); $headers[] = "User-Agent: " . $this->user_agent; $headers[] = 'Connection: close'; $this->httpRequest = join("\r\n",$headers); $this->xmlRequest = $this->body; $fip = fsockopen( $this->protocol . '://' . $this->server, $this->port, $errno, $errstr, _FSOCK_TIMEOUT); //error handling? if ( !(get_resource_type($fip) == 'stream') ) return false; if ( !fwrite($fip, $this->httpRequest."\r\n\r\n".$this->body) ) { fclose($fip); return false; } $rsp = ""; while( !feof($fip) ) { $rsp .= fgets($fip,8192); } fclose($fip); $this->headers = array(); // reset the headers array for our next request $this->ParseResponse($rsp); return $rsp; } /** * Send an OPTIONS request to the server * * @param string $relative_url The URL to make the request to, relative to $base_url * * @return array The allowed options */ function DoOptionsRequest( $relative_url = "" ) { $this->requestMethod = "OPTIONS"; $this->body = ""; $headers = $this->DoRequest($relative_url); $options_header = preg_replace( '/^.*Allow: ([a-z, ]+)\r?\n.*/is', '$1', $headers ); $options = array_flip( preg_split( '/[, ]+/', $options_header )); return $options; } /** * Send an XML request to the server (e.g. PROPFIND, REPORT, MKCALENDAR) * * @param string $method The method (PROPFIND, REPORT, etc) to use with the request * @param string $xml The XML to send along with the request * @param string $relative_url The URL to make the request to, relative to $base_url * * @return array An array of the allowed methods */ function DoXMLRequest( $request_method, $xml, $relative_url = '' ) { $this->body = $xml; $this->requestMethod = $request_method; $this->SetContentType("text/xml"); return $this->DoRequest($relative_url); } /** * Get a single item from the server. * * @param string $relative_url The part of the URL after the calendar */ function DoGETRequest( $relative_url ) { $this->body = ""; $this->requestMethod = "GET"; return $this->DoRequest( $relative_url ); } /** * PUT a text/icalendar resource, returning the etag * * @param string $relative_url The URL to make the request to, relative to $base_url * @param string $icalendar The iCalendar resource to send to the server * @param string $etag The etag of an existing resource to be overwritten, or '*' for a new resource. * * @return string The content of the response from the server */ function DoPUTRequest( $relative_url, $icalendar, $etag = null ) { $this->body = $icalendar; $this->requestMethod = "PUT"; if ( $etag != null ) { $this->SetMatch( ($etag != '*'), $etag ); } $this->SetContentType("text/icalendar"); $headers = $this->DoRequest($relative_url); /** * DAViCal will always return the real etag on PUT. Other CalDAV servers may need * more work, but we are assuming we are running against DAViCal in this case. */ $etag = preg_replace( '/^.*Etag: "?([^"\r\n]+)"?\r?\n.*/is', '$1', $headers ); return $etag; } /** * DELETE a text/icalendar resource * * @param string $relative_url The URL to make the request to, relative to $base_url * @param string $etag The etag of an existing resource to be deleted, or '*' for any resource at that URL. * * @return int The HTTP Result Code for the DELETE */ function DoDELETERequest( $relative_url, $etag = null ) { $this->body = ""; $this->requestMethod = "DELETE"; if ( $etag != null ) { $this->SetMatch( true, $etag ); } $this->DoRequest($relative_url); return $this->resultcode; } /** * Given XML for a calendar query, return an array of the events (/todos) in the * response. Each event in the array will have a 'href', 'etag' and '$response_type' * part, where the 'href' is relative to the calendar and the '$response_type' contains the * definition of the calendar data in iCalendar format. * * @param string $filter XML fragment which is the element of a calendar-query * @param string $relative_url The URL relative to the base_url specified when the calendar was opened. Default ''. * @param string $report_type Used as a name for the array element containing the calendar data. @deprecated * * @return array An array of the relative URLs, etags, and events from the server. Each element of the array will * be an array with 'href', 'etag' and 'data' elements, corresponding to the URL, the server-supplied * etag (which only varies when the data changes) and the calendar data in iCalendar format. */ function DoCalendarQuery( $filter, $relative_url = '' ) { $xml = << $filter EOXML; $this->DoXMLRequest( 'REPORT', $xml, $relative_url ); $xml_parser = xml_parser_create_ns('UTF-8'); $this->xml_tags = array(); xml_parser_set_option ( $xml_parser, XML_OPTION_SKIP_WHITE, 1 ); xml_parse_into_struct( $xml_parser, $this->xmlResponse, $this->xml_tags ); xml_parser_free($xml_parser); $report = array(); foreach( $this->xml_tags as $k => $v ) { switch( $v['tag'] ) { case 'DAV::RESPONSE': if ( $v['type'] == 'open' ) { $response = array(); } elseif ( $v['type'] == 'close' ) { $report[] = $response; } break; case 'DAV::HREF': $response['href'] = basename( $v['value'] ); break; case 'DAV::GETETAG': $response['etag'] = preg_replace('/^"?([^"]+)"?/', '$1', $v['value']); break; case 'URN:IETF:PARAMS:XML:NS:CALDAV:CALENDAR-DATA': $response['data'] = $v['value']; break; } } return $report; } /** * Get the events in a range from $start to $finish. The dates should be in the * format yyyymmddThhmmssZ and should be in GMT. The events are returned as an * array of event arrays. Each event array will have a 'href', 'etag' and 'event' * part, where the 'href' is relative to the calendar and the event contains the * definition of the event in iCalendar format. * * @param timestamp $start The start time for the period * @param timestamp $finish The finish time for the period * @param string $relative_url The URL relative to the base_url specified when the calendar was opened. Default ''. * * @return array An array of the relative URLs, etags, and events, returned from DoCalendarQuery() @see DoCalendarQuery() */ function GetEvents( $start = null, $finish = null, $relative_url = '' ) { $filter = ""; if ( isset($start) && isset($finish) ) $range = ""; else $range = ''; $filter = << $range EOFILTER; return $this->DoCalendarQuery($filter, $relative_url); } /** * Get the todo's in a range from $start to $finish. The dates should be in the * format yyyymmddThhmmssZ and should be in GMT. The events are returned as an * array of event arrays. Each event array will have a 'href', 'etag' and 'event' * part, where the 'href' is relative to the calendar and the event contains the * definition of the event in iCalendar format. * * @param timestamp $start The start time for the period * @param timestamp $finish The finish time for the period * @param boolean $completed Whether to include completed tasks * @param boolean $cancelled Whether to include cancelled tasks * @param string $relative_url The URL relative to the base_url specified when the calendar was opened. Default ''. * * @return array An array of the relative URLs, etags, and events, returned from DoCalendarQuery() @see DoCalendarQuery() */ function GetTodos( $start, $finish, $completed = false, $cancelled = false, $relative_url = "" ) { if ( $start && $finish ) { $time_range = << EOTIME; } // Warning! May contain traces of double negatives... $neg_cancelled = ( $cancelled === true ? "no" : "yes" ); $neg_completed = ( $cancelled === true ? "no" : "yes" ); $filter = << COMPLETED CANCELLED $time_range EOFILTER; return $this->DoCalendarQuery($filter, $relative_url); } /** * Get the calendar entry by UID * * @param uid * @param string $relative_url The URL relative to the base_url specified when the calendar was opened. Default ''. * * @return array An array of the relative URL, etag, and calendar data returned from DoCalendarQuery() @see DoCalendarQuery() */ function GetEntryByUid( $uid, $relative_url = '' ) { $filter = ""; if ( $uid ) { $filter = << $uid EOFILTER; } return $this->DoCalendarQuery($filter, $relative_url); } /** * Get the calendar entry by HREF * * @param string $href The href from a call to GetEvents or GetTodos etc. * @param string $relative_url The URL relative to the base_url specified when the calendar was opened. Default ''. * * @return string The iCalendar of the calendar entry */ function GetEntryByHref( $href, $relative_url = '' ) { return $this->DoGETRequest( $relative_url . $href ); } } /** * Usage example * * $cal = new CalDAVClient( "http://calendar.example.com/caldav.php/username/calendar/", "username", "password", "calendar" ); * $options = $cal->DoOptionsRequest(); * if ( isset($options["PROPFIND"]) ) { * // Fetch some information about the events in that calendar * $cal->SetDepth(1); * $folder_xml = $cal->DoXMLRequest("PROPFIND", '' ); * } * // Fetch all events for February * $events = $cal->GetEvents("20070101T000000Z","20070201T000000Z"); * foreach ( $events AS $k => $event ) { * do_something_with_event_data( $event['data'] ); * } * $acc = array(); * $acc["google"] = array( * "user"=>"kunsttherapie@gmail.com", * "pass"=>"xxxxx", * "server"=>"ssl://www.google.com", * "port"=>"443", * "uri"=>"https://www.google.com/calendar/dav/kunsttherapie@gmail.com/events/", * ); * * $acc["davical"] = array( * "user"=>"some_user", * "pass"=>"big secret", * "server"=>"calendar.foo.bar", * "port"=>"80", * "uri"=>"http://calendar.foo.bar/caldav.php/some_user/home/", * ); * //******************************* * * $account = $acc["davical"]; * * //******************************* * $cal = new CalDAVClient( $account["uri"], $account["user"], $account["pass"], "", $account["server"], $account["port"] ); * $options = $cal->DoOptionsRequest(); * print_r($options); * * //******************************* * //******************************* * * $xmlC = << * * * * * * * * * PROPP; * //if ( isset($options["PROPFIND"]) ) { * // Fetch some information about the events in that calendar * // $cal->SetDepth(1); * // $folder_xml = $cal->DoXMLRequest("PROPFIND", $xmlC); * // print_r( $folder_xml); * //} * * // Fetch all events for February * $events = $cal->GetEvents("20090201T000000Z","20090301T000000Z"); * foreach ( $events as $k => $event ) { * print_r($event['data']); * print "\n---------------------------------------------\n"; * } * * //******************************* * //******************************* */ davical-1.1.1/inc/caldav-ACL.php0000644000000000000000000002212711755642445013135 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ dbg_error_log("ACL", "method handler"); require_once('DAVResource.php'); $request->NeedPrivilege('DAV::write-acl'); if ( ! ini_get('open_basedir') && (isset($c->dbg['ALL']) || (isset($c->dbg['put']) && $c->dbg['put'])) ) { $fh = fopen('/tmp/MOVE.txt','w'); if ( $fh ) { fwrite($fh,$request->raw_post); fclose($fh); } } $resource = new DAVResource( $request->path ); /** * Preconditions (DAV:no-ace-conflict): The ACEs submitted in the ACL request MUST NOT conflict with each other. This is a catchall error code indicating that an implementation-specific ACL restriction has been violated. (DAV:no-protected-ace-conflict): The ACEs submitted in the ACL request MUST NOT conflict with the protected ACEs on the resource. For example, if the resource has a protected ACE granting DAV:write to a given principal, then it would not be consistent if the ACL request submitted an ACE denying DAV:write to the same principal. (DAV:no-inherited-ace-conflict): The ACEs submitted in the ACL request MUST NOT conflict with the inherited ACEs on the resource. For example, if the resource inherits an ACE from its parent collection granting DAV:write to a given principal, then it would not be consistent if the ACL request submitted an ACE denying DAV:write to the same principal. Note that reporting of this error will be implementation-dependent. Implementations MUST either report this error or allow the ACE to be set, and then let normal ACE evaluation rules determine whether the new ACE has any impact on the privileges available to a specific principal. (DAV:limited-number-of-aces): The number of ACEs submitted in the ACL request MUST NOT exceed the number of ACEs allowed on that resource. However, ACL-compliant servers MUST support at least one ACE granting privileges to a single principal, and one ACE granting privileges to a group. (DAV:deny-before-grant): All non-inherited deny ACEs MUST precede all non-inherited grant ACEs. (DAV:grant-only): The ACEs submitted in the ACL request MUST NOT include a deny ACE. This precondition applies only when the ACL restrictions of the resource include the DAV:grant-only constraint (defined in Section 5.6.1). (DAV:no-invert): The ACL request MUST NOT include a DAV:invert element. This precondition applies only when the ACL semantics of the resource includes the DAV:no-invert constraint (defined in Section 5.6.2). (DAV:no-abstract): The ACL request MUST NOT attempt to grant or deny an abstract privilege (see Section 5.3). (DAV:not-supported-privilege): The ACEs submitted in the ACL request MUST be supported by the resource. (DAV:missing-required-principal): The result of the ACL request MUST have at least one ACE for each principal identified in a DAV:required-principal XML element in the ACL semantics of that resource (see Section 5.5). (DAV:recognized-principal): Every principal URL in the ACL request MUST identify a principal resource. (DAV:allowed-principal): The principals specified in the ACEs submitted in the ACL request MUST be allowed as principals for the resource. For example, a server where only authenticated principals can access resources would not allow the DAV:all or DAV:unauthenticated principals to be used in an ACE, since these would allow unauthenticated access to resources. */ $position = 0; $xmltree = BuildXMLTree( $request->xml_tags, $position); $aces = $xmltree->GetPath("/DAV::acl/*"); $grantor = new DAVResource($request->path); if ( ! $grantor->Exists() ) $request->DoResponse( 404 ); if ( ! $grantor->IsCollection() ) $request->PreconditionFailed(403,'not-supported-privilege','ACLs are only supported on Principals or Collections'); $grantor->NeedPrivilege('write-acl'); $cache_delete_list = array(); $qry = new AwlQuery('BEGIN'); $qry->Exec('ACL',__LINE__,__FILE__); function process_ace( $grantor, $by_principal, $by_collection, $ace ) { global $cache_delete_list, $request; $elements = $ace->GetContent(); $principal_node = $elements[0]; $grant = $elements[1]; if ( $principal_node->GetNSTag() != 'DAV::principal' ) $request->MalformedRequest('ACL request must contain a principal, not '.$principal->GetNSTag()); $grant_tag = $grant->GetNSTag(); if ( $grant_tag == 'DAV::deny' ) $request->PreconditionFailed(403,'grant-only'); if ( $grant_tag == 'DAV::invert' ) $request->PreconditionFailed(403,'no-invert'); if ( $grant->GetNSTag() != 'DAV::grant' ) $request->MalformedRequest('ACL request must contain a principal for each ACE'); $privilege_names = array(); $xml_privs = $grant->GetPath("/DAV::grant/DAV::privilege/*"); foreach( $xml_privs AS $k => $priv ) { $privilege_names[] = $priv->GetNSTag(); } $privileges = privilege_to_bits($privilege_names); $principal_content = $principal_node->GetContent(); if ( count($principal_content) != 1 ) $request->MalformedRequest('ACL request must contain exactly one principal per ACE'); $principal_content = $principal_content[0]; switch( $principal_content->GetNSTag() ) { case 'DAV::property': $principal_property = $principal_content->GetContent(); if ( $principal_property[0]->GetNSTag() != 'DAV::owner' ) $request->PreconditionFailed(403, 'recognized-principal' ); if ( privilege_to_bits('all') != $privileges ) { $request->PreconditionFailed(403, 'no-protected-ace-conflict', 'Owner must always have all permissions' ); } continue; // and then we ignore it, since it's protected break; case 'DAV::unauthenticated': $request->PreconditionFailed(403, 'allowed-principal', 'May not set privileges for unauthenticated users' ); break; case 'DAV::href': $principal_type = 'href'; $grantee = new DAVResource( DeconstructURL($principal_content->GetContent()) ); $grantee_id = $grantee->getProperty('principal_id'); if ( !$grantee->Exists() || !$grantee->IsPrincipal() ) $request->PreconditionFailed(403,'recognized-principal', 'Principal "' + $principal_content->GetContent() + '" not found.'); $sqlparms = array( ':to_principal' => $grantee_id); $where = 'WHERE to_principal=:to_principal AND '; if ( isset($by_principal) ) { $sqlparms[':by_principal'] = $by_principal; $where .= 'by_principal = :by_principal'; } else { $sqlparms[':by_collection'] = $by_collection; $where .= 'by_collection = :by_collection'; } $qry = new AwlQuery('SELECT privileges FROM grants '.$where, $sqlparms); if ( $qry->Exec('ACL',__LINE__,__FILE__) && $qry->rows() == 1 && $current = $qry->Fetch() ) { $sql = 'UPDATE grants SET privileges=:privileges::INT::BIT(24) '.$where; } else { $sqlparms[':by_principal'] = $by_principal; $sqlparms[':by_collection'] = $by_collection; $sql = 'INSERT INTO grants (by_principal, by_collection, to_principal, privileges) VALUES(:by_principal, :by_collection, :to_principal, :privileges::INT::BIT(24))'; } $sqlparms[':privileges'] = $privileges; $qry = new AwlQuery($sql, $sqlparms); if ( $qry->Exec('ACL',__LINE__,__FILE__) ) { Principal::cacheDelete('dav_name',$grantee->dav_name()); Principal::cacheFlush('principal_id IN (SELECT member_id FROM group_member WHERE group_id = ?)', array($grantee_id)); } break; case 'DAV::authenticated': $principal_type = 'authenticated'; if ( bindec($grantor->GetProperty('default_privileges')) == $privileges ) continue; // There is no change, so skip it $sqlparms = array( ':privileges' => $privileges ); if ( isset($by_collection) ) { $sql = 'UPDATE collection SET default_privileges=:privileges::INT::BIT(24) WHERE collection_id=:by_collection'; $sqlparms[':by_collection'] = $by_collection; } else { $sql = 'UPDATE principal SET default_privileges=:privileges::INT::BIT(24) WHERE principal_id=:by_principal'; $sqlparms[':by_principal'] = $by_principal; } $qry = new AwlQuery($sql, $sqlparms); if ( $qry->Exec('ACL',__LINE__,__FILE__) ) { /** * Basically this has changed everyone's permissions now, so... */ Principal::cacheFlush('TRUE'); } break; case 'DAV::all': // $principal_type = 'all'; $request->PreconditionFailed(403, 'allowed-principal', 'May not set privileges for unauthenticated users' ); break; default: $request->PreconditionFailed(403, 'recognized-principal' ); break; } } $by_principal = ($grantor->IsPrincipal() ? $grantor->GetProperty('principal_id') : null); $by_collection = ($grantor->IsPrincipal() ? null : $grantor->GetProperty('collection_id')); foreach( $aces AS $k => $ace ) { process_ace($grantor, $by_principal, $by_collection, $ace); } $qry = new AwlQuery('COMMIT'); $qry->Exec('ACL',__LINE__,__FILE__); $request->DoResponse( 200 ); davical-1.1.1/inc/interactive-page.php0000644000000000000000000000657211711704476014536 0ustar AddOption(translate('Logout'), $c->base_url.'/index.php?logout', translate('Log out of DAViCal') ); $wiki_help = ''; if ( isset($_SERVER['SCRIPT_NAME']) ) { $wiki_help = preg_replace('#^.*/#', '', $_SERVER['SCRIPT_NAME']); $wiki_help = preg_replace('#\.php.*$#', '', $wiki_help); if ( $wiki_help == 'admin' ) { $wiki_help .= '/' . $_GET['t'] . '/' . $_GET['action']; } $wiki_help = 'w/Help/'.$wiki_help; } $help_menu = new MenuSet('submenu', 'submenu', 'submenu_active'); $help_menu->AddOption(translate('DAViCal Homepage'),'http://www.davical.org/',translate('The DAViCal Home Page'), false, 6000, true ); $help_menu->AddOption(translate('DAViCal Wiki'),'http://wiki.davical.org/'.$wiki_help,translate('Visit the DAViCal Wiki'), false, 7000, true ); $help_menu->AddOption(translate('Request Feature'),'http://davical.uservoice.com/',translate('Go to the DAViCal Feature Requests'), false, 8000, true ); $help_menu->AddOption(translate('Report Bug'),'http://sourceforge.net/tracker/?func=add&group_id=179845&atid=890785',translate('Report a bug in the system'), false, 9000, true ); $user_menu = new MenuSet('submenu', 'submenu', 'submenu_active'); $user_menu->AddOption(translate('View My Details'),$c->base_url.'/admin.php?action=edit&t=principal&id='.$session->principal_id,translate('View my own principal record')); $user_menu->AddOption(translate('List Users'),$c->base_url.'/admin.php?action=browse&t=principal&type=1'); $user_menu->AddOption(translate('List Resources'),$c->base_url.'/admin.php?action=browse&t=principal&type=2'); $user_menu->AddOption(translate('List Groups'),$c->base_url.'/admin.php?action=browse&t=principal&type=3'); $user_menu->AddOption(translate('List External Calendars'),$c->base_url.'/admin.php?action=browse&t=external'); $admin_menu = new MenuSet('submenu', 'submenu', 'submenu_active'); if ( $session->AllowedTo('Admin' )) { $admin_menu->AddOption(translate('Setup'),$c->base_url.'/setup.php',translate('Setup DAViCal') ); $admin_menu->AddOption(translate('Upgrade Database'),$c->base_url.'/upgrade.php',translate('Upgrade DAViCal database schema') ); $admin_menu->AddOption(translate('Tools'),$c->base_url.'/tools.php',translate('Import calendars and Synchronise LDAP.') ); $user_menu->AddOption(translate('Inactive Principals'),$c->base_url.'/admin.php?action=browse&t=principal&active=f'); $user_menu->AddOption(translate('Create Principal'),$c->base_url.'/admin.php?action=edit&t=principal',translate('Create a new principal (i.e. a new user, resource or group)')); $admin_menu->AddOption(translate('List External Calendars'),$c->base_url.'/admin.php?action=browse&t=external'); } $related_menu = new MenuSet('related', 'menu', 'menu_active'); $main_menu = new MenuSet('menu', 'menu', 'menu_active'); $main_menu->AddSubMenu($home_menu, translate('Home'), $c->base_url.'/index.php', translate('Home Page'), false, 1000); $main_menu->AddSubMenu($user_menu, translate('User Functions'), $c->base_url.'/admin.php?action=browse&t=principal&type=1', translate('Browse all users'), false, 2000); $main_menu->AddSubMenu($admin_menu, translate('Administration'), $c->base_url.'/index.php', translate('Administration'), false, 3000); $main_menu->AddSubMenu($help_menu, translate('Help'), $c->base_url.'/help.php',translate('Help on the current screen'), false, 9000); davical-1.1.1/inc/caldav-GET.php0000644000000000000000000000526611751572565013163 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log("get", "GET method handler"); require("caldav-GET-functions.php"); $dav_resource = new DAVResource($request->path); $dav_resource->NeedPrivilege( array('urn:ietf:params:xml:ns:caldav:read-free-busy','DAV::read') ); if ( $dav_resource->IsExternal() ) { require_once("external-fetch.php"); update_external ( $dav_resource ); } if ( ! $dav_resource->Exists() ) { $request->DoResponse( 404, translate("Resource Not Found.") ); } if ( $dav_resource->IsCollection() ) { $response = export_iCalendar($dav_resource); header( 'Etag: '.$dav_resource->unique_tag() ); $request->DoResponse( 200, ($request->method == 'HEAD' ? '' : $response), 'text/calendar; charset="utf-8"' ); } // Just a single event then $resource = $dav_resource->resource(); $ic = new iCalComponent( $resource->caldav_data ); $resource->caldav_data = preg_replace( '{(?caldav_data); /** Default deny... */ $allowed = false; if ( $dav_resource->HavePrivilegeTo('all', false) || $session->user_no == $resource->user_no || $session->user_no == $resource->logged_user || ( $c->allow_get_email_visibility && $ic->IsAttendee($session->email) ) ) { /** * These people get to see all of the event, and they should always * get any alarms as well. */ $allowed = true; } else if ( $resource->class != 'PRIVATE' ) { $allowed = true; // but we may well obfuscate it below if ( ! $dav_resource->HavePrivilegeTo('DAV::read') || ( $resource->class == 'CONFIDENTIAL' && ! $request->HavePrivilegeTo('DAV::write-content') ) ) { $ical = new iCalComponent( $resource->caldav_data ); $comps = $ical->GetComponents('VTIMEZONE',false); $confidential = obfuscated_event($comps[0]); $ical->SetComponents( array($confidential), $resource->caldav_type ); $resource->caldav_data = $ical->Render(); } } // else $resource->class == 'PRIVATE' and this person may not see it. if ( ! $allowed ) { $request->DoResponse( 403, translate("Forbidden") ); } header( 'Etag: "'.$resource->dav_etag.'"' ); header( 'Content-Length: '.strlen($resource->caldav_data) ); $contenttype = 'text/plain'; switch( $resource->caldav_type ) { case 'VJOURNAL': case 'VEVENT': case 'VTODO': $contenttype = 'text/calendar'; break; case 'VCARD': $contenttype = 'text/vcard'; break; } $request->DoResponse( 200, ($request->method == 'HEAD' ? '' : $resource->caldav_data), $contenttype.'; charset="utf-8"' ); davical-1.1.1/inc/davical_configuration_missing.php0000644000000000000000000000251611633117640017356 0ustar DAViCal Not Configured

The Bad News

There is no configuration file present in /etc/davical/config.php (or in $_SERVER[SERVER_NAME]-conf.php) so your installation is not fully set up.

The Good News

Well, you're seeing this! At least you have DAViCal installed :-) You also have Apache and PHP working and so really you are well on the road to success!

The Dubious News

You could try and click here and see if that enlightens you at all. Odds are it's a fairly broken link, but it might work sooner or later so keep downloading new versions and trying again. Or make some guesses. Or bug Andrew :-)

The Really Basic Help

The configuration file should look something like this:

<?php
//  \$c->domain_name  = 'davical.example.com';
//  \$c->sysabbr     = 'davical';
//  \$c->system_name = 'DAViCal CalDAV Server';

  \$c->admin_email  = 'admin@example.com';
  \$c->pg_connect[] = 'dbname=davical user=davical_app';

The only really essential thing there is that connect string for the database, although configuring someone for the admin e-mail is a really good idea.

EOBODY; include("page-footer.php"); davical-1.1.1/inc/caldav-BIND.php0000644000000000000000000001335411754144724013250 0ustar * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log('BIND', 'method handler'); require_once('AwlQuery.php'); $request->NeedPrivilege('DAV::bind'); if ( ! $request->IsCollection() ) { $request->PreconditionFailed(403,'DAV::bind-into-collection',translate('The BIND Request-URI MUST identify a collection.')); } $parent_container = $request->path; if ( preg_match( '{[^/]$}', $parent_container ) ) $parent_container .= '/'; require_once('DAVResource.php'); $parent = new DAVResource( $parent_container ); if ( ! $parent->Exists() || $parent->IsSchedulingCollection() ) { $request->PreconditionFailed(403, 'DAV::method-not-allowed',translate('The BIND method is not allowed at that location.') ); } require_once('XMLDocument.php'); $reply = new XMLDocument(array( 'DAV:' => '' )); $position = 0; $xmltree = BuildXMLTree( $request->xml_tags, $position); $segment = $xmltree->GetElements('DAV::segment'); $segment = $segment[0]->GetContent(); if ( preg_match( '{[/\\\\]}', $segment ) ) { $request->PreconditionFailed(403, 'DAV::name-allowed',translate('That destination name contains invalid characters.') ); } $href = $xmltree->GetElements('DAV::href'); $href = $href[0]->GetContent(); $destination_path = $parent_container . $segment .'/'; $destination = new DAVResource( $destination_path ); if ( $destination->Exists() ) { $request->PreconditionFailed(403,'DAV::can-overwrite',translate('A resource already exists at the destination.')); } // external binds shouldn't ever point back to ourselves but they should be a valid http[s] url if ( preg_match ( '{^https?://([^/]+)(:[0-9]\+)?/.+$}', $href, $matches ) && strcasecmp( $matches[0], 'localhost' ) !== 0 && strcasecmp( $matches[0], '127.0.0.1' ) !== 0 && strcasecmp( $matches[0], $_SERVER['SERVER_NAME'] ) !== 0 && strcasecmp( $matches[0], $_SERVER['SERVER_ADDR'] ) !== 0 ) { require_once('external-fetch.php'); $qry = new AwlQuery( ); $qry->QDo('SELECT collection_id FROM collection WHERE dav_name = :dav_name ', array( ':dav_name' => '/.external/'. md5($href) )); if ( $qry->rows() == 1 && ($row = $qry->Fetch()) ) { $dav_id = $row->collection_id; } else { create_external ( '/.external/'. md5($href) ,true,false ); $qry->QDo('SELECT collection_id FROM collection WHERE dav_name = :dav_name ', array( ':dav_name' => '/.external/'. md5($href) )); if ( $qry->rows() != 1 || !($row = $qry->Fetch()) ) $request->DoResponse(500,translate('Database Error')); $dav_id = $row->collection_id; } $sql = 'INSERT INTO dav_binding ( bound_source_id, access_ticket_id, dav_owner_id, parent_container, dav_name, dav_displayname, external_url, type ) VALUES( :target_id, :ticket_id, :session_principal, :parent_container, :dav_name, :displayname, :external_url, :external_type )'; $params = array( ':target_id' => $dav_id, ':ticket_id' => null, ':parent_container' => $parent->dav_name(), ':session_principal' => $session->principal_id, ':dav_name' => $destination_path, ':displayname' => $segment, ':external_url' => $href, ':external_type' => 'calendar' ); $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec('BIND',__LINE__,__FILE__) ) { $qry = new AwlQuery( 'SELECT bind_id from dav_binding where dav_name = :dav_name', array( ':dav_name' => $destination_path ) ); if ( ! $qry->Exec('BIND',__LINE__,__FILE__) || $qry->rows() != 1 || !($row = $qry->Fetch()) ) $request->DoResponse(500,translate('Database Error')); fetch_external ( $row->bind_id, '' ); $request->DoResponse(201); } else { $request->DoResponse(500,translate('Database Error')); } } else { $source = new DAVResource( $href ); if ( !$source->Exists() ) { $request->PreconditionFailed(403,'DAV::bind-source-exists',translate('The BIND Request MUST identify an existing resource.')); } if ( $source->IsPrincipal() || !$source->IsCollection() ) { $request->PreconditionFailed(403,'DAV::binding-allowed',translate('DAViCal only allows BIND requests for collections at present.')); } if ( $source->IsBinding() ) $source = new DAVResource( $source->bound_from() ); /* bind_id INT8 DEFAULT nextval('dav_id_seq') PRIMARY KEY, bound_source_id INT8 REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE, access_ticket_id TEXT REFERENCES access_ticket(ticket_id) ON UPDATE CASCADE ON DELETE SET NULL, parent_container TEXT NOT NULL, dav_name TEXT UNIQUE NOT NULL, dav_displayname TEXT, external_url TEXT, type TEXT */ $sql = 'INSERT INTO dav_binding ( bound_source_id, access_ticket_id, dav_owner_id, parent_container, dav_name, dav_displayname ) VALUES( :target_id, :ticket_id, :session_principal, :parent_container, :dav_name, :displayname )'; $params = array( ':target_id' => $source->GetProperty('collection_id'), ':ticket_id' => (isset($request->ticket) ? $request->ticket->id() : null), ':parent_container' => $parent->dav_name(), ':session_principal' => $session->principal_id, ':dav_name' => $destination_path, ':displayname' => $source->GetProperty('displayname') ); $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec('BIND',__LINE__,__FILE__) ) { header('Location: '. ConstructURL($destination_path) ); // Uncache anything to do with the target $cache = getCacheInstance(); $cache_ns = 'collection-'.$destination_path; $cache->delete( $cache_ns, null ); $request->DoResponse(201); } else { $request->DoResponse(500,translate('Database Error')); } } davical-1.1.1/inc/caldav-REPORT-calquery.php0000644000000000000000000003703311774275202015370 0ustar GetElements('urn:ietf:params:xml:ns:caldav:expand'); if ( isset($expansion[0]) ) { $need_expansion = true; $expand_range_start = $expansion[0]->GetAttribute('start'); $expand_range_end = $expansion[0]->GetAttribute('end'); $expand_as_floating = $expansion[0]->GetAttribute('floating'); if ( isset($expand_range_start) ) $expand_range_start = new RepeatRuleDateTime($expand_range_start); if ( isset($expand_range_end) ) $expand_range_end = new RepeatRuleDateTime($expand_range_end); if ( isset($expand_as_floating) && $expand_as_floating == "yes" ) $expand_as_floating = true; else $expand_as_floating = false; } } /** * Build the array of properties to include in the report output */ $qry_content = $xmltree->GetContent('urn:ietf:params:xml:ns:caldav:calendar-query'); $properties = array(); $include_properties = array(); while (list($idx, $qqq) = each($qry_content)) { $proptype = $qry_content[$idx]->GetNSTag(); switch( $proptype ) { case 'DAV::prop': $qry_props = $xmltree->GetPath('/urn:ietf:params:xml:ns:caldav:calendar-query/'.$proptype.'/*'); foreach( $qry_content[$idx]->GetElements() AS $k => $v ) { $propertyname = $v->GetNSTag(); $properties[$propertyname] = 1; if ( $propertyname == 'urn:ietf:params:xml:ns:caldav:calendar-data' ) check_for_expansion($v); } break; case 'DAV::allprop': $properties['DAV::allprop'] = 1; if ( $qry_content[$idx]->GetNSTag() == 'DAV::include' ) { foreach( $qry_content[$idx]->GetElements() AS $k => $v ) { $include_properties[] = $v->GetNSTag(); /** $include_properties is referenced in DAVResource where allprop is expanded */ if ( $v->GetNSTag() == 'urn:ietf:params:xml:ns:caldav:calendar-data' ) check_for_expansion($v); } } break; } } if ( empty($properties) ) $properties['DAV::allprop'] = 1; /** * There can only be *one* FILTER element, and it must contain *one* COMP-FILTER * element. In every case I can see this contained COMP-FILTER element will * necessarily be a VCALENDAR, which then may contain other COMP-FILTER etc. */ $qry_filters = $xmltree->GetPath('/urn:ietf:params:xml:ns:caldav:calendar-query/urn:ietf:params:xml:ns:caldav:filter/*'); if ( count($qry_filters) != 1 ) $qry_filters = false; /** * While we can construct our SQL to apply some filters in the query, other filters * need to be checked against the retrieved record. This is for handling those ones. * * @param array $filter An array of XMLElement which is the filter definition * @param string $item The database row retrieved for this calendar item * * @return boolean True if the check succeeded, false otherwise. */ function apply_filter( $filters, $item ) { global $session, $c, $request; if ( count($filters) == 0 ) return true; dbg_error_log("calquery","Applying filter for item '%s'", $item->dav_name ); $ical = new vCalendar( $item->caldav_data ); return $ical->StartFilter($filters); } /** * Process a filter fragment returning an SQL fragment */ $need_post_filter = false; $range_filter = null; function SqlFilterFragment( $filter, $components, $property = null, $parameter = null ) { global $need_post_filter, $range_filter, $target_collection; $sql = ""; $params = array(); if ( !is_array($filter) ) { dbg_error_log( "calquery", "Filter is of type '%s', but should be an array of XML Tags.", gettype($filter) ); } foreach( $filter AS $k => $v ) { $tag = $v->GetNSTag(); dbg_error_log("calquery", "Processing $tag into SQL - %d, '%s', %d\n", count($components), $property, isset($parameter) ); $not_defined = ""; switch( $tag ) { case 'urn:ietf:params:xml:ns:caldav:is-not-defined': $not_defined = "not-"; // then fall through to IS-DEFINED case case 'urn:ietf:params:xml:ns:caldav:is-defined': if ( isset( $parameter ) ) { $need_post_filter = true; dbg_error_log("calquery", "Could not handle 'is-%sdefined' on property %s, parameter %s in SQL", $not_defined, $property, $parameter ); return false; // Not handled in SQL } if ( isset( $property ) ) { switch( $property ) { case 'created': case 'completed': /** @todo when it can be handled in the SQL - see around line 200 below */ case 'dtend': case 'dtstamp': case 'dtstart': if ( ! $target_collection->IsSchedulingCollection() ) { $property_defined_match = "IS NOT NULL"; } break; case 'priority': $property_defined_match = "IS NOT NULL"; break; default: $property_defined_match = "LIKE '_%'"; // i.e. contains a single character or more } $sql .= sprintf( "AND %s %s%s ", $property, $not_defined, $property_defined_match ); } break; case 'urn:ietf:params:xml:ns:caldav:time-range': /** * @todo We should probably allow time range queries against other properties, since * eventually some client may want to do this. */ $start_column = ($components[sizeof($components)-1] == 'VTODO' ? "due" : 'dtend'); // The column we compare against the START attribute $finish_column = 'dtstart'; // The column we compare against the END attribute $start = $v->GetAttribute("start"); $finish = $v->GetAttribute("end"); $start_sql = $finish_sql = ''; if ( isset($start) ) { $params[':time_range_start'] = $start; $start_sql .= ' (('.$start_column.' IS NULL AND '.$finish_column.' > :time_range_start) OR '.$start_column.' > :time_range_start) '; } if ( isset($finish) ) { $params[':time_range_end'] = $finish; $finish_sql = ' '.$finish_column.' < :time_range_end '; } if ( isset($start) || isset($finish) ) { $sql .= ' AND (rrule IS NOT NULL OR '.$finish_column.' IS NULL OR ('; if ( isset($start) ) $sql .= $start_sql; if ( isset($start) && isset($finish) ) $sql .= ' AND '; if ( isset($finish) ) $sql .= $finish_sql; $sql .= '))'; } @dbg_error_log('calquery', 'filter-sql: %s', $sql); @dbg_error_log('calquery', 'time-range-start: %s, time-range-end: %s, ', $params[':time_range_start'], $params[':time_range_end']); $range_filter = new RepeatRuleDateRange((empty($start) ? null : new RepeatRuleDateTime($start)), (empty($finish)? null : new RepeatRuleDateTime($finish))); break; case 'urn:ietf:params:xml:ns:caldav:text-match': $search = $v->GetContent(); $negate = $v->GetAttribute("negate-condition"); $collation = $v->GetAttribute("collation"); switch( strtolower($collation) ) { case 'i;octet': $comparison = 'LIKE'; break; case 'i;ascii-casemap': default: $comparison = 'ILIKE'; break; } $params[':text_match'] = '%'.$search.'%'; $fragment = sprintf( 'AND (%s%s %s :text_match) ', (isset($negate) && strtolower($negate) == "yes" ? $property.' IS NULL OR NOT ': ''), $property, $comparison ); dbg_error_log('calquery', ' text-match: %s', $fragment ); $sql .= $fragment; break; case 'urn:ietf:params:xml:ns:caldav:comp-filter': $comp_filter_name = $v->GetAttribute("name"); if ( $comp_filter_name != 'VCALENDAR' && count($components) == 0 ) { $sql .= "AND caldav_data.caldav_type = :component_name_filter "; $params[':component_name_filter'] = $comp_filter_name; $components[] = $comp_filter_name; } $subfilter = $v->GetContent(); if ( is_array( $subfilter ) ) { $success = SqlFilterFragment( $subfilter, $components, $property, $parameter ); if ( $success === false ) continue; else { $sql .= $success['sql']; $params = array_merge( $params, $success['params'] ); } } break; case 'urn:ietf:params:xml:ns:caldav:prop-filter': $propertyname = $v->GetAttribute("name"); switch( $propertyname ) { case 'PERCENT-COMPLETE': $subproperty = 'percent_complete'; break; case 'UID': case 'SUMMARY': // case 'LOCATION': case 'DESCRIPTION': case 'CLASS': case 'TRANSP': case 'RRULE': // Likely that this is not much use case 'URL': case 'STATUS': case 'CREATED': case 'DTSTAMP': case 'DTSTART': case 'DTEND': case 'DUE': case 'PRIORITY': $subproperty = 'calendar_item.'.strtolower($propertyname); break; case 'COMPLETED': /** @todo this should be moved into the properties supported in SQL. */ default: $need_post_filter = true; dbg_error_log("calquery", "Could not handle 'prop-filter' on %s in SQL", $propertyname ); continue; } if ( isset($subproperty) ) { $subfilter = $v->GetContent(); $success = SqlFilterFragment( $subfilter, $components, $subproperty, $parameter ); if ( $success === false ) continue; else { $sql .= $success['sql']; $params = array_merge( $params, $success['params'] ); } } break; case 'urn:ietf:params:xml:ns:caldav:param-filter': $need_post_filter = true; return false; // Can't handle PARAM-FILTER conditions in the SQL $parameter = $v->GetAttribute("name"); $subfilter = $v->GetContent(); $success = SqlFilterFragment( $subfilter, $components, $property, $parameter ); if ( $success === false ) continue; else { $sql .= $success['sql']; $params = array_merge( $params, $success['params'] ); } break; default: dbg_error_log("calquery", "Could not handle unknown tag '%s' in calendar query report", $tag ); break; } } dbg_error_log("calquery", "Generated SQL was '%s'", $sql ); return array( 'sql' => $sql, 'params' => $params ); } /** * Build an SQL 'WHERE' clause which implements (parts of) the filter. The * elements of the filter which are implemented in the SQL will be removed. * * @param arrayref &$filter A reference to an array of XMLElement defining the filter * * @return string A string suitable for use as an SQL 'WHERE' clause selecting the desired records. */ function BuildSqlFilter( $filter ) { $components = array(); if ( $filter->GetNSTag() == "urn:ietf:params:xml:ns:caldav:comp-filter" && $filter->GetAttribute("name") == "VCALENDAR" ) $filter = $filter->GetContent(); // Everything is inside a VCALENDAR AFAICS else { dbg_error_log("calquery", "Got bizarre CALDAV:FILTER[%s=%s]] which does not contain comp-filter = VCALENDAR!!", $filter->GetNSTag(), $filter->GetAttribute("name") ); } return SqlFilterFragment( $filter, $components ); } /** * Something that we can handle, at least roughly correctly. */ $responses = array(); $target_collection = new DAVResource($request->path); $bound_from = $target_collection->bound_from(); if ( !$target_collection->Exists() ) { $request->DoResponse( 404 ); } $params = array(); if ( ! ($target_collection->IsCalendar() || $target_collection->IsSchedulingCollection()) ) { if ( !(isset($c->allow_recursive_report) && $c->allow_recursive_report) ) { $request->DoResponse( 403, translate('The calendar-query report must be run against a calendar or a scheduling collection') ); } else if ( $request->path == '/' || $target_collection->IsPrincipal() || $target_collection->IsAddressbook() ) { $request->DoResponse( 403, translate('The calendar-query report may not be run against that URL.') ); } /** * We're here because they allow recursive reports, and this appears to be such a location. */ $where = 'WHERE caldav_data.collection_id IN '; $where .= '(SELECT bound_source_id FROM dav_binding WHERE dav_binding.dav_name ~ :path_match '; $where .= 'UNION '; $where .= 'SELECT collection_id FROM collection WHERE collection.dav_name ~ :path_match) '; $distinct = 'DISTINCT ON (calendar_item.uid) '; $params[':path_match'] = '^'.$target_collection->bound_from(); } else { $where = ' WHERE caldav_data.collection_id = ' . $target_collection->resource_id(); $distinct = ''; } if ( is_array($qry_filters) ) { dbg_log_array( "calquery", "qry_filters", $qry_filters, true ); $components = array(); $filter_fragment = SqlFilterFragment( $qry_filters, $components ); if ( $filter_fragment !== false ) { $where .= ' '.$filter_fragment['sql']; $params = array_merge( $params, $filter_fragment['params']); } } if ( $target_collection->Privileges() != privilege_to_bits('DAV::all') ) { $where .= " AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) "; } if ( isset($c->hide_TODO) && $c->hide_TODO && ! $target_collection->HavePrivilegeTo('DAV::write-content') ) { $where .= " AND caldav_data.caldav_type NOT IN ('VTODO') "; } if ( isset($c->hide_older_than) && intval($c->hide_older_than > 0) ) { $where .= " AND calendar_item.dtstart > (now() - interval '".intval($c->hide_older_than)." days') "; } $sql = 'SELECT '.$distinct.' caldav_data.*,calendar_item.* FROM collection INNER JOIN caldav_data USING(collection_id) INNER JOIN calendar_item USING(dav_id) '. $where; if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) $sql .= " ORDER BY caldav_data.dav_id"; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec("calquery",__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $dav_object = $qry->Fetch() ) { try { if ( !$need_post_filter || apply_filter( $qry_filters, $dav_object ) ) { if ( $bound_from != $target_collection->dav_name() ) { $dav_object->dav_name = str_replace( $bound_from, $target_collection->dav_name(), $dav_object->dav_name); } if ( $need_expansion ) { $vResource = new vComponent($dav_object->caldav_data); $expanded = getVCalendarRange($vResource); if ( !$expanded->overlaps($range_filter) ) continue; $expanded = expand_event_instances($vResource, $expand_range_start, $expand_range_end, $expand_as_floating ); if ( $expanded->ComponentCount() == 0 ) continue; if ( $need_expansion ) $dav_object->caldav_data = $expanded->Render(); } else if ( isset($range_filter) ) { $vResource = new vComponent($dav_object->caldav_data); $expanded = getVCalendarRange($vResource); dbg_error_log('calquery', 'Expanded to %s:%s which might overlap %s:%s', $expanded->from, $expanded->until, $range_filter->from, $range_filter->until ); if ( !$expanded->overlaps($range_filter) ) continue; } $responses[] = component_to_xml( $properties, $dav_object ); } } catch( Exception $e ) { dbg_error_log( 'ERROR', 'Exception handling "%s" - skipping', $dav_object->dav_name); } } } $multistatus = new XMLElement( "multistatus", $responses, $reply->GetXmlNsArray() ); $request->XMLResponse( 207, $multistatus ); davical-1.1.1/inc/caldav-PUT-vcalendar.php0000644000000000000000000000542411736731555015144 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log("PUT", "method handler"); require_once('DAVResource.php'); include_once('caldav-PUT-functions.php'); $vcalendar = new vCalendar( $request->raw_post ); $uid = $vcalendar->GetUID(); if ( empty($uid) ) { $uid = uuid(); $vcalendar->SetUID($uid); } if ( $add_member ) { $request->path = $request->dav_name() . $uid . '.ics'; $dav_resource = new DAVResource($request->path); if ( $dav_resource->Exists() ) { $uid = uuid(); $vcalendar->SetUID($uid); $request->path = $request->dav_name() . $uid . '.ics'; $dav_resource = new DAVResource($request->path); if ( $dav_resource->Exists() ) throw new Exception("Failed to generate unique segment name for add-member!"); } } else { $dav_resource = new DAVResource($request->path); } if ( ! $dav_resource->HavePrivilegeTo('DAV::write-content') ) { $request->DoResponse(403,'No write permission'); } if ( ! $dav_resource->Exists() && ! $dav_resource->HavePrivilegeTo('DAV::bind') ) { $request->DoResponse(403,'No bind permission.'); } if ( ! ini_get('open_basedir') && (isset($c->dbg['ALL']) || (isset($c->dbg['put']) && $c->dbg['put'])) ) { $fh = fopen('/tmp/PUT.txt','w'); if ( $fh ) { fwrite($fh,$request->raw_post); fclose($fh); } } controlRequestContainer( $dav_resource->GetProperty('username'), $dav_resource->GetProperty('user_no'), $dav_resource->bound_from(), true); $lock_opener = $request->FailIfLocked(); if ( $dav_resource->IsCollection() ) { if ( $dav_resource->IsPrincipal() || $dav_resource->IsBinding() || !isset($c->readonly_webdav_collections) || $c->readonly_webdav_collections == true ) { $request->DoResponse( 405 ); // Method not allowed return; } $appending = (isset($_GET['mode']) && $_GET['mode'] == 'append' ); /** * CalDAV does not define the result of a PUT on a collection. We treat that * as an import. The code is in caldav-PUT-functions.php */ import_collection($request->raw_post,$request->user_no,$request->path,true, $appending); $request->DoResponse( 200 ); return; } $etag = md5($request->raw_post); $request->CheckEtagMatch( $dav_resource->Exists(), $dav_resource->unique_tag() ); $put_action_type = ($dav_resource->Exists() ? 'UPDATE' : 'INSERT'); $collection = $dav_resource->GetParentContainer(); write_resource( $dav_resource, $request->raw_post, $collection, $session->user_no, $etag, $put_action_type, true, true ); if ( isset($etag) ) header(sprintf('ETag: "%s"', $etag) ); $request->DoResponse( ($dav_resource->Exists() ? 204 : 201) ); davical-1.1.1/inc/caldav-REPORT-pps-set.php0000644000000000000000000000176611333057347015141 0ustar * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ /** * Wrap an individual property name as needed */ function property_response( &$xmldoc, $property ) { $prop = new XMLElement( 'prop' ); $xmldoc->NSElement($prop, $property ); return new XMLElement( 'principal-search-property', $prop ); } $principal_search_property_set = array( 'DAV::displayname', 'urn:ietf:params:xml:ns:caldav:calendar-home-set', 'urn:ietf:params:xml:ns:caldav:calendar-user-address-set' ); $responses = array(); foreach( $principal_search_property_set AS $k => $tag ) { $responses[] = property_response( $reply, $tag ); } $report = new XMLElement( 'principal-search-property-set', $responses, $reply->GetXmlNsArray() ); $request->XMLResponse( 207, $report ); davical-1.1.1/inc/CalDAVRequest.php0000644000000000000000000014624111776301255013707 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once("AwlCache.php"); require_once("XMLDocument.php"); require_once("DAVPrincipal.php"); require_once("DAVTicket.php"); define('DEPTH_INFINITY', 9999); /** * A class for collecting things to do with this request. * * @package davical */ class CalDAVRequest { var $options; /** * The raw data sent along with the request */ var $raw_post; /** * The HTTP request method: PROPFIND, LOCK, REPORT, OPTIONS, etc... */ var $method; /** * The depth parameter from the request headers, coerced into a valid integer: 0, 1 * or DEPTH_INFINITY which is defined above. The default is set per various RFCs. */ var $depth; /** * The 'principal' (user/resource/...) which this request seeks to access * @var DAVPrincipal */ var $principal; /** * The 'current_user_principal_xml' the DAV:current-user-principal answer. An * XMLElement object with an or fragment. */ var $current_user_principal_xml; /** * The user agent making the request. */ var $user_agent; /** * The ID of the collection containing this path, or of this path if it is a collection */ var $collection_id; /** * The path corresponding to the collection_id */ var $collection_path; /** * The type of collection being requested: * calendar, schedule-inbox, schedule-outbox */ var $collection_type; /** * The type of collection being requested: * calendar, schedule-inbox, schedule-outbox */ protected $exists; /** * The value of any 'Destionation:' header, if present. */ var $destination; /** * The decimal privileges allowed by this user to the identified resource. */ protected $privileges; /** * A static structure of supported privileges. */ var $supported_privileges; /** * A DAVTicket object, if there is a ?ticket=id or Ticket: id with this request */ public $ticket; /** * An array of values from the 'Prefer' header. At present only 'return-minimal' is acted on in any way - you * can test that value with the PreferMinimal() method. */ private $prefer; /** * Create a new CalDAVRequest object. */ function __construct( $options = array() ) { global $session, $c, $debugging; $this->options = $options; if ( !isset($this->options['allow_by_email']) ) $this->options['allow_by_email'] = false; if ( isset($_SERVER['HTTP_PREFER']) ) { $this->prefer = explode( ',', $_SERVER['HTTP_PREFER']); } else if ( isset($_SERVER['HTTP_BRIEF']) && (strtoupper($_SERVER['HTTP_BRIEF']) == 'T') ) { $this->prefer = array( 'return-minimal'); } else $this->prefer = array(); /** * Our path is /\n"; } } if ( isset($c->dbg['statistics']) && $c->dbg['statistics'] ) { $script_time = microtime(true) - $c->script_start_time; @dbg_error_log("statistics", "Method: %s, Status: %d, Script: %5.3lfs, Queries: %5.3lfs, URL: %s", $_SERVER['REQUEST_METHOD'], 200, $script_time, $c->total_query_time, $_SERVER['REQUEST_URI']); } ?> davical-1.1.1/inc/caldav-client-v2.php0000644000000000000000000007663411776146443014355 0ustar * @copyright Andrew McMillan * @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU LGPL version 3 or later */ require_once('XMLDocument.php'); /** * A class for holding basic calendar information * @package awl */ class CalendarInfo { public $url; public $displayname; public $getctag; function __construct( $url, $displayname = null, $getctag = null ) { $this->url = $url; $this->displayname = $displayname; $this->getctag = $getctag; } function __toString() { return( '(URL: '.$this->url.' Ctag: '.$this->getctag.' Displayname: '.$this->displayname .')'. "\n" ); } } if(!defined("_FSOCK_TIMEOUT")){ define("_FSOCK_TIMEOUT", 10); } /** * A class for accessing DAViCal via CalDAV, as a client * * @package awl */ class CalDAVClient { /** * Server, username, password, calendar * * @var string */ protected $base_url, $user, $pass, $entry, $protocol, $server, $port; /** * The principal-URL we're using */ protected $principal_url; /** * The calendar-URL we're using */ protected $calendar_url; /** * The calendar-home-set we're using */ protected $calendar_home_set; /** * The calendar_urls we have discovered */ protected $calendar_urls; /** * The useragent which is send to the caldav server * * @var string */ public $user_agent = 'DAViCalClient'; protected $headers = array(); protected $body = ""; protected $requestMethod = "GET"; protected $httpRequest = ""; // for debugging http headers sent protected $xmlRequest = ""; // for debugging xml sent protected $xmlResponse = ""; // xml received protected $httpResponseCode = 0; // http response code protected $httpResponseHeaders = ""; protected $httpParsedHeaders; protected $httpResponseBody = ""; protected $parser; // our XML parser object private $debug = false; // Whether we are debugging /** * Constructor, initialises the class * * @param string $base_url The URL for the calendar server * @param string $user The name of the user logging in * @param string $pass The password for that user */ function __construct( $base_url, $user, $pass ) { $this->user = $user; $this->pass = $pass; $this->headers = array(); if ( preg_match( '#^(https?)://([a-z0-9.-]+)(:([0-9]+))?(/.*)$#', $base_url, $matches ) ) { $this->server = $matches[2]; $this->base_url = $matches[5]; if ( $matches[1] == 'https' ) { $this->protocol = 'ssl'; $this->port = 443; } else { $this->protocol = 'tcp'; $this->port = 80; } if ( $matches[4] != '' ) { $this->port = intval($matches[4]); } } else { trigger_error("Invalid URL: '".$base_url."'", E_USER_ERROR); } } /** * Call this to enable / disable debugging. It will return the prior value of the debugging flag. * @param boolean $new_value The new value for debugging. * @return boolean The previous value, in case you want to restore it later. */ function SetDebug( $new_value ) { $old_value = $this->debug; if ( $new_value ) $this->debug = true; else $this->debug = false; return $old_value; } /** * Adds an If-Match or If-None-Match header * * @param bool $match to Match or Not to Match, that is the question! * @param string $etag The etag to match / not match against. */ function SetMatch( $match, $etag = '*' ) { $this->headers['match'] = sprintf( "%s-Match: \"%s\"", ($match ? "If" : "If-None"), trim($etag,'"')); } /** * Add a Depth: header. Valid values are 0, 1 or infinity * * @param int $depth The depth, default to infinity */ function SetDepth( $depth = '0' ) { $this->headers['depth'] = 'Depth: '. ($depth == '1' ? "1" : ($depth == 'infinity' ? $depth : "0") ); } /** * Add a Depth: header. Valid values are 1 or infinity * * @param int $depth The depth, default to infinity */ function SetUserAgent( $user_agent = null ) { if ( !isset($user_agent) ) $user_agent = $this->user_agent; $this->user_agent = $user_agent; } /** * Add a Content-type: header. * * @param string $type The content type */ function SetContentType( $type ) { $this->headers['content-type'] = "Content-type: $type"; } /** * Set the calendar_url we will be using for a while. * * @param string $url The calendar_url */ function SetCalendar( $url ) { $this->calendar_url = $url; } /** * Split response into httpResponse and xmlResponse * * @param string Response from server */ function ParseResponse( $response ) { $pos = strpos($response, 'xmlResponse = trim(substr($response, $pos)); $this->xmlResponse = preg_replace('{>[^>]*$}s', '>',$this->xmlResponse ); $parser = xml_parser_create_ns('UTF-8'); xml_parser_set_option ( $parser, XML_OPTION_SKIP_WHITE, 1 ); xml_parser_set_option ( $parser, XML_OPTION_CASE_FOLDING, 0 ); if ( xml_parse_into_struct( $parser, $this->xmlResponse, $this->xmlnodes, $this->xmltags ) === 0 ) { printf( "XML parsing error: %s - %s\n", xml_get_error_code($parser), xml_error_string(xml_get_error_code($parser)) ); // debug_print_backtrace(); // echo "\nNodes array............................................................\n"; print_r( $this->xmlnodes ); // echo "\nTags array............................................................\n"; print_r( $this->xmltags ); printf( "\nXML Reponse:\n%s\n", $this->xmlResponse ); } xml_parser_free($parser); } } /** * Split httpResponseHeaders into an array of headers * * @return array of arrays of header lines */ function ParseResponseHeaders() { if ( empty($this->httpResponseHeaders) ) return array(); if ( !isset($this->httpParsedHeaders) ) { $this->httpParsedHeaders = array(); $headers = str_replace("\r\n", "\n", $this->httpResponseHeaders); $ar_headers = explode("\n", $headers); $last_header = ''; foreach ($ar_headers as $cur_headers) { if( preg_match( '{^\s*\S}', $cur_headers) ) $header_name = $last_header; else if ( preg_match( '{^(\S*):', $cur_headers, $matches) ) { $header_name = $matches[1]; $last_header = $header_name; if ( empty($this->httpParsedHeaders[$header_name]) ) $this->httpParsedHeaders[$header_name] = array(); } $this->httpParsedHeaders[$header_name][] = $cur_headers; } } return $this->httpParsedHeaders; } /** * Output http request headers * * @return HTTP headers */ function GetHttpRequest() { return $this->httpRequest; } /** * Output http response headers * * @return HTTP headers */ function GetResponseHeaders() { return $this->httpResponseHeaders; } /** * Output http response body * * @return HTTP body */ function GetResponseBody() { return $this->httpResponseBody; } /** * Output xml request * * @return raw xml */ function GetXmlRequest() { return $this->xmlRequest; } /** * Output xml response * * @return raw xml */ function GetXmlResponse() { return $this->xmlResponse; } /** * Send a request to the server * * @param string $url The URL to make the request to * * @return string The content of the response from the server */ function DoRequest( $url = null ) { $headers = array(); if ( !isset($url) ) $url = $this->base_url; $this->request_url = $url; $url = preg_replace('{^https?://[^/]+}', '', $url); // URLencode if it isn't already if ( preg_match( '{[^%?&=+,.-_/a-z0-9]}', $url ) ) { $url = str_replace(rawurlencode('/'),'/',rawurlencode($url)); $url = str_replace(rawurlencode('?'),'?',$url); $url = str_replace(rawurlencode('&'),'&',$url); $url = str_replace(rawurlencode('='),'=',$url); $url = str_replace(rawurlencode('+'),'+',$url); $url = str_replace(rawurlencode(','),',',$url); } $headers[] = $this->requestMethod." ". $url . " HTTP/1.1"; $headers[] = "Authorization: Basic ".base64_encode($this->user .":". $this->pass ); $headers[] = "Host: ".$this->server .":".$this->port; if ( !isset($this->headers['content-type']) ) $this->headers['content-type'] = "Content-type: text/plain"; foreach( $this->headers as $ii => $head ) { $headers[] = $head; } $headers[] = "Content-Length: " . strlen($this->body); $headers[] = "User-Agent: " . $this->user_agent; $headers[] = 'Connection: close'; $this->httpRequest = join("\r\n",$headers); $this->xmlRequest = $this->body; $this->xmlResponse = ''; $fip = fsockopen( $this->protocol . '://' . $this->server, $this->port, $errno, $errstr, _FSOCK_TIMEOUT); //error handling? if ( !(get_resource_type($fip) == 'stream') ) return false; if ( !fwrite($fip, $this->httpRequest."\r\n\r\n".$this->body) ) { fclose($fip); return false; } $response = ""; while( !feof($fip) ) { $response .= fgets($fip,8192); } fclose($fip); list( $this->httpResponseHeaders, $this->httpResponseBody ) = preg_split( '{\r?\n\r?\n}s', $response, 2 ); if ( preg_match( '{Transfer-Encoding: chunked}i', $this->httpResponseHeaders ) ) $this->Unchunk(); if ( preg_match('/HTTP\/\d\.\d (\d{3})/', $this->httpResponseHeaders, $status) ) $this->httpResponseCode = intval($status[1]); else $this->httpResponseCode = 0; $this->headers = array(); // reset the headers array for our next request $this->ParseResponse($this->httpResponseBody); return $response; } /** * Unchunk a chunked response */ function Unchunk() { $content = ''; $chunks = $this->httpResponseBody; // printf( "\n================================\n%s\n================================\n", $chunks ); do { $bytes = 0; if ( preg_match('{^((\r\n)?\s*([ 0-9a-fA-F]+)(;[^\n]*)?\r?\n)}', $chunks, $matches ) ) { $octets = $matches[3]; $bytes = hexdec($octets); $pos = strlen($matches[1]); // printf( "Chunk size 0x%s (%d)\n", $octets, $bytes ); if ( $bytes > 0 ) { // printf( "---------------------------------\n%s\n---------------------------------\n", substr($chunks,$pos,$bytes) ); $content .= substr($chunks,$pos,$bytes); $chunks = substr($chunks,$pos + $bytes + 2); // printf( "+++++++++++++++++++++++++++++++++\n%s\n+++++++++++++++++++++++++++++++++\n", $chunks ); } } else { $content .= $chunks; } } while( $bytes > 0 ); $this->httpResponseBody = $content; // printf( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n%s\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", $content ); } /** * Send an OPTIONS request to the server * * @param string $url The URL to make the request to * * @return array The allowed options */ function DoOptionsRequest( $url = null ) { $this->requestMethod = "OPTIONS"; $this->body = ""; $this->DoRequest($url); $this->ParseResponseHeaders(); $allowed = ''; foreach( $this->httpParsedHeaders['Allow'] as $allow_header ) { $allowed .= preg_replace( '/^(Allow:)?\s+([a-z, ]+)\r?\n.*/is', '$1,', $allow_header ); } $options = array_flip( preg_split( '/[, ]+/', trim($allowed, ', ') )); return $options; } /** * Send an XML request to the server (e.g. PROPFIND, REPORT, MKCALENDAR) * * @param string $method The method (PROPFIND, REPORT, etc) to use with the request * @param string $xml The XML to send along with the request * @param string $url The URL to make the request to * * @return array An array of the allowed methods */ function DoXMLRequest( $request_method, $xml, $url = null ) { $this->body = $xml; $this->requestMethod = $request_method; $this->SetContentType("text/xml"); return $this->DoRequest($url); } /** * Get a single item from the server. * * @param string $url The URL to GET */ function DoGETRequest( $url ) { $this->body = ""; $this->requestMethod = "GET"; return $this->DoRequest( $url ); } /** * Get the HEAD of a single item from the server. * * @param string $url The URL to HEAD */ function DoHEADRequest( $url ) { $this->body = ""; $this->requestMethod = "HEAD"; return $this->DoRequest( $url ); } /** * PUT a text/icalendar resource, returning the etag * * @param string $url The URL to make the request to * @param string $icalendar The iCalendar resource to send to the server * @param string $etag The etag of an existing resource to be overwritten, or '*' for a new resource. * * @return string The content of the response from the server */ function DoPUTRequest( $url, $icalendar, $etag = null ) { $this->body = $icalendar; $this->requestMethod = "PUT"; if ( $etag != null ) { $this->SetMatch( ($etag != '*'), $etag ); } $this->SetContentType('text/calendar; encoding="utf-8"'); $this->DoRequest($url); $etag = null; if ( preg_match( '{^ETag:\s+"([^"]*)"\s*$}im', $this->httpResponseHeaders, $matches ) ) $etag = $matches[1]; if ( !isset($etag) || $etag == '' ) { if ( $this->debug ) printf( "No etag in:\n%s\n", $this->httpResponseHeaders ); $save_request = $this->httpRequest; $save_response_headers = $this->httpResponseHeaders; $this->DoHEADRequest( $url ); if ( preg_match( '{^Etag:\s+"([^"]*)"\s*$}im', $this->httpResponseHeaders, $matches ) ) $etag = $matches[1]; if ( !isset($etag) || $etag == '' ) { if ( $this->debug ) printf( "Still No etag in:\n%s\n", $this->httpResponseHeaders ); } $this->httpRequest = $save_request; $this->httpResponseHeaders = $save_response_headers; } return $etag; } /** * DELETE a text/icalendar resource * * @param string $url The URL to make the request to * @param string $etag The etag of an existing resource to be deleted, or '*' for any resource at that URL. * * @return int The HTTP Result Code for the DELETE */ function DoDELETERequest( $url, $etag = null ) { $this->body = ""; $this->requestMethod = "DELETE"; if ( $etag != null ) { $this->SetMatch( true, $etag ); } $this->DoRequest($url); return $this->httpResponseCode; } /** * Get a single item from the server. * * @param string $url The URL to PROPFIND on */ function DoPROPFINDRequest( $url, $props, $depth = 0 ) { $this->SetDepth($depth); $xml = new XMLDocument( array( 'DAV:' => '', 'urn:ietf:params:xml:ns:caldav' => 'C' ) ); $prop = new XMLElement('prop'); foreach( $props AS $v ) { $xml->NSElement($prop,$v); } $this->body = $xml->Render('propfind',$prop ); $this->requestMethod = "PROPFIND"; $this->SetContentType("text/xml"); $this->DoRequest($url); return $this->GetXmlResponse(); } /** * Get/Set the Principal URL * * @param $url string The Principal URL to set */ function PrincipalURL( $url = null ) { if ( isset($url) ) { $this->principal_url = $url; } return $this->principal_url; } /** * Get/Set the calendar-home-set URL * * @param $url array of string The calendar-home-set URLs to set */ function CalendarHomeSet( $urls = null ) { if ( isset($urls) ) { if ( ! is_array($urls) ) $urls = array($urls); $this->calendar_home_set = $urls; } return $this->calendar_home_set; } /** * Get/Set the calendar-home-set URL * * @param $urls array of string The calendar URLs to set */ function CalendarUrls( $urls = null ) { if ( isset($urls) ) { if ( ! is_array($urls) ) $urls = array($urls); $this->calendar_urls = $urls; } return $this->calendar_urls; } /** * Return the first occurrence of an href inside the named tag. * * @param string $tagname The tag name to find the href inside of */ function HrefValueInside( $tagname ) { foreach( $this->xmltags[$tagname] AS $k => $v ) { $j = $v + 1; if ( $this->xmlnodes[$j]['tag'] == 'DAV::href' ) { return rawurldecode($this->xmlnodes[$j]['value']); } } return null; } /** * Return the href containing this property. Except only if it's inside a status != 200 * * @param string $tagname The tag name of the property to find the href for * @param integer $which Which instance of the tag should we use */ function HrefForProp( $tagname, $i = 0 ) { if ( isset($this->xmltags[$tagname]) && isset($this->xmltags[$tagname][$i]) ) { $j = $this->xmltags[$tagname][$i]; while( $j-- > 0 && $this->xmlnodes[$j]['tag'] != 'DAV::href' ) { // printf( "Node[$j]: %s\n", $this->xmlnodes[$j]['tag']); if ( $this->xmlnodes[$j]['tag'] == 'DAV::status' && $this->xmlnodes[$j]['value'] != 'HTTP/1.1 200 OK' ) return null; } // printf( "Node[$j]: %s\n", $this->xmlnodes[$j]['tag']); if ( $j > 0 && isset($this->xmlnodes[$j]['value']) ) { // printf( "Value[$j]: %s\n", $this->xmlnodes[$j]['value']); return rawurldecode($this->xmlnodes[$j]['value']); } } else { if ( $this->debug ) printf( "xmltags[$tagname] or xmltags[$tagname][$i] is not set\n"); } return null; } /** * Return the href which has a resourcetype of the specified type * * @param string $tagname The tag name of the resourcetype to find the href for * @param integer $which Which instance of the tag should we use */ function HrefForResourcetype( $tagname, $i = 0 ) { if ( isset($this->xmltags[$tagname]) && isset($this->xmltags[$tagname][$i]) ) { $j = $this->xmltags[$tagname][$i]; while( $j-- > 0 && $this->xmlnodes[$j]['tag'] != 'DAV::resourcetype' ); if ( $j > 0 ) { while( $j-- > 0 && $this->xmlnodes[$j]['tag'] != 'DAV::href' ); if ( $j > 0 && isset($this->xmlnodes[$j]['value']) ) { return rawurldecode($this->xmlnodes[$j]['value']); } } } return null; } /** * Return the ... of a propstat where the status is OK * * @param string $nodenum The node number in the xmlnodes which is the href */ function GetOKProps( $nodenum ) { $props = null; $level = $this->xmlnodes[$nodenum]['level']; $status = ''; while ( $this->xmlnodes[++$nodenum]['level'] >= $level ) { if ( $this->xmlnodes[$nodenum]['tag'] == 'DAV::propstat' ) { if ( $this->xmlnodes[$nodenum]['type'] == 'open' ) { $props = array(); $status = ''; } else { if ( $status == 'HTTP/1.1 200 OK' ) break; } } elseif ( !isset($this->xmlnodes[$nodenum]) || !is_array($this->xmlnodes[$nodenum]) ) { break; } elseif ( $this->xmlnodes[$nodenum]['tag'] == 'DAV::status' ) { $status = $this->xmlnodes[$nodenum]['value']; } else { $props[] = $this->xmlnodes[$nodenum]; } } return $props; } /** * Attack the given URL in an attempt to find a principal URL * * @param string $url The URL to find the principal-URL from */ function FindPrincipal( $url=null ) { $xml = $this->DoPROPFINDRequest( $url, array('resourcetype', 'current-user-principal', 'owner', 'principal-URL', 'urn:ietf:params:xml:ns:caldav:calendar-home-set'), 1); $principal_url = $this->HrefForProp('DAV::principal'); if ( !isset($principal_url) ) { foreach( array('DAV::current-user-principal', 'DAV::principal-URL', 'DAV::owner') AS $href ) { if ( !isset($principal_url) ) { $principal_url = $this->HrefValueInside($href); } } } return $this->PrincipalURL($principal_url); } /** * Attack the given URL in an attempt to find a principal URL * * @param string $url The URL to find the calendar-home-set from */ function FindCalendarHome( $recursed=false ) { if ( !isset($this->principal_url) ) { $this->FindPrincipal(); } if ( $recursed ) { $this->DoPROPFINDRequest( $this->principal_url, array('urn:ietf:params:xml:ns:caldav:calendar-home-set'), 0); } $calendar_home = array(); foreach( $this->xmltags['urn:ietf:params:xml:ns:caldav:calendar-home-set'] AS $k => $v ) { if ( $this->xmlnodes[$v]['type'] != 'open' ) continue; while( $this->xmlnodes[++$v]['type'] != 'close' && $this->xmlnodes[$v]['tag'] != 'urn:ietf:params:xml:ns:caldav:calendar-home-set' ) { // printf( "Tag: '%s' = '%s'\n", $this->xmlnodes[$v]['tag'], $this->xmlnodes[$v]['value']); if ( $this->xmlnodes[$v]['tag'] == 'DAV::href' && isset($this->xmlnodes[$v]['value']) ) $calendar_home[] = rawurldecode($this->xmlnodes[$v]['value']); } } if ( !$recursed && count($calendar_home) < 1 ) { $calendar_home = $this->FindCalendarHome(true); } return $this->CalendarHomeSet($calendar_home); } /** * Find the calendars, from the calendar_home_set */ function FindCalendars( $recursed=false ) { if ( !isset($this->calendar_home_set[0]) ) { $this->FindCalendarHome(); } $this->DoPROPFINDRequest( $this->calendar_home_set[0], array('resourcetype','displayname','http://calendarserver.org/ns/:getctag'), 1); $calendars = array(); if ( isset($this->xmltags['urn:ietf:params:xml:ns:caldav:calendar']) ) { $calendar_urls = array(); foreach( $this->xmltags['urn:ietf:params:xml:ns:caldav:calendar'] AS $k => $v ) { $calendar_urls[$this->HrefForProp('urn:ietf:params:xml:ns:caldav:calendar', $k)] = 1; } foreach( $this->xmltags['DAV::href'] AS $i => $hnode ) { $href = rawurldecode($this->xmlnodes[$hnode]['value']); if ( !isset($calendar_urls[$href]) ) continue; // printf("Seems '%s' is a calendar.\n", $href ); $calendar = new CalendarInfo($href); $ok_props = $this->GetOKProps($hnode); foreach( $ok_props AS $v ) { // printf("Looking at: %s[%s]\n", $href, $v['tag'] ); switch( $v['tag'] ) { case 'http://calendarserver.org/ns/:getctag': $calendar->getctag = $v['value']; break; case 'DAV::displayname': $calendar->displayname = $v['value']; break; } } $calendars[] = $calendar; } } return $this->CalendarUrls($calendars); } /** * Find the calendars, from the calendar_home_set */ function GetCalendarDetails( $url = null ) { if ( isset($url) ) $this->SetCalendar($url); $calendar_properties = array( 'resourcetype', 'displayname', 'http://calendarserver.org/ns/:getctag', 'urn:ietf:params:xml:ns:caldav:calendar-timezone', 'supported-report-set' ); $this->DoPROPFINDRequest( $this->calendar_url, $calendar_properties, 0); $hnode = $this->xmltags['DAV::href'][0]; $href = rawurldecode($this->xmlnodes[$hnode]['value']); $calendar = new CalendarInfo($href); $ok_props = $this->GetOKProps($hnode); foreach( $ok_props AS $k => $v ) { $name = preg_replace( '{^.*:}', '', $v['tag'] ); if ( isset($v['value'] ) ) { $calendar->{$name} = $v['value']; } /* else { printf( "Calendar property '%s' has no text content\n", $v['tag'] ); }*/ } return $calendar; } /** * Get all etags for a calendar */ function GetCollectionETags( $url = null ) { if ( isset($url) ) $this->SetCalendar($url); $this->DoPROPFINDRequest( $this->calendar_url, array('getetag'), 1); $etags = array(); if ( isset($this->xmltags['DAV::getetag']) ) { foreach( $this->xmltags['DAV::getetag'] AS $k => $v ) { $href = $this->HrefForProp('DAV::getetag', $k); if ( isset($href) && isset($this->xmlnodes[$v]['value']) ) $etags[$href] = $this->xmlnodes[$v]['value']; } } return $etags; } /** * Get a bunch of events for a calendar with a calendar-multiget report */ function CalendarMultiget( $event_hrefs, $url = null ) { if ( isset($url) ) $this->SetCalendar($url); $hrefs = ''; foreach( $event_hrefs AS $k => $href ) { $href = str_replace( rawurlencode('/'),'/',rawurlencode($href)); $hrefs .= ''.$href.''; } $this->body = << $hrefs EOXML; $this->requestMethod = "REPORT"; $this->SetContentType("text/xml"); $this->DoRequest( $this->calendar_url ); $events = array(); if ( isset($this->xmltags['urn:ietf:params:xml:ns:caldav:calendar-data']) ) { foreach( $this->xmltags['urn:ietf:params:xml:ns:caldav:calendar-data'] AS $k => $v ) { $href = $this->HrefForProp('urn:ietf:params:xml:ns:caldav:calendar-data', $k); // echo "Calendar-data:\n"; print_r($this->xmlnodes[$v]); $events[$href] = $this->xmlnodes[$v]['value']; } } else { foreach( $event_hrefs AS $k => $href ) { $this->DoGETRequest($href); $events[$href] = $this->httpResponseBody; } } return $events; } /** * Given XML for a calendar query, return an array of the events (/todos) in the * response. Each event in the array will have a 'href', 'etag' and '$response_type' * part, where the 'href' is relative to the calendar and the '$response_type' contains the * definition of the calendar data in iCalendar format. * * @param string $filter XML fragment which is the element of a calendar-query * @param string $url The URL of the calendar, or empty/null to use the 'current' calendar_url * * @return array An array of the relative URLs, etags, and events from the server. Each element of the array will * be an array with 'href', 'etag' and 'data' elements, corresponding to the URL, the server-supplied * etag (which only varies when the data changes) and the calendar data in iCalendar format. */ function DoCalendarQuery( $filter, $url = '' ) { if ( !empty($url) ) $this->SetCalendar($url); $this->body = << $filter EOXML; $this->requestMethod = "REPORT"; $this->SetContentType("text/xml"); $this->DoRequest( $this->calendar_url ); $report = array(); foreach( $this->xmlnodes as $k => $v ) { switch( $v['tag'] ) { case 'DAV::response': if ( $v['type'] == 'open' ) { $response = array(); } elseif ( $v['type'] == 'close' ) { $report[] = $response; } break; case 'DAV::href': $response['href'] = basename( rawurldecode($v['value']) ); break; case 'DAV::getetag': $response['etag'] = preg_replace('/^"?([^"]+)"?/', '$1', $v['value']); break; case 'urn:ietf:params:xml:ns:caldav:calendar-data': $response['data'] = $v['value']; break; } } return $report; } /** * Get the events in a range from $start to $finish. The dates should be in the * format yyyymmddThhmmssZ and should be in GMT. The events are returned as an * array of event arrays. Each event array will have a 'href', 'etag' and 'event' * part, where the 'href' is relative to the calendar and the event contains the * definition of the event in iCalendar format. * * @param timestamp $start The start time for the period * @param timestamp $finish The finish time for the period * @param string $relative_url The URL relative to the base_url specified when the calendar was opened. Default ''. * * @return array An array of the relative URLs, etags, and events, returned from DoCalendarQuery() @see DoCalendarQuery() */ function GetEvents( $start = null, $finish = null, $relative_url = '' ) { $filter = ""; if ( isset($start) && isset($finish) ) $range = ""; else $range = ''; $filter = << $range EOFILTER; return $this->DoCalendarQuery($filter, $relative_url); } /** * Get the todo's in a range from $start to $finish. The dates should be in the * format yyyymmddThhmmssZ and should be in GMT. The events are returned as an * array of event arrays. Each event array will have a 'href', 'etag' and 'event' * part, where the 'href' is relative to the calendar and the event contains the * definition of the event in iCalendar format. * * @param timestamp $start The start time for the period * @param timestamp $finish The finish time for the period * @param boolean $completed Whether to include completed tasks * @param boolean $cancelled Whether to include cancelled tasks * @param string $relative_url The URL relative to the base_url specified when the calendar was opened. Default ''. * * @return array An array of the relative URLs, etags, and events, returned from DoCalendarQuery() @see DoCalendarQuery() */ function GetTodos( $start, $finish, $completed = false, $cancelled = false, $relative_url = "" ) { if ( $start && $finish ) { $time_range = << EOTIME; } // Warning! May contain traces of double negatives... $neg_cancelled = ( $cancelled === true ? "no" : "yes" ); $neg_completed = ( $cancelled === true ? "no" : "yes" ); $filter = << COMPLETED CANCELLED $time_range EOFILTER; return $this->DoCalendarQuery($filter, $relative_url); } /** * Get the calendar entry by UID * * @param uid * @param string $relative_url The URL relative to the base_url specified when the calendar was opened. Default ''. * @param string $component_type The component type inside the VCALENDAR. Default 'VEVENT'. * * @return array An array of the relative URL, etag, and calendar data returned from DoCalendarQuery() @see DoCalendarQuery() */ function GetEntryByUid( $uid, $relative_url = '', $component_type = 'VEVENT' ) { $filter = ""; if ( $uid ) { $filter = << $uid EOFILTER; } return $this->DoCalendarQuery($filter, $relative_url); } /** * Get the calendar entry by HREF * * @param string $href The href from a call to GetEvents or GetTodos etc. * * @return string The iCalendar of the calendar entry */ function GetEntryByHref( $href ) { $href = str_replace( rawurlencode('/'),'/',rawurlencode($href)); return $this->DoGETRequest( $href ); } } davical-1.1.1/inc/RRule.php0000644000000000000000000007165111446006434012332 0ustar * @copyright Catalyst .Net Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ $ical_weekdays = array( 'SU' => 0, 'MO' => 1, 'TU' => 2, 'WE' => 3, 'TH' => 4, 'FR' => 5, 'SA' => 6 ); /** * A Class for handling dates in iCalendar format. We do make the simplifying assumption * that all date handling in here is normalised to GMT. One day we might provide some * functions to do that, but for now it is done externally. * * @package awl */ class iCalDate { /**#@+ * @access private */ /** Text version */ var $_text; /** Epoch version */ var $_epoch; /** Fragmented parts */ var $_yy; var $_mo; var $_dd; var $_hh; var $_mi; var $_ss; var $_tz; /** Which day of the week does the week start on */ var $_wkst; /**#@-*/ /** * The constructor takes either an iCalendar date, a text string formatted as * an iCalendar date, or epoch seconds. */ function iCalDate( $input ) { if ( gettype($input) == 'object' ) { $this->_text = $input->_text; $this->_epoch = $input->_epoch; $this->_yy = $input->_yy; $this->_mo = $input->_mo; $this->_dd = $input->_dd; $this->_hh = $input->_hh; $this->_mi = $input->_mi; $this->_ss = $input->_ss; $this->_tz = $input->_tz; return; } $this->_wkst = 1; // Monday if ( preg_match( '/^\d{8}[T ]\d{6}$/', $input ) ) { $this->SetLocalDate($input); } else if ( preg_match( '/^\d{8}[T ]\d{6}Z$/', $input ) ) { $this->SetGMTDate($input); } else if ( intval($input) == 0 ) { $this->SetLocalDate(strtotime($input)); return; } else { $this->SetEpochDate($input); } } /** * Set the date from a text string */ function SetGMTDate( $input ) { $this->_text = $input; $this->_PartsFromText(); $this->_GMTEpochFromParts(); } /** * Set the date from a text string */ function SetLocalDate( $input ) { $this->_text = $input; $this->_PartsFromText(); $this->_EpochFromParts(); } /** * Set the date from an epoch */ function SetEpochDate( $input ) { $this->_epoch = intval($input); $this->_TextFromEpoch(); $this->_PartsFromText(); } /** * Given an epoch date, convert it to text */ function _TextFromEpoch() { $this->_text = date('Ymd\THis', $this->_epoch ); // dbg_error_log( "RRule", " Text %s from epoch %d", $this->_text, $this->_epoch ); } /** * Given a GMT epoch date, convert it to text */ function _GMTTextFromEpoch() { $this->_text = gmdate('Ymd\THis', $this->_epoch ); // dbg_error_log( "RRule", " Text %s from epoch %d", $this->_text, $this->_epoch ); } /** * Given a text date, convert it to parts */ function _PartsFromText() { $this->_yy = intval(substr($this->_text,0,4)); $this->_mo = intval(substr($this->_text,4,2)); $this->_dd = intval(substr($this->_text,6,2)); $this->_hh = intval(substr($this->_text,9,2)); $this->_mi = intval(substr($this->_text,11,2)); $this->_ss = intval(substr($this->_text,13,2)); } /** * Given a GMT text date, convert it to an epoch */ function _GMTEpochFromParts() { $this->_epoch = gmmktime ( $this->_hh, $this->_mi, $this->_ss, $this->_mo, $this->_dd, $this->_yy ); // dbg_error_log( "RRule", " Epoch %d from %04d-%02d-%02d %02d:%02d:%02d", $this->_epoch, $this->_yy, $this->_mo, $this->_dd, $this->_hh, $this->_mi, $this->_ss ); } /** * Given a local text date, convert it to an epoch */ function _EpochFromParts() { $this->_epoch = mktime ( $this->_hh, $this->_mi, $this->_ss, $this->_mo, $this->_dd, $this->_yy ); // dbg_error_log( "RRule", " Epoch %d from %04d-%02d-%02d %02d:%02d:%02d", $this->_epoch, $this->_yy, $this->_mo, $this->_dd, $this->_hh, $this->_mi, $this->_ss ); } /** * Set the day of week used for calculation of week starts * * @param string $weekstart The day of the week which is the first business day. */ function SetWeekStart($weekstart) { global $ical_weekdays; $this->_wkst = $ical_weekdays[$weekstart]; } /** * Set the day of week used for calculation of week starts */ function Render( $fmt = 'Y-m-d H:i:s' ) { return date( $fmt, $this->_epoch ); } /** * Render the date as GMT */ function RenderGMT( $fmt = 'Ymd\THis\Z' ) { return gmdate( $fmt, $this->_epoch ); } /** * No of days in a month 1(Jan) - 12(Dec) */ function DaysInMonth( $mo=false, $yy=false ) { if ( $mo === false ) $mo = $this->_mo; switch( $mo ) { case 1: // January case 3: // March case 5: // May case 7: // July case 8: // August case 10: // October case 12: // December return 31; break; case 4: // April case 6: // June case 9: // September case 11: // November return 30; break; case 2: // February if ( $yy === false ) $yy = $this->_yy; if ( (($yy % 4) == 0) && ((($yy % 100) != 0) || (($yy % 400) == 0) ) ) return 29; return 28; break; default: dbg_error_log( "ERROR"," Invalid month of '%s' passed to DaysInMonth", $mo ); break; } } /** * Set the day in the month to what we have been given */ function SetMonthDay( $dd ) { if ( $dd == $this->_dd ) return; // Shortcut $dd = min($dd,$this->DaysInMonth()); $this->_dd = $dd; $this->_EpochFromParts(); $this->_TextFromEpoch(); } /** * Add some number of months to a date */ function AddMonths( $mo ) { // dbg_error_log( "RRule", " Adding %d months to %s", $mo, $this->_text ); $this->_mo += $mo; while ( $this->_mo < 1 ) { $this->_mo += 12; $this->_yy--; } while ( $this->_mo > 12 ) { $this->_mo -= 12; $this->_yy++; } if ( ($this->_dd > 28 && $this->_mo == 2) || $this->_dd > 30 ) { // Ensure the day of month is still reasonable and coerce to last day of month if needed $dim = $this->DaysInMonth(); if ( $this->_dd > $dim ) { $this->_dd = $dim; } } $this->_EpochFromParts(); $this->_TextFromEpoch(); // dbg_error_log( "RRule", " Added %d months and got %s", $mo, $this->_text ); } /** * Add some integer number of days to a date */ function AddDays( $dd ) { $at_start = $this->_text; $this->_dd += $dd; while ( 1 > $this->_dd ) { $this->_mo--; if ( $this->_mo < 1 ) { $this->_mo += 12; $this->_yy--; } $this->_dd += $this->DaysInMonth(); } while ( ($dim = $this->DaysInMonth($this->_mo)) < $this->_dd ) { $this->_dd -= $dim; $this->_mo++; if ( $this->_mo > 12 ) { $this->_mo -= 12; $this->_yy++; } } $this->_EpochFromParts(); $this->_TextFromEpoch(); // dbg_error_log( "RRule", " Added %d days to %s and got %s", $dd, $at_start, $this->_text ); } /** * Add duration */ function AddDuration( $duration ) { if ( strstr($duration,'T') === false ) $duration .= 'T'; list( $sign, $days, $time ) = preg_split( '/[PT]/', $duration ); $sign = ( $sign == "-" ? -1 : 1); // dbg_error_log( "RRule", " Adding duration to '%s' of sign: %d, days: %s, time: %s", $this->_text, $sign, $days, $time ); if ( preg_match( '/(\d+)(D|W)/', $days, $matches ) ) { $days = intval($matches[1]); if ( $matches[2] == 'W' ) $days *= 7; $this->AddDays( $days * $sign ); } $hh = 0; $mi = 0; $ss = 0; if ( preg_match( '/(\d+)(H)/', $time, $matches ) ) $hh = $matches[1]; if ( preg_match( '/(\d+)(M)/', $time, $matches ) ) $mi = $matches[1]; if ( preg_match( '/(\d+)(S)/', $time, $matches ) ) $ss = $matches[1]; // dbg_error_log( "RRule", " Adding %02d:%02d:%02d * %d to %02d:%02d:%02d", $hh, $mi, $ss, $sign, $this->_hh, $this->_mi, $this->_ss ); $this->_hh += ($hh * $sign); $this->_mi += ($mi * $sign); $this->_ss += ($ss * $sign); if ( $this->_ss < 0 ) { $this->_mi -= (intval(abs($this->_ss/60))+1); $this->_ss += ((intval(abs($this->_mi/60))+1) * 60); } if ( $this->_ss > 59) { $this->_mi += (intval(abs($this->_ss/60))+1); $this->_ss -= ((intval(abs($this->_mi/60))+1) * 60); } if ( $this->_mi < 0 ) { $this->_hh -= (intval(abs($this->_mi/60))+1); $this->_mi += ((intval(abs($this->_mi/60))+1) * 60); } if ( $this->_mi > 59) { $this->_hh += (intval(abs($this->_mi/60))+1); $this->_mi -= ((intval(abs($this->_mi/60))+1) * 60); } if ( $this->_hh < 0 ) { $this->AddDays( -1 * (intval(abs($this->_hh/24))+1) ); $this->_hh += ((intval(abs($this->_hh/24))+1)*24); } if ( $this->_hh > 23) { $this->AddDays( (intval(abs($this->_hh/24))+1) ); $this->_hh -= ((intval(abs($this->_hh/24))+1)*24); } $this->_EpochFromParts(); $this->_TextFromEpoch(); } /** * Produce an iCalendar format DURATION for the difference between this an another iCalDate * * @param date $from The start of the period * @return string The date difference, as an iCalendar duration format */ function DateDifference( $from ) { if ( !is_object($from) ) { $from = new iCalDate($from); } if ( $from->_epoch < $this->_epoch ) { /** One way to simplify is to always go for positive differences */ return( "-". $from->DateDifference( $self ) ); } // if ( $from->_yy == $this->_yy && $from->_mo == $this->_mo ) { /** Also somewhat simpler if we can use seconds */ $diff = $from->_epoch - $this->_epoch; $result = ""; if ( $diff >= 86400) { $result = intval($diff / 86400); $diff = $diff % 86400; if ( $diff == 0 && (($result % 7) == 0) ) { // Duration is an integer number of weeks. $result .= intval($result / 7) . "W"; return $result; } $result .= "D"; } $result = "P".$result."T"; if ( $diff >= 3600) { $result .= intval($diff / 3600) . "H"; $diff = $diff % 3600; } if ( $diff >= 60) { $result .= intval($diff / 60) . "M"; $diff = $diff % 60; } if ( $diff > 0) { $result .= intval($diff) . "S"; } return $result; // } /** * From an intense reading of RFC2445 it appears that durations which are not expressible * in Weeks/Days/Hours/Minutes/Seconds are invalid. * ==> This code is not needed then :-) $yy = $from->_yy - $this->_yy; $mo = $from->_mo - $this->_mo; $dd = $from->_dd - $this->_dd; $hh = $from->_hh - $this->_hh; $mi = $from->_mi - $this->_mi; $ss = $from->_ss - $this->_ss; if ( $ss < 0 ) { $mi -= 1; $ss += 60; } if ( $mi < 0 ) { $hh -= 1; $mi += 60; } if ( $hh < 0 ) { $dd -= 1; $hh += 24; } if ( $dd < 0 ) { $mo -= 1; $dd += $this->DaysInMonth(); } // Which will use $this->_(mo|yy) - seemingly sensible if ( $mo < 0 ) { $yy -= 1; $mo += 12; } $result = ""; if ( $yy > 0) { $result .= $yy."Y"; } if ( $mo > 0) { $result .= $mo."M"; } if ( $dd > 0) { $result .= $dd."D"; } $result .= "T"; if ( $hh > 0) { $result .= $hh."H"; } if ( $mi > 0) { $result .= $mi."M"; } if ( $ss > 0) { $result .= $ss."S"; } return $result; */ } /** * Test to see if our _mo matches something in the list of months we have received. * @param string $monthlist A comma-separated list of months. * @return boolean Whether this date falls within one of those months. */ function TestByMonth( $monthlist ) { // dbg_error_log( "RRule", " Testing BYMONTH %s against month %d", (isset($monthlist) ? $monthlist : "no month list"), $this->_mo ); if ( !isset($monthlist) ) return true; // If BYMONTH is not specified any month is OK $months = array_flip(explode( ',',$monthlist )); return isset($months[$this->_mo]); } /** * Applies any BYDAY to the month to return a set of days * @param string $byday The BYDAY rule * @return array An array of the day numbers for the month which meet the rule. */ function GetMonthByDay($byday) { // dbg_error_log( "RRule", " Applying BYDAY %s to month", $byday ); $days_in_month = $this->DaysInMonth(); $dayrules = explode(',',$byday); $set = array(); $first_dow = (date('w',$this->_epoch) - $this->_dd + 36) % 7; foreach( $dayrules AS $k => $v ) { $days = $this->MonthDays($first_dow,$days_in_month,$v); foreach( $days AS $k2 => $v2 ) { $set[$v2] = $v2; } } asort( $set, SORT_NUMERIC ); return $set; } /** * Applies any BYMONTHDAY to the month to return a set of days * @param string $bymonthday The BYMONTHDAY rule * @return array An array of the day numbers for the month which meet the rule. */ function GetMonthByMonthDay($bymonthday) { // dbg_error_log( "RRule", " Applying BYMONTHDAY %s to month", $bymonthday ); $days_in_month = $this->DaysInMonth(); $dayrules = explode(',',$bymonthday); $set = array(); foreach( $dayrules AS $k => $v ) { $v = intval($v); if ( $v > 0 && $v <= $days_in_month ) $set[$v] = $v; } asort( $set, SORT_NUMERIC ); return $set; } /** * Applies any BYDAY to the week to return a set of days * @param string $byday The BYDAY rule * @param string $increasing When we are moving by months, we want any day of the week, but when by day we only want to increase. Default false. * @return array An array of the day numbers for the week which meet the rule. */ function GetWeekByDay($byday, $increasing = false) { global $ical_weekdays; // dbg_error_log( "RRule", " Applying BYDAY %s to week", $byday ); $days = explode(',',$byday); $dow = date('w',$this->_epoch); $set = array(); foreach( $days AS $k => $v ) { $daynum = $ical_weekdays[$v]; $dd = $this->_dd - $dow + $daynum; if ( $daynum < $this->_wkst ) $dd += 7; if ( $dd > $this->_dd || !$increasing ) $set[$dd] = $dd; } asort( $set, SORT_NUMERIC ); return $set; } /** * Test if $this is greater than the date parameter * @param string $lesser The other date, as a local time string * @return boolean True if $this > $lesser */ function GreaterThan($lesser) { if ( is_object($lesser) ) { // dbg_error_log( "RRule", " Comparing %s with %s", $this->_text, $lesser->_text ); return ( $this->_text > $lesser->_text ); } // dbg_error_log( "RRule", " Comparing %s with %s", $this->_text, $lesser ); return ( $this->_text > $lesser ); // These sorts of dates are designed that way... } /** * Test if $this is less than the date parameter * @param string $greater The other date, as a local time string * @return boolean True if $this < $greater */ function LessThan($greater) { if ( is_object($greater) ) { // dbg_error_log( "RRule", " Comparing %s with %s", $this->_text, $greater->_text ); return ( $this->_text < $greater->_text ); } // dbg_error_log( "RRule", " Comparing %s with %s", $this->_text, $greater ); return ( $this->_text < $greater ); // These sorts of dates are designed that way... } /** * Given a MonthDays string like "1MO", "-2WE" return an integer day of the month. * * @param string $dow_first The day of week of the first of the month. * @param string $days_in_month The number of days in the month. * @param string $dayspec The specification for a month day (or days) which we parse. * * @return array An array of the day numbers for the month which meet the rule. */ function &MonthDays($dow_first, $days_in_month, $dayspec) { global $ical_weekdays; // dbg_error_log( "RRule", "MonthDays: Getting days for '%s'. %d days starting on a %d", $dayspec, $days_in_month, $dow_first ); $set = array(); preg_match( '/([0-9-]*)(MO|TU|WE|TH|FR|SA|SU)/', $dayspec, $matches); $numeric = intval($matches[1]); $dow = $ical_weekdays[$matches[2]]; $first_matching_day = 1 + ($dow - $dow_first); while ( $first_matching_day < 1 ) $first_matching_day += 7; // dbg_error_log( "RRule", " MonthDays: Looking at %d for first match on (%s/%s), %d for numeric", $first_matching_day, $matches[1], $matches[2], $numeric ); while( $first_matching_day <= $days_in_month ) { $set[] = $first_matching_day; $first_matching_day += 7; } if ( $numeric != 0 ) { if ( $numeric < 0 ) { $numeric += count($set); } else { $numeric--; } $answer = $set[$numeric]; $set = array( $answer => $answer ); } else { $answers = $set; $set = array(); foreach( $answers AS $k => $v ) { $set[$v] = $v; } } // dbg_log_array( "RRule", 'MonthDays', $set, false ); return $set; } /** * Given set position descriptions like '1', '3', '11', '-3' or '-1' and a set, * return the subset matching the list of set positions. * * @param string $bysplist The list of set positions. * @param string $set The set of days that we will apply the positions to. * * @return array The subset which matches. */ function &ApplyBySetPos($bysplist, $set) { // dbg_error_log( "RRule", " ApplyBySetPos: Applying set position '%s' to set of %d days", $bysplist, count($set) ); $subset = array(); sort( $set, SORT_NUMERIC ); $max = count($set); $positions = explode( '[^0-9-]', $bysplist ); foreach( $positions AS $k => $v ) { if ( $v < 0 ) { $v += $max; } else { $v--; } $subset[$set[$v]] = $set[$v]; } return $subset; } } /** * A Class for handling Events on a calendar which repeat * * Here's the spec, from RFC2445: * recur = "FREQ"=freq *( ; either UNTIL or COUNT may appear in a 'recur', ; but UNTIL and COUNT MUST NOT occur in the same 'recur' ( ";" "UNTIL" "=" enddate ) / ( ";" "COUNT" "=" 1*DIGIT ) / ; the rest of these keywords are optional, ; but MUST NOT occur more than once ( ";" "INTERVAL" "=" 1*DIGIT ) / ( ";" "BYSECOND" "=" byseclist ) / ( ";" "BYMINUTE" "=" byminlist ) / ( ";" "BYHOUR" "=" byhrlist ) / ( ";" "BYDAY" "=" bywdaylist ) / ( ";" "BYMONTHDAY" "=" bymodaylist ) / ( ";" "BYYEARDAY" "=" byyrdaylist ) / ( ";" "BYWEEKNO" "=" bywknolist ) / ( ";" "BYMONTH" "=" bymolist ) / ( ";" "BYSETPOS" "=" bysplist ) / ( ";" "WKST" "=" weekday ) / ( ";" x-name "=" text ) ) freq = "SECONDLY" / "MINUTELY" / "HOURLY" / "DAILY" / "WEEKLY" / "MONTHLY" / "YEARLY" enddate = date enddate =/ date-time ;An UTC value byseclist = seconds / ( seconds *("," seconds) ) seconds = 1DIGIT / 2DIGIT ;0 to 59 byminlist = minutes / ( minutes *("," minutes) ) minutes = 1DIGIT / 2DIGIT ;0 to 59 byhrlist = hour / ( hour *("," hour) ) hour = 1DIGIT / 2DIGIT ;0 to 23 bywdaylist = weekdaynum / ( weekdaynum *("," weekdaynum) ) weekdaynum = [([plus] ordwk / minus ordwk)] weekday plus = "+" minus = "-" ordwk = 1DIGIT / 2DIGIT ;1 to 53 weekday = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA" ;Corresponding to SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, ;FRIDAY, SATURDAY and SUNDAY days of the week. bymodaylist = monthdaynum / ( monthdaynum *("," monthdaynum) ) monthdaynum = ([plus] ordmoday) / (minus ordmoday) ordmoday = 1DIGIT / 2DIGIT ;1 to 31 byyrdaylist = yeardaynum / ( yeardaynum *("," yeardaynum) ) yeardaynum = ([plus] ordyrday) / (minus ordyrday) ordyrday = 1DIGIT / 2DIGIT / 3DIGIT ;1 to 366 bywknolist = weeknum / ( weeknum *("," weeknum) ) weeknum = ([plus] ordwk) / (minus ordwk) bymolist = monthnum / ( monthnum *("," monthnum) ) monthnum = 1DIGIT / 2DIGIT ;1 to 12 bysplist = setposday / ( setposday *("," setposday) ) setposday = yeardaynum * * At this point we are going to restrict ourselves to parts of the RRULE specification * seen in the wild. And by "in the wild" I don't include within people's timezone * definitions. We always convert time zones to canonical names and assume the lower * level libraries can do a better job with them than we can. * * We will concentrate on: * FREQ=(YEARLY|MONTHLY|WEEKLY|DAILY) * UNTIL= * COUNT= * INTERVAL= * BYDAY= * BYMONTHDAY= * BYSETPOS= * WKST= * BYYEARDAY= * BYWEEKNO= * BYMONTH= * * * @package awl */ class RRule { /**#@+ * @access private */ /** The first instance */ var $_first; /** The current instance pointer */ var $_current; /** An array of all the dates so far */ var $_dates; /** Whether we have calculated any of the dates */ var $_started; /** Whether we have calculated all of the dates */ var $_finished; /** The rule, in all it's glory */ var $_rule; /** The rule, in all it's parts */ var $_part; /**#@-*/ /** * The constructor takes a start date and an RRULE definition. Both of these * follow the iCalendar standard. */ function RRule( $start, $rrule ) { $this->_first = new iCalDate($start); $this->_finished = false; $this->_started = false; $this->_dates = array(); $this->_current = -1; $this->_rule = preg_replace( '/\s/m', '', $rrule); if ( substr($this->_rule, 0, 6) == 'RRULE:' ) { $this->_rule = substr($this->_rule, 6); } dbg_error_log( "RRule", " new RRule: Start: %s, RRULE: %s", $start->Render(), $this->_rule ); $parts = explode(';',$this->_rule); $this->_part = array( 'INTERVAL' => 1 ); foreach( $parts AS $k => $v ) { list( $type, $value ) = explode( '=', $v, 2); // dbg_error_log( "RRule", " Parts of %s explode into %s and %s", $v, $type, $value ); $this->_part[$type] = $value; } // A little bit of validation if ( !isset($this->_part['FREQ']) ) { dbg_error_log( "ERROR", " RRULE MUST have FREQ=value (%s)", $rrule ); } if ( isset($this->_part['COUNT']) && isset($this->_part['UNTIL']) ) { dbg_error_log( "ERROR", " RRULE MUST NOT have both COUNT=value and UNTIL=value (%s)", $rrule ); } if ( isset($this->_part['COUNT']) && intval($this->_part['COUNT']) < 1 ) { dbg_error_log( "ERROR", " RRULE MUST NOT have both COUNT=value and UNTIL=value (%s)", $rrule ); } if ( !preg_match( '/(YEAR|MONTH|WEEK|DAI)LY/', $this->_part['FREQ']) ) { dbg_error_log( "ERROR", " RRULE Only FREQ=(YEARLY|MONTHLY|WEEKLY|DAILY) are supported at present (%s)", $rrule ); } if ( $this->_part['FREQ'] == "YEARLY" ) { $this->_part['INTERVAL'] *= 12; $this->_part['FREQ'] = "MONTHLY"; } } /** * Processes the array of $relative_days to $base and removes any * which are not within the scope of our rule. */ function WithinScope( $base, $relative_days ) { $ok_days = array(); $ptr = $this->_current; // dbg_error_log( "RRule", " WithinScope: Processing list of %d days relative to %s", count($relative_days), $base->Render() ); foreach( $relative_days AS $day => $v ) { $test = new iCalDate($base); $days_in_month = $test->DaysInMonth(); // dbg_error_log( "RRule", " WithinScope: Testing for day %d based on %s, with %d days in month", $day, $test->Render(), $days_in_month ); if ( $day > $days_in_month ) { $test->SetMonthDay($days_in_month); $test->AddDays(1); $day -= $days_in_month; $test->SetMonthDay($day); } else if ( $day < 1 ) { $test->SetMonthDay(1); $test->AddDays(-1); $days_in_month = $test->DaysInMonth(); $day += $days_in_month; $test->SetMonthDay($day); } else { $test->SetMonthDay($day); } // dbg_error_log( "RRule", " WithinScope: Testing if %s is within scope", count($relative_days), $test->Render() ); if ( isset($this->_part['UNTIL']) && $test->GreaterThan($this->_part['UNTIL']) ) { $this->_finished = true; return $ok_days; } // if ( $this->_current >= 0 && $test->LessThan($this->_dates[$this->_current]) ) continue; if ( !$test->LessThan($this->_first) ) { // dbg_error_log( "RRule", " WithinScope: Looks like %s is within scope", $test->Render() ); $ok_days[$day] = $test; $ptr++; } if ( isset($this->_part['COUNT']) && $ptr >= $this->_part['COUNT'] ) { $this->_finished = true; return $ok_days; } } return $ok_days; } /** * This is most of the meat of the RRULE processing, where we find the next date. * We maintain an */ function &GetNext( ) { if ( $this->_current < 0 ) { $next = new iCalDate($this->_first); $this->_current++; } else { $next = new iCalDate($this->_dates[$this->_current]); $this->_current++; /** * If we have already found some dates we may just be able to return one of those. */ if ( isset($this->_dates[$this->_current]) ) { // dbg_error_log( "RRule", " GetNext: Returning %s, (%d'th)", $this->_dates[$this->_current]->Render(), $this->_current ); return $this->_dates[$this->_current]; } else { if ( isset($this->_part['COUNT']) && $this->_current >= $this->_part['COUNT'] ) // >= since _current is 0-based and COUNT is 1-based $this->_finished = true; } } if ( $this->_finished ) { $next = null; return $next; } $days = array(); if ( isset($this->_part['WKST']) ) $next->SetWeekStart($this->_part['WKST']); if ( $this->_part['FREQ'] == "MONTHLY" ) { // dbg_error_log( "RRule", " GetNext: Calculating more dates for MONTHLY rule" ); $limit = 200; do { $limit--; do { $limit--; if ( $this->_started ) { $next->AddMonths($this->_part['INTERVAL']); } else { $this->_started = true; } } while ( isset($this->_part['BYMONTH']) && $limit > 0 && ! $next->TestByMonth($this->_part['BYMONTH']) ); if ( isset($this->_part['BYDAY']) ) { $days = $next->GetMonthByDay($this->_part['BYDAY']); } else if ( isset($this->_part['BYMONTHDAY']) ) { $days = $next->GetMonthByMonthDay($this->_part['BYMONTHDAY']); } else $days[$next->_dd] = $next->_dd; if ( isset($this->_part['BYSETPOS']) ) { $days = $next->ApplyBySetpos($this->_part['BYSETPOS'], $days); } $days = $this->WithinScope( $next, $days); } while( $limit && count($days) < 1 && ! $this->_finished ); // dbg_error_log( "RRule", " GetNext: Found %d days for MONTHLY rule", count($days) ); } else if ( $this->_part['FREQ'] == "WEEKLY" ) { // dbg_error_log( "RRule", " GetNext: Calculating more dates for WEEKLY rule" ); $limit = 200; do { $limit--; if ( $this->_started ) { $next->AddDays($this->_part['INTERVAL'] * 7); } else { $this->_started = true; } if ( isset($this->_part['BYDAY']) ) { $days = $next->GetWeekByDay($this->_part['BYDAY'], false ); } else $days[$next->_dd] = $next->_dd; if ( isset($this->_part['BYSETPOS']) ) { $days = $next->ApplyBySetpos($this->_part['BYSETPOS'], $days); } $days = $this->WithinScope( $next, $days); } while( $limit && count($days) < 1 && ! $this->_finished ); // dbg_error_log( "RRule", " GetNext: Found %d days for WEEKLY rule", count($days) ); } else if ( $this->_part['FREQ'] == "DAILY" ) { // dbg_error_log( "RRule", " GetNext: Calculating more dates for DAILY rule" ); $limit = 100; do { $limit--; if ( $this->_started ) { $next->AddDays($this->_part['INTERVAL']); } if ( isset($this->_part['BYDAY']) ) { $days = $next->GetWeekByDay($this->_part['BYDAY'], $this->_started ); } else $days[$next->_dd] = $next->_dd; if ( isset($this->_part['BYSETPOS']) ) { $days = $next->ApplyBySetpos($this->_part['BYSETPOS'], $days); } $days = $this->WithinScope( $next, $days); $this->_started = true; } while( $limit && count($days) < 1 && ! $this->_finished ); // dbg_error_log( "RRule", " GetNext: Found %d days for DAILY rule", count($days) ); } $ptr = $this->_current; foreach( $days AS $k => $v ) { $this->_dates[$ptr++] = $v; } if ( isset($this->_dates[$this->_current]) ) { // dbg_error_log( "RRule", " GetNext: Returning %s, (%d'th)", $this->_dates[$this->_current]->Render(), $this->_current ); return $this->_dates[$this->_current]; } else { // dbg_error_log( "RRule", " GetNext: Returning null date" ); $next = null; return $next; } } } davical-1.1.1/inc/Principal.php0000644000000000000000000004650411776300606013225 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ require_once('AwlCache.php'); /** * A class for things to do with a Principal * * @package davical */ class Principal { /** * Some control over our DB * @var unknown_type */ private static $db_tablename = 'dav_principal'; private static $db_mandatory_fields = array( 'username', ); public static function updateableFields() { return array( 'username', 'email', 'user_active', 'modified', 'password', 'fullname', 'email_ok', 'date_format_type', 'locale', 'type_id', 'displayname', 'default_privileges' ); } /** * We cache these so if we try and access a row by principal_id/user_no/e_mail that we've * already read we don't read it again. * @var unknown_type */ private static $byUserno = array(); private static $byId = array(); private static $byEmail = array(); /** * Columns from the database */ protected $username; protected $user_no; protected $principal_id; protected $email; protected $dav_name; public $user_active; public $created; public $modified; public $password; public $fullname; public $email_ok; public $date_format_type; public $locale; public $type_id; public $displayname; public $default_privileges; public $is_principal; public $is_calendar; public $collection_id; public $is_addressbook; public $resourcetypes; public $privileges; /** * Whether this Principal actually exists in the database yet. * @var boolean */ protected $exists; /** * @var The home URL of the principal */ protected $url; /** * @var The actual requested URL for this principal, when the request was for /principals/... or such */ protected $original_request_url; /** * Whether this was retrieved using an e-mail address * @var boolean */ protected $by_email; /** * If we're using memcached this is the namespace we'll put stuff in * @var unknown_type */ private $cacheNs; private $cacheKey; protected $collections; protected $dead_properties; protected $default_calendar; /** * Construct a new Principal object. The principal record will be retrieved from the database, or (if not found) initialised to a new record. You can test for whether the Principal exists by calling the Exists() method on the returned object. * * Depending on the supplied $type, the following behaviour will occur: * path: Will attempt to extract a username or email from the supplied path, and then do what those do. * dav_name: Expects the dav_name of a principal, exactly, like: /principal/ and will use that as for username. * user_no: Expects an integer which is the usr.user_no (deprecated) * principal_id: Expects an integer which is the principal.principal_id * email: Will try and retrieve a unique principal by using the email address. Will fail (subsequent call to Exists() will be false) if there is not a unique match. * username: Will retrieve based on strtolower($value) = lower(usr.username) * * @param string $type One of 'path', 'dav_name', 'user_no', 'principal_id', 'email' or 'username' * @param mixed $value A value appropriate to the $type requested. * @param boolean $use_cache Whether to use an available cache source (default true) * @throws Exception When provided with an invalid $type parameter. * @return Principal */ function __construct( $type, $value, $use_cache=true ) { global $c, $session; $this->exists = false; $this->by_email = false; $this->original_request_url = null; switch( $type ) { case 'path': $type = 'username'; $value = $this->usernameFromPath($value); break; case 'dav_name': $type = 'username'; $value = substr($value, 1, -1); break; } /** * There are some values we can construct on the basis of the constructor value. */ switch ( $type ) { case 'user_no': $this->user_no = $value; break; case 'principal_id': $this->principal_id = $value; break; case 'email': $this->email = $value; break; case 'username': $this->username = $value; break; default: throw new Exception('Can only retrieve a Principal by user_no,principal_id,username or email address'); } $cache = new AwlCache(); if ( $use_cache && isset($session->principal_id) ) { switch ( $type ) { case 'user_no': if ( isset(self::$byUserno[$value]) ) { $type = 'username'; $value = self::$byUserno[$value]; } break; case 'principal_id': if ( isset(self::$byId[$value]) ) { $type = 'username'; $value = self::$byId[$value]; } break; case 'email': $this->by_email = true; if ( isset(self::$byEmail[$value]) ) { $type = 'username'; $value = self::$byEmail[$value]; } break; } if ( $type == 'username' ) { $this->username = $value; $this->dav_name = '/'.$value.'/'; $this->url = ConstructURL( $this->dav_name, true ); $this->cacheNs = 'principal-/'.$value.'/'; $this->cacheKey = 'p-'.$session->principal_id; $row = $cache->get('principal-/'.$value.'/', 'p-'.$session->principal_id ); if ( $row !== false ) { self::$byId[$row->principal_id] = $row->username; self::$byUserno[$row->user_no] = $row->username; self::$byEmail[$row->email] = $row->username; $this->assignRowValues($row); $this->url = ConstructURL( $this->dav_name, true ); $this->exists = true; return $this; } } } $sql = 'SELECT *, '; if ( isset($session->principal_id) ) { $sql .= 'pprivs(:session_principal::int8,principal_id,:scan_depth::int) AS privileges '; $params = array( ':session_principal' => $session->principal_id, ':scan_depth' => $c->permission_scan_depth ); } else { $sql .= '0::BIT(24) AS privileges '; $params = array( ); } $sql .= 'FROM dav_principal WHERE '; switch ( $type ) { case 'username': $sql .= 'lower(username)=lower(text(:param))'; break; case 'user_no': $sql .= 'user_no=:param'; break; case 'principal_id': $sql .= 'principal_id=:param'; break; case 'email': $this->by_email = true; $sql .= 'lower(email)=lower(:param)'; break; } $params[':param'] = $value; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec('Principal',__LINE__,__FILE__) && $qry->rows() == 1 && $row = $qry->Fetch() ) { $this->exists = true; if ( isset($session->principal_id) ) { self::$byId[$row->principal_id] = $row->username; self::$byUserno[$row->user_no] = $row->username; self::$byEmail[$row->email] = $row->username; if ( !isset($this->cacheNs) ) { $this->cacheNs = 'principal-'.$row->dav_name; $this->cacheKey = 'p-'.$session->principal_id; } } $this->assignRowValues($row); $this->url = ConstructURL( $this->dav_name, true ); $row = $cache->set($this->cacheNs, $this->cacheKey, $row, 864000 ); return $this; } if ( $type == 'username' && $value == 'unauthenticated' ) { $this->assignGuestValues(); } } /** * This will allow protected properties to be referenced for retrieval, but not * referenced for update. * @param $property */ public function __get( $property ) { return $this->{$property}; } /** * This will allow protected properties to be examined for whether they are set * without making them writable. PHP 5.1 or later only. * @param $property */ public function __isset( $property ) { return isset($this->{$property}); } private function assignGuestValues() { $this->user_no = -1; $this->exists = false; if ( empty($this->username) ) $this->username = translate('unauthenticated'); $this->fullname = $this->displayname = translate('Unauthenticated User'); $this->email = false; $this->is_principal = true; $this->is_calendar = false; $this->principal_id = -1; $this->privileges = $this->default_privileges = 0; } private function assignRowValues( $db_row ) { foreach( $db_row AS $k => $v ) { $this->{$k} = $v; } } public function Exists() { return $this->exists; } public function byEmail() { return $this->by_email; } /** * Work out the username, based on elements of the path. * @param string $path The path to be used. * @param array $options The request options, controlling whether e-mail paths are allowed. */ private function usernameFromPath( $path ) { global $session, $c; if ( $path == '/' || $path == '' ) { dbg_error_log( 'Principal', 'No useful path split possible' ); return $session->username; } $path_split = explode('/', $path ); @dbg_error_log( 'Principal', 'Path split into at least /// %s /// %s /// %s', $path_split[1], $path_split[2], $path_split[3] ); $username = $path_split[1]; if ( $path_split[1] == 'principals' && isset($path_split[3]) ) { $username = $path_split[3]; $this->original_request_url = $path; } if ( substr($username,0,1) == '~' ) { $username = substr($username,1); $this->original_request_url = $path; } if ( isset($c->allow_by_email) && $c->allow_by_email && preg_match( '#^(\S+@\S+[.]\S+)$#', $username) ) { // This might seem inefficient, but we cache the result, so the second time will not read from the DB $p = new Principal('email',$username); $username = $p->username; $this->by_email = true; } return $username; } /** * Return the username * @return string The username */ function username() { return (isset($this->username)?$this->username:false); } /** * Set the username - but only if the record does not yet exist! * @return string The username */ function setUsername($new_username) { if ( $this->exists && isset($this->username) ) return false; $this->username = $new_username; return $this->username; } /** * Return the user_no * @return int The user_no */ function user_no() { return (isset($this->user_no)?$this->user_no:false); } /** * Return the principal_id * @return string The principal_id */ function principal_id() { return (isset($this->principal_id)?$this->principal_id:false); } /** * Return the email * @return string The email */ function email() { return (isset($this->email)?$this->email:false); } /** * Return the partial path representing this principal * @return string The dav_name */ function dav_name() { if ( !isset($this->dav_name) ) { if ( !isset($this->username) ) { throw new Exception('Can\'t calculate dav_name for unknown username'); } $this->dav_name = '/'.$this->username.'/'; } return $this->dav_name; } /** * Ensure the principal's dead properties are loaded */ protected function FetchDeadProperties() { if ( isset($this->dead_properties) ) return; $this->dead_properties = array(); $qry = new AwlQuery('SELECT property_name, property_value FROM property WHERE dav_name= :dav_name', array(':dav_name' => $this->dav_name()) ); if ( $qry->Exec('Principal') ) { while ( $property = $qry->Fetch() ) { $this->dead_properties[$property->property_name] = DAVResource::BuildDeadPropertyXML($property->property_name,$property->property_value); } } } /** * Fetch the list of collections for this principal * @return string The internal dav_name for the home_calendar, or null if there is none */ protected function FetchCollections() { if ( isset($this->collections) ) return; $this->collections = array(); $qry = new AwlQuery('SELECT * FROM collection WHERE user_no= :user_no', array(':user_no' => $this->user_no()) ); if ( $qry->Exec('Principal') ) { while ( $collection = $qry->Fetch() ) { $this->collections[$collection->dav_name] = $collection; } } } /** * Return the default calendar for this principal * @return string The internal dav_name for the home_calendar, or false if there is none */ function default_calendar() { global $c; if ( !isset($this->default_calendar) ) { $this->default_calendar = false; if ( !isset($this->dead_properties) ) $this->FetchDeadProperties(); if ( isset($this->dead_properties['urn:ietf:params:xml:ns:caldav:schedule-default-calendar-URL']) ) { $this->default_calendar = $this->dead_properties['urn:ietf:params:xml:ns:caldav:schedule-default-calendar-URL']; } else { if ( !isset($this->collections) ) $this->FetchCollections(); $dav_name = $this->dav_name().$c->home_calendar_name.'/'; if ( isset($this->collections[$dav_name]) && ($this->collections[$dav_name]->is_calendar == 't') ) { $this->default_calendar = $dav_name; } else { $dav_name = $this->dav_name().'home/'; if ( isset($this->collections[$dav_name]) && ($this->collections[$dav_name]->is_calendar == 't') ) { $this->default_calendar = $dav_name; } else { foreach( $this->collections AS $dav_name => $collection ) { if ( $collection->is_calendar == 't' ) { $this->default_calendar = $dav_name; } } } } } } return $this->default_calendar; } /** * Return the URL for this principal * @param string $type The type of URL we want (the principal, by default) * @param boolean $internal Whether an internal reference is requested * @return string The principal-URL */ public function url($type = 'principal', $internal=false ) { global $c; if ( $internal ) $result = $this->dav_name(); else { if ( isset($this->original_request_url) && $type == 'principal' ) $result = $this->original_request_url; else $result = $this->url; } switch( $type ) { case 'principal': break; case 'schedule-default-calendar': $result = $this->default_calendar(); break; case 'schedule-inbox': $result .= '.in/'; break; case 'schedule-outbox': $result .= '.out/'; break; case 'dropbox': $result .= '.drop/'; break; case 'notifications': $result .= '.notify/'; break; default: fatal('Unknown internal URL type "'.$type.'"'); } return ConstructURL(DeconstructURL($result)); } public function internal_url($type = 'principal' ) { return $this->url($type,true); } public function unCache() { if ( !isset($this->cacheNs) ) return; $cache = new AwlCache(); $cache->delete($this->cacheNs, null ); } private function Write( $field_values, $inserting=true ) { global $c; if ( is_array($field_values) ) $field_values = (object) $field_values; if ( !isset($field_values->{'user_active'}) ) { if ( isset($field_values->{'active'}) ) $field_values->{'user_active'} = $field_values->{'active'}; else if ( $inserting ) $field_values->{'user_active'} = true; } if ( !isset($field_values->{'modified'}) && isset($field_values->{'updated'}) ) $field_values->{'modified'} = $field_values->{'updated'}; if ( !isset($field_values->{'type_id'}) && $inserting ) $field_values->{'type_id'} = 1; // Default to 'person' if ( !isset($field_values->{'default_privileges'}) && $inserting ) $field_values->{'default_privileges'} = sprintf('%024s',decbin(privilege_to_bits($c->default_privileges))); $sql = ''; if ( $inserting ) { $insert_fields = array(); $param_names = array(); } else { $update_list = array(); } $sql_params = array(); foreach( self::updateableFields() AS $k ) { if ( !isset($field_values->{$k}) && !isset($this->{$k}) ) continue; $param_name = ':'.$k; $sql_params[$param_name] = (isset($field_values->{$k}) ? $field_values->{$k} : $this->{$k}); if ( $k == 'default_privileges' ) { $sql_params[$param_name] = sprintf('%024s',$sql_params[$param_name]); $param_name = 'cast('.$param_name.' as text)::BIT(24)'; } else if ( $k == 'modified' && isset($field_values->{$k}) && preg_match('{^([23]\d\d\d[01]\d[0123]\d)T?([012]\d[0-5]\d[0-5]\d)$}', $field_values->{$k}, $matches) ) { $sql_params[$param_name] = $matches[1] . 'T' . $matches[2]; } if ( $inserting ) { $param_names[] = $param_name; $insert_fields[] = $k; } else { $update_list[] = $k.'='.$param_name; } } if ( $inserting && isset(self::$db_mandatory_fields) ) { foreach( self::$db_mandatory_fields AS $k ) { if ( !isset($sql_params[':'.$k]) ) { throw new Exception( get_class($this).'::Create: Mandatory field "'.$k.'" is not set.'); } } if ( isset($this->user_no) ) { $param_names[] = ':user_no'; $insert_fields[] = 'user_no'; $sql_params[':user_no'] = $this->user_no; } if ( isset($this->created) ) { $param_names[] = ':created'; $insert_fields[] = 'created'; $sql_params[':created'] = $this->created; } $sql = 'INSERT INTO '.self::$db_tablename.' ('.implode(',',$insert_fields).') VALUES('.implode(',',$param_names).')'; } else { $sql = 'UPDATE '.self::$db_tablename.' SET '.implode(',',$update_list); $sql .= ' WHERE principal_id=:principal_id'; $sql_params[':principal_id'] = $this->principal_id; } $qry = new AwlQuery($sql, $sql_params); if ( $qry->Exec('Principal',__FILE__,__LINE__) ) { $this->unCache(); $new_principal = new Principal('username', $sql_params[':username']); foreach( $new_principal AS $k => $v ) { $this->{$k} = $v; } } } public function Create( $field_values ) { $this->Write($field_values, true); } public function Update( $field_values ) { if ( !$this->Exists() ) { throw new Exception( get_class($this).'::Create: Attempting to update non-existent record.'); } $this->Write($field_values, false); } static public function cacheFlush( $where, $whereparams=array() ) { $cache = new AwlCache(); if ( !$cache->isActive() ) return; $qry = new AwlQuery('SELECT dav_name FROM dav_principal WHERE '.$where, $whereparams ); if ( $qry->Exec('Principal',__FILE__,__LINE__) ) { while( $row = $qry->Fetch() ) { $cache->delete('principal-'.$row->dav_name, null); } } } static public function cacheDelete( $type, $value ) { $cache = new AwlCache(); if ( !$cache->isActive() ) return; if ( $type == 'username' ) { $value = '/'.$value.'/'; } $cache->delete('principal-'.$value, null); } } davical-1.1.1/inc/DAVTicket.php0000644000000000000000000000706711431103376013054 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once('AwlQuery.php'); /** * A class for things to do with a DAV Ticket * * @package davical */ class DAVTicket { /** * @var The ID of the ticket */ private $ticket_id; /** * @var dav_name */ private $dav_name; /** * @var The collection_id of/containing the ticketed resource */ private $target_collection_id; /** * @var The resource_id of the ticketed resource, if it is not a collection */ private $target_resource_id; /** * @var The expiry of the ticket */ private $expiry; /** * @var The ID of the principal who owns this ticket */ private $dav_owner_id; /** * @var A bit mask representing the privileges provided by this ticket */ private $privileges; /** * @var A bit mask representing the privileges granted to the ticket owner to the collection (or container of this) resource. */ private $grantor_collection_privileges; /** * Constructor * @param string $ticket_id */ function __construct( $ticket_id ) { global $c; $this->dav_name = null; $this->target_collection_id = null; $this->target_resource_id = null; $this->expiry = null; $this->expired = true; $this->dav_owner_id = null; $this->ticket_id = $ticket_id; $this->privileges = 0; $this->grantor_collection_privileges = 0; $qry = new AwlQuery( 'SELECT access_ticket.*, collection.dav_name, (access_ticket.expires < current_timestamp) AS expired, path_privs(access_ticket.dav_owner_id,collection.dav_name,:scan_depth) AS grantor_collection_privileges FROM access_ticket JOIN collection ON (target_collection_id = collection_id) WHERE ticket_id = :ticket_id::text', array(':ticket_id' => $ticket_id, ':scan_depth' => $c->permission_scan_depth) ); if ( $qry->Exec('DAVTicket',__LINE__,__FILE__) && $qry->rows() == 1 && $t = $qry->Fetch() ) { if ( ! $t->expired ) { foreach( $t AS $k => $v ) { $this->{$k} = $v; } $this->expired = false; $this->privileges = bindec($this->privileges); $this->grantor_collection_privileges = bindec($this->grantor_collection_privileges); dbg_error_log( 'DAVTicket', 'Found a current ticket for "%s"', implode(', ',bits_to_privilege($this->privileges())) ); } else { dbg_error_log( 'DAVTicket', 'Found an expired ticket: %s - %s', $ticket_id, $t->expires ); } } if ( isset($this->target_resource_id) ) { $qry = new AwlQuery( 'SELECT dav_name FROM caldav_data WHERE dav_id = :dav_id', array(':dav_id' => $this->target_resource_id ) ); if ( $qry->Exec('DAVTicket',__LINE__,__FILE__) && $qry->rows() == 1 && $r = $qry->Fetch() ) { $this->dav_name = $r->dav_name; } } } function dav_name() { return $this->dav_name; } function id() { return $this->ticket_id; } function privileges() { return ($this->privileges & $this->grantor_collection_privileges); } function MatchesPath( $test_path ) { $length = strlen($this->dav_name); return (substr($test_path, 0, $length) == $this->dav_name); } function MatchesResource( $test_resource_id ) { return ($test_resource_id == $this->target_collection_id || $test_resource_id == $this->target_resource_id); } } davical-1.1.1/inc/AtomFeed.php0000644000000000000000000001770111633117640012761 0ustar * */ class AtomXHTMLContent /* extends XMLElement */ { private $content_string; function __construct($xhtml) { $this->content_string = $xhtml; } function Render( $ignore1, $ignore2, $ignore3 ) { return $this->content_string . "\n"; } } class AtomEntry { /** <![CDATA[Woohoo! Time to Par-tay! (1/1)]]> 2008-10-25T11:07:49+13:00 2010-12-27T06:49:16+13:00 http://mycaldav/feed.php/user1/home/MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74.ics#UID:MICROPARTY-77C6-4FB7-BDD3-6882E2F1BE74 Time: 2008-11-21 16:00:00Description:Have a microparty. All the best parties are monthly! */ private $id; private $title; private $updated; private $nodes; function __construct( $id, $title, $published, $updated ) { $this->nodes = array( 'id', 'title', 'updated' ); // placeholders } public function setId( $new_value ) { $this->id = new XMLElement('id', rtrim($new_value,"\r\n")); return $this->id; } public function setTitle( $new_value, $type = 'text' ) { $this->title = new XMLElement('title', $new_value, array( 'type' => $type )); return $this->title; } public static function setDate( $tagname, $epoch ) { // e.g. 2010-12-26T17:49:16+13:00 return new XMLElement($tagname, date('Y-m-d\TH:i:sP',$epoch)); } public function setDateModified( $epoch ) { $this->updated = self::setDate('updated', $epoch); return $this->updated; } public function setDateCreated( $epoch ) { $node = self::setDate('published', $epoch); $this->nodes[] = $node; return $node; } public function setLink( $new_value, $type="text/calendar", $rel='alternate' ) { return $this->addNode('link', $new_value, array( 'rel' => $rel, 'type' => $type ) ); } public function addAuthor( $new_value ) { if ( is_array($new_value) && isset($new_value['name']) ) { $author = $this->addNode('author' ); foreach( $new_value AS $k => $v ) { $author->NewElement($k, $v); } return $author; } throw new Exception("AtomFeed::addAuthor(\$new_value) the \$new_value MUST be an array with at least a 'name' element. RFC4287-3.2"); } public function addCategory( $new_value ) { if ( is_array($new_value) && isset($new_value['term']) ) { $category = $this->addNode('category', null, $new_value ); return $category; } throw new Exception("AtomFeed::addCategory(\$new_value) the \$new_value MUST be an array with at least a 'term' element, and potentially a 'scheme' and a 'label' element. RFC4287-4.2.2"); } public function setDescription( $new_value, $type = 'text' ) { return $this->addNode('summary', $new_value, array( 'type' => $type ) ); } public function setContent( $new_value, $type = 'xhtml' ) { $content = $this->addNode('content', null, array( 'type' => $type ) ); if ( $type == 'xhtml' ) { $content->NewElement('div', array( new AtomXHTMLContent($new_value) ), array('xmlns' => XHTML_XMLNS)); } else { $content->SetContent($new_value); } return $content; } public function addNode( $in_tag, $content=false, $attributes=false, $xmlns=null ) { $node = new XMLElement($in_tag,$content,$attributes,$xmlns); if ( !isset($node) ) return null; $this->nodes[] = $node; return $node; } public function getXML() { $this->nodes[0] = $this->id; $this->nodes[1] = $this->title; $this->nodes[2] = $this->updated; return $this->nodes; } } class AtomFeed extends XMLDocument { private $id; private $title; private $updated; private $nodes; public function __construct() { global $c; parent::__construct( array( ATOM_XMLNS => null, XHTML_XMLNS => 'xhtml' ) ); $this->title = 'DAViCal Atom Feed'; $this->nodes = array( 'id', 'title', 'updated', // placeholders new XMLElement('generator', 'DAViCal', array('uri' => 'http://www.davical.org/', 'version' => $c->version_string ) ) ); } /* http://mycaldav/feed.php/user1/home.ics CalDAV Feed: User 1's Calendaranza 2010-12-26T17:49:16+13:00 Zend_Feed_Writer User 1 user1@example.net http://mycaldav/feed.php/caldav.php/user1/ */ public function setId( $new_value ) { $this->id = $this->NewXMLElement('id', $new_value); return $this->id; } public function setTitle( $new_value, $type = 'text' ) { $this->title = $this->NewXMLElement('title', $new_value, array( 'type' => $type )); return $this->title; } public function setDateModified( $epoch ) { $this->updated = AtomEntry::setDate('updated', $epoch); return $this->updated; } public function setLink( $new_value, $type="text/calendar", $rel='alternate' ) { return $this->addNode('link', $new_value, array( 'rel' => $rel, 'type' => $type ) ); } /** * Sets the feed link (rel=self), ignoring the parameter which is for * compatibility with the Zend library API, although we use this for * the Id, whereas they use the first link that is set. * @param uri $new_value The link target * @return XMLElement the node that was added. */ public function setFeedLink( $new_value, $type = null ) { $this->setId($new_value); return $this->setLink($new_value , 'application/atom+xml', 'self' ); } public function addAuthor( $new_value ) { if ( is_array($new_value) && isset($new_value['name']) ) { $author = $this->addNode('author' ); foreach( $new_value AS $k => $v ) { $this->NSElement($author, $k, $v); } return $author; } throw new Exception("AtomFeed::addAuthor(\$new_value) the \$new_value MUST be an array with at leas a 'name' element. RFC4287-3.2"); } public function setDescription( $new_value, $type = 'text' ) { return $this->addNode('subtitle', $new_value, array( 'type' => $type ) ); } public function addNode( $in_tag, $content=false, $attributes=false, $xmlns=null ) { $node = $this->NewXMLElement($in_tag,$content,$attributes,$xmlns); if ( !isset($node) ) return null; $this->nodes[] = $node; return $node; } public function addEntry( $new_entry ) { if ( !isset($new_entry) ) return; $this->nodes[] = new XMLElement('entry', $new_entry->getXML() ); } public function createEntry( $id=null, $title=null, $published=null, $updated=null ) { return new AtomEntry($id,$title,$published,$updated); } public function export( $format='atom' ) { if ( $format != 'atom' ) throw new Exception("AtomFeed class only supports creation of Atom 1.0 format feeds."); $this->nodes[0] = $this->id; $this->nodes[1] = $this->title; $this->nodes[2] = $this->updated; return $this->Render('feed', $this->nodes ); } } davical-1.1.1/inc/schedule-functions.php0000644000000000000000000003134611767336625015116 0ustar * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later version */ require_once('vCalendar.php'); require_once('WritableCollection.php'); require_once('RRule-v2.php'); /** * Entry point for scheduling on DELETE, for which there are thee outcomes: * - We don't do scheduling (disabled, no organizer, ...) * - We are an ATTENDEE declining the meeting. * - We are the ORGANIZER canceling the meeting. * * @param DAVResource $deleted_resource The resource which has already been deleted */ function do_scheduling_for_delete(DAVResource $deleted_resource ) { // By the time we arrive here the resource *has* actually been deleted from disk // we can only fail to (de-)schedule the activity... global $request, $c; if ( !isset($request) || (isset($c->enable_auto_schedule) && !$c->enable_auto_schedule) ) return true; if ( $deleted_resource->IsInSchedulingCollection() ) return true; $caldav_data = $deleted_resource->GetProperty('dav-data'); if ( empty($caldav_data) ) return true; $vcal = new vCalendar($caldav_data); $organizer = $vcal->GetOrganizer(); if ( $organizer === false || empty($organizer) ) { dbg_error_log( 'schedule', 'Event has no organizer - no scheduling required.' ); return true; } if ( $vcal->GetScheduleAgent() != 'SERVER' ) { dbg_error_log( 'schedule', 'SCHEDULE-AGENT=%s - no scheduling required.', $vcal->GetScheduleAgent() ); return true; } $organizer_email = preg_replace( '/^mailto:/i', '', $organizer->Value() ); if ( $request->principal->email() == $organizer_email ) { return doItipOrganizerCancel( $vcal ); } else { if ( isset($_SERVER['HTTP_SCHEDULE_REPLY']) && $_SERVER['HTTP_SCHEDULE_REPLY'] == 'F') { dbg_error_log( 'schedule', 'Schedule-Reply header set to "F" - no scheduling required.' ); return true; } return doItipAttendeeReply( $vcal, 'DECLINED', $request->principal->email()); } } /** * Do the scheduling adjustments for a REPLY when an ATTENDEE updates their status. * @param vCalendar $vcal The resource that the ATTENDEE is writing to their calendar * @param string $organizer The property which is the event ORGANIZER. */ //function do_scheduling_reply( vCalendar $vcal, vProperty $organizer ) { function doItipAttendeeReply( vCalendar $resource, $partstat ) { global $request; $organizer = $resource->GetOrganizer(); $organizer_email = preg_replace( '/^mailto:/i', '', $organizer->Value() ); $organizer_principal = new Principal('email',$organizer_email ); if ( !$organizer_principal->Exists() ) { dbg_error_log( 'schedule', 'Unknown ORGANIZER "%s" - unable to notify.', $organizer->Value() ); return true; } $sql = 'SELECT caldav_data.dav_name, caldav_data.caldav_data FROM caldav_data JOIN calendar_item USING(dav_id) '; $sql .= 'WHERE caldav_data.collection_id IN (SELECT collection_id FROM collection WHERE is_calendar AND user_no =?) '; $sql .= 'AND uid=? LIMIT 1'; $uids = $resource->GetPropertiesByPath('/VCALENDAR/*/UID'); if ( count($uids) == 0 ) { dbg_error_log( 'schedule', 'No UID in VCALENDAR - giving up on REPLY.' ); return true; } $uid = $uids[0]->Value(); $qry = new AwlQuery($sql, $organizer_principal->user_no(), $uid); if ( !$qry->Exec('schedule',__LINE__,__FILE__) || $qry->rows() < 1 ) { dbg_error_log( 'schedule', 'Could not find original event from organizer - giving up on REPLY.' ); return true; } $row = $qry->Fetch(); $collection_path = preg_replace('{/[^/]+$}', '/', $row->dav_name ); $segment_name = str_replace($collection_path, '', $row->dav_name ); $vcal = new vCalendar($row->caldav_data); $attendees = $vcal->GetAttendees(); foreach( $attendees AS $v ) { $email = preg_replace( '/^mailto:/i', '', $v->Value() ); if ( $email == $request->principal->email() ) { $attendee = $v; break; } } if ( empty($attendee) ) { dbg_error_log( 'schedule', 'Could not find ATTENDEE in VEVENT - giving up on REPLY.' ); return true; } $attendee->SetParameterValue('PARTSTAT', $partstat); $attendee->SetParameterValue('SCHEDULE-STATUS', '2.0'); $vcal->UpdateAttendeeStatus($request->principal->email(), clone($attendee) ); $organizer_calendar = new WritableCollection(array('path' => $collection_path)); $organizer_inbox = new WritableCollection(array('path' => $organizer_principal->internal_url('schedule-inbox'))); $schedule_reply = GetItip(new vCalendar($row->caldav_data),'REPLY',$attendee->Value()); $schedule_request = GetItip(new vCalendar($row->caldav_data),'REQUEST',null); dbg_error_log( 'schedule', 'Writing ATTENDEE scheduling REPLY from %s to %s', $request->principal->email(), $organizer_principal->email() ); $response = '3.7'; // Organizer was not found on server. if ( !$organizer_calendar->Exists() ) { dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"', $organizer_calendar->dav_name(), $schedule_target->username()); $response = '5.2'; // No scheduling support for user } else { if ( ! $organizer_inbox->HavePrivilegeTo('schedule-deliver-reply') ) { $response = '3.8'; // No authority to deliver replies to organizer. } $response = '1.2'; // Scheduling reply delivered successfully if ( $organizer_calendar->WriteCalendarMember($vcal, false, false, $segment_name) === false ) { dbg_error_log('ERROR','Could not write updated calendar member to %s', $attendee_calendar->dav_name() ); trace_bug('Failed to write scheduling resource.'); } $organizer_inbox->WriteCalendarMember($schedule_reply, false, false, $request->principal->username().$segment_name); } dbg_error_log( 'schedule', 'Status for organizer <%s> set to "%s"', $organizer->Value(), $response ); $organizer->SetParameterValue( 'SCHEDULE-STATUS', $response ); $resource->UpdateOrganizerStatus($organizer); // Which was passed in by reference, and we're updating it here. // Now we loop through the *other* ATTENDEEs, updating them on the status of the ATTENDEE DECLINE/ACCEPT foreach( $attendees AS $attendee ) { $email = preg_replace( '/^mailto:/i', '', $attendee->Value() ); if ( $email == $request->principal->email() || $email == $organizer_principal->email() ) continue; $agent = $attendee->GetParameterValue('SCHEDULE-AGENT'); if ( !empty($agent) && $agent != 'SERVER' ) continue; $schedule_target = new Principal('email',$email); if ( $schedule_target->Exists() ) { $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); if ( !$attendee_calendar->Exists() ) { dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"', $attendee_calendar->dav_name(), $schedule_target->username()); continue; } else { $attendee_inbox = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-inbox'))); if ( ! $attendee_inbox->HavePrivilegeTo('schedule-deliver-invite') ) continue; if ( $attendee_calendar->WriteCalendarMember($vcal, false) === false ) { dbg_error_log('ERROR','Could not write updated calendar member to %s', $attendee_calendar->dav_name()); trace_bug('Failed to write scheduling resource.'); } $attendee_inbox->WriteCalendarMember($schedule_request, false); } } } return true; } function GetItip( VCalendar $vcal, $method, $attendee_value ) { $iTIP = $vcal->GetItip($method, $attendee_value ); $iTIP->AddProperty('REQUEST-STATUS','2.0'); $components = $iTIP->GetComponents(); foreach( $components AS $comp ) { $properties = array(); foreach( $comp->GetProperties() AS $k=> $property ) { switch( $property->Name() ) { case 'DTSTART': case 'DTEND': case 'DUE': $when = new RepeatRuleDateTime($property); $properties[] = new vProperty( $property->Name() . ":" . $when->UTC() ); break; default: $properties[] = $property; } } $comp->SetProperties($properties); } return $iTIP; } /** * Handles sending the iTIP CANCEL messages to each ATTENDEE by the ORGANIZER. * @param vCalendar $vcal What's being cancelled. */ function doItipOrganizerCancel( vCalendar $vcal ) { global $request; $attendees = $vcal->GetAttendees(); if ( count($attendees) == 0 && count($old_attendees) == 0 ) { dbg_error_log( 'schedule', 'Event has no attendees - no scheduling required.', count($attendees) ); return true; } dbg_error_log( 'schedule', 'Writing scheduling resources for %d attendees', count($attendees) ); $scheduling_actions = false; $iTIP = GetItip($vcal, 'CANCEL', null); foreach( $attendees AS $attendee ) { $email = preg_replace( '/^mailto:/i', '', $attendee->Value() ); if ( $email == $request->principal->email() ) { dbg_error_log( 'schedule', "not delivering to owner '%s'", $request->principal->email() ); continue; } $agent = $attendee->GetParameterValue('SCHEDULE-AGENT'); if ( $agent && $agent != 'SERVER' ) { dbg_error_log( 'schedule', "not delivering to %s, schedule agent set to value other than server", $email ); continue; } $schedule_target = new Principal('email',$email); if ( !$schedule_target->Exists() ) { $response = '3.7'; } else { $attendee_inbox = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-inbox'))); if ( ! $attendee_inbox->HavePrivilegeTo('schedule-deliver-invite') ) { dbg_error_log( 'schedule', "No authority to deliver invite to %s", $schedule_target->internal_url('schedule-inbox') ); $response = '3.8'; } else { $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); $response = processItipCancel( $vcal, $attendee, $attendee_calendar, $schedule_target ); deliverItipCancel( $iTIP, $attendee, $attendee_inbox ); } } dbg_error_log( 'schedule', 'Status for attendee <%s> set to "%s"', $attendee->Value(), $response ); $attendee->SetParameterValue( 'SCHEDULE-STATUS', $response ); $scheduling_actions = true; } return true; } /** * Does the actual processing of the iTIP CANCEL message on behalf of an ATTENDEE, * which generally means writing it into the ATTENDEE's default calendar. * * @param vCalendar $vcal The message. * @param vProperty $attendee * @param WritableCollection $attendee_calendar */ function processItipCancel( vCalendar $vcal, vProperty $attendee, WritableCollection $attendee_calendar, Principal $attendee_principal ) { dbg_error_log( 'schedule', 'Processing iTIP CANCEL to %s', $attendee->Value()); if ( !$attendee_calendar->Exists() ) { dbg_error_log('ERROR', 'Default calendar at "%s" does not exist for attendee "%s"', $attendee_calendar->dav_name(), $attendee->Value()); return '5.2'; // No scheduling support for user } $sql = 'SELECT caldav_data.dav_name FROM caldav_data JOIN calendar_item USING(dav_id) '; $sql .= 'WHERE caldav_data.collection_id IN (SELECT collection_id FROM collection WHERE is_calendar AND user_no =?) '; $sql .= 'AND uid=? LIMIT 1'; $uids = $vcal->GetPropertiesByPath('/VCALENDAR/*/UID'); if ( count($uids) == 0 ) { dbg_error_log( 'schedule', 'No UID in VCALENDAR - giving up on CANCEL processing.' ); return '3.8'; } $uid = $uids[0]->Value(); $qry = new AwlQuery($sql, $attendee_principal->user_no(), $uid); if ( !$qry->Exec('schedule',__LINE__,__FILE__) || $qry->rows() < 1 ) { dbg_error_log( 'schedule', 'Could not find ATTENDEE copy of original event - not trying to DELETE it!' ); return '1.2'; } $row = $qry->Fetch(); if ( $attendee_calendar->actualDeleteCalendarMember($row->dav_name) === false ) { dbg_error_log('ERROR', 'Could not delete calendar member %s for %s', $row->dav_name(), $attendee->Value()); trace_bug('Failed to write scheduling resource.'); return '5.2'; } return '1.2'; // Scheduling invitation delivered successfully } /** * Delivers the iTIP CANCEL message to an ATTENDEE's Scheduling Inbox Collection. * * This is pretty simple at present, but could be extended in the future to do the sending * of e-mail to a remote attendee. * * @param vCalendar $iTIP * @param vProperty $attendee * @param WritableCollection $attendee_inbox */ function deliverItipCancel( vCalendar $iTIP, vProperty $attendee, WritableCollection $attendee_inbox ) { $attendee_inbox->WriteCalendarMember($iTIP, false); } davical-1.1.1/inc/freebusy-functions.php0000644000000000000000000001033511651333203015116 0ustar Privileges(); if ( !isset($range_start) || !isset($range_end) ) { $request->DoResponse( 400, 'All valid freebusy requests MUST contain a time-range filter' ); } $params = array( ':path_match' => $path_match, ':start' => $range_start->UTC(), ':end' => $range_end->UTC() ); $where = ' WHERE caldav_data.dav_name ~ :path_match '; $where .= 'AND rrule_event_overlaps( dtstart, dtend, rrule, :start, :end) '; $where .= "AND caldav_data.caldav_type IN ( 'VEVENT', 'VTODO' ) "; $where .= "AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) "; $where .= "AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) "; $where .= "AND collection.is_calendar AND collection.schedule_transp = 'opaque' "; if ( $bin_privs != privilege_to_bits('all') ) { $where .= "AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) "; } // $debugging = true; $fbtimes = array(); $sql = 'SELECT caldav_data.caldav_data, calendar_item.rrule, calendar_item.transp, calendar_item.status, '; $sql .= "to_char(calendar_item.dtstart at time zone 'GMT',".iCalendar::SqlUTCFormat().') AS start, '; $sql .= "to_char(calendar_item.dtend at time zone 'GMT',".iCalendar::SqlUTCFormat().') AS finish, '; $sql .= "calendar_item.class, calendar_item.dav_id "; $sql .= 'FROM caldav_data INNER JOIN calendar_item USING(dav_id,user_no,dav_name,collection_id) '; $sql .= 'INNER JOIN collection USING(collection_id)'; $sql .= $where; if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) $sql .= ' ORDER BY dav_id'; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec("REPORT",__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $calendar_object = $qry->Fetch() ) { $extra = ''; if ( $calendar_object->status == 'TENTATIVE' ) { $extra = ';BUSY-TENTATIVE'; } else if ( isset($c->_workaround_client_freebusy_bug) && $c->_workaround_client_freebusy_bug ) { $extra = ';BUSY'; } // else if ( $debugging ) { // $extra = ';'.$calendar_object->dav_id; // } dbg_error_log( "REPORT", " FreeBusy: Not transparent, tentative or cancelled: %s, %s, %s", $calendar_object->start, $calendar_object->finish, $calendar_object->class ); $ics = new vComponent($calendar_object->caldav_data); $expanded = expand_event_instances($ics, $range_start, $range_end); $expansion = $expanded->GetComponents( array('VEVENT'=>true,'VTODO'=>true,'VJOURNAL'=>true) ); foreach( $expansion AS $k => $v ) { // echo "=====================================================\n"; // printf( "Type: %s\n", $v->GetType()); // print_r($v); // echo "-----------------------------------------------------\n"; $start_date = $v->GetProperty('DTSTART'); if ( !isset($start_date) ) continue; $start_date = new RepeatRuleDateTime($start_date); $duration = $v->GetProperty('DURATION'); $duration = ( !isset($duration) ? 'P1D' : $duration->Value()); $end_date = clone($start_date); $end_date->modify( $duration ); if ( $end_date == $start_date || $end_date < $range_start || $start_date > $range_end ) continue; $thisfb = $start_date->UTC() .'/'. $end_date->UTC() . $extra; array_push( $fbtimes, $thisfb ); } } } $freebusy = new iCalComponent(); $freebusy->SetType('VFREEBUSY'); $freebusy->AddProperty('DTSTAMP', date('Ymd\THis\Z')); $freebusy->AddProperty('DTSTART', $range_start->UTC()); $freebusy->AddProperty('DTEND', $range_end->UTC()); sort( $fbtimes ); foreach( $fbtimes AS $k => $v ) { $text = explode(';',$v,2); $freebusy->AddProperty( 'FREEBUSY', $text[0], (isset($text[1]) ? array('FBTYPE' => $text[1]) : null) ); } return $freebusy; } davical-1.1.1/inc/caldav-REPORT-multiget.php0000644000000000000000000001113011776146462015372 0ustar GetElements('urn:ietf:params:xml:ns:caldav:expand'); if ( isset($expansion[0]) ) { $need_expansion = true; $expand_range_start = $expansion[0]->GetAttribute('start'); $expand_range_end = $expansion[0]->GetAttribute('end'); if ( isset($expand_range_start) ) $expand_range_start = new RepeatRuleDateTime($expand_range_start); if ( isset($expand_range_end) ) $expand_range_end = new RepeatRuleDateTime($expand_range_end); } } /** * Build the array of properties to include in the report output */ $proptype = $qry_content[0]->GetNSTag(); $properties = array(); switch( $proptype ) { case 'DAV::prop': $qry_props = $xmltree->GetPath('/*/'.$proptype.'/*'); foreach( $qry_content[0]->GetElements() AS $k => $v ) { $properties[$v->GetNSTag()] = 1; if ( $v->GetNSTag() == 'urn:ietf:params:xml:ns:caldav:calendar-data' ) check_for_expansion($v); } break; case 'DAV::allprop': $properties['DAV::allprop'] = 1; if ( $qry_content[1]->GetNSTag() == 'DAV::include' ) { foreach( $qry_content[1]->GetElements() AS $k => $v ) { $include_properties[] = $v->GetNSTag(); /** $include_properties is referenced in DAVResource where allprop is expanded */ if ( $v->GetNSTag() == 'urn:ietf:params:xml:ns:caldav:calendar-data' ) check_for_expansion($v); } } break; default: $properties[$proptype] = 1; } if ( empty($properties) ) $properties['DAV::allprop'] = 1; $collection = new DAVResource($request->path); $bound_from = $collection->bound_from(); /** * Build the href list for the IN ( href, href, href, ... ) clause. */ $mg_hrefs = $xmltree->GetPath('/*/DAV::href'); $href_in = ''; $params = array(); foreach( $mg_hrefs AS $k => $v ) { /** * We need this to work if they specified a relative *or* a full path, so we strip off * anything up to the matching request->path (which will include any http...) and then * put the $bound_from prefix back on. */ $rawurl = rawurldecode($v->GetContent()); $path_pos = strpos($rawurl,$request->path); if ( $path_pos === false ) { $href = $bound_from . $rawurl; } else { $href = $bound_from . substr( $rawurl, $path_pos + strlen($request->path)); } @dbg_error_log("REPORT", 'Reporting on href "%s"', $href ); $href_in .= ($href_in == '' ? '' : ', '); $href_in .= ':href'.$k; $params[':href'.$k] = $href; } $where = " WHERE caldav_data.collection_id = " . $collection->resource_id(); $where .= " AND caldav_data.dav_name IN ( $href_in ) "; if ( $mode == 'caldav' ) { if ( $collection->Privileges() != privilege_to_bits('DAV::all') ) { $where .= " AND (calendar_item.class != 'PRIVATE' OR calendar_item.class IS NULL) "; } if ( isset($c->hide_TODO) && $c->hide_TODO && ! $collection->HavePrivilegeTo('all') ) { $where .= " AND caldav_data.caldav_type NOT IN ('VTODO') "; } } $sql = 'SELECT calendar_item.*, addressbook_resource.*, caldav_data.* FROM caldav_data LEFT JOIN calendar_item USING(dav_id, user_no, dav_name, collection_id) LEFT JOIN addressbook_resource USING(dav_id) LEFT JOIN collection USING(collection_id)'; /** * @todo: Add stanzas for missing rows, so we don't just return a blank multistatus but * actually return stanzas with a 404 for each absent href. We could do * this relatively easily with an array_flip($params) and remove each matching dav_name * as we process it. */ if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) $where .= " ORDER BY caldav_data.dav_id"; $qry = new AwlQuery( $sql . $where, $params ); if ( $qry->Exec('REPORT',__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $dav_object = $qry->Fetch() ) { if ( $bound_from != $collection->dav_name() ) { $dav_object->dav_name = str_replace( $bound_from, $collection->dav_name(), $dav_object->dav_name); } if ( $need_expansion ) { $vResource = new vComponent($dav_object->caldav_data); $expanded = expand_event_instances($vResource, $expand_range_start, $expand_range_end); $dav_object->caldav_data = $expanded->Render(); } $responses[] = component_to_xml( $properties, $dav_object ); } } $multistatus = new XMLElement( "multistatus", $responses, $reply->GetXmlNsArray() ); $request->XMLResponse( 207, $multistatus ); davical-1.1.1/inc/page-header.php0000644000000000000000000000523411446006434013435 0ustar page_title) ) { $c->page_title = translate('DAViCal CalDAV Server'); } function make_help_link($matches) { global $c; // as usual: $matches[0] is the complete match // $matches[1] the match for the first subpattern // enclosed in '##...##' and so on // Use like: $s = preg_replace_callback('/##([^#]+)##', 'make_help_link', $s); // $help_topic = preg_replace( '/^##(.+)##$/', '$1', $matches[1]); $help_topic = $matches[1]; $display_url = $help_topic; if ( $GLOBALS['session']->AllowedTo('Admin') || $GLOBALS['session']->AllowedTo('Support') ) { if ( strlen($display_url) > 30 ) { $display_url = substr( $display_url, 0, 28 ) . '...' ; } } else { $display_url = 'help'; } return ' ['.$display_url.'] '; } if ( !function_exists('send_page_header') ) { function send_page_header() { global $session, $c, $main_menu, $related_menu; header( 'Content-type: text/html; charset="utf-8"' ); echo ''; echo << $c->page_title EOHDR; foreach ( $c->stylesheets AS $stylesheet ) { echo ''; } if ( isset($c->local_styles) ) { // Always load local styles last, so they can override prior ones... foreach ( $c->local_styles AS $stylesheet ) { echo ''; } } if ( isset($c->print_styles) ) { // Finally, load print styles last, so they can override all of the above... foreach ( $c->print_styles AS $stylesheet ) { echo "\n"; } } echo "\n\n"; echo "
\n"; if ( isset($main_menu) ) echo $main_menu->RenderAsCSS(); if ( isset($related_menu) && $related_menu->Size() > 0 ) { echo $related_menu->Render( true ); } echo "
\n"; if ( isset($c->messages) && is_array($c->messages) && count($c->messages) > 0 ) { echo "
    \n"; foreach( $c->messages AS $i => $msg ) { // ##HelpTextKey## gets converted to a "/help.phph=HelpTextKey" link $msg = preg_replace_callback("/##([^#]+)##/", "make_help_link", translate($msg)); echo "
  • $msg
  • \n"; } echo "
\n
\n"; } } } send_page_header(); davical-1.1.1/inc/iSchedule.php0000644000000000000000000006277511727267431013225 0ustar * @copyright Rob Ostensen * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once("XMLDocument.php"); /** * A class for handling iScheduling requests. * * @package davical * @subpackage iSchedule */ class iSchedule { public $parsed; public $selector; public $domain; private $dk; private $DKSig; private $try_anyway = false; private $failed = false; private $failOnError = true; private $subdomainsOK = true; private $remote_public_key ; private $required_headers = Array ( 'host', // draft 01 section 7.1 required headers 'originator', 'recipient', 'content-type' ); private $disallowed_headers = Array ( 'connection', // draft 01 section 7.1 disallowed headers 'keep-alive', 'dkim-signature', 'proxy-authenticate', 'proxy-authorization', 'te', 'trailers', 'transfer-encoding', 'upgrade' ); function __construct ( ) { global $c; $this->selector = 'cal'; if ( is_object ( $c ) && isset ( $c->scheduling_dkim_selector ) ) { $this->scheduling_dkim_domain = $c->scheduling_dkim_domain ; $this->scheduling_dkim_selector = $c->scheduling_dkim_selector ; $this->schedule_private_key = $c->schedule_private_key ; if ( ! preg_match ( '/BEGIN RSA PRIVATE KEY/', $this->schedule_private_key ) ) { $key = file_get_contents ( $this->schedule_private_key ); if ( $key !== false ) $this->schedule_private_key = $key; } if ( isset ( $c->scheduling_dkim_algo ) ) $this->scheduling_dkim_algo = $c->scheduling_dkim_algo; else $this->scheduling_dkim_algo = 'sha256'; if ( isset ( $c->scheduling_dkim_valid_time ) ) $this->valid_time = $c->scheduling_dkim_valid_time; } } /** * gets the domainkey TXT record from DNS */ function getTxt () { global $icfg; // TODO handle parents of subdomains and procuration records if ( $icfg [ $this->remote_selector . '._domainkey.' . $this->remote_server ] ) { $this->dk = $icfg [ $this->remote_selector . '._domainkey.' . $this->remote_server ]; return true; } $dkim = dns_get_record ( $this->remote_selector . '._domainkey.' . $this->remote_server , DNS_TXT ); if ( count ( $dkim ) > 0 ) { $this->dk = $dkim [ 0 ] [ 'txt' ]; if ( $dkim [ 0 ] [ 'entries' ] ) { $this->dk = ''; foreach ( $dkim [ 0 ] [ 'entries' ] as $v ) { $this->dk .= trim ( $v ); } } dbg_error_log( 'ischedule', 'getTxt '. $this->dk . ' XX'); } else { dbg_error_log( 'ischedule', 'getTxt FAILED '. print_r ( $dkim ) ); $this->failed = true; return false; } return true; } /** * strictly for testing purposes */ function setTxt ( $dk ) { $this->dk = $dk; } /** * parses DNS TXT record from domainkey lookup */ function parseTxt ( ) { if ( $this->failed == true ) return false; $clean = preg_replace ( '/\s?([;=])\s?/', '$1', $this->dk ); $pairs = preg_split ( '/;/', $clean ); $this->parsed = array(); foreach ( $pairs as $v ) { list($key,$value) = preg_split ( '/=/', $v, 2 ); $value = trim ( $value, '\\' ); if ( preg_match ( '/(g|k|n|p|s|t|v)/', $key ) ) $this->parsed [ $key ] = $value; else $this->parsed_ignored [ $key ] = $value; } return true; } /** * validates that domainkey is acceptable for the current request */ function validateKey ( ) { $this->failed = true; if ( isset ( $this->parsed [ 's' ] ) ) { if ( ! preg_match ( '/(\*|calendar)/', $this->parsed [ 's' ] ) ) { dbg_error_log( 'ischedule', 'validateKey ERROR: bad selector' ); return false; // not a wildcard or calendar key } } if ( isset ( $this->parsed [ 'k' ] ) && $this->parsed [ 'k' ] != 'rsa' ) { dbg_error_log( 'ischedule', 'validateKey ERROR: bad key algorythm, algo was:' . $this->parsed [ 'k' ] ); return false; // we only speak rsa for now } if ( isset ( $this->parsed [ 't' ] ) && ! preg_match ( '/^[y:s]+$/', $this->parsed [ 't' ] ) ) { dbg_error_log( 'ischedule', 'validateKey ERROR: type mismatch' ); return false; } else { if ( preg_match ( '/y/', $this->parsed [ 't' ] ) ) $this->failOnError = false; if ( preg_match ( '/s/', $this->parsed [ 't' ] ) ) $this->subdomainsOK = false; } if ( isset ( $this->parsed [ 'g' ] ) ) $this->remote_user_rule = $this->parsed [ 'g' ]; else $this->remote_user_rule = '*'; if ( isset ( $this->parsed [ 'p' ] ) ) { if ( preg_match ( '/[^A-Za-z0-9_=+\/]/', $this->parsed [ 'p' ] ) ) return false; $data = "-----BEGIN PUBLIC KEY-----\n" . implode ("\n",str_split ( $this->parsed [ 'p' ], 64 )) . "\n-----END PUBLIC KEY-----"; if ( $data === false ) return false; $this->remote_public_key = $data; } else { dbg_error_log( 'ischedule', 'validateKey ERROR: no key in dns record' . $this->parsed [ 'p' ] ); return false; } $this->failed = false; return true; } /** * finds a remote calendar server via DNS SRV records */ function getServer ( ) { global $icfg; if ( $icfg [ $this->domain ] ) { $this->remote_server = $icfg [ $this->domain ] [ 'server' ]; $this->remote_port = $icfg [ $this->domain ] [ 'port' ]; $this->remote_ssl = $icfg [ $this->domain ] [ 'ssl' ]; return true; } $this->remote_ssl = false; $parts = explode ( '.', $this->domain ); $tld = $parts [ count ( $parts ) - 1 ]; $len = 2; if ( strlen ( $tld ) == 2 && in_array ( $tld, Array ( 'uk', 'nz' ) ) ) $len = 3; // some country code tlds should have 3 components if ( $this->domain == 'mycaldav' || $this->domain == 'altcaldav' ) $len = 1; while ( count ( $parts ) >= $len ) { $r = dns_get_record ( '_ischedules._tcp.' . implode ( '.', $parts ) , DNS_SRV ); if ( 0 < count ( $r ) ) { $remote_server = $r [ 0 ] [ 'target' ]; $remote_port = $r [ 0 ] [ 'port' ]; $this->remote_ssl = true; break; } if ( ! isset ( $remote_server ) ) { $r = dns_get_record ( '_ischedule._tcp.' . implode ( '.', $parts ) , DNS_SRV ); if ( 0 < count ( $r ) ) { $remote_server = $r [ 0 ] [ 'target' ]; $remote_port = $r [ 0 ] [ 'port' ]; break; } } array_shift ( $parts ); } if ( ! isset ( $remote_server ) ) { if ( $this->try_anyway == true ) { if ( ! isset ( $remote_server ) ) $remote_server = $this->domain; if ( ! isset ( $remote_port ) ) $remote_port = 80; } else { dbg_error_log('ischedule', 'Domain %s did not have srv records for iSchedule', $this->domain ); return false; } } dbg_error_log('ischedule', $this->domain . ' found srv records for ' . $remote_server . ':' . $remote_port ); $this->remote_server = $remote_server; $this->remote_port = $remote_port; return true; } /** * get capabilities from remote server */ function getCapabilities ( $domain = null ) { if ( $domain != null && $this->domain != $domain ) $this->domain = $domain; if ( ! isset ( $this->remote_server ) && isset ( $this->domain ) && ! $this->getServer ( ) ) return false; $this->remote_url = 'http'. ( $this->remote_ssl ? 's' : '' ) . '://' . $this->remote_server . ':' . $this->remote_port . '/.well-known/ischedule'; $remote_capabilities = file_get_contents ( $this->remote_url . '?query=capabilities' ); if ( $remote_capabilities === false ) return false; $xml_parser = xml_parser_create_ns('UTF-8'); $this->xml_tags = array(); xml_parser_set_option ( $xml_parser, XML_OPTION_SKIP_WHITE, 1 ); xml_parser_set_option ( $xml_parser, XML_OPTION_CASE_FOLDING, 0 ); $rc = xml_parse_into_struct( $xml_parser, $remote_capabilities, $this->xml_tags ); if ( $rc == false ) { dbg_error_log( 'ERROR', 'XML parsing error: %s at line %d, column %d', xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser), xml_get_current_column_number($xml_parser) ); dbg_error_log('ischedule', $this->domain . ' iSchedule error parsing remote xml' ); return false; } xml_parser_free($xml_parser); $xmltree = BuildXMLTree( $this->xml_tags ); if ( !is_object($xmltree) ) { dbg_error_log('ischedule', $this->domain . ' iSchedule error in remote xml' ); $request->DoResponse( 406, translate("REPORT body is not valid XML data!") ); return false; } dbg_error_log('ischedule', $this->domain . ' got capabilites' ); $this->capabilities_xml = $xmltree; return true; } /** * query capabilities retrieved from server */ function queryCapabilities ( $capability, $domain = null ) { if ( ! isset ( $this->capabilities_xml ) ) { dbg_error_log('ischedule', $this->domain . ' capabilities not set, quering for capability:' . $capability ); if ( $domain == null ) return false; if ( $this->domain != $domain ) $this->domain = $domain; if ( ! $this->getCapabilities ( ) ) return false; } switch ( $capability ) { case 'VEVENT': case 'VFREEBUSY': case 'VTODO': $comp = $this->capabilities_xml->GetPath ( 'urn:ietf:params:xml:ns:ischedule:supported-scheduling-message-set/urn:ietf:params:xml:ns:ischedule:comp' ); foreach ( $comp as $c ) { if ( $c->GetAttribute ( 'name' ) == $capability ) return true; } return false; case 'VFREEBUSY/REQUEST': case 'VTODO/ADD': case 'VTODO/REQUEST': case 'VTODO/REPLY': case 'VTODO/CANCEL': case 'VEVENT/ADD': case 'VEVENT/REQUEST': case 'VEVENT/REPLY': case 'VEVENT/CANCEL': case 'VEVENT/PUBLISH': case 'VEVENT/COUNTER': case 'VEVENT/DECLINECOUNTER': dbg_error_log('ischedule', $this->domain . ' xml query' ); $comp = $this->capabilities_xml->GetPath ( 'urn:ietf:params:xml:ns:ischedule:supported-scheduling-message-set/urn:ietf:params:xml:ns:ischedule:comp' ); list ( $component, $method ) = explode ( '/', $capability ); dbg_error_log('ischedule', $this->domain . ' quering for capability:' . count ( $comp ) . ' ' . $component ); foreach ( $comp as $c ) { dbg_error_log('ischedule', $this->domain . ' quering for capability:' . $c->GetAttribute ( 'name' ) . ' == ' . $component ); if ( $c->GetAttribute ( 'name' ) == $component ) { $methods = $c->GetElements ( 'urn:ietf:params:xml:ns:ischedule:method' ); if ( count ( $methods ) == 0 ) return true; // seems like we should accept everything if there are no children foreach ( $methods as $m ) { if ( $m->GetAttribute ( 'name' ) == $method ) return true; } } } return false; default: return false; } } /** * signs a POST body and headers * * @param string $body the body of the POST * @param array $headers the headers to sign as passed to header (); */ function signDKIM ( $headers, $body ) { if ( $this->scheduling_dkim_domain == null ) return false; $b = ''; if ( is_array ( $headers ) !== true ) return false; foreach ( $headers as $key => $value ) { $b .= $key . ': ' . $value . "\r\n"; } $dk['v'] = '1'; $dk['a'] = 'rsa-' . $this->scheduling_dkim_algo; $dk['s'] = $this->selector; $dk['d'] = $this->scheduling_dkim_domain; $dk['c'] = 'simple-http'; // implied canonicalization of simple-http/simple from rfc4871 Section-3.5 if ( isset ( $_SERVER['SERVER_NAME'] ) && strstr ( $_SERVER['SERVER_NAME'], $this->domain ) !== false ) // don't use when testing $dk['i'] = '@' . $_SERVER['SERVER_NAME']; //optional $dk['q'] = 'dns/txt'; // optional, dns/txt is the default if missing $dk['l'] = strlen ( $body ); //optional $dk['t'] = time ( ); // timestamp of signature, optional if ( isset ( $this->valid_time ) ) $dk['x'] = $this->valid_time; // unix timestamp expiriation of signature, optional $dk['h'] = implode ( ':', array_keys ( $headers ) ); $dk['bh'] = base64_encode ( hash ( 'sha256', $body , true ) ); $value = ''; foreach ( $dk as $key => $val ) $value .= "$key=$val; "; $value .= 'b='; $tosign = $b . 'DKIM-Signature: ' . $value; openssl_sign ( $tosign, $sig, $this->schedule_private_key, $this->scheduling_dkim_algo ); $this->tosign = $tosign; $value .= base64_encode ( $sig ); return $value; } /** * send request to remote server * $address should be an email address or an array of email addresses all with the same domain * $type should be in the format COMPONENT/METHOD eg (VFREEBUSY, VEVENT/REQUEST, VEVENT/REPLY, etc. ) * $data is the vcalendar data N.B. must already be rendered into text format */ function sendRequest ( $address, $type, $data ) { global $session; if ( empty($this->scheduling_dkim_domain) ) return false; if ( is_array ( $address ) ) list ( $user, $domain ) = explode ( '@', $address[0] ); else list ( $user, $domain ) = explode ( '@', $address ); if ( ! $this->getCapabilities ( $domain ) ) { dbg_error_log('ischedule', $domain . ' did not have iSchedule capabilities for ' . $type ); return false; } dbg_error_log('ischedule', $domain . ' trying with iSchedule capabilities for ' . $type ); if ( $this->queryCapabilities ( $type ) ) { dbg_error_log('ischedule', $domain . ' trying with iSchedule capabilities for ' . $type . ' OK'); list ( $component, $method ) = explode ( '/', $type ); $headers = array ( ); $headers['iSchedule-Version'] = '1.0'; $headers['Originator'] = 'mailto:' . $session->email; if ( is_array ( $address ) ) $headers['Recipient'] = implode ( ', ' , $address ); else $headers['Recipient'] = $address; $headers['Content-Type'] = 'text/calendar; component=' . $component ; if ( $method ) $headers['Content-Type'] .= '; method=' . $method; $headers['DKIM-Signature'] = $this->signDKIM ( $headers, $body ); if ( $headers['DKIM-Signature'] == false ) return false; $request_headers = array ( ); foreach ( $headers as $k => $v ) $request_headers[] = $k . ': ' . $v; $curl = curl_init ( $this->remote_url ); curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, true ); curl_setopt ( $curl, CURLOPT_HTTPHEADER, array() ); // start with no headers set curl_setopt ( $curl, CURLOPT_HTTPHEADER, $request_headers ); curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt ( $curl, CURLOPT_POST, 1); curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data); curl_setopt ( $curl, CURLOPT_CUSTOMREQUEST, 'POST' ); $xmlresponse = curl_exec ( $curl ); $info = curl_getinfo ( $curl ); curl_close ( $curl ); if ( $info['http_code'] >= 400 ) { dbg_error_log ( 'ischedule', 'remote server returned error (%s)', $info['http_code'] ); return false; } error_log ( 'remote response '. $xmlresponse . print_r ( $info, true ) ); $xml_parser = xml_parser_create_ns('UTF-8'); $xml_tags = array(); xml_parser_set_option ( $xml_parser, XML_OPTION_SKIP_WHITE, 1 ); xml_parser_set_option ( $xml_parser, XML_OPTION_CASE_FOLDING, 0 ); $rc = xml_parse_into_struct( $xml_parser, $xmlresponse, $xml_tags ); if ( $rc == false ) { dbg_error_log( 'ERROR', 'XML parsing error: %s at line %d, column %d', xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser), xml_get_current_column_number($xml_parser) ); return false; } $xmltree = BuildXMLTree( $xml_tags ); xml_parser_free($xml_parser); if ( !is_object($xmltree) ) { dbg_error_log( 'ERROR', 'iSchedule RESPONSE body is not valid XML data!' ); return false; } $resp = $xmltree->GetPath ( '/*/urn:ietf:params:xml:ns:ischedule:response' ); $result = array(); foreach ( $resp as $r ) { $recipient = $r->GetElements ( 'urn:ietf:params:xml:ns:ischedule:recipient' ); $status = $r->GetElements ( 'urn:ietf:params:xml:ns:ischedule:request-status' ); $calendardata = $r->GetElements ( 'urn:ietf:params:xml:ns:ischedule:calendar-data' ); if ( count ( $recipient ) < 1 ) continue; // this should be an error if ( count ( $calendardata ) > 0 ) { $result [ $recipient[0]->GetContent() ] = $calendardata[0]->GetContent(); } else { $result [ $recipient[0]->GetContent() ] = $status[0]->GetContent(); } } if ( count ( $result ) < 1 ) return false; else return $result; } else return false; } /** * parses and validates DK header * * @param string $sig the value of the DKIM-Signature header */ function parseDKIM ( $sig ) { $this->failed = true; $tags = preg_split ( '/;[\s\t]/', $sig ); foreach ( $tags as $v ) { list($key,$value) = preg_split ( '/=/', $v, 2 ); $dkim[$key] = $value; } // the canonicalization method is currently undefined as of draft-01 of the iSchedule spec // but it does define the value, it should be simple-http. RFC4871 also defines two methods // simple and relaxed, simple is probably the same as simple http // relaxed allows for header case folding and whitespace folding, see section 3.4.4 of RFC4871 if ( ! preg_match ( '{(simple|simple-http|relaxed)(/(simple|simple-http|relaxed))?}', $dkim['c'], $matches ) ) // canonicalization method return 'bad canonicalization:' . $dkim['c'] ; if ( count ( $matches ) > 2 ) $this->body_cannon = $matches[2]; else $this->body_cannon = $matches[1]; $this->header_cannon = $matches[1]; // signing algorythm REQUIRED if ( $dkim['a'] != 'rsa-sha1' && $dkim['a'] != 'rsa-sha256' ) // we only support the minimum required return 'bad signing algorythm:' . $dkim['a'] ; // query method to retrieve public key, could/should we add https to the spec? REQUIRED if ( $dkim['q'] != 'dns/txt' ) return 'bad query method'; // domain of the signing entity REQUIRED if ( ! isset ( $dkim['d'] ) ) return 'missing signing domain'; $this->remote_server = $dkim['d']; // identity of signing AGENT, OPTIONAL if ( isset ( $dkim['i'] ) ) { // if present, domain of the signing agent must be a match or a subdomain of the signing domain if ( ! stristr ( $dkim['i'], $dkim['d'] ) ) // RFC4871 does not specify a case match requirement return 'signing domain mismatch'; // grab the local part of the signing agent if it's an email address if ( strstr ( $dkim [ 'i' ], '@' ) ) $this->remote_user = substr ( $dkim [ 'i' ], 0, strpos ( $dkim [ 'i' ], '@' ) - 1 ); } // selector used to retrieve public key REQUIRED if ( ! isset ( $dkim['s'] ) ) return 'missing selector'; $this->remote_selector = $dkim['s']; // signed header fields, colon seperated REQUIRED if ( ! isset ( $dkim['h'] ) ) return 'missing list of signed headers'; $this->signed_headers = preg_split ( '/:/', $dkim['h'] ); $sh = Array (); foreach ( $this->signed_headers as $h ) { $sh[] = strtolower ( $h ); if ( in_array ( strtolower ( $h ), $this->disallowed_headers ) ) return "$h is NOT allowed in signed header fields per RFC4871 or iSchedule"; } foreach ( $this->required_headers as $h ) if ( ! in_array ( strtolower ( $h ), $sh ) ) return "$h is REQUIRED but missing in signed header fields per iSchedule"; // body hash REQUIRED if ( ! isset ( $dkim['bh'] ) ) return 'missing body signature'; // signed header hash REQUIRED if ( ! isset ( $dkim['b'] ) ) return 'missing signature in b field'; // length of body used for signing if ( isset ( $dkim['l'] ) ) $this->signed_length = $dkim['l']; $this->failed = false; $this->DKSig = $dkim; return true; } /** * split up a mailto uri into domain and user components * TODO handle other uri types (eg http) */ function parseURI ( $uri ) { if ( preg_match ( '/^mailto:([^@]+)@([^\s\t\n]+)/', $uri, $matches ) ) { $this->remote_user = $matches[1]; $this->domain = $matches[2]; } else return false; } /** * verifies parsed DKIM header is valid for current message with a signature from the public key in DNS * TODO handle multiple headers of the same name */ function verifySignature ( ) { global $request,$c; $this->failed = true; $signed = ''; foreach ( $this->signed_headers as $h ) if ( isset ( $_SERVER['HTTP_' . strtoupper ( strtr ( $h, '-', '_' ) ) ] ) ) $signed .= "$h: " . $_SERVER['HTTP_' . strtoupper ( strtr ( $h, '-', '_' ) ) ] . "\r\n"; else $signed .= "$h: " . $_SERVER[ strtoupper ( strtr ( $h, '-', '_' ) ) ] . "\r\n"; if ( ! isset ( $_SERVER['HTTP_ORIGINATOR'] ) || stripos ( $signed, 'Originator' ) === false ) //required header, must be signed return "missing Originator"; if ( ! isset ( $_SERVER['HTTP_RECIPIENT'] ) || stripos ( $signed, 'Recipient' ) === false ) //required header, must be signed return "missing Recipient"; if ( ! isset ( $_SERVER['HTTP_ISCHEDULE_VERSION'] ) || $_SERVER['HTTP_ISCHEDULE_VERSION'] != '1' ) //required header and we only speak version 1 for now return "missing or mismatch ischedule-version header"; $body = $request->raw_post; if ( ! isset ( $this->signed_length ) ) // Should we use the Content-Length header if the signed length is missing? $this->signed_length = strlen ( $body ); else $body = substr ( $body, 0, $this->signed_length ); if ( isset ( $this->remote_user_rule ) ) if ( $this->remote_user_rule != '*' && ! stristr ( $this->remote_user, $this->remote_user_rule ) ) return "remote user rule failure"; $hash_algo = preg_replace ( '/^.*(sha1|sha256).*/','$1', $this->DKSig['a'] ); $body_hash = base64_encode ( hash ( $hash_algo, $body , true ) ); if ( $this->DKSig['bh'] != $body_hash ) return "body hash mismatch"; $sig = $_SERVER['HTTP_DKIM_SIGNATURE']; $sig = preg_replace ( '/ b=[^;\s\r\n\t]+/', ' b=', $sig ); $signed .= 'DKIM-Signature: ' . $sig; $verify = openssl_verify ( $signed, base64_decode ( $this->DKSig['b'] ), $this->remote_public_key, $hash_algo ); if ( $verify != 1 ) { openssl_sign ( $signed, $sigb, $this->schedule_private_key, $hash_algo ); $sigc = base64_encode ( $sigb ); $verify1 = openssl_verify ( $signed, $sigc, $this->remote_public_key, $hash_algo ); return "signature verification failed " . $this->remote_public_key . " \n\n". $sig . " \n" . $hash_algo . "\n". print_r ($verify,1) . " XX " . $verify1 . "\n"; } $this->failed = false; return true; } /** * checks that current request has a valid DKIM signature signed by a currently valid key from DNS */ function validateRequest ( ) { global $request; if ( isset ( $_SERVER['HTTP_DKIM_SIGNATURE'] ) ) $sig = $_SERVER['HTTP_DKIM_SIGNATURE']; else { $request->DoResponse( 403, translate('DKIM signature missing') ); return false; } if ( isset ( $_SERVER['HTTP_ORGANIZER'] ) ) $request->DoResponse( 403, translate('Organizer Missing') ); dbg_error_log ('ischedule','beginning validation'); $err = $this->parseDKIM ( $sig ); if ( $err !== true || $this->failed ) $request->DoResponse( 412, 'DKIM signature invalid ' . "\n" . $err . "\n" ); if ( ! $this->getTxt () || $this->failed ) // this could also be a 424 failed dependency response $request->DoResponse( 400, translate('DKIM signature validation failed(DNS ERROR)') ); if ( ! $this->parseTxt () || $this->failed ) $request->DoResponse( 400, translate('DKIM signature validation failed(KEY Parse ERROR)') ); if ( ! $this->validateKey () || $this->failed ) $request->DoResponse( 400, translate('DKIM signature validation failed(KEY Validation ERROR)') ); $err = $this->verifySignature (); if ( $err !== true || $this->failed ) $request->DoResponse( 412, translate('DKIM signature validation failed(Signature verification ERROR)') . '\n' . $err ); dbg_error_log ('ischedule','signature ok'); return true; } } davical-1.1.1/inc/caldav-DELETE.php0000644000000000000000000001105711743154337013473 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log("delete", "DELETE method handler"); require_once('DAVResource.php'); $dav_resource = new DAVResource($request->path); $container = $dav_resource->GetParentContainer(); $container->NeedPrivilege('DAV::unbind'); $lock_opener = $request->FailIfLocked(); require_once('schedule-functions.php'); function delete_collection( $id ) { $params = array( ':collection_id' => $id ); $qry = new AwlQuery('SELECT child.collection_id AS child_id FROM collection child JOIN collection parent ON (parent.dav_name = child.parent_container) WHERE parent.collection_id = :collection_id', $params ); if ( $qry->Exec('DELETE',__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $row = $qry->Fetch() ) { delete_collection($row->child_id); } } if ( $qry->QDo("SELECT write_sync_change(collection_id, 404, caldav_data.dav_name) FROM caldav_data WHERE collection_id = :collection_id", $params ) && $qry->QDo("DELETE FROM property WHERE dav_name LIKE (SELECT dav_name FROM collection WHERE collection_id = :collection_id) || '%'", $params ) && $qry->QDo("DELETE FROM locks WHERE dav_name LIKE (SELECT dav_name FROM collection WHERE collection_id = :collection_id) || '%'", $params ) && $qry->QDo("DELETE FROM caldav_data WHERE collection_id = :collection_id", $params ) && $qry->QDo("DELETE FROM collection WHERE collection_id = :collection_id", $params ) ) { @dbg_error_log( "DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); return true; } return false; } if ( !$dav_resource->Exists() )$request->DoResponse( 404 ); if ( ! ( $dav_resource->resource_id() > 0 ) ) { $request->DoResponse( 403 ); } $qry = new AwlQuery(); $qry->Begin(); if ( $dav_resource->IsCollection() ) { if ( $dav_resource->IsBinding() ) { $params = array( ':dav_name' => $dav_resource->dav_name() ); if ( $qry->QDo("DELETE FROM dav_binding WHERE dav_name = :dav_name", $params ) && $qry->Commit() ) { @dbg_error_log( "DELETE", "DELETE: Binding: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); $request->DoResponse( 204 ); } } else { if ( delete_collection( $dav_resource->resource_id() ) && $qry->Commit() ) { // Uncache anything to do with the collection $cache = getCacheInstance(); $cache->delete( 'collection-'.$dav_resource->dav_name(), null ); $request->DoResponse( 204 ); } } } else { if ( (isset($request->etag_if_match) && $request->etag_if_match != $dav_resource->unique_tag() ) ) { $request->DoResponse( 412, translate("Resource has changed on server - not deleted") ); } // Check to see if we need to do any scheduling transactions for this one. do_scheduling_for_delete($dav_resource); // We need to serialise access to this process just for this collection $cache = getCacheInstance(); $myLock = $cache->acquireLock('collection-'.$dav_resource->parent_path()); $collection_id = $dav_resource->GetProperty('collection_id'); $params = array( ':dav_id' => $dav_resource->resource_id() ); if ( $qry->QDo("DELETE FROM property WHERE dav_name = (SELECT dav_name FROM caldav_data WHERE dav_id = :dav_id)", $params ) && $qry->QDo("DELETE FROM locks WHERE dav_name = (SELECT dav_name FROM caldav_data WHERE dav_id = :dav_id)", $params ) && $qry->QDo("SELECT write_sync_change(collection_id, 404, caldav_data.dav_name) FROM caldav_data WHERE dav_id = :dav_id", $params ) && $qry->QDo("DELETE FROM caldav_data WHERE dav_id = :dav_id", $params ) ) { if ( function_exists('log_caldav_action') ) { log_caldav_action( 'DELETE', $dav_resource->GetProperty('uid'), $dav_resource->GetProperty('user_no'), $collection_id, $request->path ); } $qry->Commit(); @dbg_error_log( "DELETE", "DELETE: User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); if ( function_exists('post_commit_action') ) { post_commit_action( 'DELETE', $dav_resource->GetProperty('uid'), $dav_resource->GetProperty('user_no'), $collection_id, $request->path ); } $cache->delete( 'collection-'.$dav_resource->parent_path(), null ); $cache->releaseLock($myLock); $request->DoResponse( 204 ); } $cache->releaseLock($myLock); } $request->DoResponse( 500 ); davical-1.1.1/inc/PublicSession.php0000644000000000000000000000413611633117640014055 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ /** * A Class for handling a public (anonymous) session * * @package davical */ class PublicSession { /**#@+ * @access private */ /** * User ID number * @var user_no int */ var $user_no; /** * Principal ID * @var principal_id int */ var $principal_id; /** * User e-mail * @var email string */ var $email; /** * User full name * @var fullname string */ var $fullname; /** * Group rights * @var groups array */ var $groups; /**#@-*/ /** * The constructor, which just calls the actual type configured */ function PublicSession() { global $c; $principal = new Principal('username','unauthenticated'); // Assign each field in the selected record to the object foreach( $principal AS $k => $v ) { $this->{$k} = $v; } $this->username = $principal->username(); $this->user_no = $principal->user_no(); $this->principal_id = $principal->principal_id(); $this->email = $principal->email(); $this->dav_name = $principal->dav_name(); $this->principal = $principal; if ( function_exists("awl_set_locale") && isset($this->locale) && $this->locale != "" ) { awl_set_locale($this->locale); } $this->groups = ( isset($c->public_groups) ? $c->public_groups : array() ); $this->roles = array( 'Public' => true ); $this->logged_in = false; } /** * Checks whether a user is allowed to do something. * * The check is performed to see if the user has that role. * * @param string $whatever The role we want to know if the user has. * @return boolean Whether or not the user has the specified role. */ function AllowedTo ( $whatever ) { dbg_error_log('session', 'Checking whether "Public" is allowed to "%s"', $whatever); return ( isset($this->roles[$whatever]) && $this->roles[$whatever] ); } } davical-1.1.1/inc/external-fetch.php0000644000000000000000000001275211727233556014220 0ustar * @copyright Rob Ostensen * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ function create_external ( $path,$is_calendar,$is_addressbook ) { global $request; if ( ! function_exists ( "curl_init" ) ) { dbg_error_log("external", "external resource cannot be fetched without curl, please install curl"); $request->DoResponse( 503, translate('PHP5 curl support is required for external binds') ); return ; } $resourcetypes = ''; if ($is_calendar) $resourcetypes .= ''; $qry = new AwlQuery(); if ( ! $qry->QDo( 'INSERT INTO collection ( user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, is_addressbook, resourcetypes, created, modified ) VALUES( :user_no, :parent_container, :dav_name, :dav_etag, :dav_displayname, :is_calendar, :is_addressbook, :resourcetypes, current_timestamp, current_timestamp )', array( ':user_no' => $request->user_no, ':parent_container' => '/.external/', ':dav_name' => $path, ':dav_etag' => md5($request->user_no. $path), ':dav_displayname' => $path, ':is_calendar' => ($is_calendar ? 't' : 'f'), ':is_addressbook' => ($is_addressbook ? 't' : 'f'), ':resourcetypes' => $resourcetypes ) ) ) { $request->DoResponse( 500, translate('Error writing calendar details to database.') ); } } function fetch_external ( $bind_id, $min_age = '1 hour' ) { if ( ! function_exists ( "curl_init" ) ) { dbg_error_log("external", "external resource cannot be fetched without curl, please install curl"); $request->DoResponse( 503, translate('PHP5 curl support is required for external binds') ); return ; } $sql = 'SELECT collection.*, collection.dav_name AS path, dav_binding.external_url AS external_url FROM dav_binding LEFT JOIN collection ON (collection.collection_id=bound_source_id) WHERE bind_id = :bind_id'; $params = array( ':bind_id' => $bind_id ); if ( strlen ( $min_age ) > 2 ) { $sql .= ' AND collection.modified + interval :interval < NOW()'; $params[':interval'] = $min_age; } $sql .= ' ORDER BY modified DESC LIMIT 1'; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec('DAVResource') && $qry->rows() > 0 && $row = $qry->Fetch() ) { $local_ts = new DateTime($row->modified); $curl = curl_init ( $row->external_url ); curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, true ); curl_setopt ( $curl, CURLOPT_HEADER, true ); curl_setopt ( $curl, CURLOPT_FILETIME, true ); curl_setopt ( $curl, CURLOPT_NOBODY, true ); curl_setopt ( $curl, CURLOPT_TIMEVALUE, $local_ts->format("U") ); curl_setopt ( $curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE ); dbg_error_log("external", "checking external resource for remote changes " . $row->external_url ); $ics = curl_exec ( $curl ); $info = curl_getinfo ( $curl ); if ( $info['http_code'] === 304 || isset($info['filetime']) && new DateTime("@" . $info['filetime']) <= $local_ts ) { dbg_error_log("external", "external resource unchanged " . $info['filetime'] . ' < ' . $local_ts->getTimestamp() ); curl_close ( $curl ); // BUGlet: should track server-time instead of local-time $qry = new AwlQuery( 'UPDATE collection SET modified=NOW() WHERE collection_id = :cid', array ( ':cid' => $row->collection_id ) ); $qry->Exec('DAVResource'); return true; } dbg_error_log("external", "external resource changed, re importing" . $info['filetime'] ); curl_setopt ( $curl, CURLOPT_NOBODY, false ); curl_setopt ( $curl, CURLOPT_HEADER, false ); $ics = curl_exec ( $curl ); curl_close ( $curl ); if ( is_string ( $ics ) && strlen ( $ics ) > 20 ) { // BUGlet: should track server-time instead of local-time $qry = new AwlQuery( 'UPDATE collection SET modified=NOW(), dav_etag=:etag WHERE collection_id = :cid', array ( ':cid' => $row->collection_id, ':etag' => md5($ics) ) ); $qry->Exec('DAVResource'); require_once ( 'caldav-PUT-functions.php'); import_collection ( $ics , $row->user_no, $row->path, 'External Fetch' , false ) ; return true; } } else { dbg_error_log("external", "external resource up to date or not found id(%s)", $bind_id ); } return false; } function update_external ( $request ) { global $c; if ( $c->external_refresh < 1 ) return ; if ( ! function_exists ( "curl_init" ) ) { dbg_error_log("external", "external resource cannot be fetched without curl, please install curl"); return ; } $sql = 'SELECT bind_id, external_url as url from dav_binding LEFT JOIN collection ON (collection.collection_id=bound_source_id) WHERE dav_binding.dav_name = :dav_name AND collection.modified + interval :interval < NOW()'; $qry = new AwlQuery( $sql, array ( ':dav_name' => $request->dav_name(), ':interval' => $c->external_refresh . ' minutes' ) ); dbg_error_log("external", "checking if external resource needs update"); if ( $qry->Exec('DAVResource') && $qry->rows() > 0 && $row = $qry->Fetch() ) { if ( $row->bind_id != 0 ) { dbg_error_log("external", "external resource needs updating, this might take a minute : %s", $row->url ); fetch_external ( $row->bind_id ); } } } davical-1.1.1/inc/caldav-POST.php0000644000000000000000000001633111731512556013314 0ustar * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log("POST", "method handler"); require_once("XMLDocument.php"); include_once('caldav-PUT-functions.php'); include_once('freebusy-functions.php'); include_once('iSchedule.php'); if ( ! ini_get('open_basedir') && (isset($c->dbg['ALL']) || isset($c->dbg['post'])) ) { $fh = fopen('/tmp/POST.txt','w'); if ( $fh ) { fwrite($fh,$request->raw_post); fclose($fh); } } function handle_freebusy_request( $ic ) { global $c, $session, $request, $ical; $request->NeedPrivilege('CALDAV:schedule-send-freebusy'); $reply = new XMLDocument( array("DAV:" => "", "urn:ietf:params:xml:ns:caldav" => "C" ) ); $responses = array(); $fbq_start = $ic->GetPValue('DTSTART'); $fbq_end = $ic->GetPValue('DTEND'); if ( ! ( isset($fbq_start) || isset($fbq_end) ) ) { $request->DoResponse( 400, 'All valid freebusy requests MUST contain a DTSTART and a DTEND' ); } $range_start = new RepeatRuleDateTime($fbq_start); $range_end = new RepeatRuleDateTime($fbq_end); $attendees = $ic->GetProperties('ATTENDEE'); if ( preg_match( '# iCal/\d#', $_SERVER['HTTP_USER_AGENT']) ) { dbg_error_log( "POST", "Non-compliant iCal request. Using X-WR-ATTENDEE property" ); $wr_attendees = $ic->GetProperties('X-WR-ATTENDEE'); foreach( $wr_attendees AS $k => $v ) { $attendees[] = $v; } } dbg_error_log( "POST", "Responding with free/busy for %d attendees", count($attendees) ); foreach( $attendees AS $k => $attendee ) { $attendee_email = preg_replace( '/^mailto:/', '', $attendee->Value() ); dbg_error_log( "POST", "Calculating free/busy for %s", $attendee_email ); /** @todo Refactor this so we only do one query here and loop through the results */ $params = array( ':session_principal' => $session->principal_id, ':scan_depth' => $c->permission_scan_depth, ':email' => $attendee_email ); $qry = new AwlQuery('SELECT pprivs(:session_principal::int8,principal_id,:scan_depth::int) AS p, username FROM usr JOIN principal USING(user_no) WHERE lower(usr.email) = lower(:email)', $params ); if ( !$qry->Exec('POST',__LINE__,__FILE__) ) $request->DoResponse( 501, 'Database error'); if ( $qry->rows() > 1 ) { // Unlikely, but if we get more than one result we'll do an exact match instead. if ( !$qry->QDo('SELECT pprivs(:session_principal::int8,principal_id,:scan_depth::int) AS p, username FROM usr JOIN principal USING(user_no) WHERE usr.email = :email', $params ) ) $request->DoResponse( 501, 'Database error'); if ( $qry->rows() == 0 ) { /** Sigh... Go back to the original case-insensitive match */ $qry->QDo('SELECT pprivs(:session_principal::int8,principal_id,:scan_depth::int) AS p, username FROM usr JOIN principal USING(user_no) WHERE lower(usr.email) = lower(:email)', $params ); } } $response = $reply->NewXMLElement("response", false, false, 'urn:ietf:params:xml:ns:caldav'); $reply->CalDAVElement($response, "recipient", $reply->href($attendee->Value()) ); if ( $qry->rows() == 0 ) { $remote = new iSchedule (); $answer = $remote->sendRequest ( $attendee->Value(), 'VFREEBUSY/REQUEST', $ical->Render() ); if ( $answer === false ) { $reply->CalDAVElement($response, "request-status", "3.7;Invalid Calendar User" ); $reply->CalDAVElement($response, "calendar-data" ); $responses[] = $response; continue; } foreach ( $answer as $a ) { if ( $a === false ) { $reply->CalDAVElement($response, "request-status", "3.7;Invalid Calendar User" ); $reply->CalDAVElement($response, "calendar-data" ); } elseif ( substr( $a, 0, 1 ) >= 1 ) { $reply->CalDAVElement($response, "request-status", $a ); $reply->CalDAVElement($response, "calendar-data" ); } else { $reply->CalDAVElement($response, "request-status", "2.0;Success" ); $reply->CalDAVElement($response, "calendar-data", $a ); } $responses[] = $response; } continue; } if ( ! $attendee_usr = $qry->Fetch() ) $request->DoResponse( 501, 'Database error'); if ( (privilege_to_bits('schedule-query-freebusy') & bindec($attendee_usr->p)) == 0 ) { $reply->CalDAVElement($response, "request-status", "3.8;No authority" ); $reply->CalDAVElement($response, "calendar-data" ); $responses[] = $response; continue; } $attendee_path_match = '^/'.$attendee_usr->username.'/'; $fb = get_freebusy( $attendee_path_match, $range_start, $range_end, bindec($attendee_usr->p) ); $fb->AddProperty( 'UID', $ic->GetPValue('UID') ); $fb->SetProperties( $ic->GetProperties('ORGANIZER'), 'ORGANIZER'); $fb->AddProperty( $attendee ); $vcal = new vCalendar( array('METHOD' => 'REPLY') ); $vcal->AddComponent( $fb ); $response = $reply->NewXMLElement( "response", false, false, 'urn:ietf:params:xml:ns:caldav' ); $reply->CalDAVElement($response, "recipient", $reply->href($attendee->Value()) ); $reply->CalDAVElement($response, "request-status", "2.0;Success" ); // Cargo-cult setting $reply->CalDAVElement($response, "calendar-data", $vcal->Render() ); $responses[] = $response; } $response = $reply->NewXMLElement( "schedule-response", $responses, $reply->GetXmlNsArray(), 'urn:ietf:params:xml:ns:caldav' ); $request->XMLResponse( 200, $response ); } function handle_cancel_request( $ic ) { global $c, $session, $request; $request->NeedPrivilege('CALDAV:schedule-send-reply'); $reply = new XMLDocument( array("DAV:" => "", "urn:ietf:params:xml:ns:caldav" => "C" ) ); $response = $reply->NewXMLElement( "response", false, false, 'urn:ietf:params:xml:ns:caldav' ); $reply->CalDAVElement($response, "request-status", "2.0;Success" ); // Cargo-cult setting $response = $reply->NewXMLElement( "schedule-response", $response, $reply->GetXmlNsArray() ); $request->XMLResponse( 200, $response ); } $ical = new vCalendar( $request->raw_post ); $method = $ical->GetPValue('METHOD'); $resources = $ical->GetComponents('VTIMEZONE',false); $first = $resources[0]; switch ( $method ) { case 'REQUEST': dbg_error_log('POST', 'Handling iTIP "REQUEST" method with "%s" component.', $method, $first->GetType() ); if ( $first->GetType() == 'VFREEBUSY' ) handle_freebusy_request( $first ); elseif ( $first->GetType() == 'VEVENT' ) { $request->NeedPrivilege('CALDAV:schedule-send-invite'); handle_schedule_request( $ical ); } else { dbg_error_log('POST', 'Ignoring iTIP "REQUEST" with "%s" component.', $first->GetType() ); } break; case 'REPLY': dbg_error_log('POST', 'Handling iTIP "REPLY" with "%s" component.', $first->GetType() ); $request->NeedPrivilege('CALDAV:schedule-send-reply'); handle_schedule_reply ( $ical ); break; case 'CANCEL': dbg_error_log("POST", "Handling iTIP 'CANCEL' method.", $method ); handle_cancel_request( $first ); break; default: dbg_error_log("POST", "Unhandled '%s' method in request.", $method ); } davical-1.1.1/inc/caldav-REPORT-expand-property.php0000644000000000000000000000673311755655071016714 0ustar ...HTTP/1.1 200 OK...
* pull out the content of content and check to see if it has any href elements. If it *does* then * recurse into them, looking for the next deeper nesting of properties. */ function get_href_containers( &$multistatus_response ) { $propstat_set = $multistatus_response->GetElements('DAV::propstat'); $propstat_200 = null; foreach( $propstat_set AS $k => $v ) { $status = $v->GetElements('DAV::status'); if ( preg_match( '{^HTTP/\S+\s+200}', $status[0]->GetContent() ) ) { $propstat_200 = $v; break; } } if ( isset($propstat_200) ) { $props = $propstat_200->GetElements('DAV::prop'); $properties = array(); foreach( $props AS $k => $p ) { $properties = array_merge($properties,$p->GetElements()); } $href_containers = array(); foreach( $properties AS $k => $property ) { if ( !is_object($property) ) continue; // dbg_error_log('REPORT',' get_href_containers: Checking property "%s" for hrefs.', $property->GetNSTag() ); $hrefs = $property->GetElements('DAV::href'); if ( count($hrefs) > 0 ) { $href_containers[] = $property; } } if ( count($href_containers) > 0 ) { return $href_containers; } } return null; } /** * Expand the properties, recursing only once */ function expand_properties( $urls, $ptree, &$reply, $recurse_again = true ) { if ( !is_array($urls) ) $urls = array($urls); if ( !is_array($ptree) ) $ptree = array($ptree); $responses = array(); foreach( $urls AS $m => $url ) { $resource = new DAVResource($url); $props = array(); $subtrees = array(); foreach( $ptree AS $n => $property ) { if ( ! is_object($property) ) continue; $pname = $property->GetAttribute('name'); $pns = $property->GetAttribute('namespace'); if ( empty($pns) ) $pns = $property->GetAttribute('xmlns'); if ( empty($pns) ) $pns = $reply->DefaultNamespace(); $pname = (empty($pns)?'':$pns .':'). $pname; $props[] = $pname; $subtrees[$pname] = $property->GetElements(); } $part_response = $resource->RenderAsXML( $props, $reply ); if ( isset($part_response) ) { if ( $recurse_again ) { $href_containers = get_href_containers($part_response); if ( isset($href_containers) ) { foreach( $href_containers AS $h => $property ) { $hrefs = $property->GetElements(); $pname = $property->GetNSTag(); $paths = array(); foreach( $hrefs AS $k => $v ) { $content = $v->GetContent(); $paths[] = $content; } // dbg_error_log('REPORT',' Found property "%s" contains hrefs "%s"', $pname, implode(', ',$paths) ); $property->SetContent( expand_properties($paths, $subtrees[$pname], $reply, false) ); } } // else { // dbg_error_log('REPORT',' No href containers in response to "%s"', implode(', ', $props ) ); // } } $responses[] = $part_response; } } return $responses; } /** * Build the array of properties to include in the report output */ $property_tree = $xmltree->GetPath('/DAV::expand-property/DAV::property'); $multistatus = new XMLElement( "multistatus", expand_properties( $request->path, $property_tree, $reply), $reply->GetXmlNsArray() ); $request->XMLResponse( 207, $multistatus ); davical-1.1.1/inc/iSchedule-POST.php0000644000000000000000000003013211712322215013750 0ustar * @copyright Rob Ostensen * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once('iSchedule.php'); require_once('vComponent.php'); require_once('vCalendar.php'); require_once('WritableCollection.php'); include_once('freebusy-functions.php'); class FakeSession { function __construct($principal) { // Assign each field in the selected record to the object foreach( $principal AS $k => $v ) { $this->{$k} = $v; } $this->username = $principal->username(); $this->user_no = $principal->user_no(); $this->principal_id = $principal->principal_id(); $this->email = $principal->email(); $this->dav_name = $principal->dav_name(); $this->principal = $principal; $this->logged_in = true; } function AllowedTo($do_something) { return true; } } $d = new iSchedule (); if ( $d->validateRequest ( ) ) { $ical = new vCalendar( $request->raw_post ); $attendee = Array (); $addresses = Array (); $attendees = $ical->GetAttendees(); foreach( $attendees AS $v ) { $email = preg_replace( '/^mailto:/i', '', $v->Value() ); $addresses[] = $email; } $organizer = $ical->GetOrganizer(); $addresses[] = preg_replace( '/^mailto:/i', '', $organizer->Value() ); $recipients = Array (); $attendees_ok = Array (); $attendees_fail = Array (); if ( strpos ( $_SERVER['HTTP_RECIPIENT'], ',' ) === false ) { // single recipient $recipients[] = $_SERVER['HTTP_RECIPIENT']; } else { $rcpt = explode ( ',', $_SERVER['HTTP_RECIPIENT'] ); foreach ( $rcpt as $k => $v ) { $recipients[$k] = preg_replace( '/^mailto:/i', '', trim ( $v ) ); } } if ( ! in_array ( preg_replace( '/^mailto:/i', '', $_SERVER['HTTP_ORIGINATOR'] ), $addresses ) ) { // should this be case sensitive? $request->DoResponse( 412, translate('sender must be organizer or attendee of event') ); } foreach ( $recipients as $v ) { if ( ! in_array ( preg_replace( '/^mailto:/i', '', $v ), $addresses ) ) { // should this be case sensitive? dbg_error_log('ischedule','recipient missing from event ' . $v ); $reply->XMLResponse( 403, translate('recipient must be organizer or attendee of event') . $v ); continue; } $email = preg_replace( '/^mailto:/', '', $v ); dbg_error_log('ischedule','recipient ' . $v ); $schedule_target = new Principal('email',$email); if ( $schedule_target == false ){ array_push ( $attendees_fail, $schedule_target ); continue; } array_push ( $attendees_ok, $schedule_target ); // TODO: add originator addressbook and existing event lookup as whitelist } $method = $ical->GetPValue('METHOD'); $content_type = explode ( ';', $_SERVER['CONTENT_TYPE'] ); if ( $content_type[0] != 'text/calendar' ) $reply->XMLResponse( 406, 'content must be text/calendar' ); $content_parts = Array (); foreach ( $content_type as $v ) { list ( $a, $b ) = explode ( '=', trim ( $v ), 2 ); $content_parts[strtolower($a)] = strtoupper($b); } if ( isset ( $content_parts['method'] ) ) $method = $content_parts['method']; // override method from icalendar switch ( $method ) { case 'REQUEST': if ( $content_parts['component'] == 'VFREEBUSY' ) { ischedule_freebusy_request ( $ical, $attendees_ok, $attendees_fail ); } if ( $content_parts['component'] == 'VEVENT' ) { ischedule_request ( $ical, $attendees_ok, $attendees_fail ); // scheduling event request } if ( $content_parts['component'] == 'VTODO' ) { ischedule_request ( $ical, $attendees_ok, $attendees_fail ); // scheduling todo request } if ( $content_parts['component'] == 'VJOURNAL' ) { // scheduling journal request, not sure how to handle this or if it will ever by used } break; case 'REPLY': ischedule_request ( $ical, $attendees_ok, $attendees_fail ); break; case 'ADD': ischedule_request ( $ical, $attendees_ok, $attendees_fail ); break; case 'CANCEL': ischedule_request ( $ical, $attendees_ok, $attendees_fail ); break; case 'PUBLISH': break; case 'REFRESH': break; case 'COUNTER': break; case 'DECLINECOUNTER': break; default: dbg_error_log('ischedule','invalid request' ); $request->DoResponse( 400, translate('invalid request') ); } } else { dbg_error_log('ischedule','invalid request' ); $request->DoResponse( 400, translate('invalid request') ); } function ischedule_freebusy_request( $ic, $attendees, $attendees_fail) { global $c, $session, $request; $reply = new XMLDocument( array( "urn:ietf:params:xml:ns:ischedule" => "I" ) ); $icalAttendees = $ic->GetAttendees(); $responses = array(); $ical = $ic->GetComponents('VFREEBUSY'); $ical = $ical[0]; $fbq_start = $ical->GetPValue('DTSTART'); $fbq_end = $ical->GetPValue('DTEND'); if ( ! ( isset($fbq_start) || isset($fbq_end) ) ) { $request->DoResponse( 400, 'All valid freebusy requests MUST contain a DTSTART and a DTEND' ); } $range_start = new RepeatRuleDateTime($fbq_start); $range_end = new RepeatRuleDateTime($fbq_end); foreach( $attendees AS $k => $attendee ) { $response = $reply->NewXMLElement("response", false, false, 'urn:ietf:params:xml:ns:ischedule'); $fb = get_freebusy( '^'.$attendee->dav_name, $range_start, $range_end ); $fb->AddProperty( 'UID', $ical->GetPValue('UID') ); $fb->SetProperties( $ical->GetProperties('ORGANIZER'), 'ORGANIZER'); foreach ( $ical->GetProperties('ATTENDEE') as $at ) { if ( $at->Value() == 'mailto:' . $attendee->email ) $fb->AddProperty( $at ); } $vcal = new vCalendar( array('METHOD' => 'REPLY') ); $vcal->AddComponent( $fb ); $response = $reply->NewXMLElement( "response", false, false, 'urn:ietf:params:xml:ns:ischedule' ); $response->NewElement( "recipient", 'mailto:'.$attendee->email, false, 'urn:ietf:params:xml:ns:ischedule' ); $response->NewElement( "request-status", "2.0;Success", false, 'urn:ietf:params:xml:ns:ischedule' ); $response->NewElement( "calendar-data", $vcal->Render(), false, 'urn:ietf:params:xml:ns:ischedule' ); $responses[] = $response; } foreach ( $attendees_fail AS $k => $attendee ) { $XMLresponse = $reply->NewXMLElement("response", false, false, 'urn:ietf:params:xml:ns:ischedule'); $XMLresponse->NewElement( "recipient", $reply->href('mailto:'.$attendee)); $XMLresponse->NewElement( "request-status",'5.3;cannot schedule this user, unknown or access denied'); $responses[] = $XMLresponse; } $response = $reply->NewXMLElement( "schedule-response", $responses, $reply->GetXmlNsArray(), 'urn:ietf:params:xml:ns:ischedule' ); $request->XMLResponse( 200, $response ); } function ischedule_request( $ic, $attendees, $attendees_fail ) { global $c, $session, $request; $oldSession = $session; $reply = new XMLDocument( array( "urn:ietf:params:xml:ns:ischedule" => "I" ) ); $responses = array(); $ical = $ic->GetComponents('VEVENT'); $ical = $ical[0]; foreach ( $attendees AS $k => $attendee ) { $XMLresponse = $reply->NewXMLElement("response", false, false, 'urn:ietf:params:xml:ns:ischedule'); dbg_error_log('ischedule','scheduling event for ' .$attendee->email); $schedule_target = new Principal('email',$attendee->email); $response = '3.7'; // Attendee was not found on server. if ( $schedule_target->Exists() ) { $session = new FakeSession($schedule_target); $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); if ( !$attendee_calendar->Exists() ) { dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"', $attendee_calendar->dav_name(), $schedule_target->username()); $response = '5.3;cannot schedule this user, unknown or access denied'; // No scheduling support for user } else { $attendee_inbox = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-inbox'))); if ( ! $attendee_inbox->HavePrivilegeTo('schedule-deliver-invite') ) { $response = '3.8;denied'; // No authority to deliver invitations to user. } else if ( $attendee_inbox->WriteCalendarMember($ic, false) !== false ) { $response = '2.0;delivered'; // Scheduling invitation delivered successfully } } $session = $oldSession; } dbg_error_log( 'ischedule', 'Status for attendee <%s> set to "%s"', $attendee->email, $response ); $XMLresponse->NewElement("recipient", 'mailto:'.$attendee->email, false, 'urn:ietf:params:xml:ns:ischedule' ); $XMLresponse->NewElement("request-status", $response, false, 'urn:ietf:params:xml:ns:ischedule' ); $responses[] = $XMLresponse; } foreach ( $attendees_fail AS $k => $attendee ) { $XMLresponse = $reply->NewXMLElement("response", false, false, 'urn:ietf:params:xml:ns:ischedule'); $XMLresponse->NewElement("recipient", 'mailto:'.$attendee->email, false, 'urn:ietf:params:xml:ns:ischedule' ); $XMLresponse->NewElement("request-status", '5.3;cannot schedule this user, unknown or access denied', false, 'urn:ietf:params:xml:ns:ischedule' ); $responses[] = $XMLresponse; } $response = $reply->NewXMLElement( "schedule-response", $responses, $reply->GetXmlNsArray(), 'urn:ietf:params:xml:ns:ischedule' ); $request->XMLResponse( 200, $response ); } function ischedule_cancel( $ic, $attendees, $attendees_fail ) { global $c, $session, $request; $reply = new XMLDocument( array("DAV:" => "", "urn:ietf:params:xml:ns:caldav" => "C", "urn:ietf:params:xml:ns:ischedule" => "I" ) ); $responses = array(); $ical = $ic->GetComponents('VEVENT'); $ical = $ical[0]; foreach ( $attendees AS $k => $attendee ) { $XMLresponse = $reply->NewXMLElement("response", false, false, 'urn:ietf:params:xml:ns:ischedule'); dbg_error_log('ischedule','scheduling event for ' .$attendee->email); $schedule_target = new Principal('email',$attendee->email); $response = '3.7'; // Attendee was not found on server. if ( $schedule_target->Exists() ) { $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); if ( !$attendee_calendar->Exists() ) { dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"', $attendee_calendar->dav_name(), $schedule_target->username()); $response = '5.3;cannot schedule this user, unknown or access denied'; // No scheduling support for user } else { $attendee_inbox = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-inbox'))); if ( ! $attendee_inbox->HavePrivilegeTo('schedule-deliver-invite') ) { $response = '3.8;denied'; // No authority to deliver invitations to user. } else if ( $attendee_inbox->WriteCalendarMember($ic, false) !== false ) { $response = '2.0;delivered'; // Scheduling invitation delivered successfully } } } dbg_error_log( 'PUT', 'Status for attendee <%s> set to "%s"', $attendee->email, $response ); $XMLresponse->NewElement("recipient", $reply->href('mailto:'.$attendee->email), false, 'urn:ietf:params:xml:ns:ischedule' ); $XMLresponse->NewElement("request-status", $response, false, 'urn:ietf:params:xml:ns:ischedule' ); $responses[] = $XMLresponse; } foreach ( $attendees_fail AS $k => $attendee ) { $XMLresponse = $reply->NewXMLElement("response", false, false, 'urn:ietf:params:xml:ns:ischedule'); $XMLresponse->NewElement("recipient", $reply->href('mailto:'.$attendee->email), false, 'urn:ietf:params:xml:ns:ischedule' ); $XMLresponse->NewElement("request-status", '5.3;cannot schedule this user, unknown or access denied', false, 'urn:ietf:params:xml:ns:ischedule' ); $responses[] = $XMLresponse; } $response = $reply->NewXMLElement( "schedule-response", $responses, $reply->GetXmlNsArray(), 'urn:ietf:params:xml:ns:ischedule' ); $request->XMLResponse( 200, $response ); } davical-1.1.1/inc/caldav-PUT-functions.php0000644000000000000000000017664311773446323015226 0ustar * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later version */ /** * Check if the user wants to put just one VEVENT/VTODO or a whole calendar * if the collection = calendar = $request_container doesn't exist then create it * return true if it's a whole calendar */ require_once('AwlCache.php'); require_once('vComponent.php'); require_once('vCalendar.php'); require_once('WritableCollection.php'); include_once('iSchedule.php'); include_once('RRule-v2.php'); $bad_events = null; /** * A regex which will match most reasonable timezones acceptable to PostgreSQL. */ $tz_regex = ':^(Africa|America|Antarctica|Arctic|Asia|Atlantic|Australia|Brazil|Canada|Chile|Etc|Europe|Indian|Mexico|Mideast|Pacific|US)/[a-z_]+$:i'; /** * This function launches an error * @param boolean $caldav_context Whether we are responding via CalDAV or interactively * @param int $user_no the user who will receive this ics file * @param string $path the $path where the PUT failed to store such as /user_foo/home/ * @param string $message An optional error message to return to the client * @param int $error_no An optional value for the HTTP error code */ function rollback_on_error( $caldav_context, $user_no, $path, $message='', $error_no=500 ) { global $c, $bad_events; if ( !$message ) $message = translate('Database error'); $qry = new AwlQuery(); if ( $qry->TransactionState() != 0 ) $qry->Rollback(); if ( $caldav_context ) { if ( isset($bad_events) && isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) { $bad_events[] = $message; } else { global $request; $request->DoResponse( $error_no, $message ); } // and we don't return from that, ever... } $c->messages[] = sprintf(translate('Status: %d, Message: %s, User: %d, Path: %s'), $error_no, $message, $user_no, $path); } /** * Work out the location we are doing the PUT to, and check that we have the rights to * do the needful. * @param string $username The name of the destination user * @param int $user_no The user making the change * @param string $path The DAV path the resource is bing PUT to * @param boolean $caldav_context Whether we are responding via CalDAV or interactively * @param boolean $public Whether the collection will be public, should we need to create it */ function controlRequestContainer( $username, $user_no, $path, $caldav_context, $public = null ) { global $c, $request, $bad_events; // Check to see if the path is like /foo /foo/bar or /foo/bar/baz etc. (not ending with a '/', but contains at least one) if ( preg_match( '#^(.*/)([^/]+)$#', $path, $matches ) ) {//( $request_container = $matches[1]; // get everything up to the last '/' } else { // In this case we must have a URL with a trailing '/', so it must be a collection. $request_container = $path; } if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) { $bad_events = array(); } /** * Before we write the event, we check the container exists, creating it if it doesn't */ if ( $request_container == "/$username/" ) { /** * Well, it exists, and we support it, but it is against the CalDAV spec */ dbg_error_log( 'WARN', ' Storing events directly in user\'s base folders is not recommended!'); } else { $sql = 'SELECT * FROM collection WHERE dav_name = :dav_name'; $qry = new AwlQuery( $sql, array( ':dav_name' => $request_container) ); if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) { rollback_on_error( $caldav_context, $user_no, $path ); } if ( !isset($c->readonly_webdav_collections) || $c->readonly_webdav_collections == true ) { if ( $qry->rows() == 0 ) { $request->DoResponse( 405 ); // Method not allowed } return; } if ( $qry->rows() == 0 ) { if ( $public == true ) $public = 't'; else $public = 'f'; if ( preg_match( '{^(.*/)([^/]+)/$}', $request_container, $matches ) ) { $parent_container = $matches[1]; $displayname = $matches[2]; } $sql = 'INSERT INTO collection ( user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, created, modified, publicly_readable, resourcetypes ) VALUES( :user_no, :parent_container, :dav_name, :dav_etag, :dav_displayname, TRUE, current_timestamp, current_timestamp, :is_public::boolean, :resourcetypes )'; $params = array( ':user_no' => $user_no, ':parent_container' => $parent_container, ':dav_name' => $request_container, ':dav_etag' => md5($user_no. $request_container), ':dav_displayname' => $displayname, ':is_public' => $public, ':resourcetypes' => '' ); $qry->QDo( $sql, $params ); } else if ( isset($public) ) { $collection = $qry->Fetch(); if ( empty($collection->is_public) ) $collection->is_public = 'f'; if ( $collection->is_public == ($public?'t':'f') ) { $sql = 'UPDATE collection SET publicly_readable = :is_public::boolean WHERE collection_id = :collection_id'; $params = array( ':is_public' => ($public?'t':'f'), ':collection_id' => $collection->collection_id ); if ( ! $qry->QDo($sql,$params) ) { rollback_on_error( $caldav_context, $user_no, $path ); } } } } } /** * Check if this collection should force all events to be PUBLIC. * @param string $user_no the user that owns the collection * @param string $dav_name the collection to check * @return boolean Return true if public events only are allowed. */ function public_events_only( $user_no, $dav_name ) { global $c; $sql = 'SELECT public_events_only FROM collection WHERE dav_name = :dav_name'; $qry = new AwlQuery($sql, array(':dav_name' => $dav_name) ); if( $qry->Exec('PUT',__LINE__,__FILE__) && $qry->rows() == 1 ) { $collection = $qry->Fetch(); if ($collection->public_events_only == 't') { return true; } } // Something went wrong, must be false. return false; } /** * Get a TZID string from this VEVENT/VTODO/... component if we can * @param vComponent $comp * @return The TZID value we found, or null */ function GetTZID( vComponent $comp ) { $p = $comp->GetProperty('DTSTART'); if ( !isset($p) && $comp->GetType() == 'VTODO' ) { $p = $comp->GetProperty('DUE'); } if ( !isset($p) ) return null; return $p->GetParameterValue('TZID'); } /** * Deliver scheduling requests to attendees * @param vComponent $ical the VCALENDAR to deliver */ function handle_schedule_request( $ical ) { global $c, $session, $request; $resources = $ical->GetComponents('VTIMEZONE',false); $ic = $resources[0]; $etag = md5 ( $request->raw_post ); $reply = new XMLDocument( array("DAV:" => "", "urn:ietf:params:xml:ns:caldav" => "C" ) ); $responses = array(); $attendees = $ic->GetProperties('ATTENDEE'); $wr_attendees = $ic->GetProperties('X-WR-ATTENDEE'); if ( count ( $wr_attendees ) > 0 ) { dbg_error_log( "PUT", "Non-compliant iCal request. Using X-WR-ATTENDEE property" ); foreach( $wr_attendees AS $k => $v ) { $attendees[] = $v; } } dbg_error_log( "PUT", "Attempting to deliver scheduling request for %d attendees", count($attendees) ); foreach( $attendees AS $k => $attendee ) { $attendee_email = preg_replace( '/^mailto:/', '', $attendee->Value() ); if ( $attendee_email == $request->principal->email() ) { dbg_error_log( "PUT", "not delivering to owner" ); continue; } if ( $attendee->GetParameterValue ( 'PARTSTAT' ) != 'NEEDS-ACTION' || preg_match ( '/^[35]\.[3-9]/', $attendee->GetParameterValue ( 'SCHEDULE-STATUS' ) ) ) { dbg_error_log( "PUT", "attendee %s does not need action", $attendee_email ); continue; } if ( isset($c->enable_auto_schedule) && !$c->enable_auto_schedule ) { // In this case we're being asked not to do auto-scheduling, so we build // a response back for the client saying we can't... $attendee->SetParameterValue ('SCHEDULE-STATUS','5.3;No scheduling support for user'); continue; } dbg_error_log( "PUT", "Delivering to %s", $attendee_email ); $attendee_principal = new DAVPrincipal ( array ('email'=>$attendee_email, 'options'=> array ( 'allow_by_email' => true ) ) ); if ( $attendee_principal == false ){ $attendee->SetParameterValue ('SCHEDULE-STATUS','5.3;No scheduling support for user'); continue; } $deliver_path = $attendee_principal->internal_url('schedule-inbox'); $ar = new DAVResource($deliver_path); $priv = $ar->HavePrivilegeTo('schedule-deliver-invite' ); if ( ! $ar->HavePrivilegeTo('schedule-deliver-invite' ) ){ $reply = new XMLDocument( array('DAV:' => '') ); $privnodes = array( $reply->href($attendee_principal->url('schedule_inbox')), new XMLElement( 'privilege' ) ); // RFC3744 specifies that we can only respond with one needed privilege, so we pick the first. $reply->NSElement( $privnodes[1], 'schedule-deliver-invite' ); $xml = new XMLElement( 'need-privileges', new XMLElement( 'resource', $privnodes) ); $xmldoc = $reply->Render('error',$xml); $request->DoResponse( 403, $xmldoc, 'text/xml; charset="utf-8"'); } $attendee->SetParameterValue ('SCHEDULE-STATUS','1.2;Scheduling message has been delivered'); $ncal = new vCalendar( array('METHOD' => 'REQUEST') ); $ncal->AddComponent( array_merge( $ical->GetComponents('VEVENT',false), array($ic) )); $content = $ncal->Render(); $cid = $ar->GetProperty('collection_id'); dbg_error_log('DELIVER', 'to user: %s, to path: %s, collection: %s, from user: %s, caldata %s', $attendee_principal->user_no(), $deliver_path, $cid, $request->user_no, $content ); $item_etag = md5($content); write_resource( new DAVResource($deliver_path . $etag . '.ics'), $content, $ar, $request->user_no, $item_etag, $put_action_type='INSERT', $caldav_context=true, $log_action=true, $etag ); $attendee->SetParameterValue ('SCHEDULE-STATUS','1.2;Scheduling message has been delivered'); } // don't write an entry in the out box, ical doesn't delete it or ever read it again $ncal = new vCalendar(array('METHOD' => 'REQUEST')); $ncal->AddComponent ( array_merge ( $ical->GetComponents('VEVENT',false) , array ($ic) )); $content = $ncal->Render(); $deliver_path = $request->principal->internal_url('schedule-inbox'); $ar = new DAVResource($deliver_path); $item_etag = md5($content); write_resource( new DAVResource($deliver_path . $etag . '.ics'), $content, $ar, $request->user_no, $item_etag, $put_action_type='INSERT', $caldav_context=true, $log_action=true, $etag ); //$etag = md5($content); header('ETag: "'. $etag . '"' ); header('Schedule-Tag: "'.$etag . '"' ); $request->DoResponse( 201, 'Created' ); } /** * Deliver scheduling replies to organizer and other attendees * @param vComponent $ical the VCALENDAR to deliver * @return false on error */ function handle_schedule_reply ( vCalendar $ical ) { global $c, $session, $request; $resources = $ical->GetComponents('VTIMEZONE',false); $ic = $resources[0]; $etag = md5 ( $request->raw_post ); $organizer = $ical->GetOrganizer(); // for now we treat events with out organizers as an error if ( count ( $organizer ) < 1 ) return false; $attendees = array_merge($organizer,$ical->GetAttendees()); dbg_error_log( "PUT", "Attempting to deliver scheduling request for %d attendees", count($attendees) ); foreach( $attendees AS $k => $attendee ) { $attendee_email = preg_replace( '/^mailto:/i', '', $attendee->Value() ); dbg_error_log( "PUT", "Delivering to %s", $attendee_email ); $attendee_principal = new DAVPrincipal ( array ('email'=>$attendee_email, 'options'=> array ( 'allow_by_email' => true ) ) ); $deliver_path = $attendee_principal->internal_url('schedule_inbox'); $attendee_email = preg_replace( '/^mailto:/i', '', $attendee->Value() ); if ( $attendee_email == $request->principal->email ) { dbg_error_log( "PUT", "not delivering to owner" ); continue; } $ar = new DAVResource($deliver_path); if ( ! $ar->HavePrivilegeTo('schedule-deliver-reply' ) ){ $reply = new XMLDocument( array('DAV:' => '') ); $privnodes = array( $reply->href($attendee_principal->url('schedule_inbox')), new XMLElement( 'privilege' ) ); // RFC3744 specifies that we can only respond with one needed privilege, so we pick the first. $reply->NSElement( $privnodes[1], 'schedule-deliver-reply' ); $xml = new XMLElement( 'need-privileges', new XMLElement( 'resource', $privnodes) ); $xmldoc = $reply->Render('error',$xml); $request->DoResponse( 403, $xmldoc, 'text/xml; charset="utf-8"' ); continue; } $ncal = new vCalendar( array('METHOD' => 'REPLY') ); $ncal->AddComponent ( array_merge ( $ical->GetComponents('VEVENT',false) , array ($ic) )); $content = $ncal->Render(); write_resource( new DAVResource($deliver_path . $etag . '.ics'), $content, $ar, $request->user_no, md5($content), $put_action_type='INSERT', $caldav_context=true, $log_action=true, $etag ); } $request->DoResponse( 201, 'Created' ); } /** * Do the scheduling adjustments for a REPLY when an ATTENDEE updates their status. * @param vCalendar $resource The resource that the ATTENDEE is writing to their calendar * @param string $organizer The property which is the event ORGANIZER. */ function do_scheduling_reply( vCalendar $resource, vProperty $organizer ) { global $request; $organizer_email = preg_replace( '/^mailto:/i', '', $organizer->Value() ); $organizer_principal = new Principal('email',$organizer_email ); if ( !$organizer_principal->Exists() ) { dbg_error_log( 'PUT', 'Organizer "%s" not found - cannot perform scheduling reply.', $organizer ); return false; } $sql = 'SELECT caldav_data.dav_name, caldav_data.caldav_data FROM caldav_data JOIN calendar_item USING(dav_id) '; $sql .= 'WHERE caldav_data.collection_id IN (SELECT collection_id FROM collection WHERE is_calendar AND user_no =?) '; $sql .= 'AND uid=? LIMIT 1'; $uids = $resource->GetPropertiesByPath('/VCALENDAR/*/UID'); if ( count($uids) == 0 ) { dbg_error_log( 'PUT', 'No UID in VCALENDAR - giving up on REPLY.' ); return false; } $uid = $uids[0]->Value(); $qry = new AwlQuery($sql,$organizer_principal->user_no(), $uid); if ( !$qry->Exec('PUT',__LINE__,__FILE__) || $qry->rows() < 1 ) { dbg_error_log( 'PUT', 'Could not find original event from organizer - giving up on REPLY.' ); return false; } $row = $qry->Fetch(); $attendees = $resource->GetAttendees(); foreach( $attendees AS $v ) { $email = preg_replace( '/^mailto:/i', '', $v->Value() ); if ( $email == $request->principal->email() ) { $attendee = $v; } } if ( empty($attendee) ) { dbg_error_log( 'PUT', 'Could not find ATTENDEE in VEVENT - giving up on REPLY.' ); return false; } $schedule_original = new vCalendar($row->caldav_data); $schedule_original->UpdateAttendeeStatus($request->principal->email(), clone($attendee) ); $collection_path = preg_replace('{/[^/]+$}', '/', $row->dav_name ); $segment_name = str_replace($collection_path, '', $row->dav_name ); $organizer_calendar = new WritableCollection(array('path' => $collection_path)); $organizer_inbox = new WritableCollection(array('path' => $organizer_principal->internal_url('schedule-inbox'))); $schedule_reply = clone($schedule_original); $schedule_reply->AddProperty('METHOD', 'REPLY'); dbg_error_log( 'PUT', 'Writing scheduling REPLY from %s to %s', $request->principal->email(), $organizer_principal->email() ); $response = '3.7'; // Organizer was not found on server. if ( !$organizer_calendar->Exists() ) { dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"', $organizer_calendar->dav_name(), $schedule_target->username()); $response = '5.2'; // No scheduling support for user } else { if ( ! $organizer_inbox->HavePrivilegeTo('schedule-deliver-reply') ) { $response = '3.8'; // No authority to deliver replies to organizer. } else if ( $organizer_inbox->WriteCalendarMember($schedule_reply, false, false, $request->principal->username().$segment_name) !== false ) { $response = '1.2'; // Scheduling reply delivered successfully if ( $organizer_calendar->WriteCalendarMember($schedule_original, false, false, $segment_name) === false ) { dbg_error_log('ERROR','Could not write updated calendar member to %s', $attendee_calendar->dav_name(), $attendee_calendar->dav_name(), $schedule_target->username()); trace_bug('Failed to write scheduling resource.'); } } } $schedule_request = clone($schedule_original); $schedule_request->AddProperty('METHOD', 'REQUEST'); dbg_error_log( 'PUT', 'Status for organizer <%s> set to "%s"', $organizer->Value(), $response ); $organizer->SetParameterValue( 'SCHEDULE-STATUS', $response ); $resource->UpdateOrganizerStatus($organizer); $scheduling_actions = true; $calling_attendee = clone($attendee); $attendees = $schedule_original->GetAttendees(); foreach( $attendees AS $attendee ) { $email = preg_replace( '/^mailto:/i', '', $attendee->Value() ); if ( $email == $request->principal->email() || $email == $organizer_principal->email() ) continue; $agent = $attendee->GetParameterValue('SCHEDULE-AGENT'); if ( $agent && $agent != 'SERVER' ) { dbg_error_log( "PUT", "not delivering to %s, schedule agent set to value other than server", $email ); continue; } // an attendee's reply should modify only the PARTSTAT on other attendees' objects // other properties (that might have been adjusted individually by those other // attendees) should remain unmodified. Therefore, we have to make $schedule_original // and $schedule_request be initialized by each attendee's object here. $attendee_principal = new DAVPrincipal ( array ('email'=>$email, 'options'=> array ( 'allow_by_email' => true ) ) ); if ( $attendee_principal == false ){ dbg_error_log( 'PUT', 'Could not find attendee %s', $email); continue; } $sql = 'SELECT caldav_data.dav_name, caldav_data.caldav_data, caldav_data.collection_id FROM caldav_data JOIN calendar_item USING(dav_id) '; $sql .= 'WHERE caldav_data.collection_id IN (SELECT collection_id FROM collection WHERE is_calendar AND user_no =?) '; $sql .= 'AND uid=? LIMIT 1'; $qry = new AwlQuery($sql,$attendee_principal->user_no(), $uid); if ( !$qry->Exec('PUT',__LINE__,__FILE__) || $qry->rows() < 1 ) { dbg_error_log( 'PUT', "Could not find attendee's event %s", $uid ); } $row = $qry->Fetch(); $schedule_original = new vCalendar($row->caldav_data); $schedule_original->UpdateAttendeeStatus($request->principal->email(), clone($calling_attendee) ); $schedule_request = clone($schedule_original); $schedule_request->AddProperty('METHOD', 'REQUEST'); $schedule_target = new Principal('email',$email); $response = '3.7'; // Attendee was not found on server. if ( $schedule_target->Exists() ) { // Instead of always writing to schedule-default-calendar, we first try to // find a calendar with an existing instance of the event in any calendar of this attendee. $r = new DAVResource($row); $attendee_calendar = new WritableCollection(array('path' => $r->parent_path())); if ($attendee_calendar->IsCalendar()) { dbg_error_log( 'XXX', "found the event in attendee's calendar %s", $attendee_calendar->dav_name() ); } else { dbg_error_log( 'XXX', 'could not find the event in any calendar, using schedule-default-calendar'); $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); } if ( !$attendee_calendar->Exists() ) { dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"', $attendee_calendar->dav_name(), $schedule_target->username()); $response = '5.2'; // No scheduling support for user } else { $attendee_inbox = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-inbox'))); if ( ! $attendee_inbox->HavePrivilegeTo('schedule-deliver-invite') ) { $response = '3.8'; // No authority to deliver invitations to user. } else if ( $attendee_inbox->WriteCalendarMember($schedule_request, false) !== false ) { $response = '1.2'; // Scheduling invitation delivered successfully if ( $attendee_calendar->WriteCalendarMember($schedule_original, false) === false ) { dbg_error_log('ERROR','Could not write updated calendar member to %s', $attendee_calendar->dav_name(), $attendee_calendar->dav_name(), $schedule_target->username()); trace_bug('Failed to write scheduling resource.'); } } } } dbg_error_log( 'PUT', 'Status for attendee <%s> set to "%s"', $attendee->Value(), $response ); $attendee->SetParameterValue( 'SCHEDULE-STATUS', $response ); $scheduling_actions = true; $resource->UpdateAttendeeStatus($email, clone($attendee)); } return $scheduling_actions; } /** * Create/Update the scheduling requests for this resource. This includes updating * the scheduled user's default calendar. * @param vComponent $resource The VEVENT/VTODO/... resource we are scheduling * @param boolean $create true if the scheduling requests are being created. * @return true If there was any scheduling action */ function do_scheduling_requests( vCalendar $resource, $create, $old_data = null ) { global $request, $c; if ( !isset($request) || (isset($c->enable_auto_schedule) && !$c->enable_auto_schedule) ) return false; if ( ! is_object($resource) ) { trace_bug( 'do_scheduling_requests called with non-object parameter (%s)', gettype($resource) ); return false; } $organizer = $resource->GetOrganizer(); if ( $organizer === false || empty($organizer) ) { dbg_error_log( 'PUT', 'Event has no organizer - no scheduling required.' ); return false; } $organizer_email = preg_replace( '/^mailto:/i', '', $organizer->Value() ); if ( $request->principal->email() != $organizer_email ) { return do_scheduling_reply($resource,$organizer); } $schedule_request = clone($resource); $schedule_request->AddProperty('METHOD', 'REQUEST'); $old_attendees = array(); if ( !empty($old_data) ) { $old_resource = new vCalendar($old_data); $old_attendees = $old_resource->GetAttendees(); } $attendees = $resource->GetAttendees(); if ( count($attendees) == 0 && count($old_attendees) == 0 ) { dbg_error_log( 'PUT', 'Event has no attendees - no scheduling required.', count($attendees) ); return false; } $removed_attendees = array(); foreach( $old_attendees AS $attendee ) { $email = preg_replace( '/^mailto:/i', '', $attendee->Value() ); if ( $email == $request->principal->email() ) continue; $removed_attendees[$email] = $attendee; } $uids = $resource->GetPropertiesByPath('/VCALENDAR/*/UID'); if ( count($uids) == 0 ) { dbg_error_log( 'PUT', 'No UID in VCALENDAR - giving up on REPLY.' ); return false; } $uid = $uids[0]->Value(); dbg_error_log( 'PUT', 'Writing scheduling resources for %d attendees', count($attendees) ); $scheduling_actions = false; foreach( $attendees AS $attendee ) { $email = preg_replace( '/^mailto:/i', '', $attendee->Value() ); if ( $email == $request->principal->email() ) { dbg_error_log( "PUT", "not delivering to owner '%s'", $request->principal->email() ); continue; } if ( $create ) { $attendee_is_new = true; } else { $attendee_is_new = !isset($removed_attendees[$email]); if ( !$attendee_is_new ) unset($removed_attendees[$email]); } $agent = $attendee->GetParameterValue('SCHEDULE-AGENT'); if ( $agent && $agent != 'SERVER' ) { dbg_error_log( "PUT", "not delivering to %s, schedule agent set to value other than server", $email ); continue; } $schedule_target = new Principal('email',$email); $response = '3.7'; // Attendee was not found on server. dbg_error_log( 'PUT', 'Handling scheduling resources for %s on %s which is %s', $email, ($create?'create':'update'), ($attendee_is_new? 'new' : 'an update') ); if ( $schedule_target->Exists() ) { // Instead of always writing to schedule-default-calendar, we first try to // find a calendar with an existing instance of the event. $sql = 'SELECT caldav_data.dav_name, caldav_data.caldav_data, caldav_data.collection_id FROM caldav_data JOIN calendar_item USING(dav_id) '; $sql .= 'WHERE caldav_data.collection_id IN (SELECT collection_id FROM collection WHERE is_calendar AND user_no =?) '; $sql .= 'AND uid=? LIMIT 1'; $qry = new AwlQuery($sql,$schedule_target->user_no(), $uid); if ( !$qry->Exec('PUT',__LINE__,__FILE__) || $qry->rows() < 1 ) { dbg_error_log( 'PUT', "Could not find event in attendee's calendars" ); $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); } else { $row = $qry->Fetch(); $r = new DAVResource($row); $attendee_calendar = new WritableCollection(array('path' => $r->parent_path())); if ($attendee_calendar->IsCalendar()) { dbg_error_log( 'XXX', "found the event in attendee's calendar %s", $attendee_calendar->dav_name() ); } else { dbg_error_log( 'XXX', 'could not find the event in any calendar, using schedule-default-calendar'); $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); } } if ( !$attendee_calendar->Exists() ) { dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"', $attendee_calendar->dav_name(), $schedule_target->username()); $response = '5.2'; // No scheduling support for user } else { $attendee_inbox = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-inbox'))); if ( ! $attendee_inbox->HavePrivilegeTo('schedule-deliver-invite') ) { $response = '3.8'; // No authority to deliver invitations to user. } else if ( $attendee_inbox->WriteCalendarMember($schedule_request, $attendee_is_new) !== false ) { $response = '1.2'; // Scheduling invitation delivered successfully if ( $attendee_calendar->WriteCalendarMember($resource, $attendee_is_new) === false ) { dbg_error_log('ERROR','Could not write %s calendar member to %s', ($attendee_is_new?'new':'updated'), $attendee_calendar->dav_name(), $attendee_calendar->dav_name(), $schedule_target->username()); trace_bug('Failed to write scheduling resource.'); } } } } else { $remote = new iSchedule (); $answer = $remote->sendRequest ( $email, 'VEVENT/REQUEST', $schedule_request->Render() ); if ( $answer === false ) { $response = "3.7;Invalid Calendar User" ; } else { foreach ( $answer as $a ) // should only be one element in array { if ( $a === false ) { $response = "3.7;Invalid Calendar User" ; } elseif ( substr( $a, 0, 1 ) >= 1 ) { $response = $a ; } else { $response = "2.0;Success" ; } } } } dbg_error_log( 'PUT', 'Status for attendee <%s> set to "%s"', $attendee->Value(), $response ); $attendee->SetParameterValue( 'SCHEDULE-STATUS', $response ); $scheduling_actions = true; } if ( !$create ) { foreach( $removed_attendees AS $attendee ) { $schedule_target = new Principal('email',$email); if ( $schedule_target->Exists() ) { $attendee_calendar = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-default-calendar'))); } } } return $scheduling_actions; } /** * This function will import a whole collection * @param string $ics_content the ics file to import * @param int $user_no the user wich will receive this ics file * @param string $path the $path where it will be store such as /user_foo/home/ * @param boolean $caldav_context Whether we are responding via CalDAV or interactively * * The work is either done by */ function import_collection( $import_content, $user_no, $path, $caldav_context, $appending = false ) { global $c; if ( ! ini_get('open_basedir') && (isset($c->dbg['ALL']) || isset($c->dbg['put'])) ) { $fh = fopen('/tmp/PUT-2.txt','w'); if ( $fh ) { fwrite($fh,$import_content); fclose($fh); } } if ( preg_match( '{^begin:(vcard|vcalendar)}i', $import_content, $matches) ) { if ( $matches[1] == 'VCARD' ) import_addressbook_collection( $import_content, $user_no, $path, $caldav_context, $appending ); elseif ( $matches[1] == 'VCALENDAR' ) import_calendar_collection( $import_content, $user_no, $path, $caldav_context, $appending ); // Uncache anything to do with the collection $cache = getCacheInstance(); $cache_ns = 'collection-'.preg_replace( '{/[^/]*$}', '/', $path); $cache->delete( $cache_ns, null ); } else { dbg_error_log('PUT', 'Can only import files which are VCARD or VCALENDAR'); } } /** * This function will import a whole calendar * @param string $ics_content the ics file to import * @param int $user_no the user wich will receive this ics file * @param string $path the $path where it will be store such as /user_foo/home/ * @param boolean $caldav_context Whether we are responding via CalDAV or interactively * * Any VEVENTs with the same UID will be concatenated together */ function import_addressbook_collection( $vcard_content, $user_no, $path, $caldav_context, $appending = false ) { global $c, $session; // We hack this into an enclosing component because vComponent only expects a single root component $addressbook = new vComponent("BEGIN:ADDRESSES\r\n".$vcard_content."\r\nEND:ADDRESSES\r\n"); require_once('vcard.php'); $sql = 'SELECT * FROM collection WHERE dav_name = :dav_name'; $qry = new AwlQuery( $sql, array( ':dav_name' => $path) ); if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) rollback_on_error( $caldav_context, $user_no, $path ); if ( ! $qry->rows() == 1 ) { dbg_error_log( 'ERROR', ' PUT: Collection does not exist at "%s" for user %d', $path, $user_no ); rollback_on_error( $caldav_context, $user_no, $path ); } $collection = $qry->Fetch(); if ( !(isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import) ) $qry->Begin(); $base_params = array( ':collection_id' => $collection->collection_id, ':session_user' => $session->user_no, ':caldav_type' => 'VCARD' ); if ( !$appending ) { if ( !$qry->QDo('DELETE FROM caldav_data WHERE collection_id = :collection_id', $base_params) ) rollback_on_error( $caldav_context, $user_no, $collection->collection_id ); } $dav_data_insert = <<GetComponents(); foreach( $resources AS $k => $resource ) { if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Begin(); $vcard = new vCard( $resource->Render() ); $uid = $vcard->GetPValue('UID'); if ( empty($uid) ) { $uid = uuid(); $vcard->AddProperty('UID',$uid); } $last_modified = $vcard->GetPValue('REV'); if ( empty($last_modified) ) { $last_modified = gmdate( 'Ymd\THis\Z' ); $vcard->AddProperty('REV',$last_modified); } $created = $vcard->GetPValue('X-CREATED'); if ( empty($last_modified) ) { $created = gmdate( 'Ymd\THis\Z' ); $vcard->AddProperty('X-CREATED',$created); } $rendered_card = $vcard->Render(); $dav_data_params = $base_params; $dav_data_params[':user_no'] = $user_no; // We don't allow any of &?\/@%+: in the UID to appear in the path, but anything else is fair game. $dav_data_params[':dav_name'] = sprintf( '%s%s.ics', $path, preg_replace('{[&?\\/@%+:]}','',$uid) ); $dav_data_params[':etag'] = md5($rendered_card); $dav_data_params[':dav_data'] = $rendered_card; $dav_data_params[':modified'] = $last_modified; $dav_data_params[':created'] = $created; if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Begin(); if ( !$qry->QDo($dav_data_insert,$dav_data_params) ) rollback_on_error( $caldav_context, $user_no, $path ); $qry->QDo('SELECT dav_id FROM caldav_data WHERE dav_name = :dav_name ', array(':dav_name' => $dav_data_params[':dav_name'])); if ( $qry->rows() == 1 && $row = $qry->Fetch() ) { $dav_id = $row->dav_id; } $vcard->Write( $row->dav_id, false ); if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Commit(); } if ( !(isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import) ) { if ( ! $qry->Commit() ) rollback_on_error( $caldav_context, $user_no, $path); } } /** * This function will import a whole calendar * @param string $ics_content the ics file to import * @param int $user_no the user wich will receive this ics file * @param string $path the $path where it will be store such as /user_foo/home/ * @param boolean $caldav_context Whether we are responding via CalDAV or interactively * * Any VEVENTs with the same UID will be concatenated together */ function import_calendar_collection( $ics_content, $user_no, $path, $caldav_context, $appending = false ) { global $c, $session, $tz_regex; $calendar = new vComponent($ics_content); $timezones = $calendar->GetComponents('VTIMEZONE',true); $components = $calendar->GetComponents('VTIMEZONE',false); $displayname = $calendar->GetPValue('X-WR-CALNAME'); if ( !$appending && isset($displayname) ) { $sql = 'UPDATE collection SET dav_displayname = :displayname WHERE dav_name = :dav_name'; $qry = new AwlQuery( $sql, array( ':displayname' => $displayname, ':dav_name' => $path) ); if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) rollback_on_error( $caldav_context, $user_no, $path ); } $tz_ids = array(); foreach( $timezones AS $k => $tz ) { $tz_ids[$tz->GetPValue('TZID')] = $k; } /** Build an array of resources. Each resource is an array of vComponent */ $resources = array(); foreach( $components AS $k => $comp ) { $uid = $comp->GetPValue('UID'); if ( $uid == null || $uid == '' ) { $uid = uuid(); $comp->AddProperty('UID',$uid); dbg_error_log( 'LOG WARN', ' PUT: New collection resource does not have a UID - we assign one!' ); } if ( !isset($resources[$uid]) ) $resources[$uid] = array(); $resources[$uid][] = $comp; /** Ensure we have the timezone component for this in our array as well */ $tzid = GetTZID($comp); if ( !empty($tzid) && !isset($resources[$uid][$tzid]) && isset($tz_ids[$tzid]) ) { $resources[$uid][$tzid] = $timezones[$tz_ids[$tzid]]; } } $sql = 'SELECT * FROM collection WHERE dav_name = :dav_name'; $qry = new AwlQuery( $sql, array( ':dav_name' => $path) ); if ( ! $qry->Exec('PUT',__LINE__,__FILE__) ) rollback_on_error( $caldav_context, $user_no, $path ); if ( ! $qry->rows() == 1 ) { dbg_error_log( 'ERROR', ' PUT: Collection does not exist at "%s" for user %d', $path, $user_no ); rollback_on_error( $caldav_context, $user_no, $path ); } $collection = $qry->Fetch(); $collection_id = $collection->collection_id; // Fetch the current collection data $qry->QDo('SELECT dav_name, caldav_data FROM caldav_data WHERE collection_id=:collection_id', array( ':collection_id' => $collection_id )); $current_data = array(); while( $row = $qry->Fetch() ) $current_data[$row->dav_name] = $row->caldav_data; if ( !(isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import) ) $qry->Begin(); $base_params = array( ':collection_id' => $collection_id ); $dav_data_insert = << 0 ) $qry->QDo('SELECT new_sync_token(0,'.$collection_id.')'); foreach( $resources AS $uid => $resource ) { /** Construct the VCALENDAR data */ $vcal = new vCalendar(); $vcal->SetComponents($resource); $icalendar = $vcal->Render(); $dav_name = sprintf( '%s%s.ics', $path, preg_replace('{[&?\\/@%+:]}','',$uid) ); /** Do we need to do anything? */ $inserting = true; if ( isset($current_data[$dav_name]) ) { if ( $icalendar == $current_data[$dav_name] ) { unset($current_data[$dav_name]); continue; } $sync_change = 200; unset($current_data[$dav_name]); $inserting = false; } else $sync_change = 201; if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Begin(); /** As ever, we mostly deal with the first resource component */ $first = $resource[0]; $dav_data_params = $base_params; $dav_data_params[':user_no'] = $user_no; // We don't allow any of &?\/@%+: in the UID to appear in the path, but anything else is fair game. $dav_data_params[':dav_name'] = $dav_name; $dav_data_params[':etag'] = md5($icalendar); $calitem_params = $dav_data_params; $dav_data_params[':dav_data'] = $icalendar; $dav_data_params[':caldav_type'] = $first->GetType(); $dav_data_params[':session_user'] = $session->user_no; if ( !$qry->QDo( ($inserting ? $dav_data_insert : $dav_data_update), $dav_data_params) ) rollback_on_error( $caldav_context, $user_no, $path ); $qry->QDo('SELECT dav_id FROM caldav_data WHERE dav_name = :dav_name ', array(':dav_name' => $dav_data_params[':dav_name'])); if ( $qry->rows() == 1 && $row = $qry->Fetch() ) { $dav_id = $row->dav_id; } $dtstart = $first->GetPValue('DTSTART'); $calitem_params[':dtstart'] = $dtstart; if ( (!isset($dtstart) || $dtstart == '') && $first->GetPValue('DUE') != '' ) { $dtstart = $first->GetPValue('DUE'); } $dtend = $first->GetPValue('DTEND'); if ( isset($dtend) && $dtend != '' ) { dbg_error_log( 'PUT', ' DTEND: "%s", DTSTART: "%s", DURATION: "%s"', $dtend, $dtstart, $first->GetPValue('DURATION') ); $calitem_params[':dtend'] = $dtend; $dtend = ':dtend'; } else { $dtend = 'NULL'; if ( $first->GetPValue('DURATION') != '' AND $dtstart != '' ) { $duration = trim(preg_replace( '#[PT]#', ' ', $first->GetPValue('DURATION') )); if ( $duration == '' ) $duration = '0 seconds'; $dtend = '(:dtstart::timestamp with time zone + :duration::interval)'; $calitem_params[':duration'] = $duration; } elseif ( $first->GetType() == 'VEVENT' ) { /** * From RFC2445 4.6.1: * For cases where a "VEVENT" calendar component specifies a "DTSTART" * property with a DATE data type but no "DTEND" property, the events * non-inclusive end is the end of the calendar date specified by the * "DTSTART" property. For cases where a "VEVENT" calendar component specifies * a "DTSTART" property with a DATE-TIME data type but no "DTEND" property, * the event ends on the same calendar date and time of day specified by the * "DTSTART" property. * * So we're looking for 'VALUE=DATE', to identify the duration, effectively. * */ $dtstart_prop = $first->GetProperty('DTSTART'); if ( empty($dtstart_prop) ) { dbg_error_log('PUT','Invalid VEVENT without DTSTART, UID="%s" in collection %d', $uid, $collection_id); continue; } $value_type = $dtstart_prop->GetParameterValue('VALUE'); dbg_error_log('PUT','DTSTART without DTEND. DTSTART value type is %s', $value_type ); if ( isset($value_type) && $value_type == 'DATE' ) $dtend = '(:dtstart::timestamp with time zone::date + \'1 day\'::interval)'; else $dtend = ':dtstart'; } } $last_modified = $first->GetPValue('LAST-MODIFIED'); if ( !isset($last_modified) || $last_modified == '' ) $last_modified = gmdate( 'Ymd\THis\Z' ); $calitem_params[':modified'] = $last_modified; $dtstamp = $first->GetPValue('DTSTAMP'); if ( empty($dtstamp) ) $dtstamp = $last_modified; $calitem_params[':dtstamp'] = $dtstamp; /** RFC2445, 4.8.1.3: Default is PUBLIC, or also if overridden by the collection settings */ $class = ($collection->public_events_only == 't' ? 'PUBLIC' : $first->GetPValue('CLASS') ); if ( !isset($class) || $class == '' ) $class = 'PUBLIC'; $calitem_params[':class'] = $class; /** Calculate what timezone to set, first, if possible */ $tzid = GetTZID($first); if ( !empty($tzid) && !empty($resource[$tzid]) ) { $tz = $resource[$tzid]; $olson = $vcal->GetOlsonName($tz); dbg_error_log( 'PUT', ' Using TZID[%s] and location of [%s]', $tzid, (isset($olson) ? $olson : '') ); if ( !empty($olson) && ($olson != $last_olson) && preg_match( $tz_regex, $olson ) ) { dbg_error_log( 'PUT', ' Setting timezone to %s', $olson ); $qry->QDo('SET TIMEZONE TO \''.$olson."'" ); $last_olson = $olson; } $params = array( ':tzid' => $tzid); $qry = new AwlQuery('SELECT 1 FROM timezones WHERE tzid = :tzid', $params ); if ( $qry->Exec('PUT',__LINE__,__FILE__) && $qry->rows() == 0 ) { $params[':olson_name'] = $olson; $params[':vtimezone'] = (isset($tz) ? $tz->Render() : null ); $params[':last_modified'] = (isset($tz) ? $tz->GetPValue('LAST-MODIFIED') : null ); if ( empty($params[':last_modified']) ) { $params[':last_modified'] = gmdate('Ymd\THis\Z'); } $qry->QDo('INSERT INTO timezones (tzid, olson_name, active, vtimezone, last_modified) VALUES(:tzid,:olson_name,false,:vtimezone,:last_modified)', $params ); } } else { $tz = $olson = $tzid = null; } $sql = str_replace( '##dtend##', $dtend, ($inserting ? $calitem_insert : $calitem_update) ); $calitem_params[':tzid'] = $tzid; $calitem_params[':uid'] = $first->GetPValue('UID'); $calitem_params[':summary'] = $first->GetPValue('SUMMARY'); $calitem_params[':location'] = $first->GetPValue('LOCATION'); $calitem_params[':transp'] = $first->GetPValue('TRANSP'); $calitem_params[':description'] = $first->GetPValue('DESCRIPTION'); $calitem_params[':rrule'] = $first->GetPValue('RRULE'); $calitem_params[':url'] = $first->GetPValue('URL'); $calitem_params[':priority'] = $first->GetPValue('PRIORITY'); $calitem_params[':due'] = $first->GetPValue('DUE'); $calitem_params[':percent_complete'] = $first->GetPValue('PERCENT-COMPLETE'); $calitem_params[':status'] = $first->GetPValue('STATUS'); if ( $inserting ) { $created = $first->GetPValue('CREATED'); if ( $created == '00001231T000000Z' ) $created = '20001231T000000Z'; $calitem_params[':created'] = $created; } if ( !$qry->QDo($sql,$calitem_params) ) rollback_on_error( $caldav_context, $user_no, $path); write_alarms($dav_id, $first); write_attendees($dav_id, $vcal); $qry->QDo("SELECT write_sync_change( $collection_id, $sync_change, :dav_name)", array(':dav_name' => $dav_name ) ); do_scheduling_requests( $vcal, true ); if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Commit(); } if ( !$appending && count($current_data) > 0 ) { $params = array( ':collection_id' => $collection_id ); if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Begin(); foreach( $current_data AS $dav_name => $data ) { $params[':dav_name'] = $dav_name; $qry->QDo('DELETE FROM caldav_data WHERE collection_id = :collection_id AND dav_name = :dav_name', $params); $qry->QDo('SELECT write_sync_change(:collection_id, 404, :dav_name)', $params); } if ( isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import ) $qry->Commit(); } if ( !(isset($c->skip_bad_event_on_import) && $c->skip_bad_event_on_import) ) { if ( ! $qry->Commit() ) rollback_on_error( $caldav_context, $user_no, $path); } } /** * Given a dav_id and an original vCalendar, pull out each of the VALARMs * and write the values into the calendar_alarm table. * * @param int $dav_id The dav_id of the caldav_data we're processing * @param vComponent The VEVENT or VTODO containing the VALARM * @return null */ function write_alarms( $dav_id, vComponent $ical ) { $qry = new AwlQuery('DELETE FROM calendar_alarm WHERE dav_id = '.$dav_id ); $qry->Exec('PUT',__LINE__,__FILE__); $alarms = $ical->GetComponents('VALARM'); if ( count($alarms) < 1 ) return; $qry->SetSql('INSERT INTO calendar_alarm ( dav_id, action, trigger, summary, description, component, next_trigger ) VALUES( '.$dav_id.', :action, :trigger, :summary, :description, :component, :related::timestamp with time zone + :related_trigger::interval )' ); $qry->Prepare(); foreach( $alarms AS $v ) { $trigger = array_merge($v->GetProperties('TRIGGER')); if ( $trigger == null ) continue; // Bogus data. $trigger = $trigger[0]; $related = null; $related_trigger = '0M'; $trigger_type = $trigger->GetParameterValue('VALUE'); if ( !isset($trigger_type) || $trigger_type == 'DURATION' ) { switch ( $trigger->GetParameterValue('RELATED') ) { case 'DTEND': $related = $ical->GetProperty('DTEND'); break; case 'DUE': $related = $ical->GetProperty('DUE'); break; default: $related = $ical->GetProperty('DTSTART'); } $duration = $trigger->Value(); if ( !preg_match('{^-?P(:?\d+W)?(:?\d+D)?(:?T(:?\d+H)?(:?\d+M)?(:?\d+S)?)?$}', $duration ) ) continue; $minus = (substr($duration,0,1) == '-'); $related_trigger = trim(preg_replace( '#[PT-]#', ' ', $duration )); if ( $minus ) { $related_trigger = preg_replace( '{(\d+[WDHMS])}', '-$1 ', $related_trigger ); } else { $related_trigger = preg_replace( '{(\d+[WDHMS])}', '$1 ', $related_trigger ); } } else if ( $trigger_type == 'DATE-TIME' ) { $related = $trigger; } else { if ( false === strtotime($trigger->Value()) ) continue; // Invalid date. $related = $trigger; } $related_date = new RepeatRuleDateTime($related); $qry->Bind(':action', $v->GetPValue('ACTION')); $qry->Bind(':trigger', $trigger->Render()); $qry->Bind(':summary', $v->GetPValue('SUMMARY')); $qry->Bind(':description', $v->GetPValue('DESCRIPTION')); $qry->Bind(':component', $v->Render()); $qry->Bind(':related', $related_date->UTC() ); $qry->Bind(':related_trigger', $related_trigger ); $qry->Exec('PUT',__LINE__,__FILE__); } } /** * Parse out the attendee property and write a row to the * calendar_attendee table for each one. * @param int $dav_id The dav_id of the caldav_data we're processing * @param vComponent The VEVENT or VTODO containing the ATTENDEEs * @return null */ function write_attendees( $dav_id, vCalendar $ical ) { $qry = new AwlQuery('DELETE FROM calendar_attendee WHERE dav_id = '.$dav_id ); $qry->Exec('PUT',__LINE__,__FILE__); $attendees = $ical->GetAttendees(); if ( count($attendees) < 1 ) return; $qry->SetSql('INSERT INTO calendar_attendee ( dav_id, status, partstat, cn, attendee, role, rsvp, property ) VALUES( '.$dav_id.', :status, :partstat, :cn, :attendee, :role, :rsvp, :property )' ); $qry->Prepare(); $processed = array(); foreach( $attendees AS $v ) { $attendee = $v->Value(); if ( isset($processed[$attendee]) ) { dbg_error_log( 'LOG', 'Duplicate attendee "%s" in resource "%d"', $attendee, $dav_id ); dbg_error_log( 'LOG', 'Original: "%s"', $processed[$attendee] ); dbg_error_log( 'LOG', 'Duplicate: "%s"', $v->Render() ); continue; /** @todo work out why we get duplicate ATTENDEE on one VEVENT */ } $qry->Bind(':attendee', $attendee ); $qry->Bind(':status', $v->GetParameterValue('STATUS') ); $qry->Bind(':partstat', $v->GetParameterValue('PARTSTAT') ); $qry->Bind(':cn', $v->GetParameterValue('CN') ); $qry->Bind(':role', $v->GetParameterValue('ROLE') ); $qry->Bind(':rsvp', $v->GetParameterValue('RSVP') ); $qry->Bind(':property', $v->Render() ); $qry->Exec('PUT',__LINE__,__FILE__); $processed[$attendee] = $v->Render(); } } /** * Actually write the resource to the database. All checking of whether this is reasonable * should be done before this is called. * * @param DAVResource $resource The resource being written * @param string $caldav_data The actual data to be written * @param DAVResource $collection The collection containing the resource being written * @param int $author The user_no who wants to put this resource on the server * @param string $etag An etag unique for this event * @param string $put_action_type INSERT or UPDATE depending on what we are to do * @param boolean $caldav_context True, if we are responding via CalDAV, false for other ways of calling this * @param string Either 'INSERT' or 'UPDATE': the type of action we are doing * @param boolean $log_action Whether to log the fact that we are writing this into an action log (if configured) * @param string $weak_etag An etag that is NOT modified on ATTENDEE changes for this event * * @return boolean True for success, false for failure. */ function write_resource( DAVResource $resource, $caldav_data, DAVResource $collection, $author, &$etag, $put_action_type, $caldav_context, $log_action=true, $weak_etag=null ) { global $tz_regex, $session; $path = $resource->bound_from(); $user_no = $collection->user_no(); $vcal = new vCalendar( $caldav_data ); $resources = $vcal->GetComponents('VTIMEZONE',false); // Not matching VTIMEZONE if ( !isset($resources[0]) ) { $resource_type = 'Unknown'; /** @todo Handle writing non-calendar resources, like address book entries or random file data */ rollback_on_error( $caldav_context, $user_no, $path, translate('No calendar content'), 412 ); return false; } else { $first = $resources[0]; if ( !($first instanceof vComponent) ) { print $vcal->Render(); fatal('This is not a vComponent!'); } $resource_type = $first->GetType(); } $collection_id = $collection->collection_id(); $qry = new AwlQuery(); $qry->Begin(); $dav_params = array( ':etag' => $etag, ':dav_data' => $caldav_data, ':caldav_type' => $resource_type, ':session_user' => $author, ':weak_etag' => $weak_etag ); $calitem_params = array( ':etag' => $etag ); if ( $put_action_type == 'INSERT' ) { $qry->QDo('SELECT nextval(\'dav_id_seq\') AS dav_id, null AS caldav_data'); } else { $qry->QDo('SELECT dav_id, caldav_data FROM caldav_data WHERE dav_name = :dav_name ', array(':dav_name' => $path)); } if ( $qry->rows() != 1 || !($row = $qry->Fetch()) ) { // No dav_id? => We're toast! trace_bug( 'No dav_id for "%s" on %s!!!', $path, ($create_resource ? 'create': 'update')); rollback_on_error( $caldav_context, $user_no, $path); return false; } $dav_id = $row->dav_id; $old_dav_data = $row->caldav_data; $dav_params[':dav_id'] = $dav_id; $calitem_params[':dav_id'] = $dav_id; $due = null; if ( $first->GetType() == 'VTODO' ) $due = $first->GetPValue('DUE'); $calitem_params[':due'] = $due; $dtstart = $first->GetPValue('DTSTART'); if ( empty($dtstart) ) $dtstart = $due; $calitem_params[':dtstart'] = $dtstart; $dtend = $first->GetPValue('DTEND'); if ( isset($dtend) && $dtend != '' ) { dbg_error_log( 'PUT', ' DTEND: "%s", DTSTART: "%s", DURATION: "%s"', $dtend, $dtstart, $first->GetPValue('DURATION') ); $calitem_params[':dtend'] = $dtend; $dtend = ':dtend'; } else { // In this case we'll construct the SQL directly as a calculation relative to :dtstart $dtend = 'NULL'; if ( $first->GetPValue('DURATION') != '' AND $dtstart != '' ) { $duration = trim(preg_replace( '#[PT]#', ' ', $first->GetPValue('DURATION') )); if ( $duration == '' ) $duration = '0 seconds'; $dtend = '(:dtstart::timestamp with time zone + :duration::interval)'; $calitem_params[':duration'] = $duration; } elseif ( $first->GetType() == 'VEVENT' ) { /** * From RFC2445 4.6.1: * For cases where a "VEVENT" calendar component specifies a "DTSTART" * property with a DATE data type but no "DTEND" property, the events * non-inclusive end is the end of the calendar date specified by the * "DTSTART" property. For cases where a "VEVENT" calendar component specifies * a "DTSTART" property with a DATE-TIME data type but no "DTEND" property, * the event ends on the same calendar date and time of day specified by the * "DTSTART" property. * * So we're looking for 'VALUE=DATE', to identify the duration, effectively. * */ $dtstart_prop = $first->GetProperty('DTSTART'); $value_type = $dtstart_prop->GetParameterValue('VALUE'); dbg_error_log('PUT','DTSTART without DTEND. DTSTART value type is %s', $value_type ); if ( isset($value_type) && $value_type == 'DATE' ) $dtend = '(:dtstart::timestamp with time zone::date + \'1 day\'::interval)'; else $dtend = ':dtstart'; } } $dtstamp = $first->GetPValue('DTSTAMP'); if ( !isset($dtstamp) || $dtstamp == '' ) { // Strictly, we're dealing with an out of spec component here, but we'll try and survive $dtstamp = gmdate( 'Ymd\THis\Z' ); } $calitem_params[':dtstamp'] = $dtstamp; $last_modified = $first->GetPValue('LAST-MODIFIED'); if ( !isset($last_modified) || $last_modified == '' ) $last_modified = $dtstamp; $dav_params[':modified'] = $last_modified; $calitem_params[':modified'] = $last_modified; $created = $first->GetPValue('CREATED'); if ( $created == '00001231T000000Z' ) $created = '20001231T000000Z'; $class = $first->GetPValue('CLASS'); /* Check and see if we should over ride the class. */ /** @todo is there some way we can move this out of this function? Or at least get rid of the need for the SQL query here. */ if ( public_events_only($user_no, $path) ) { $class = 'PUBLIC'; } /* * It seems that some calendar clients don't set a class... * RFC2445, 4.8.1.3: * Default is PUBLIC */ if ( !isset($class) || $class == '' ) { $class = 'PUBLIC'; } $calitem_params[':class'] = $class; /** Calculate what timezone to set, first, if possible */ $last_olson = 'Turkmenikikamukau'; // I really hope this location doesn't exist! $tzid = GetTZID($first); if ( !empty($tzid) ) { $timezones = $vcal->GetComponents('VTIMEZONE'); foreach( $timezones AS $k => $tz ) { if ( $tz->GetPValue('TZID') != $tzid ) { /** * We'll skip any tz definitions that are for a TZID other than the DTSTART/DUE on the first VEVENT/VTODO */ dbg_error_log( 'ERROR', ' Event uses TZID[%s], skipping included TZID[%s]!', $tz->GetPValue('TZID'), $tzid ); continue; } $olson = olson_from_tzstring($tzid); if ( empty($olson) ) { $olson = $tz->GetPValue('X-LIC-LOCATION'); if ( !empty($olson) ) { $olson = olson_from_tzstring($olson); } } } dbg_error_log( 'PUT', ' Using TZID[%s] and location of [%s]', $tzid, (isset($olson) ? $olson : '') ); if ( !empty($olson) && ($olson != $last_olson) && preg_match( $tz_regex, $olson ) ) { dbg_error_log( 'PUT', ' Setting timezone to %s', $olson ); if ( $olson != '' ) { $qry->QDo('SET TIMEZONE TO \''.$olson."'" ); } $last_olson = $olson; } $params = array( ':tzid' => $tzid); $qry = new AwlQuery('SELECT 1 FROM timezones WHERE tzid = :tzid', $params ); if ( $qry->Exec('PUT',__LINE__,__FILE__) && $qry->rows() == 0 ) { $params[':olson_name'] = $olson; $params[':vtimezone'] = (isset($tz) ? $tz->Render() : null ); $qry->QDo('INSERT INTO timezones (tzid, olson_name, active, vtimezone) VALUES(:tzid,:olson_name,false,:vtimezone)', $params ); } if ( !isset($olson) || $olson == '' ) $olson = $tzid; } $qry->QDo('SELECT new_sync_token(0,'.$collection_id.')'); $calitem_params[':tzid'] = $tzid; $calitem_params[':uid'] = $first->GetPValue('UID'); $calitem_params[':summary'] = $first->GetPValue('SUMMARY'); $calitem_params[':location'] = $first->GetPValue('LOCATION'); $calitem_params[':transp'] = $first->GetPValue('TRANSP'); $calitem_params[':description'] = $first->GetPValue('DESCRIPTION'); $calitem_params[':rrule'] = $first->GetPValue('RRULE'); $calitem_params[':url'] = $first->GetPValue('URL'); $calitem_params[':priority'] = $first->GetPValue('PRIORITY'); $calitem_params[':percent_complete'] = $first->GetPValue('PERCENT-COMPLETE'); $calitem_params[':status'] = $first->GetPValue('STATUS'); if ( !$collection->IsSchedulingCollection() ) { if ( do_scheduling_requests($vcal, ($put_action_type == 'INSERT'), $old_dav_data ) ) { $dav_params[':dav_data'] = $vcal->Render(null, true); $etag = null; } } if ( !isset($dav_params[':modified']) ) $dav_params[':modified'] = 'now'; if ( $put_action_type == 'INSERT' ) { $sql = 'INSERT INTO caldav_data ( dav_id, user_no, dav_name, dav_etag, caldav_data, caldav_type, logged_user, created, modified, collection_id, weak_etag ) VALUES( :dav_id, :user_no, :dav_name, :etag, :dav_data, :caldav_type, :session_user, :created, :modified, :collection_id, :weak_etag )'; $dav_params[':collection_id'] = $collection_id; $dav_params[':user_no'] = $user_no; $dav_params[':dav_name'] = $path; $dav_params[':created'] = (isset($created) && $created != '' ? $created : $dtstamp); } else { $sql = 'UPDATE caldav_data SET caldav_data=:dav_data, dav_etag=:etag, caldav_type=:caldav_type, logged_user=:session_user, modified=:modified, weak_etag=:weak_etag WHERE dav_id=:dav_id'; } $qry = new AwlQuery($sql,$dav_params); if ( !$qry->Exec('PUT',__LINE__,__FILE__) ) { fatal('Insert into calendar_item failed...'); rollback_on_error( $caldav_context, $user_no, $path); return false; } if ( $put_action_type == 'INSERT' ) { $sql = <<GetPValue('UID'), $user_no, $collection_id, $path ); } else if ( $log_action ) { dbg_error_log( 'PUT', 'No log_caldav_action( %s, %s, %s, %s, %s) can be called.', $put_action_type, $first->GetPValue('UID'), $user_no, $collection_id, $path ); } $qry = new AwlQuery( $sql, $calitem_params ); if ( !$qry->Exec('PUT',__LINE__,__FILE__) ) { rollback_on_error( $caldav_context, $user_no, $path); return false; } $qry->QDo("SELECT write_sync_change( $collection_id, $sync_change, :dav_name)", array(':dav_name' => $path ) ); $qry->Commit(); if ( function_exists('post_commit_action') ) { post_commit_action( $put_action_type, $first->GetPValue('UID'), $user_no, $collection_id, $path ); } // Uncache anything to do with the collection $cache = getCacheInstance(); $cache_ns = 'collection-'.preg_replace( '{/[^/]*$}', '/', $path); $cache->delete( $cache_ns, null ); dbg_error_log( 'PUT', 'User: %d, ETag: %s, Path: %s', $author, $etag, $path); return true; // Success! } /** * A slightly simpler version of write_resource which will make more sense for calling from * an external program. This makes assumptions that the collection and user do exist * and bypasses all checks for whether it is reasonable to write this here. * @param string $path The path to the resource being written * @param string $caldav_data The actual resource to be written * @param string $put_action_type INSERT or UPDATE depending on what we are to do * @return boolean True for success, false for failure. */ function simple_write_resource( $path, $caldav_data, $put_action_type, $write_action_log = false ) { global $session; /** * We pull the user_no & collection_id out of the collection table, based on the resource path */ $dav_resource = new DAVResource($path); $etag = md5($caldav_data); $collection_path = preg_replace( '#/[^/]*$#', '/', $path ); $collection = new DAVResource($collection_path); if ( $collection->IsCollection() || $collection->IsSchedulingCollection() ) { return write_resource( $dav_resource, $caldav_data, $collection, $session->user_no, $etag, $put_action_type, false, $write_action_log ); } return false; } davical-1.1.1/inc/tz/0000755000000000000000000000000011776303360011217 5ustar davical-1.1.1/inc/tz/capabilities.php0000644000000000000000000000717311651212132014355 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ $primary_source = ''; $source = ''; if ( substr($c->tzsource,0,4) == 'http' ) { $source = ''.$c->tzsource.''; } else { if ( empty($c->tzsource) ) $c->tzsource = '../zonedb/vtimezones'; if ( file_exists($c->tzsource.'/primary-source') ) { $primary_source = ''.file_get_contents($c->tzsource.'/primary-source').''; } } $contact = $c->admin_email; header('Content-Type: application/xml; charset="utf-8"'); echo << $primary_source$source mailto:$contact list List timezone identifiers and localized forms lang false true Specify desired localized form(s) changedsince false false Limit result to timezones changed since the given date returnall false false If present inactive timezones will be returned. get Returns one or more timezones as specified by the tzid parameter. format false false text/calendar application/calendar+xml Specify required format for timezone. lang false true Specify desired localized form(s) tzid true true Specify desired timezone identifiers expand Expands the specified timezone(s) into local onset and UTC offsets tzid true true Specify desired timezone identifiers start false false Specify start of the period of interest. If omitted the current year is assumed. end false false Specify end of the period of interest. If omitted the current year + 10 is assumed. capabilities Gets the capabilities of the server EOCAP; exit(0);davical-1.1.1/inc/tz/get.php0000644000000000000000000000374111651212132012500 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once('vCalendar.php'); if ( empty($format) ) $format = 'text/calendar'; if ( $format != 'text/calendar' ) { $request->PreconditionFailed(403, 'supported-format', 'This server currently only supports text/calendar format.', 'urn:ietf:params:xml:ns:timezone-service'); } $sql = 'SELECT our_tzno, tzid, active, olson_name, vtimezone, etag, '; $sql .= 'to_char(last_modified,\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified '; $sql .= 'FROM timezones WHERE tzid=:tzid'; $params = array( ':tzid' => $tzid ); $qry = new AwlQuery($sql,$params); if ( !$qry->Exec() ) exit(1); if ( $qry->rows() < 1 ) { $sql = 'SELECT our_tzno, tzid, active, olson_name, vtimezone, etag, '; $sql .= 'to_char(last_modified,\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified '; $sql .= 'FROM timezones JOIN tz_aliases USING(our_tzno) WHERE tzalias=:tzid'; if ( !$qry->Exec() ) exit(1); if ( $qry->rows() < 1 ) $request->DoResponse(404); } $tz = $qry->Fetch(); $vtz = new vCalendar($tz->vtimezone); $vtz->AddProperty('TZ-URL', $c->protocol_server_port . $_SERVER['REQUEST_URI']); $vtz->AddProperty('TZNAME', $tz->olson_name ); if ( $qry->QDo('SELECT * FROM tz_localnames WHERE our_tzno = :our_tzno', array(':our_tzno'=>$tz->our_tzno)) && $qry->rows() ) { while( $name = $qry->Fetch() ) { if ( strpos($_SERVER['QUERY_STRING'], 'lang='.$name->locale) !== false ) { $vtz->AddProperty('TZNAME',$name->localised_name, array('LANGUAGE',str_replace('_','-',$name->locale))); } } } header( 'ETag: "'.$tz->etag.'"' ); header( 'Last-Modified: '. $tz->last_modified ); header( 'Content-Disposition: Attachment; Filename="'.str_replace('/','-',$tzid . '.ics"' )); $request->DoResponse(200, $vtz->Render(), 'text/calendar; charset=UTF-8'); exit(0); davical-1.1.1/inc/tz/list.php0000644000000000000000000000606411747365135012717 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once('vComponent.php'); $response = new XMLDocument( array("urn:ietf:params:xml:ns:timezone-service" => "") ); $tzlist = $response->NewXMLElement('timezone-list'); $qry = new AwlQuery('SELECT to_char(max(last_modified),\'YYYY-MM-DD"T"HH24:MI:SS"Z"\') AS dtstamp FROM timezones'); if ( $qry->Exec('tz/list',__LINE__,__FILE__) && $qry->rows() > 0 ) { $row = $qry->Fetch(); $tzlist->NewElement('dtstamp', $row->dtstamp); } else { $tzlist->NewElement('dtstamp', gmdate('Y-m-d\TH:i:s\Z')); } $sql = 'SELECT our_tzno, tzid, active, to_char(last_modified,\'YYYY-MM-DD"T"HH24:MI:SS"Z"\') AS last_modified, olson_name, vtimezone FROM timezones'; $params = array(); $where = ''; if ( $returnall !== true ) { $where = 'active'; } if ( !empty($changedsince) ) { if ( !empty($where) ) $where .= ' AND '; $where .= 'last_modified > :changedsince'; $params[':changedsince'] = $changedsince; } if ( !empty($tzid) ) { if ( !empty($where) ) $where .= ' AND '; $where .= '(tzid = :tzid OR our_tzno IN (SELECT our_tzno FROM tz_aliases WHERE tzalias = :tzid))'; $params[':tzid'] = $tzid; } if ( !empty($where)) $sql .= ' WHERE '.$where; if ( !empty($c->strict_result_ordering) && $c->strict_result_ordering ) { $sql .= ' ORDER BY tzid'; } /* 2009-10-11T09:32:11Z America/New_York 2009-09-17T01:39:34Z US/Eastern America/New_York */ $q2 = new AwlQuery(); $qry = new AwlQuery($sql,$params); if ( $qry->Exec('tz/list',__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $tz = $qry->Fetch() ) { $elements = array( new XMLElement('tzid', $tz->tzid), new XMLElement('last-modified', $tz->last_modified) ); if ( $tz->active != 't' ) { $elements[] = new XMLElement('inactive' ); } if ( $tz->tzid != $tz->olson_name ) { $elements[] = new XMLElement('alias', $tz->olson_name ); } if ( $q2->QDo('SELECT * FROM tz_aliases WHERE our_tzno = ?', array($tz->our_tzno)) ) { while( $alias = $q2->Fetch() ) { $elements[] = new XMLElement('alias', $alias->tzalias ); } } if ( !empty($lang) && $q2->QDo('SELECT * FROM tz_localnames WHERE our_tzno = ? AND locale = ?', array($tz->our_tzno, $lang)) && $q2->rows() > 0 ) { while( $local = $q2->Fetch() ) { $attr = array( 'lang' => $local->locale ); if ( $local->preferred == 't' ) $attr['preferred'] = 'true'; $elements[] = new XMLElement('local-name', $local->localised_name, $attr ); } } else { $elements[] = new XMLElement('local-name', $tz->tzid, ( empty($lang) ? null : array( 'lang' => $lang ) ) ); } $tzlist->NewElement('summary', $elements); } } header('Content-Type: application/xml; charset="utf-8"'); echo $response->Render($tzlist); exit(0);davical-1.1.1/inc/tz/expand.php0000644000000000000000000001512411666005563013214 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once('vCalendar.php'); require_once('RRule-v2.php'); if ( empty($format) ) $format = 'text/calendar'; if ( $format != 'text/calendar' ) { $request->PreconditionFailed(403, 'supported-format', 'This server currently only supports text/calendar format.', 'urn:ietf:params:xml:ns:timezone-service' ); } if ( empty($start) ) $start = sprintf( '%04d-01-01', date('Y')); if ( empty($end) ) $end = sprintf( '%04d-12-31', date('Y') + 10); $sql = 'SELECT our_tzno, tzid, active, olson_name, vtimezone, etag, '; $sql .= 'to_char(last_modified,\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified '; $sql .= 'FROM timezones WHERE tzid=:tzid'; $params = array( ':tzid' => $tzid ); $qry = new AwlQuery($sql,$params); if ( !$qry->Exec() ) exit(1); if ( $qry->rows() < 1 ) { $sql = 'SELECT our_tzno, tzid, active, olson_name, vtimezone, etag, '; $sql .= 'to_char(last_modified,\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified '; $sql .= 'FROM timezones JOIN tz_aliases USING(our_tzno) WHERE tzalias=:tzid'; if ( !$qry->Exec() ) exit(1); if ( $qry->rows() < 1 ) $request->DoResponse(404); } $tz = $qry->Fetch(); // define( 'DEBUG_EXPAND', true); define( 'DEBUG_EXPAND', false ); /** * Expand the instances for a STANDARD or DAYLIGHT component of a VTIMEZONE * * @param object $vResource is a VCALENDAR with a VTIMEZONE containing components needing expansion * @param object $range_start A RepeatRuleDateTime which is the beginning of the range for events. * @param object $range_end A RepeatRuleDateTime which is the end of the range for events. * @param int $offset_from The offset from UTC in seconds at the onset time. * * @return array of onset datetimes with UTC from/to offsets */ function expand_timezone_onsets( vCalendar $vResource, RepeatRuleDateTime $range_start, RepeatRuleDateTime $range_end ) { global $c; $vtimezones = $vResource->GetComponents(); $vtz = $vtimezones[0]; $components = $vtz->GetComponents(); $instances = array(); $dtstart = null; $is_date = false; $has_repeats = false; $zone_tz = $vtz->GetPValue('TZID'); foreach( $components AS $k => $comp ) { if ( DEBUG_EXPAND ) { printf( "Starting TZ expansion for component '%s' in timezone '%s'\n", $comp->GetType(), $zone_tz); foreach( $instances AS $k => $v ) { print ' : '.$k; } print "\n"; } $dtstart_prop = $comp->GetProperty('DTSTART'); if ( !isset($dtstart_prop) ) continue; $dtstart = new RepeatRuleDateTime( $dtstart_prop ); $dtstart->setTimeZone('UTC'); $offset_from = $comp->GetPValue('TZOFFSETFROM'); $offset_from = (($offset_from / 100) * 3600) + ((abs($offset_from) % 100) * 60 * ($offset_from < 0 ? -1 : 0)); $offset_from *= -1; $offset_from = "$offset_from seconds"; dbg_error_log( 'tz/update', "%s of offset\n", $offset_from); $dtstart->modify($offset_from); $is_date = $dtstart->isDate(); $instances[$dtstart->UTC('Y-m-d\TH:i:s\Z')] = $comp; $rrule = $comp->GetProperty('RRULE'); $has_repeats = isset($rrule); if ( !$has_repeats ) continue; $recur = $comp->GetProperty('RRULE'); if ( isset($recur) ) { $recur = $recur->Value(); $this_start = clone($dtstart); $rule = new RepeatRule( $this_start, $recur, $is_date ); $i = 0; $result_limit = 1000; while( $date = $rule->next() ) { $instances[$date->UTC('Y-m-d\TH:i:s\Z')] = $comp; if ( $i++ >= $result_limit || $date > $range_end ) break; } if ( DEBUG_EXPAND ) { print( "After rrule_expand"); foreach( $instances AS $k => $v ) { print ' : '.$k; } print "\n"; } } $properties = $comp->GetProperties('RDATE'); if ( count($properties) ) { foreach( $properties AS $p ) { $timezone = $p->GetParameterValue('TZID'); $rdate = $p->Value(); $rdates = explode( ',', $rdate ); foreach( $rdates AS $k => $v ) { $rdate = new RepeatRuleDateTime( $v, $timezone, $is_date); if ( $return_floating_times ) $rdate->setAsFloat(); $instances[$rdate->UTC('Y-m-d\TH:i:s\Z')] = $comp; if ( $rdate > $range_end ) break; } } if ( DEBUG_EXPAND ) { print( "After rdate_expand"); foreach( $instances AS $k => $v ) { print ' : '.$k; } print "\n"; } } } ksort($instances); $onsets = array(); $start_utc = $range_start->UTC('Y-m-d\TH:i:s\Z'); $end_utc = $range_end->UTC('Y-m-d\TH:i:s\Z'); foreach( $instances AS $utc => $comp ) { if ( $utc > $end_utc ) { if ( DEBUG_EXPAND ) printf( "We're done: $utc is out of the range.\n"); break; } if ( $utc < $start_utc ) { continue; } $onsets[$utc] = array( 'from' => $comp->GetPValue('TZOFFSETFROM'), 'to' => $comp->GetPValue('TZOFFSETTO'), 'name' => $comp->GetPValue('TZNAME'), 'type' => $comp->GetType() ); } return $onsets; } header( 'ETag: "'.$tz->etag.'"' ); header( 'Last-Modified', $tz->last_modified ); header('Content-Type: application/xml; charset="utf-8"'); $vtz = new vCalendar($tz->vtimezone); $response = new XMLDocument(array("urn:ietf:params:xml:ns:timezone-service" => "")); $timezones = $response->NewXMLElement('urn:ietf:params:xml:ns:timezone-service:timezones'); $qry = new AwlQuery('SELECT to_char(max(last_modified),\'YYYY-MM-DD"T"HH24:MI:SS"Z"\') AS dtstamp FROM timezones'); if ( $qry->Exec('tz/list',__LINE__,__FILE__) && $qry->rows() > 0 ) { $row = $qry->Fetch(); $timezones->NewElement('dtstamp', $row->dtstamp); } else { $timezones->NewElement('dtstamp', gmdate('Y-m-d\TH:i:s\Z')); } $from = new RepeatRuleDateTime($start); $until = new RepeatRuleDateTime($end); $observances = expand_timezone_onsets($vtz, $from, $until); $tzdata = array(); $tzdata[] = new XMLElement( 'tzid', $tzid ); $tzdata[] = new XMLElement( 'calscale', 'Gregorian' ); foreach( $observances AS $onset => $details ) { $tzdata[] = new XMLElement( 'observance', array( new XMLElement('name', (empty($details['name']) ? $details['type'] : $details['name'] ) ), new XMLElement('onset', $onset ), new XMLElement('utc-offset-from', substr($details['from'],0,-2).':'.substr($details['from'],-2) ), new XMLElement('utc-offset-to', substr($details['to'],0,-2).':'.substr($details['to'],-2) ) )); } $timezones->NewElement('tzdata', $tzdata ); echo $response->Render($timezones); exit(0);davical-1.1.1/inc/DAViCalSession.php0000644000000000000000000001463311776146424014057 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ /** * @global resource $session * @name $session * The session object is global. */ $session = 1; // Fake initialisation // The Session object uses some (optional) configurable SQL to load // the records related to the logged-on user... (the where clause gets added). // It's very important that someone not be able to externally control this, // so we make it a function rather than a variable. /** * @todo Make this a defined constant */ function local_session_sql() { $sql = <<principal_id = null; $this->Session($sid); } /** * Internal function used to assign the session details to a user's new session. * @param object $u The user+session object we (probably) read from the database. */ function AssignSessionDetails( $u ) { if ( !isset($u->principal_id) ) { // If they don't have a principal_id set then we should re-read from our local database $qry = new AwlQuery('SELECT * FROM dav_principal WHERE username = :username', array(':username' => $u->username) ); if ( $qry->Exec() && $qry->rows() == 1 ) { $u = $qry->Fetch(); } } parent::AssignSessionDetails( $u ); $this->GetRoles(); if ( function_exists('awl_set_locale') && isset($this->locale) && $this->locale != '' ) { awl_set_locale($this->locale); } } /** * Method used to get the user's roles */ function GetRoles () { $this->roles = array(); $sql = 'SELECT role_name FROM roles JOIN role_member ON roles.role_no=role_member.role_no WHERE user_no = '.$this->user_no; $qry = new AwlQuery( $sql ); if ( $qry->Exec('DAViCalSession') && $qry->rows() > 0 ) { while( $role = $qry->Fetch() ) { $this->roles[$role->role_name] = 1; } } } /** * Does the user have the privileges to do what is requested. * @param $do_what mixed The request privilege name, or array of privilege names, to be checked. * @param $path string The path we want that permission for * @param $any boolean Whether we accept any of the privileges. The default is true, unless the requested privilege is 'all', when it is false. * @return boolean Whether they do have one of those privileges against the specified path. */ function HavePrivilegeTo( $do_what, $path, $any = null ) { if ( $this->AllowedTo('Admin') ) return true; if ( !isset($this->privilege_resources[$path]) ) { $this->privilege_resources[$path] = new DAVResource($path); } $resource = $this->privilege_resources[$path]; if ( isset($resource) && $resource->Exists() ) { return $resource->HavePrivilegeTo($do_what,$any); } return false; } /** * Checks that this user is logged in, and presents a login screen if they aren't. * * The function can optionally confirm whether they are a member of one of a list * of roles, and deny access if they are not a member of any of them. * * @param string $roles The list of roles that the user must be a member of one of to be allowed to proceed. * @return boolean Whether or not the user is logged in and is a member of one of the required roles. */ function LoginRequired( $roles = '' ) { global $c, $session, $main_menu, $sub_menu, $tab_menu; $current_domain = (isset($_SERVER['SERVER_NAME'])?$_SERVER['SERVER_NAME']:$_SERVER['SERVER_ADDR']); if ( (isset($c->restrict_admin_domain) && $c->restrict_admin_domain != $current_domain) || (isset($c->restrict_admin_port) && $c->restrict_admin_port != $_SERVER['SERVER_PORT'] ) ) { header('Location: caldav.php'); dbg_error_log( 'LOG WARNING', 'Access to "%s" via "%s:%d" rejected.', $_SERVER['REQUEST_URI'], $current_domain, $_SERVER['SERVER_PORT'] ); @ob_flush(); exit(0); } if ( isset($c->restrict_admin_roles) && $roles == '' ) $roles = $c->restrict_admin_roles; if ( $this->logged_in && $roles == '' ) return; /** * We allow basic auth to apply also, if present, though we check everything else first... */ if ( isset($_SERVER['PHP_AUTH_USER']) && !$this->logged_in && $_SERVER['PHP_AUTH_USER'] != "" && $_SERVER['PHP_AUTH_PW'] != "" && ! $_COOKIE['NoAutoLogin'] ) { if ( $this->Login($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW'],false)) { setcookie('NoAutoLogin',1,0); return; } } if ( ! $this->logged_in ) { $c->messages[] = i18n('You must log in to use this system.'); include_once('page-header.php'); if ( function_exists('local_index_not_logged_in') ) { local_index_not_logged_in(); } else { if ( $this->login_failed ) { $c->messages[] = i18n('Invalid user name or password.'); } echo '

'.translate('Log On Please')."

\n"; echo '

'.translate('For access to the') .' '.translate($c->system_name).' ' .translate('you should log on with the username and password that have been issued to you.') ."

\n"; echo '

'.translate('If you would like to request access, please e-mail').' '.$c->admin_email."

\n"; echo $this->RenderLoginPanel(); } } else { $valid_roles = explode(',', $roles); foreach( $valid_roles AS $k => $v ) { if ( $this->AllowedTo($v) ) return; } $c->messages[] = i18n('You are not authorised to use this function.'); include_once('page-header.php'); } include('page-footer.php'); @ob_flush(); exit(0); } } $session = new DAViCalSession(); $session->_CheckLogin(); davical-1.1.1/inc/caldav-LOCK.php0000644000000000000000000001323611651212132013244 0ustar '' )); if ( ! $request->AllowedTo('write') ) { $request->NeedPrivilege( 'write', $request->path ); } if ( ! isset($request->xml_tags) ) { if ( isset($request->lock_token) ) { // It's OK for LOCK refresh requests to be empty. $request->xml_tags = array(); } else { $request->XMLResponse( 400, new XMLElement( 'error', new XMLElement('missing-xml-for-request'), $reply->GetXmlNsArray() ) ); } } $unsupported = array(); $lockinfo = array(); $inside = array(); foreach( $request->xml_tags AS $k => $v ) { $tag = $v['tag']; dbg_error_log( "LOCK", " Handling Tag '%s' => '%s' ", $k, $v ); switch ( $tag ) { case 'DAV::lockinfo': dbg_error_log( "LOCK", ":Request: %s -> %s", $v['type'], $tag ); if ( $v['type'] == "open" ) { $lockscope = ""; $locktype = ""; $lockowner = ""; $inside[$tag] = true; } else if ( $inside[$tag] && $v['type'] == "close" ) { $lockinfo['scope'] = $lockscope; unset($lockscope); $lockinfo['type'] = $locktype; unset($locktype); $lockinfo['owner'] = $lockowner; unset($lockowner); $inside[$tag] = false; } break; case 'DAV::owner': case 'DAV::locktype': case 'DAV::lockscope': dbg_error_log( "LOCK", ":Request: %s -> %s", $v['type'], $tag ); if ( $inside['DAV::lockinfo'] ) { if ( $v['type'] == "open" ) { $inside[$tag] = true; } else if ( $inside[$tag] && $v['type'] == "close" ) { $inside[$tag] = false; } } break; /*case 'DAV::SHARED': */ /** Shared lock is not supported yet */ case 'DAV::exclusive': dbg_error_log( "LOCK", ":Request: %s -> %s", $v['type'], $tag ); if ( $inside['DAV::lockscope'] && $v['type'] == "complete" ) { $lockscope = strtolower(substr($tag,5)); } break; /* case 'DAV::READ': */ /** RFC2518 is pretty vague about read locks */ case 'DAV::write': dbg_error_log( "LOCK", ":Request: %s -> %s", $v['type'], $tag ); if ( $inside['DAV::locktype'] && $v['type'] == "complete" ) { $locktype = strtolower(substr($tag,5)); } break; case 'DAV::href': dbg_error_log( "LOCK", ":Request: %s -> %s", $v['type'], $tag ); dbg_log_array( "LOCK", "DAV:href", $v, true ); if ( $inside['DAV::owner'] && $v['type'] == "complete" ) { $lockowner = $v['value']; } break; default: if ( preg_match('/^(.*):([^:]+)$/', $tag, $matches) ) { $unsupported[$matches[2]] = $matches[1]; } else { $unsupported[$tag] = ""; } dbg_error_log( "LOCK", "Unhandled tag >>%s<<", $tag); } } $request->UnsupportedRequest($unsupported); // Won't return if there was unsupported stuff. $lock_opener = $request->FailIfLocked(); if ( $request->method == "LOCK" ) { dbg_error_log( "LOCK", "Attempting to lock resource '%s'", $request->path); $lock_timeout = (empty($request->timeout) ? 30 : intval($request->timeout) ); if ( $lock_timeout < 1 ) $lock_timeout = 30; else if ( $lock_timeout > 300 ) $lock_timeout = 300; if ( ($lock_token = $request->IsLocked()) ) { // NOTE Assignment in if() is expected here. $sql = 'UPDATE locks SET start = current_timestamp WHERE opaquelocktoken = :lock_token'; $params = array( ':lock_token' => $lock_token); } else { /** * A fresh lock */ $lock_token = uuid(); $sql = 'INSERT INTO locks ( dav_name, opaquelocktoken, type, scope, depth, owner, timeout, start ) VALUES( :dav_name, :lock_token, :type, :scope, :request_depth, :owner, :timeout::interval, current_timestamp )'; $params = array( ':dav_name' => $request->path, ':lock_token' => $lock_token, ':type' => $lockinfo['type'], ':scope' => $lockinfo['scope'], ':request_depth' => $request->depth, ':owner' => $lockinfo['owner'], ':timeout' => $lock_timeout.' seconds' ); header( "Lock-Token: " ); } $qry = new AwlQuery($sql, $params ); $qry->Exec("LOCK",__LINE__,__FILE__); $lock_row = $request->GetLockRow($lock_token); $activelock = array( new XMLElement( 'locktype', new XMLElement( $lock_row->type )), new XMLElement( 'lockscope', new XMLElement( $lock_row->scope )), new XMLElement( 'depth', $request->GetDepthName() ), new XMLElement( 'owner', new XMLElement( 'href', $lock_row->owner )), new XMLElement( 'timeout', 'Second-'.$lock_timeout), new XMLElement( 'locktoken', new XMLElement( 'href', 'opaquelocktoken:'.$lock_token )) ); $response = new XMLElement("lockdiscovery", new XMLElement( "activelock", $activelock), array("xmlns" => "DAV:") ); } elseif ( $request->method == "UNLOCK" ) { /** * @todo respond with preconditionfailed(409,'lock-token-matches-request-uri') if * there is no lock to be deleted. */ dbg_error_log( "LOCK", "Attempting to unlock resource '%s'", $request->path); if ( ($lock_token = $request->IsLocked()) ) { // NOTE Assignment in if() is expected here. $sql = 'DELETE FROM locks WHERE opaquelocktoken = :lock_token'; $qry = new AwlQuery($sql, array( ':lock_token' => $lock_token) ); $qry->Exec("LOCK",__LINE__,__FILE__); } $request->DoResponse( 204 ); } $prop = new XMLElement( "prop", $response, array('xmlns'=>'DAV:') ); // dbg_log_array( "LOCK", "XML", $response, true ); $xmldoc = $prop->Render(0,''); $request->DoResponse( 200, $xmldoc, 'text/xml; charset="utf-8"' ); davical-1.1.1/inc/WritableCollection.php0000644000000000000000000004764111776146512015100 0ustar GetProperty('DTSTART'); if ( !isset($p) && $comp->GetType() == 'VTODO' ) { $p = $comp->GetProperty('DUE'); } if ( !isset($p) ) return null; return $p->GetParameterValue('TZID'); } /** * Writes the data to a member in the collection and returns the segment_name of the * resource in our internal namespace. * * @param vCalendar $vcal The resource to be written. * @param boolean $create_resource True if this is a new resource. * @param boolean $do_scheduling True if we should also do scheduling for this write. Default false. * @param string $segment_name The name of the resource within the collection, or null if this * call should invent one based on the UID of the vCalendar. * @param boolean $log_action Whether to log this action. Defaults to false since this is normally called * in situations where one is writing secondary data. * @return string The segment_name of the resource within the collection, as written, or false on failure. */ function WriteCalendarMember( vCalendar $vcal, $create_resource, $do_scheduling=false, $segment_name = null, $log_action=false ) { if ( !$this->IsSchedulingCollection() && !$this->IsCalendar() ) { dbg_error_log( 'PUT', '"%s" is not a calendar or scheduling collection!', $this->dav_name); return false; } global $session, $caldav_context; $resources = $vcal->GetComponents('VTIMEZONE',false); // Not matching VTIMEZONE $user_no = $this->user_no(); $collection_id = $this->collection_id(); if ( !isset($resources[0]) ) { dbg_error_log( 'PUT', 'No calendar content!'); rollback_on_error( $caldav_context, $user_no, $this->dav_name.'/'.$segment_name, translate('No calendar content'), 412 ); return false; } else { $first = $resources[0]; $resource_type = $first->GetType(); } $uid = $first->GetPValue('UID'); if ( empty($segment_name) ) { $segment_name = $uid.'.ics'; } $path = $this->dav_name() . $segment_name; $caldav_data = $vcal->Render(); $etag = md5($caldav_data); $weak_etag = null; $qry = new AwlQuery(); $existing_transaction_state = $qry->TransactionState(); if ( $existing_transaction_state == 0 ) $qry->Begin(); if ( $create_resource ) { $qry->QDo('SELECT nextval(\'dav_id_seq\') AS dav_id'); } else { $qry->QDo('SELECT dav_id FROM caldav_data WHERE dav_name = :dav_name ', array(':dav_name' => $path)); } if ( $qry->rows() != 1 || !($row = $qry->Fetch()) ) { if ( !$create_resource ) { // Looks like we will have to create it, even if the caller thought we wouldn't $qry->QDo('SELECT nextval(\'dav_id_seq\') AS dav_id'); if ( $qry->rows() != 1 || !($row = $qry->Fetch()) ) { // No dav_id? => We're toast! trace_bug( 'No dav_id for "%s" on %s!!!', $path, ($create_resource ? 'create': 'update')); rollback_on_error( $caldav_context, $user_no, $path); return false; } $create_resource = true; dbg_error_log( 'PUT', 'Unexpected need to create resource at "%s"', $path); } } $dav_id = $row->dav_id; $calitem_params = array( ':dav_name' => $path, ':user_no' => $user_no, ':etag' => $etag, ':dav_id' => $dav_id ); $dav_params = array_merge($calitem_params, array( ':dav_data' => $caldav_data, ':caldav_type' => $resource_type, ':session_user' => $session->user_no, ':weak_etag' => $weak_etag ) ); if ( !$this->IsSchedulingCollection() && $do_scheduling ) { if ( do_scheduling_requests($vcal, $create_resource ) ) { $dav_params[':dav_data'] = $vcal->Render(null, true); $etag = null; } } if ( $create_resource ) { $sql = 'INSERT INTO caldav_data ( dav_id, user_no, dav_name, dav_etag, caldav_data, caldav_type, logged_user, created, modified, collection_id, weak_etag ) VALUES( :dav_id, :user_no, :dav_name, :etag, :dav_data, :caldav_type, :session_user, current_timestamp, current_timestamp, :collection_id, :weak_etag )'; $dav_params[':collection_id'] = $collection_id; } else { $sql = 'UPDATE caldav_data SET caldav_data=:dav_data, dav_etag=:etag, caldav_type=:caldav_type, logged_user=:session_user, modified=current_timestamp, weak_etag=:weak_etag WHERE dav_id=:dav_id'; } if ( !$qry->QDo($sql,$dav_params) ) { rollback_on_error( $caldav_context, $user_no, $path); return false; } $dtstart = $first->GetPValue('DTSTART'); $calitem_params[':dtstart'] = $dtstart; if ( (!isset($dtstart) || $dtstart == '') && $first->GetPValue('DUE') != '' ) { $dtstart = $first->GetPValue('DUE'); } $dtend = $first->GetPValue('DTEND'); if ( isset($dtend) && $dtend != '' ) { dbg_error_log( 'PUT', ' DTEND: "%s", DTSTART: "%s", DURATION: "%s"', $dtend, $dtstart, $first->GetPValue('DURATION') ); $calitem_params[':dtend'] = $dtend; $dtend = ':dtend'; } else { $dtend = 'NULL'; if ( $first->GetPValue('DURATION') != '' AND $dtstart != '' ) { $duration = preg_replace( '#[PT]#', ' ', $first->GetPValue('DURATION') ); $dtend = '(:dtstart::timestamp with time zone + :duration::interval)'; $calitem_params[':duration'] = $duration; } elseif ( $first->GetType() == 'VEVENT' ) { /** * From RFC2445 4.6.1: * For cases where a "VEVENT" calendar component specifies a "DTSTART" * property with a DATE data type but no "DTEND" property, the events * non-inclusive end is the end of the calendar date specified by the * "DTSTART" property. For cases where a "VEVENT" calendar component specifies * a "DTSTART" property with a DATE-TIME data type but no "DTEND" property, * the event ends on the same calendar date and time of day specified by the * "DTSTART" property. * * So we're looking for 'VALUE=DATE', to identify the duration, effectively. * */ $value_type = $first->GetPParamValue('DTSTART','VALUE'); dbg_error_log('PUT','DTSTART without DTEND. DTSTART value type is %s', $value_type ); if ( isset($value_type) && $value_type == 'DATE' ) $dtend = '(:dtstart::timestamp with time zone::date + \'1 day\'::interval)'; else $dtend = ':dtstart'; } } $last_modified = $first->GetPValue('LAST-MODIFIED'); if ( !isset($last_modified) || $last_modified == '' ) { $last_modified = gmdate( 'Ymd\THis\Z' ); } $calitem_params[':modified'] = $last_modified; $dtstamp = $first->GetPValue('DTSTAMP'); if ( !isset($dtstamp) || $dtstamp == '' ) { $dtstamp = $last_modified; } $calitem_params[':dtstamp'] = $dtstamp; $class = $first->GetPValue('CLASS'); /* * It seems that some calendar clients don't set a class... * RFC2445, 4.8.1.3: Default is PUBLIC */ if ( $this->IsPublicOnly() || !isset($class) || $class == '' ) { $class = 'PUBLIC'; } $calitem_params[':class'] = $class; /** Calculate what timezone to set, first, if possible */ $last_olson = 'Turkmenikikamukau'; // I really hope this location doesn't exist! $tzid = self::GetTZID($first); if ( !empty($tzid) ) { $tz = $vcal->GetTimeZone($tzid); $olson = $vcal->GetOlsonName($tz); if ( !empty($olson) && ($olson != $last_olson) ) { dbg_error_log( 'PUT', ' Setting timezone to %s', $olson ); $qry->QDo('SET TIMEZONE TO \''.$olson."'" ); $last_olson = $olson; } } $created = $first->GetPValue('CREATED'); if ( $created == '00001231T000000Z' ) $created = '20001231T000000Z'; $calitem_params[':created'] = $created; $calitem_params[':tzid'] = $tzid; $calitem_params[':uid'] = $uid; $calitem_params[':summary'] = $first->GetPValue('SUMMARY'); $calitem_params[':location'] = $first->GetPValue('LOCATION'); $calitem_params[':transp'] = $first->GetPValue('TRANSP'); $calitem_params[':description'] = $first->GetPValue('DESCRIPTION'); $calitem_params[':rrule'] = $first->GetPValue('RRULE'); $calitem_params[':url'] = $first->GetPValue('URL'); $calitem_params[':priority'] = $first->GetPValue('PRIORITY'); $calitem_params[':due'] = $first->GetPValue('DUE'); $calitem_params[':percent_complete'] = $first->GetPValue('PERCENT-COMPLETE'); $calitem_params[':status'] = $first->GetPValue('STATUS'); if ( $create_resource ) { $sql = <<IsSchedulingCollection() ) { $this->WriteCalendarAlarms($dav_id, $vcal); $this->WriteCalendarAttendees($dav_id, $vcal); if ( $log_action && function_exists('log_caldav_action') ) { log_caldav_action( $put_action_type, $first->GetPValue('UID'), $user_no, $collection_id, $path ); } else if ( $log_action ) { dbg_error_log( 'PUT', 'No log_caldav_action( %s, %s, %s, %s, %s) can be called.', $put_action_type, $first->GetPValue('UID'), $user_no, $collection_id, $path ); } } $qry = new AwlQuery( $sql, $calitem_params ); if ( !$qry->Exec('PUT',__LINE__,__FILE__) ) { rollback_on_error( $caldav_context, $user_no, $path); return false; } $qry->QDo("SELECT write_sync_change( $collection_id, $sync_change, :dav_name)", array(':dav_name' => $path ) ); if ( $existing_transaction_state == 0 ) $qry->Commit(); dbg_error_log( 'PUT', 'User: %d, ETag: %s, Path: %s', $session->user_no, $etag, $path); return $segment_name; } /** * Writes the data to a member in the collection and returns the segment_name of the * resource in our internal namespace. * * A caller who wants scheduling not to happen for this write must already * know they are dealing with a calendar, so should be calling WriteCalendarMember * directly. * * @param $resource mixed The resource to be written. * @param $create_resource boolean True if this is a new resource. * @param $segment_name The name of the resource within the collection, or false on failure. * @param boolean $log_action Whether to log this action. Defaults to true since this is normally called * in situations where one is writing primary data. * @return string The segment_name that was given, or one that was assigned if null was given. */ function WriteMember( $resource, $create_resource, $segment_name = null, $log_action=true ) { if ( ! $this->IsCollection() ) { dbg_error_log( 'PUT', '"%s" is not a collection path', $this->dav_name); return false; } if ( ! is_object($resource) ) { dbg_error_log( 'PUT', 'No data supplied!' ); return false; } if ( $resource instanceof vCalendar ) { return $this->WriteCalendarMember($resource,$create_resource,true,$segment_name,$log_action); } else if ( $resource instanceof VCard ) return $this->WriteAddressbookMember($resource,$create_resource,$segment_name, $log_action); return $segment_name; } /** * Given a dav_id and an original vCalendar, pull out each of the VALARMs * and write the values into the calendar_alarm table. * * @return null */ function WriteCalendarAlarms( $dav_id, vCalendar $vcal ) { $qry = new AwlQuery('DELETE FROM calendar_alarm WHERE dav_id = '.$dav_id ); $qry->Exec('PUT',__LINE__,__FILE__); $components = $vcal->GetComponents(); $qry->SetSql('INSERT INTO calendar_alarm ( dav_id, action, trigger, summary, description, component, next_trigger ) VALUES( '.$dav_id.', :action, :trigger, :summary, :description, :component, :related::timestamp with time zone + :related_trigger::interval )' ); $qry->Prepare(); foreach( $components AS $component ) { if ( $component->GetType() == 'VTIMEZONE' ) continue; $alarms = $component->GetComponents('VALARM'); if ( count($alarms) < 1 ) return; foreach( $alarms AS $v ) { $trigger = array_merge($v->GetProperties('TRIGGER')); if ( $trigger == null ) continue; // Bogus data. $trigger = $trigger[0]; $related = null; $related_trigger = '0M'; $trigger_type = $trigger->GetParameterValue('VALUE'); if ( !isset($trigger_type) || $trigger_type == 'DURATION' ) { switch ( $trigger->GetParameterValue('RELATED') ) { case 'DTEND': $related = $component->GetPValue('DTEND'); break; case 'DUE': $related = $component->GetPValue('DUE'); break; default: $related = $component->GetPValue('DTSTART'); } $duration = $trigger->Value(); if ( !preg_match('{^-?P(:?\d+W)?(:?\d+D)?(:?T(:?\d+H)?(:?\d+M)?(:?\d+S)?)?$}', $duration ) ) continue; $minus = (substr($duration,0,1) == '-'); $related_trigger = trim(preg_replace( '#[PT-]#', ' ', $duration )); if ( $minus ) { $related_trigger = preg_replace( '{(\d+[WDHMS])}', '-$1 ', $related_trigger ); } else { $related_trigger = preg_replace( '{(\d+[WDHMS])}', '$1 ', $related_trigger ); } } else { if ( false === strtotime($trigger->Value()) ) continue; // Invalid date. } $qry->Bind(':action', $v->GetPValue('ACTION')); $qry->Bind(':trigger', $trigger->Render()); $qry->Bind(':summary', $v->GetPValue('SUMMARY')); $qry->Bind(':description', $v->GetPValue('DESCRIPTION')); $qry->Bind(':component', $v->Render()); $qry->Bind(':related', $related ); $qry->Bind(':related_trigger', $related_trigger ); $qry->Exec('PUT',__LINE__,__FILE__); } } } /** * Parse out the attendee property and write a row to the * calendar_attendee table for each one. * @param int $dav_id The dav_id of the caldav_data we're processing * @param vComponent The VEVENT or VTODO containing the ATTENDEEs * @return null */ function WriteCalendarAttendees( $dav_id, vCalendar $vcal ) { $qry = new AwlQuery('DELETE FROM calendar_attendee WHERE dav_id = '.$dav_id ); $qry->Exec('PUT',__LINE__,__FILE__); $attendees = $vcal->GetAttendees(); if ( count($attendees) < 1 ) return; $qry->SetSql('INSERT INTO calendar_attendee ( dav_id, status, partstat, cn, attendee, role, rsvp, property ) VALUES( '.$dav_id.', :status, :partstat, :cn, :attendee, :role, :rsvp, :property )' ); $qry->Prepare(); $processed = array(); foreach( $attendees AS $v ) { $attendee = $v->Value(); if ( isset($processed[$attendee]) ) { dbg_error_log( 'LOG', 'Duplicate attendee "%s" in resource "%d"', $attendee, $dav_id ); dbg_error_log( 'LOG', 'Original: "%s"', $processed[$attendee] ); dbg_error_log( 'LOG', 'Duplicate: "%s"', $v->Render() ); continue; /** @todo work out why we get duplicate ATTENDEE on one VEVENT */ } $qry->Bind(':attendee', $attendee ); $qry->Bind(':status', $v->GetParameterValue('STATUS') ); $qry->Bind(':partstat', $v->GetParameterValue('PARTSTAT') ); $qry->Bind(':cn', $v->GetParameterValue('CN') ); $qry->Bind(':role', $v->GetParameterValue('ROLE') ); $qry->Bind(':rsvp', $v->GetParameterValue('RSVP') ); $qry->Bind(':property', $v->Render() ); $qry->Exec('PUT',__LINE__,__FILE__); $processed[$attendee] = $v->Render(); } } /** * Writes the data to a member in the collection and returns the segment_name of the * resource in our internal namespace. * * @param vCalendar $member_dav_name The path to the resource to be deleted. * @return boolean Success is true, or false on failure. */ function actualDeleteCalendarMember( $member_dav_name ) { global $session, $caldav_context; // A quick sanity check... $segment_name = str_replace( $this->dav_name(), '', $member_dav_name ); if ( strstr($segment_name, '/') !== false ) { @dbg_error_log( "DELETE", "DELETE: Refused to delete member '%s' from calendar '%s'!", $member_dav_name, $this->dav_name() ); return false; } // We need to serialise access to this process just for this collection $cache = getCacheInstance(); $myLock = $cache->acquireLock('collection-'.$this->dav_name()); $qry = new AwlQuery(); $params = array( ':dav_name' => $member_dav_name ); if ( $qry->QDo("SELECT write_sync_change(collection_id, 404, caldav_data.dav_name) FROM caldav_data WHERE dav_name = :dav_name", $params ) && $qry->QDo("DELETE FROM property WHERE dav_name = :dav_name", $params ) && $qry->QDo("DELETE FROM locks WHERE dav_name = :dav_name", $params ) && $qry->QDo("DELETE FROM caldav_data WHERE dav_name = :dav_name", $params ) ) { @dbg_error_log( "DELETE", "DELETE: Calendar member %s deleted from calendar '%s'", $member_dav_name, $this->dav_name() ); $cache->releaseLock($myLock); return true; } $cache->releaseLock($myLock); return false; } /** * * @param unknown_type $some_old_token */ public function whatChangedSince( $some_old_token ) { $params = array( ':collection_id' => $this->collection_id() ); if ( $some_old_token == 0 || empty($some_old_token) ) { $sql = <<= (SELECT modification_time FROM sync_tokens WHERE sync_token = :sync_token) ORDER BY sync_changes.collection_id, sync_changes.dav_id, sync_changes.sync_time EOSQL; } $qry = new AwlQuery($sql, $params ); $changes = array(); if ( $qry->Exec() && $qry->rows() ) { while( $change = $qry->Fetch() ) { $changes[$change->uid] = $change; } } return $changes; } } davical-1.1.1/inc/vcard.php0000644000000000000000000001377311704134640012377 0ustar TransactionState() == 1); if ( ! $in_transaction ) $qry->Begin(); if ( $exists ) { $sql = 'UPDATE addressbook_resource SET version=:version, uid=:uid, nickname=:nickname, fn=:fn, n=:name, note=:note, org=:org, url=:url, fburl=:fburl, caladruri=:caladruri, caluri=:caluri WHERE dav_id=:dav_id'; } else { $sql = 'INSERT INTO addressbook_resource ( dav_id, version, uid, nickname, fn, n, note, org, url, fburl, caladruri, caluri ) VALUES( :dav_id, :version, :uid, :nickname, :fn, :name, :note, :org, :url, :fburl, :caladruri, :caluri )'; } $params = array( ':dav_id' => $dav_id ); $wanted = array('VERSION' => true, 'UID' => true, 'NICKNAME' => true, 'FN' => true, 'N' => true, 'NOTE'=> true, 'ORG' => true, 'URL' => true, 'FBURL' => true, 'CALADRURI' => true, 'CALURI' => true); $properties = $this->GetProperties( $wanted ); foreach( $wanted AS $k => $v ) { $pname = ':' . strtolower($k); if ( $pname == ':n' ) $pname = ':name'; $params[$pname] = null; } foreach( $properties AS $k => $v ) { $pname = ':' . strtolower($v->Name()); if ( $pname == ':n' ) $pname = ':name'; if ( !isset($params[$pname]) /** @todo or this is one is in the user's language */ ) $params[$pname] = $v->Value(); } $qry->QDo( $sql, $params ); $this->WriteAddresses($dav_id); $this->WritePhones($dav_id); $this->WriteEmails($dav_id); if ( ! $in_transaction ) $qry->Commit(); } /** CREATE TABLE addressbook_address_adr ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, box_no TEXT, unit_no TEXT, street_address TEXT, locality TEXT, region TEXT, postcode TEXT, country TEXT, property TEXT -- The full text of the property ); */ function WriteAddresses( $dav_id ) { $addresses = $this->GetProperties('ADR'); $qry = new AwlQuery(); // Only run a local transaction if we're not in one already. $in_transaction = ($qry->TransactionState() == 1); if ( ! $in_transaction ) $qry->Begin(); $params = array( ':dav_id' => $dav_id ); $qry->QDo('DELETE FROM addressbook_address_adr WHERE dav_id = :dav_id', $params ); foreach( $addresses AS $adr ) { $type = $adr->GetParameterValue('TYPE'); if ( is_array($type) ) $type = implode('~|~',$type); $params[':type'] = $type; $address = explode(';',$adr->Value()); // We use @ to suppress the warnings here, because the NULL in the database suits us well. @$params[':box_no'] = $address[0]; @$params[':unit_no'] = $address[1]; @$params[':street_address'] = $address[2]; @$params[':locality'] = $address[3]; @$params[':region'] = $address[4]; @$params[':postcode'] = $address[5]; @$params[':country'] = $address[6]; $params[':property'] = $adr->Render(); $qry->QDo( 'INSERT INTO addressbook_address_adr (dav_id, type, box_no, unit_no, street_address, locality, region, postcode, country, property) VALUES( :dav_id, :type, :box_no, :unit_no, :street_address, :locality, :region, :postcode, :country, :property)', $params ); } if ( ! $in_transaction ) $qry->Commit(); } /** CREATE TABLE addressbook_address_tel ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, tel TEXT, property TEXT -- The full text of the property ); */ function WritePhones( $dav_id ) { $telephones = $this->GetProperties('TEL'); $qry = new AwlQuery(); // Only run a local transaction if we're not in one already. $in_transaction = ($qry->TransactionState() == 1); if ( ! $in_transaction ) $qry->Begin(); $params = array( ':dav_id' => $dav_id ); $qry->QDo('DELETE FROM addressbook_address_tel WHERE dav_id = :dav_id', $params ); foreach( $telephones AS $tel ) { $type = $tel->GetParameterValue('TYPE'); if ( is_array($type) ) $type = implode('~|~',$type); $params[':type'] = $type; if ( ! isset($params[':type']) ) $params[':type'] = 'voice'; $params[':tel'] = $tel->Value(); $params[':property'] = $tel->Render(); $qry->QDo( 'INSERT INTO addressbook_address_tel (dav_id, type, tel, property) VALUES( :dav_id, :type, :tel, :property)', $params ); } if ( ! $in_transaction ) $qry->Commit(); } /** CREATE TABLE addressbook_address_email ( dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE, type TEXT, email TEXT, property TEXT -- The full text of the property ); */ function WriteEmails( $dav_id ) { $emails = $this->GetProperties('EMAIL'); $qry = new AwlQuery(); // Only run a local transaction if we're not in one already. $in_transaction = ($qry->TransactionState() == 1); if ( ! $in_transaction ) $qry->Begin(); $params = array( ':dav_id' => $dav_id ); $qry->QDo('DELETE FROM addressbook_address_email WHERE dav_id = :dav_id', $params ); foreach( $emails AS $email ) { $type = $email->GetParameterValue('TYPE'); if ( is_array($type) ) $type = implode('~|~',$type); $params[':type'] = $type; $params[':email'] = $email->Value(); $params[':property'] = $email->Render(); $qry->QDo( 'INSERT INTO addressbook_address_email (dav_id, type, email, property) VALUES( :dav_id, :type, :email, :property)', $params ); } if ( ! $in_transaction ) $qry->Commit(); } }davical-1.1.1/inc/drivers_imap_pam.php0000644000000000000000000000626011744626351014623 0ustar , * Andrew McMillan * @copyright Based on Eric Seigne script drivers_squid_pam.php * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ // The PHP interpreter will die quietly unless satisfied. This provides user feedback instead. if (!function_exists('imap_open')) { die("drivers_imap_pam: php5-imap required."); } require_once("auth-functions.php"); class imapPamDrivers { /**#@+ * @access private */ /**#@-*/ /** * Constructor. * @param string $imap_url formated for imap_open() */ function imapPamDrivers($imap_url){ $this->__construct($imap_url); } /** * The constructor * * @param string $imap_url formated for imap_open() */ function __construct($imap_url) { global $c; if (empty($imap_url)){ $c->messages[] = sprintf(i18n('drivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.php')); $this->valid=false; return ; } } } /** * Check the username / password against the PAM system */ function IMAP_PAM_check($username, $password ){ global $c; $imap_username = $username; if ( function_exists('mb_convert_encoding') ) { $imap_username = mb_convert_encoding($imap_username, "UTF7-IMAP",mb_detect_encoding($imap_username)); } else { $imap_username = imap_utf7_encode($imap_username); } //$imap_url = '{localhost:143/imap/notls}'; //$imap_url = '{localhost:993/imap/ssl/novalidate-cert}'; $imap_url = $c->authenticate_hook['config']['imap_url']; $auth_result = "ERR"; $imap_stream = @imap_open($imap_url, $imap_username, $password, OP_HALFOPEN); //print_r(imap_errors()); if ( $imap_stream ) { // disconnect imap_close($imap_stream); // login ok $auth_result = "OK"; } if ( $auth_result == "OK") { $principal = new Principal('username',$username); if ( ! $principal->Exists() ) { dbg_error_log( "PAM", "Principal '%s' doesn't exist in local DB, we need to create it",$username ); $cmd = "getent passwd '$username'"; $getent_res = exec($cmd); $getent_arr = explode(":", $getent_res); $fullname = $getent_arr[4]; if(empty($fullname)) { $fullname = $username; } $principal->Create( array( 'username' => $username, 'user_active' => true, 'email' => $username . "@" . $c->authenticate_hook['config']['email_base'], 'modified' => date('c'), 'fullname' => $fullname )); if ( ! $principal->Exists() ) { dbg_error_log( "PAM", "Unable to create local principal for '%s'", $username ); return false; } CreateHomeCalendar($username); } return $principal; } else { dbg_error_log( "PAM", "User %s is not a valid username (or password was wrong)", $username ); return false; } } davical-1.1.1/inc/drivers_pwauth_pam.php0000644000000000000000000001103111633117640015166 0ustar , * Michael B. Trausch , * Andrew McMillan * @copyright Eric Seigne * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later * * Based on drivers_squid_pam.php */ require_once("auth-functions.php"); class pwauthPamDrivers { /**#@+ * @access private */ /**#@-*/ /** * The constructor * * @param string $config path where pwauth is */ function __construct($config) { global $c; if(!file_exists($config)) { $c->messages[] = sprintf(i18n('drivers_pwauth_pam : Unable to find %s file'), $config); $this->valid=false; return ; } } } /** * Check the username / password against the PAM system */ function PWAUTH_PAM_check($username, $password) { global $c; $program = $c->authenticate_hook['config']['path']; $email_base = $c->authenticate_hook['config']['email_base']; $pipe = popen(escapeshellarg($program), 'w'); $authinfo = sprintf("%s\n%s\n", $username, $password); $written = fwrite($pipe, $authinfo); dbg_error_log('pwauth', 'Bytes written: %d of %d', $written, strlen($authinfo)); $return_status = pclose($pipe); switch($return_status) { case 0: // STATUS_OK: Authentication succeeded. dbg_error_log('pwauth', 'User %s successfully authenticated', $username); $principal = new Principal('username',$username); if ( !$principal->Exists() ) { dbg_error_log('pwauth', 'User %s does not exist in local db, creating', $username); $pwent = posix_getpwnam($username); $gecos = explode(',',$pwent['gecos']); $fullname = $gecos[0]; $principal->Create( array( 'username' => $username, 'user_active' => 't', 'email' => sprintf('%s@%s', $username, $email_base), 'fullname' => $fullname )); if ( ! $principal->Exists() ) { dbg_error_log( "PAM", "Unable to create local principal for '%s'", $username ); return false; } CreateHomeCalendar($username); } return $principal; break; /* * Note that for system configurations using PAM instead of * reading the password database directly, if PAM is unable to * read the password database, pwauth will return status 1. */ case 1: case 2: // (1) STATUS_UNKNOWN: Invalid username or password. // (2) STATUS_INVALID: Invalid password. dbg_error_log('pwauth', 'Invalid username or password (username: %s)', $username); break; case 3: // STATUS_BLOCKED: UID for username is < pwauth's MIN_UNIX_UID dbg_error_log('pwauth', 'UID for username %s is < pwauth MIN_UNIX_UID', $username); break; case 4: // STATUS_EXPIRED: The user account has expired. dbg_error_log('pwauth', 'The account for %s has expired', $username); break; case 5: // STATUS_PW_EXPIRED: The user account's password has expired. dbg_error_log('pwauth', 'The account password for user %s has expired', $username); break; case 6: // STATUS_NOLOGIN: Logins to the system are administratively disabled. dbg_error_log('pwauth', 'Logins administratively disabled (%s)', $username); break; case 7: // STATUS_MANYFAILS: Too many login failures for user account. dbg_error_log('pwauth', 'Login rejected for %s, too many failures', $username); break; case 50: // STATUS_INT_USER: Configuration error, Web server cannot use pwauth dbg_error_log('pwauth', 'config error: see pwauth man page (%s)', 'STATUS_INT_USER'); break; case 51: // STATUS_INT_ARGS: pwauth received no username/passwd to check dbg_error_log('pwauth', 'error: pwauth received no username/password'); break; case 52: // STATUS_INT_ERR: unknown error dbg_error_log('pwauth', 'error: see pwauth man page (%s)', 'STATUS_INT_ERR'); break; case 53: // STATUS_INT_NOROOT: pwauth could not read the password database dbg_error_log('pwauth', 'config error: cannot read password database (%s)', 'STATUS_INT_NOROOT'); break; default: // Unknown error code. dbg_error_log('pwauth', 'An unknown error (%d) has occurred', $return_status); } return(FALSE); } davical-1.1.1/inc/drivers_squid_pam.php0000644000000000000000000000434511633117640015015 0ustar , * Andrew McMillan * @copyright Eric Seigne * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ require_once("auth-functions.php"); class squidPamDrivers { /**#@+ * @access private */ /**#@-*/ /** * The constructor * * @param string $config path where /usr/lib/squid/pam_auth is */ function __construct($config) { global $c; if (! file_exists($config)){ $c->messages[] = sprintf(i18n( 'drivers_squid_pam : Unable to find %s file'), $config ); $this->valid=false; return ; } } } /** * Check the username / password against the PAM system */ function SQUID_PAM_check($username, $password ){ global $c; $script = $c->authenticate_hook['config']['script']; if ( empty($script) ) $script = $c->authenticate_hook['config']['path']; $cmd = sprintf( 'echo %s %s | %s -n common-auth', escapeshellarg($username), escapeshellarg($password), $script); $auth_result = exec($cmd); if ( $auth_result == "OK") { dbg_error_log('pwauth', 'User %s successfully authenticated', $username); $principal = new Principal('username',$username); if ( !$principal->Exists() ) { dbg_error_log('pwauth', 'User %s does not exist in local db, creating', $username); $pwent = posix_getpwnam($username); $gecos = explode(',',$pwent['gecos']); $fullname = $gecos[0]; $principal->Create( array( 'username' => $username, 'user_active' => 't', 'email' => sprintf('%s@%s', $username, $email_base), 'fullname' => $fullname )); if ( ! $principal->Exists() ) { dbg_error_log( "PAM", "Unable to create local principal for '%s'", $username ); return false; } CreateHomeCalendar($username); } return $principal; } else { dbg_error_log( "PAM", "User %s is not a valid username (or password was wrong)", $username ); return false; } } davical-1.1.1/inc/ui/0000755000000000000000000000000011776303360011177 5ustar davical-1.1.1/inc/ui/collection-edit.php0000644000000000000000000006471411754172305015001 0ustar SetLookup( 'timezone', 'SELECT \'\', \'*** Unknown ***\' UNION SELECT tzid, olson_name FROM timezones WHERE tzid = olson_name AND length(vtimezone) > 100 ORDER BY 1' ); $editor->SetLookup( 'schedule_transp', 'SELECT \'opaque\', \'Opaque\' UNION SELECT \'transp\', \'Transparent\'' ); $editor->AddAttribute('timezone', 'id', 'fld_timezone' ); $editor->AddAttribute('schedule_transp', 'id', 'fld_schedule_transp' ); $editor->AddAttribute('is_calendar', 'id', 'fld_is_calendar'); $editor->AddAttribute('is_addressbook', 'id', 'fld_is_addressbook'); $editor->AddAttribute('is_calendar', 'onclick', 'toggle_enabled(\'fld_is_calendar\',\'=fld_timezone\',\'=fld_schedule_transp\',\'!fld_is_addressbook\');'); $editor->AddAttribute('is_addressbook', 'onclick', 'toggle_enabled(\'fld_is_addressbook\',\'!fld_is_calendar\');'); $editor->AddField('use_default_privs','default_privileges IS NULL'); $editor->AddAttribute('use_default_privs', 'id', 'fld_use_default_privs'); $editor->AddAttribute('use_default_privs', 'onclick', 'toggle_visible(\'fld_use_default_privs\',\'!privileges_settings\');'); $editor->AddField('ics_file', "''"); $editor->AddAttribute('ics_file', 'title', translate('Upload an iCalendar file or VCard file to replace this collection.')); $editor->AddAttribute('ics_file', 'id', 'fld_ics_file'); $editor->AddField('mode', 'FALSE'); $editor->AddAttribute('mode', 'title', translate('Should the uploaded entries be appended to the collection?')); $editor->AddAttribute('mode', '_label', translate('Append')); $editor->AddAttribute('mode', 'id', 'fld_mode'); $editor->SetWhere( 'collection_id='.$id ); $privilege_names = array( 'read', 'write-properties', 'write-content', 'unlock', 'read-acl', 'read-current-user-privilege-set', 'bind', 'unbind', 'write-acl', 'read-free-busy', 'schedule-deliver-invite', 'schedule-deliver-reply', 'schedule-query-freebusy', 'schedule-send-invite', 'schedule-send-reply', 'schedule-send-freebusy' ); $params = array( ':session_principal' => $session->principal_id, ':scan_depth' => $c->permission_scan_depth ); $is_update = ( $_POST['_editor_action'][$editor->Id] == 'update' ); if ( isset($collection_name) ) $collection_name = trim(str_replace( '/', '', $collection_name)); if ( !$is_update && isset($collection_name) && $collection_name != '' && is_object($principal) ) { $_POST['dav_name'] = sprintf('/%s/%s/', $principal->username(), $collection_name ); $_POST['parent_container'] = sprintf('/%s/', $principal->username() ); $params[':collection_path'] = $_POST['dav_name']; $privsql = 'SELECT path_privs( :session_principal, :collection_path, :scan_depth) AS priv'; } else if ( $id > 0 ) { $params[':collection_id'] = $id; $privsql = 'SELECT path_privs( :session_principal, dav_name, :scan_depth) AS priv FROM collection WHERE collection_id = :collection_id'; } else { if ( $editor->IsSubmit() && !$is_update && isset($collection_name) && $collection_name == '' ) { $c->messages[] = i18n('The collection name may not be blank.'); } } if ( isset($privsql) ) { $privqry = new AwlQuery( $privsql, $params ); $privqry->Exec('admin-collection-edit',__LINE__,__FILE__); $permissions = $privqry->Fetch(); $can_write_collection = ($session->AllowedTo('Admin') || (bindec($permissions->priv) & privilege_to_bits('DAV::bind')) ); } dbg_error_log('collection-edit', "Can write collection: %s", ($can_write_collection? 'yes' : 'no') ); $pwstars = '@@@@@@@@@@'; if ( $can_write_collection && $editor->IsSubmit() ) { $editor->WhereNewRecord( "collection_id=(SELECT CURRVAL('dav_id_seq'))" ); if ( $_POST['use_default_privs'] == 'on' ) { $_POST['default_privileges'] = ''; } else if ( isset($_POST['default_privileges']) ) { $privilege_bitpos = array_flip($privilege_names); $priv_names = array_keys($_POST['default_privileges']); $privs = privilege_to_bits($priv_names); $_POST['default_privileges'] = sprintf('%024s',decbin($privs)); $editor->Assign('default_privileges', $privs_dec); } $is_update = ( $_POST['_editor_action'][$editor->Id] == 'update' ); if ( $_POST['timezone'] == '' ) unset($_POST['timezone']); $resourcetypes = ''; if ( isset($_POST['is_calendar']) && $_POST['is_calendar'] == 'on' ) $resourcetypes .= ''; if ( isset($_POST['is_addressbook']) && $_POST['is_addressbook'] == 'on' ) $resourcetypes .= ''; $_POST['resourcetypes'] = $resourcetypes; if ( $editor->IsCreate() ) { $c->messages[] = i18n("Creating new Collection."); } else { $c->messages[] = i18n("Updating Collection record."); } if ( !$editor->Write() ) { $c->messages[] = i18n("Failed to write collection."); if ( $id > 0 ) $editor->GetRecord(); } else if ( isset($_FILES['ics_file']['tmp_name']) && $_FILES['ics_file']['tmp_name'] != '' ) { /** * If the user has uploaded a .ics file as a calendar, we fake this out * as if it were a "PUT" request against a collection. This is something * of a hack. It works though :-) */ $ics = trim(file_get_contents($_FILES['ics_file']['tmp_name'])); dbg_error_log('collection-edit',':Write: Loaded %d bytes from %s', strlen($ics), $_FILES['ics_file']['tmp_name'] ); include_once('check_UTF8.php'); if ( !check_string($ics) ) $ics = force_utf8($ics); if ( check_string($ics) ) { $path = $editor->Value('dav_name'); $user_no = $editor->Value('user_no'); $username = $editor->Value('username'); param_to_global('mode'); include_once('caldav-PUT-functions.php'); controlRequestContainer( $username, $user_no, $path, false, ($publicly_readable == 'on' ? true : false)); import_collection( $ics, $user_no, $path, $session->user_no, ($mode == 'append') ); $c->messages[] = sprintf(translate('Calendar "%s" was loaded from file.'), $path); } else { $c->messages[] = i18n('The file is not UTF-8 encoded, please check the error for more details.'); } } // Uncache anything to do with the collection $cache = getCacheInstance(); $cache->delete( 'collection-'.$editor->Value('dav_name'), null ); } else { if ( $id > 0 ) $editor->GetRecord(); if ( $editor->IsSubmit() ) { $c->messages[] = i18n('You do not have permission to modify this record.'); } } if ( $editor->Available() ) { $c->page_title = $editor->Title(translate('Collection').': '.$editor->Value('dav_displayname')); $entryqry = new AwlQuery( 'SELECT count(*) as count from caldav_data where collection_id='.$editor->Value('collection_id') ); $entryqry->Exec('admin-collection-edit'); $entries = $entryqry->Fetch(); $entries = $entries->count; $externalqry = new AwlQuery( 'SELECT external_url from dav_binding where bound_source_id=:id limit 1', array(':id' => $editor->Value('collection_id') ) ); $externalqry->Exec('external-bind-url'); $external = $externalqry->Fetch(); $external_url = $external->external_url; if ( $external_url ) { $external_bind = "\n " . translate('External Url') . " $external_url "; } else { $external_bind = ""; } } else { $c->page_title = $editor->Title(translate('Create New Collection')); $privs = decbin(privilege_to_bits($c->default_privileges)); $editor->Assign('default_privileges', $privs); $editor->Assign('username', $principal->username()); $editor->Assign('user_no', $principal->user_no()); $editor->Assign('is_calendar', 't' ); $editor->Assign('use_default_privs', 't'); $entries = 0; } $privilege_xlate = array( 'read' => translate('Read'), 'write-properties' => translate('Write Metadata'), 'write-content' => translate('Write Data'), 'unlock' => translate('Override a Lock'), 'read-acl' => translate('Read Access Controls'), 'read-current-user-privilege-set' => translate('Read Current User\'s Access'), 'bind' => translate('Create Events/Collections'), 'unbind' => translate('Delete Events/Collections'), 'write-acl' => translate('Write Access Controls'), 'read-free-busy' => translate('Read Free/Busy Information'), 'schedule-deliver-invite' => translate('Scheduling: Deliver an Invitation'), 'schedule-deliver-reply' => translate('Scheduling: Deliver a Reply'), 'schedule-query-freebusy' => translate('Scheduling: Query free/busy'), 'schedule-send-invite' => translate('Scheduling: Send an Invitation'), 'schedule-send-reply' => translate('Scheduling: Send a Reply'), 'schedule-send-freebusy' => translate('Scheduling: Send free/busy'), 'write' => translate('Write'), 'schedule-deliver' => translate('Scheduling: Delivery'), 'schedule-send' => translate('Scheduling: Sending') ); /** * privilege_format_function is for formatting the binary privileges from the * database, including localising them. This is a hook function for a browser * column object, so it takes three parameters: * @param mixed $value The value of the column. * @param BrowserColumn $column The BrowserColumn object we are hooked into. * @param dbrow $row The row object we read from the database. * @return string The formatted privileges. */ function privilege_format_function( $value, $column, $row ) { global $privilege_xlate; $privs = bits_to_privilege($value); $formatted = ''; foreach( $privs AS $k => $v ) { $formatted .= ($formatted == '' ? '' : ' , '); $v = preg_replace( '{^.*:}', '', $v ); $formatted .= (isset($privilege_xlate[$v]) ? $privilege_xlate[$v] : $v ); } return $formatted; } $default_privileges = bindec($editor->Value('default_privileges')); $privileges_set = '
'; for( $i=0; $i'.$privilege_xlate[$privilege_names[$i]].''."\n"; } $privileges_set .= '
'; $prompt_collection_id = translate('Collection ID'); $value_id = ( $editor->Available() ? '##collection_id.hidden####collection_id.value##' : translate('New Collection')); $prompt_dav_name = translate('DAV Path'); $value_dav_name = $c->base_url.'/caldav.php'. ( $editor->Available() ? '##dav_name.value##' : '/##user_no.hidden####username.value##/ ##collection_name.input.30##' ); $prompt_load_file = translate('Load From File'); $prompt_displayname = translate('Displayname'); $prompt_entries = translate('Items in Collection'); $prompt_public = translate('Publicly Readable'); $prompt_calendar = translate('Is a Calendar'); $prompt_addressbook = translate('Is an Addressbook'); $prompt_use_default_privs = translate('Specific Privileges'); $prompt_privileges = translate('Default Privileges'); $prompt_description = translate('Description'); $prompt_schedule_transp = translate('Schedule Transparency'); $prompt_timezone = translate('Calendar Timezone'); $btn_all = htmlspecialchars(translate('All')); $btn_all_title = htmlspecialchars(translate('Toggle all privileges')); $btn_rw = htmlspecialchars(translate('Read/Write')); $btn_rw_title = htmlspecialchars(translate('Set read+write privileges')); $btn_read = htmlspecialchars(translate('Read')); $btn_read_title = htmlspecialchars(translate('Set read privileges')); $btn_fb = htmlspecialchars(translate('Free/Busy')); $btn_fb_title = htmlspecialchars(translate('Set free/busy privileges')); $btn_sd = htmlspecialchars(translate('Schedule Deliver')); $btn_sd_title = htmlspecialchars(translate('Privileges to allow delivery of scheduling messages')); $btn_ss = htmlspecialchars(translate('Schedule Send')); $btn_ss_title = htmlspecialchars(translate('Privileges to delegate scheduling decisions')); $id = $editor->Value('collection_id'); $template = << function toggle_privileges() { var argv = toggle_privileges.arguments; var argc = argv.length; if ( argc < 2 ) { return; } var match_me = argv[0]; var set_to = -1; if ( argv[1] == 'all' ) { var form = document.getElementById(argv[2]); var fieldcount = form.elements.length; var matching = '/^' + match_me + '/'; for (var i = 0; i < fieldcount; i++) { var fieldname = form.elements[i].name; if ( fieldname.match( match_me ) ) { if ( set_to == -1 ) { set_to = ( form.elements[i].checked ? 0 : 1 ); } form.elements[i].checked = set_to; } } } else { for (var i = 1; i < argc; i++) { var f = document.getElementById( match_me + '_' + argv[i]); if ( set_to == -1 ) { set_to = ( f.checked ? 0 : 1 ); } f.checked = set_to; } } } function toggle_enabled() { var argv = toggle_enabled.arguments; var argc = argv.length; var fld_checkbox = document.getElementById(argv[0]); if ( argc < 2 ) { return; } for (var i = 1; i < argc; i++) { var fld_id = argv[i].substr(1); var fld_logical = argv[i].substr(0,1); var f = document.getElementById(fld_id); if ( fld_logical == '=' ) f.disabled = !fld_checkbox.checked; else f.disabled = fld_checkbox.checked; } } function toggle_visible() { var argv = toggle_visible.arguments; var argc = argv.length; var fld_checkbox = document.getElementById(argv[0]); if ( argc < 2 ) { return; } for (var i = 1; i < argc; i++) { var block_id = argv[i].substr(1); var block_logical = argv[i].substr(0,1); var b = document.getElementById(block_id); if ( block_logical == '!' ) b.style.display = (fld_checkbox.checked ? 'none' : ''); else b.style.display = (!fld_checkbox.checked ? 'none' : ''); } } $external_bind
$prompt_collection_id: $value_id
$prompt_dav_name: $value_dav_name
$prompt_entries: $entries
$prompt_load_file: ##ics_file.file.60## ##mode.checkbox##
$prompt_displayname: ##dav_displayname.input.50##
$prompt_public: ##publicly_readable.checkbox##
$prompt_calendar: ##is_calendar.checkbox##
$prompt_addressbook: ##is_addressbook.checkbox##
$prompt_privileges:##use_default_privs.checkbox##      

$privileges_set
$prompt_timezone: ##timezone.select##
$prompt_schedule_transp: ##schedule_transp.select##
$prompt_description: ##description.textarea.78x6##
##submit##
EOTEMPLATE; $editor->SetTemplate( $template ); $page_elements[] = $editor; if ( $editor->Available() ) { $c->stylesheets[] = 'css/browse.css'; $c->scripts[] = 'js/browse.js'; $grantrow = new Editor("Grants", "grants"); $grantrow->SetSubmitName( 'savegrantrow' ); $grantrow->SetLookup( 'to_principal', 'SELECT principal_id, displayname FROM dav_principal WHERE principal_id NOT IN (SELECT member_id FROM group_member WHERE group_id = '.$id.') ORDER BY displayname' ); if ( $can_write_collection ) { if ( $grantrow->IsSubmit() ) { $_POST['by_collection'] = $id; $to_principal = intval($_POST['to_principal']); $orig_to_id = intval($_POST['orig_to_id']); $grantrow->SetWhere( "by_collection=".$id." AND to_principal=$orig_to_id"); if ( isset($_POST['grant_privileges']) ) { $privilege_bitpos = array_flip($privilege_names); $priv_names = array_keys($_POST['grant_privileges']); $privs = privilege_to_bits($priv_names); $_POST['privileges'] = sprintf('%024s',decbin($privs)); $grantrow->Assign('privileges', $privs_dec); } $grantrow->Write( ); unset($_GET['to_principal']); } elseif ( isset($_GET['delete_grant']) ) { $qry = new AwlQuery("DELETE FROM grants WHERE by_collection=:grantor_id AND to_principal = :to_principal", array( ':grantor_id' => $id, ':to_principal' => intval($_GET['delete_grant']) )); $qry->Exec('collection-edit'); } } function edit_grant_row( $row_data ) { global $grantrow, $id, $privilege_xlate, $privilege_names; global $btn_all, $btn_all_title, $btn_rw, $btn_rw_title, $btn_read, $btn_read_title; global $btn_fb, $btn_fb_title, $btn_sd, $btn_sd_title, $btn_ss, $btn_ss_title; $submit_label = translate('Grant'); if ( $row_data->to_principal > -1 ) { $grantrow->SetRecord( $row_data ); $submit_label = translate('Apply Changes'); } $grant_privileges = bindec($grantrow->Value('grant_privileges')); $privileges_set = '
'; for( $i=0; $i < count($privilege_names); $i++ ) { $privilege_set = ( (1 << $i) & $grant_privileges ? ' CHECKED' : ''); $privileges_set .= ''."\n"; } $privileges_set .= '
'; $orig_to_id = $row_data->to_principal; $form_id = $grantrow->Id(); $form_url = preg_replace( '#&(edit|delete)_grant=\d+#', '', $_SERVER['REQUEST_URI'] ); $template = << ##to_principal.select##
$privileges_set ##$submit_label.submit## EOTEMPLATE; $grantrow->SetTemplate( $template ); $grantrow->Title(""); return $grantrow->Render(); } $browser = new Browser(translate('Collection Grants')); $browser->AddColumn( 'to_principal', translate('To ID'), 'right', '##principal_link##' ); $rowurl = $c->base_url . '/admin.php?action=edit&t=principal&id='; $browser->AddHidden( 'principal_link', "'' || to_principal || ''" ); $browser->AddHidden( 'grant_privileges', 'privileges' ); $browser->AddColumn( 'displayname', translate('Display Name') ); $browser->AddColumn( 'privs', translate('Privileges'), '', '', 'privileges', '', '', 'privilege_format_function' ); $browser->AddColumn( 'members', translate('Has Members'), '', '', 'has_members_list(principal_id)' ); if ( $can_write_collection ) { $del_link = ''.translate('Revoke').''; $edit_link = ''.translate('Edit').''; $browser->AddColumn( 'action', translate('Action'), 'center', '', "'$edit_link $del_link'" ); } $browser->SetOrdering( 'displayname', 'A' ); $browser->SetJoins( 'grants LEFT JOIN dav_principal ON (to_principal = principal_id) ' ); $browser->SetWhere( 'by_collection = '.$id ); if ( $c->enable_row_linking ) { $browser->RowFormat( '', '', '#even' ); } else { $browser->RowFormat( '', '', '#even' ); } $browser->DoQuery(); $page_elements[] = $browser; if ( $can_write_collection ) { if ( isset($_GET['edit_grant']) ) { $browser->MatchedRow('to_principal', $_GET['edit_grant'], 'edit_grant_row'); } else { $extra_row = array( 'to_principal' => -1 ); $browser->MatchedRow('to_principal', -1, 'edit_grant_row'); $extra_row = (object) $extra_row; $browser->AddRow($extra_row); } } $browser = new Browser(translate('Access Tickets')); $browser->AddHidden( 'dav_owner_id' ); $browser->AddColumn( 'ticket_id', translate('Ticket ID'), '', '' ); $browser->AddColumn( 'target', translate('Target'), '', '%s', "'".$c->base_url.'/caldav.php'."' ||COALESCE(d.dav_name,c.dav_name)" ); $browser->AddColumn( 'expiry', translate('Expires'), '', '', 'TO_CHAR(expires,\'YYYYMMDD"T"HH:MI:SS\')'); $browser->AddColumn( 'privs', translate('Privileges'), '', '', "privileges_list(privileges)" ); $delurl = $c->base_url . '/admin.php?action=edit&t=principal&id=##dav_owner_id##&ticket_id=##URL:ticket_id##&subaction=delete_ticket'; $browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" ); $browser->SetOrdering( 'target', 'A' ); $browser->SetJoins( 'access_ticket t LEFT JOIN collection c ON (target_collection_id=collection_id) LEFT JOIN caldav_data d ON (target_resource_id=dav_id)' ); $browser->SetWhere( 'target_collection_id = '.intval($editor->Value('collection_id')) ); $browser->RowFormat( '', '', '#even' ); $browser->DoQuery(); $page_elements[] = $browser; /** bind_id | bigint | not null default nextval('dav_id_seq'::regclass) bound_source_id | bigint | access_ticket_id | text | dav_owner_id | bigint | not null parent_container | text | not null dav_name | text | not null dav_displayname | text | */ $browser = new Browser(translate('Bindings to this Collection')); $browser->AddColumn( 'bind_id', translate('ID'), '', '' ); $browser->AddHidden( 'b.dav_owner_id' ); $browser->AddColumn( 'bound_as', translate('Bound As'), '', '%s', 'b.dav_name' ); $browser->AddColumn( 'access_ticket_id', translate('Ticket ID'), '', '' ); $browser->AddColumn( 'privs', translate('Privileges'), '', '', "privileges_list(privileges)" ); $delurl = $c->base_url . '/admin.php?action=edit&t=principal&id=##dav_owner_id##&bind_id=##URL:bind_id##&subaction=delete_binding'; $browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" ); $browser->SetOrdering( 'target', 'A' ); $browser->SetJoins( 'dav_binding b LEFT JOIN collection c ON (bound_source_id=collection_id) LEFT JOIN access_ticket t ON (ticket_id=access_ticket_id)' ); $browser->SetWhere( 'bound_source_id = '.intval($editor->Value('collection_id')) ); $browser->RowFormat( '', '', '#even' ); $browser->DoQuery(); $page_elements[] = $browser; } davical-1.1.1/inc/ui/principal-browse.php0000644000000000000000000000350411633117640015166 0ustar Title(translate('User Calendar Principals')); break; case 2: $browser->Title(translate('Resource Calendar Principals')); break; case 3: $browser->Title(translate('Group Principals')); break; } } $browser->AddColumn( 'principal_id', translate('ID'), 'right', '##principal_link##' ); $browser->AddColumn( 'username', translate('Name') ); $rowurl = $c->base_url . '/admin.php?action=edit&t=principal&id='; $browser->AddHidden( 'principal_link', "'' || principal_id || ''" ); $browser->AddColumn( 'displayname', translate('Display Name') ); $browser->AddColumn( 'email', translate('EMail') ); $browser->AddColumn( 'member_of', translate('Is Member of'), '', '', 'is_member_of_list(principal_id)' ); if ( !isset($principal_type) || $principal_type == 3 ) { $browser->AddColumn( 'members', translate('Has Members'), '', '', 'has_members_list(principal_id)' ); } $browser->SetOrdering( 'username', 'A' ); $browser->SetJoins( "dav_principal " ); if ( isset($principal_active) && $principal_active == 'f' ) $browser->SetWhere( 'NOT user_active' ); else $browser->SetWhere( 'user_active' ); if ( isset($principal_type) ) { $browser->AndWhere( 'type_id = '.$principal_type ); } $c->page_title = $browser->Title(); if ( $c->enable_row_linking ) { $browser->RowFormat( '', '', '#even' ); } else { $browser->RowFormat( '', '', '#even' ); } $page_elements[] = $browser; davical-1.1.1/inc/ui/external-browse.php0000644000000000000000000000321211651217474015031 0ustar AddColumn( 'collection_id', translate('ID'), 'right', '##collection_link##' ); $rowurl = $c->base_url . '/admin.php?action=edit&t=collection&id='; $browser->AddHidden( 'collection_link', "'' || collection_id || ''" ); $browser->AddColumn( 'dav_displayname', translate('Display Name') ); $browser->AddColumn( 'refs', translate('References'),'right','','(select count(*) from dav_binding where bound_source_id=collection_id )' ); $browser->SetOrdering( 'dav_displayname', 'A' ); $browser->SetJoins( "collection " ); $browser->SetWhere( "parent_container='/.external/'" ); $c->page_title = $browser->Title(); if ( $c->enable_row_linking ) { $browser->RowFormat( '', '', '#even' ); } else { $browser->RowFormat( '', '', '#even' ); } $page_elements[] = $browser; $externalqry = new AwlQuery( "SELECT count(*) as count from collection where parent_container='/.external/' and collection_id not in ( select bound_source_id from dav_binding where external_url is not null)" ); $externalqry->Exec('external-bind-url'); $external = $externalqry->Fetch(); if ( $external->count > 0 ) { $link = ''. translate("Remove dangling external calendars").'('.$external->count.')'; $c->stylesheets[] = 'css/edit.css'; $page_elements[] = $link; } davical-1.1.1/inc/ui/principal-edit.php0000644000000000000000000012527311767336605014636 0ustar translate('All privileges'), 'read' => translate('Read'), 'write-properties' => translate('Write Metadata'), 'write-content' => translate('Write Data'), 'unlock' => translate('Override a Lock'), 'read-acl' => translate('Read Access Controls'), 'read-current-user-privilege-set' => translate('Read Current User\'s Access'), 'bind' => translate('Create Events/Collections'), 'unbind' => translate('Delete Events/Collections'), 'write-acl' => translate('Write Access Controls'), 'read-free-busy' => translate('Read Free/Busy Information'), 'schedule-deliver-invite' => translate('Scheduling: Deliver an Invitation'), 'schedule-deliver-reply' => translate('Scheduling: Deliver a Reply'), 'schedule-query-freebusy' => translate('Scheduling: Query free/busy'), 'schedule-send-invite' => translate('Scheduling: Send an Invitation'), 'schedule-send-reply' => translate('Scheduling: Send a Reply'), 'schedule-send-freebusy' => translate('Scheduling: Send free/busy'), 'write' => translate('Write'), 'schedule-deliver' => translate('Scheduling: Delivery'), 'schedule-send' => translate('Scheduling: Sending') ); $can_write_principal = ($session->AllowedTo('Admin') || ($session->principal_id == $id)); if ( !$can_write_principal && $id > 0 ) { $target_principal = new Principal('principal_id', $id); $can_write_principal = $session->HavePrivilegeTo('DAV::write', $target_principal->dav_name()); } $delete_collection_confirmation_required = null; $delete_principal_confirmation_required = null; $delete_ticket_confirmation_required = null; $delete_bind_in_confirmation_required = null; $delete_binding_confirmation_required = null; function handle_subaction( $subaction ) { global $session, $c, $id, $editor; global $delete_collection_confirmation_required; global $delete_principal_confirmation_required; global $delete_ticket_confirmation_required; global $delete_bind_in_confirmation_required; global $delete_binding_confirmation_required; dbg_error_log('admin-principal-edit',':handle_action: Action %s', $subaction ); switch( $subaction ) { case 'delete_collection': dbg_error_log('admin-principal-edit',':handle_action: Deleting collection %s for principal %d', $_GET['dav_name'], $id ); if ( $session->AllowedTo('Admin') || ($id > 0 && $session->principal_id == $id) ) { if ( $session->CheckConfirmationHash('GET', 'confirm') ) { dbg_error_log('admin-principal-edit',':handle_action: Allowed to delete collection %s for principal %d', $_GET['dav_name'], $id ); $qry = new AwlQuery('DELETE FROM collection WHERE dav_name=?;', $_GET['dav_name'] ); if ( $qry->Exec() ) { $c->messages[] = i18n('Collection deleted'); return true; } else { $c->messages[] = i18n('There was an error writing to the database.'); return false; } } else { $c->messages[] = i18n('Please confirm deletion of collection - see below'); $delete_collection_confirmation_required = $session->BuildConfirmationHash('GET', 'confirm'); return false; } } break; case 'delete_principal': dbg_error_log('admin-principal-edit',':handle_action: Deleting principal %d', $id ); if ( $session->AllowedTo('Admin') ) { if ( isset($id) && $id > 1 && $session->CheckConfirmationHash('GET', 'confirm') ) { dbg_error_log('admin-principal-edit',':handle_action: Allowed to delete principal %d -%s', $id ); $qry = new AwlQuery('DELETE FROM dav_principal WHERE principal_id=?', $id ); if ( $qry->Exec() ) { $c->messages[] = i18n('Principal deleted'); return true; } else { $c->messages[] = i18n('There was an error writing to the database.'); return false; } } else { $c->messages[] = i18n('Please confirm deletion of the principal'); $delete_principal_confirmation_required = $session->BuildConfirmationHash('GET', 'confirm'); return false; } } break; case 'delete_ticket': dbg_error_log('admin-principal-edit',':handle_action: Deleting ticket "%s" for principal %d', $_GET['ticket_id'], $id ); if ( $session->AllowedTo('Admin') || ($id > 0 && $session->principal_id == $id) ) { if ( $session->CheckConfirmationHash('GET', 'confirm') ) { dbg_error_log('admin-principal-edit',':handle_action: Allowed to delete ticket "%s" for principal %d', $_GET['ticket_id'], $id ); $qry = new AwlQuery('DELETE FROM access_ticket WHERE ticket_id=?;', $_GET['ticket_id'] ); if ( $qry->Exec() ) { $c->messages[] = i18n('Access ticket deleted'); return true; } else { $c->messages[] = i18n('There was an error writing to the database.'); return false; } } else { $c->messages[] = i18n('Please confirm deletion of access ticket - see below'); $delete_ticket_confirmation_required = $session->BuildConfirmationHash('GET', 'confirm'); return false; } } break; case 'delete_bind_in': case 'delete_binding': dbg_error_log('admin-principal-edit',':handle_action: Deleting binding "%s" for principal %d', $_GET['bind_id'], $id ); if ( $session->AllowedTo('Admin') || ($id > 0 && $session->principal_id == $id) ) { if ( $session->CheckConfirmationHash('GET', 'confirm') ) { dbg_error_log('admin-principal-edit',':handle_action: Allowed to delete ticket "%s" for principal %d', $_GET['bind_id'], $id ); $qry = new AwlQuery('DELETE FROM dav_binding WHERE bind_id=?;', $_GET['bind_id'] ); if ( $qry->Exec() ) { $c->messages[] = i18n('Binding deleted'); return true; } else { $c->messages[] = i18n('There was an error writing to the database.'); return false; } } else { $c->messages[] = i18n('Please confirm deletion of binding - see below'); if ( $subaction == 'delete_bind_in' ) { $delete_bind_in_confirmation_required = $session->BuildConfirmationHash('GET', 'confirm'); } else { $delete_binding_confirmation_required = $session->BuildConfirmationHash('GET', 'confirm'); } return false; } } break; default: return false; } return false; } function principal_editor() { global $c, $id, $can_write_principal, $session; $editor = new Editor(translate('Principal'), 'dav_principal'); $editor->SetLookup( 'date_format_type', "SELECT 'E', 'European' UNION SELECT 'U', 'US Format' UNION SELECT 'I', 'ISO Format'" ); $editor->SetLookup( 'type_id', 'SELECT principal_type_id, principal_type_desc FROM principal_type ORDER BY principal_type_id' ); $editor->SetLookup( 'locale', 'SELECT \'\', \''.translate("*** Default Locale ***").'\' UNION SELECT locale, locale_name_locale FROM supported_locales ORDER BY 1 ASC' ); $editor->AddAttribute( 'locale', 'title', translate("The preferred language for this person.") ); $editor->AddAttribute( 'fullname', 'title', translate("The full name for this person, group or other type of principal.") ); $editor->SetWhere( 'principal_id='.$id ); $editor->AddField('is_admin', 'EXISTS( SELECT 1 FROM role_member WHERE role_no = 1 AND role_member.user_no = dav_principal.user_no )' ); $editor->AddAttribute('is_admin', 'title', translate('An "Administrator" user has full rights to the whole DAViCal System')); $post_values = false; if ( isset($_POST['xxxxusername']) ) { $_POST['xxxxusername'] = trim(str_replace('/', '', $_POST['xxxxusername'])); if ( $_POST['xxxxusername'] == '' ) { $c->messages[] = i18n("The username must not be blank, and may not contain a slash"); $can_write_principal = false; } }; if ( isset($_POST['fullname']) && trim($_POST['fullname']) == '' ) { $c->messages[] = i18n("The full name must not be blank."); $can_write_principal = false; }; if ( isset($_POST['email']) && trim($_POST['email']) == '' ) { $c->messages[] = i18n("The email address really should not be blank."); } $pwstars = '@@@@@@@@@@'; if ( $can_write_principal && $editor->IsSubmit() ) { $editor->WhereNewRecord( "principal_id=(SELECT CURRVAL('dav_id_seq'))" ); if ( ! $session->AllowedTo('Admin') ) { unset($_POST['admin_role']); unset($_POST['user_active']); } unset($_POST['password']); if ( $_POST['newpass1'] != '' && $_POST['newpass1'] != $pwstars ) { if ( $_POST['newpass1'] == $_POST['newpass2'] ) { $_POST['password'] = $_POST['newpass1']; } else { $c->messages[] = "Password not updated. The supplied passwords do not match."; } } if ( isset($_POST['fullname']) && !isset($_POST['displayname']) ) { $_POST['displayname'] = $_POST['fullname']; } if ( isset($_POST['default_privileges']) ) { $privilege_bitpos = array_flip($privilege_names); $priv_names = array_keys($_POST['default_privileges']); $privs = privilege_to_bits($priv_names); $_POST['default_privileges'] = sprintf('%024s',decbin($privs)); $editor->Assign('default_privileges', $privs_dec); } if ( $editor->IsCreate() ) { $c->messages[] = i18n("Creating new Principal record."); } else { $c->messages[] = i18n("Updating Principal record."); } $editor->Write(); if ( $_POST['type_id'] != 3 && $editor->IsCreate() ) { /** We only add the default calendar if it isn't a group, and this is a create action */ require_once('auth-functions.php'); CreateHomeCollections($editor->Value('username')); } if ( $session->AllowedTo('Admin') ) { if ( $_POST['is_admin'] == 'on' ) { $sql = 'INSERT INTO role_member (role_no, user_no) SELECT 1, dav_principal.user_no FROM dav_principal WHERE user_no = :user_no AND NOT EXISTS(SELECT 1 FROM role_member rm WHERE rm.role_no = 1 AND rm.user_no = dav_principal.user_no )'; $editor->Assign('is_admin', 't'); } else { $sql = 'DELETE FROM role_member WHERE role_no = 1 AND user_no = :user_no'; $editor->Assign('is_admin', 'f'); } $params[':user_no'] = $editor->Value('user_no'); $qry = new AwlQuery( $sql, $params ); $qry->Exec('admin-principal-edit'); } } else if ( isset($id) && $id > 0 ) { $editor->GetRecord(); if ( $editor->IsSubmit() ) { $c->messages[] = i18n('You do not have permission to modify this record.'); } } if ( $editor->Available() ) { $c->page_title = $editor->Title(translate('Principal').': '.$editor->Value('fullname')); } else { $c->page_title = $editor->Title(translate('Create New Principal')); $privs = decbin(privilege_to_bits($c->default_privileges)); $editor->Assign('default_privileges', $privs); $editor->Assign('user_active', 't'); foreach( $c->template_usr AS $k => $v ) { $editor->Assign($k, $v); } } if ( $post_values ) { $editor->PostToValues(); if ( isset($_POST['default_privileges']) ) { $privilege_bitpos = array_flip($privilege_names); $priv_names = array_keys($_POST['default_privileges']); $privs = privilege_to_bits($priv_names); $_POST['default_privileges'] = sprintf('%024s',decbin($privs)); $editor->Assign('default_privileges', $_POST['default_privileges']); } } $prompt_principal_id = translate('Principal ID'); $value_id = ( $editor->Available() ? '##principal_id.hidden####principal_id.value##' : translate('New Principal')); $prompt_username = translate('Username'); $prompt_password_1 = translate('Change Password'); $prompt_password_2 = translate('Confirm Password'); $prompt_fullname = translate('Fullname'); $prompt_displayname = translate('Display Name'); $prompt_email = translate('Email Address'); $prompt_date_format = translate('Date Format Style'); $prompt_admin = translate('Administrator'); $prompt_active = translate('Active'); $prompt_locale = translate('Locale'); $prompt_type = translate('Principal Type'); $prompt_privileges = translate('Privileges granted to All Users'); $privs_html = build_privileges_html( $editor, 'default_privileges'); $admin_row_entry = ''; $delete_principal_button = ''; if ( $session->AllowedTo('Admin') ) { $admin_row_entry = ' '.$prompt_admin.':##is_admin.checkbox## '; $admin_row_entry .= ' '.$prompt_active.':##user_active.checkbox## '; if ( isset($id) ) $delete_principal_button = '' . translate("Delete Principal") . ''; } $id = $editor->Value('principal_id'); $template = << function toggle_privileges() { var argv = toggle_privileges.arguments; var argc = argv.length; if ( argc < 2 ) { return; } var match_me = argv[0]; var set_to = -1; if ( argv[1] == 'all' ) { var form = document.getElementById(argv[2]); var fieldcount = form.elements.length; var matching = '/^' + match_me + '/'; for (var i = 0; i < fieldcount; i++) { var fieldname = form.elements[i].name; if ( fieldname.match( match_me ) ) { if ( set_to == -1 ) { set_to = ( form.elements[i].checked ? 0 : 1 ); } form.elements[i].checked = set_to; } } } else { for (var i = 1; i < argc; i++) { var f = document.getElementById( match_me + '_' + argv[i]); if ( set_to == -1 ) { set_to = ( f.checked ? 0 : 1 ); } f.checked = set_to; } } } $admin_row_entry
$prompt_principal_id:
$value_id $delete_principal_button
$prompt_username: ##xxxxusername.input.50##
$prompt_password_1: ##newpass1.password.$pwstars##
$prompt_password_2: ##newpass2.password.$pwstars##
$prompt_fullname: ##fullname.input.50##
$prompt_email: ##email.input.50##
$prompt_locale: ##locale.select##
$prompt_date_format: ##date_format_type.select##
$prompt_type: ##type_id.select##
$prompt_privileges:$privs_html
##submit##
EOTEMPLATE; $editor->SetTemplate( $template ); return $editor; } function build_privileges_html( $ed, $fname ) { global $privilege_xlate, $privilege_names; $btn_all = htmlspecialchars(translate('All')); $btn_all_title = htmlspecialchars(translate('Toggle all privileges')); $btn_rw = htmlspecialchars(translate('Read/Write')); $btn_rw_title = htmlspecialchars(translate('Set read+write privileges')); $btn_read = htmlspecialchars(translate('Read')); $btn_read_title = htmlspecialchars(translate('Set read privileges')); $btn_fb = htmlspecialchars(translate('Free/Busy')); $btn_fb_title = htmlspecialchars(translate('Set free/busy privileges')); $btn_sd = htmlspecialchars(translate('Schedule Deliver')); $btn_sd_title = htmlspecialchars(translate('Privileges to allow delivery of scheduling messages')); $btn_ss = htmlspecialchars(translate('Schedule Send')); $btn_ss_title = htmlspecialchars(translate('Privileges to delegate scheduling decisions')); $privs_dec = bindec($ed->Value($fname)); $privileges_set = sprintf('
%s', $fname, "\n"); for( $i=0; $i < count($privilege_names); $i++ ) { $privilege_set = ( (1 << $i) & $privs_dec ? ' CHECKED' : ''); $privileges_set .= sprintf( ' '."\n", $fname, $privilege_names[$i], $fname, $privilege_names[$i], $privilege_set, $privilege_xlate[$privilege_names[$i]]); } $privileges_set .= '
'."\n"; $form_id = $ed->Id(); $html = <<
$privileges_set EOTEMPLATE; return $html; } /** * privilege_format_function is for formatting the binary privileges from the * database, including localising them. This is a hook function for a browser * column object, so it takes three parameters: * @param mixed $value The value of the column. * @param BrowserColumn $column The BrowserColumn object we are hooked into. * @param dbrow $row The row object we read from the database. * @return string The formatted privileges. */ function privilege_format_function( $value, $column, $row ) { global $privilege_xlate; $privs = bits_to_privilege($value,'*'); $formatted = ''; foreach( $privs AS $k => $v ) { $formatted .= ($formatted == '' ? '' : ', '); $v = preg_replace( '{^.*:}', '', $v ); $formatted .= (isset($privilege_xlate[$v]) ? $privilege_xlate[$v] : $v ); } return $formatted; } function confirm_delete_principal($confirmation_hash, $displayname ) { $html = '

'; $html .= sprintf('%s \'%s\' %s %s', translate('Deleting Principal:'), $displayname, $_SERVER['REQUEST_URI'], $confirmation_hash, translate('Confirm Deletion of the Principal'), translate('All of the principal\'s calendars and events will be unrecoverably deleted.') ); $html .= "

\n"; return $html; } function group_memberships_browser() { global $c, $id, $editor; $browser = new Browser(translate('Group Memberships')); $browser->AddColumn( 'group_id', translate('ID'), 'right', '##principal_link##' ); $rowurl = $c->base_url . '/admin.php?action=edit&t=principal&id='; $browser->AddHidden( 'principal_link', "'' || principal_id || ''" ); $browser->AddColumn( 'displayname', translate('Display Name') ); $browser->AddColumn( 'member_of', translate('Is Member of'), '', '', 'is_member_of_list(principal_id)' ); $browser->AddColumn( 'members', translate('Has Members'), '', '', 'has_members_list(principal_id)' ); $browser->SetOrdering( 'displayname', 'A' ); $browser->SetJoins( "group_member LEFT JOIN dav_principal ON (group_id = principal_id) " ); $browser->SetWhere( 'user_active AND member_id = '.$id ); if ( $c->enable_row_linking ) { $browser->RowFormat( '', '', '#even' ); } else { $browser->RowFormat( '', '', '#even' ); } $browser->DoQuery(); return $browser; } function group_row_editor() { global $c, $id, $editor, $can_write_principal; $grouprow = new Editor("Group Members", "group_member"); $sql = 'SELECT principal_id, coalesce(displayname,fullname,username) FROM dav_principal '; $sql .= 'WHERE principal_id NOT IN (SELECT member_id FROM group_member WHERE group_id = '.$id.') '; $sql .= 'AND principal_id != '.$id; $sql .= 'ORDER BY 2'; $grouprow->SetLookup( 'member_id', $sql); $grouprow->SetSubmitName( 'savegrouprow' ); if ( $can_write_principal ) { if ( $grouprow->IsSubmit() ) { if ( $grouprow->IsUpdate() ) $c->messages[] = translate('Updating Member of this Group Principal'); else $c->messages[] = translate('Adding new member to this Group Principal'); $_POST['group_id'] = $id; $member_id = intval($_POST['member_id']); $grouprow->SetWhere( 'group_id='.$id.' AND member_id='.$member_id); $grouprow->Write( ); unset($_GET['member_id']); } elseif ( isset($_GET['delete_member']) ) { $qry = new AwlQuery('DELETE FROM group_member WHERE group_id=:group_id AND member_id = :member_id', array( ':group_id' => $id, ':member_id' => intval($_GET['delete_member']) )); $qry->Exec('principal-edit'); $c->messages[] = translate('Member deleted from this Group Principal'); } } return $grouprow; } function edit_group_row( $row_data ) { global $id, $grouprow; $form_url = preg_replace( '#&(edit|delete)_group=\d+#', '', $_SERVER['REQUEST_URI'] ); $template = << ##member_id.select##   ##Add.submit## EOTEMPLATE; $grouprow->SetTemplate( $template ); $grouprow->Title(""); if ( $row_data->group_id > -1 ) $grouprow->SetRecord( $row_data ); return $grouprow->Render(); } function group_members_browser() { global $c, $id, $editor, $can_write_principal; $browser = new Browser(translate('Group Members')); $browser->AddColumn( 'group_id', translate('ID'), 'right', '##principal_link##' ); $rowurl = $c->base_url . '/admin.php?action=edit&t=principal&id='; $browser->AddHidden( 'principal_id' ); $browser->AddHidden( 'principal_link', "'' || principal_id || ''" ); $browser->AddColumn( 'displayname', translate('Display Name') ); $browser->AddColumn( 'member_of', translate('Is Member of'), '', '', 'is_member_of_list(principal_id)' ); $browser->AddColumn( 'members', translate('Has Members'), '', '', 'has_members_list(principal_id)' ); if ( $can_write_principal ) { $del_link = ''.translate('Remove').''; $browser->AddColumn( 'action', translate('Action'), 'center', '', "'$edit_link $del_link'" ); } $browser->SetOrdering( 'displayname', 'A' ); $browser->SetJoins( "group_member LEFT JOIN dav_principal ON (member_id = principal_id) " ); $browser->SetWhere( 'user_active AND group_id = '.$id ); if ( $c->enable_row_linking ) { $browser->RowFormat( '', '', '#even' ); } else { $browser->RowFormat( '', '', '#even' ); } $browser->DoQuery(); if ( $can_write_principal ) { $browser->RowFormat( '', '', '#even' ); $extra_row = array( 'group_id' => -1 ); $browser->MatchedRow('group_id', -1, 'edit_group_row'); $extra_row = (object) $extra_row; $browser->AddRow($extra_row); } return $browser; } function grant_row_editor() { global $c, $id, $editor, $can_write_principal, $privilege_names; $grantrow = new Editor("Grants", "grants"); $grantrow->SetSubmitName( 'savegrantrow' ); $edit_grant_clause = ''; if ( isset($_GET['edit_grant']) ) { $edit_grant_clause = ' AND to_principal != '.intval($_GET['edit_grant']); } $grantrow->SetLookup( 'to_principal', 'SELECT principal_id, displayname FROM dav_principal WHERE principal_id NOT IN (SELECT to_principal FROM grants WHERE by_principal = '.$id.$edit_grant_clause.') ORDER BY fullname' ); if ( $can_write_principal ) { if ( $grantrow->IsSubmit() ) { if ( $grantrow->IsUpdate() ) $c->messages[] = translate('Updating grants by this Principal'); else $c->messages[] = translate('Granting new privileges from this Principal'); $_POST['by_principal'] = $id; $to_principal = intval($_POST['to_principal']); $orig_to_id = intval($_POST['orig_to_id']); $grantrow->SetWhere( 'by_principal='.$id.' AND to_principal='.$orig_to_id); if ( isset($_POST['grant_privileges']) ) { $privilege_bitpos = array_flip($privilege_names); $priv_names = array_keys($_POST['grant_privileges']); $privs_dec = privilege_to_bits($priv_names); $_POST['privileges'] = sprintf('%024s',decbin($privs_dec)); $grantrow->Assign('privileges', $privs_dec); } $grantrow->Write( ); unset($_GET['to_principal']); } elseif ( isset($_GET['delete_grant']) ) { $qry = new AwlQuery("DELETE FROM grants WHERE by_principal=:grantor_id AND to_principal = :to_principal", array( ':grantor_id' => $id, ':to_principal' => intval($_GET['delete_grant']) )); $qry->Exec('principal-edit'); $c->messages[] = translate('Deleted a grant from this Principal'); } } return $grantrow; } function edit_grant_row( $row_data ) { global $id, $grantrow; $orig_to_id = intval($row_data->to_principal); if ( $orig_to_id > -1 ) { $grantrow->SetRecord( $row_data ); } else { $grantrow->Initialise( $row_data ); } $privs_html = build_privileges_html( $grantrow, 'grant_privileges' ); $form_id = $grantrow->Id(); $form_url = preg_replace( '#&(edit|delete)_grant=\d+#', '', $_SERVER['REQUEST_URI'] ); $template = << ##to_principal.select## $privs_html ##submit## EOTEMPLATE; $grantrow->SetTemplate( $template ); $grantrow->Title(""); return $grantrow->Render(); } function principal_grants_browser() { global $c, $id, $editor, $can_write_principal; $browser = new Browser(translate('Principal Grants')); $browser->AddColumn( 'to_principal', translate('To ID'), 'right', '##principal_link##' ); $rowurl = $c->base_url . '/admin.php?action=edit&t=principal&id='; $browser->AddHidden( 'principal_link', "'' || to_principal || ''" ); $browser->AddHidden( 'grant_privileges', 'privileges' ); $browser->AddColumn( 'displayname', translate('Display Name') ); $browser->AddColumn( 'privs', translate('Privileges'), '', '', 'privileges', '', '', 'privilege_format_function' ); $browser->AddColumn( 'members', translate('Has Members'), '', '', 'has_members_list(principal_id)' ); if ( $can_write_principal ) { $del_link = ''.translate('Revoke').''; $edit_link = ''.translate('Edit').''; $browser->AddColumn( 'action', translate('Action'), 'center', '', "'$edit_link $del_link'" ); } $browser->SetOrdering( 'displayname', 'A' ); $browser->SetJoins( "grants LEFT JOIN dav_principal ON (to_principal = principal_id) " ); $browser->SetWhere( 'by_principal = '.$id ); if ( $c->enable_row_linking ) { $browser->RowFormat( '', '', '#even' ); } else { $browser->RowFormat( '', '', '#even' ); } $browser->DoQuery(); if ( $can_write_principal ) { if ( isset($_GET['edit_grant']) ) { $browser->MatchedRow('to_principal', $_GET['edit_grant'], 'edit_grant_row'); } else if ( isset($id ) ) { $browser->RowFormat( '', '', '#even' ); $extra_row = array( 'to_principal' => -1 ); $browser->MatchedRow('to_principal', -1, 'edit_grant_row'); $extra_row = (object) $extra_row; $browser->AddRow($extra_row); } } return $browser; } function ticket_row_editor() { global $c, $id, $editor, $can_write_principal, $privilege_names; $ticketrow = new Editor("Tickets", "access_ticket"); $ticketrow->SetSubmitName( 'ticketrow' ); if ( $can_write_principal && $ticketrow->IsSubmit() ) { $username = $editor->Value('username'); $ugly_path = $_POST['target']; if ( $ugly_path == '/'.$username || $ugly_path == '/'.$username.'/' ) { $target_collection = $id; } else { $username_len = strlen($username) + 2; $sql = "SELECT collection_id FROM collection WHERE dav_name = :exact_name"; $sql .= " AND substring(dav_name FROM 1 FOR $username_len) = '/$username/'"; $params = array( ':exact_name' => $ugly_path ); if ( !preg_match( '#/$#', $ugly_path ) ) { $sql .= " OR dav_name = :truncated_name OR dav_name = :trailing_slash_name"; $params[':truncated_name'] = preg_replace( '#[^/]*$#', '', $ugly_path); $params[':trailing_slash_name'] = $ugly_path."/"; } $sql .= " ORDER BY LENGTH(dav_name) DESC LIMIT 1"; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec() && $qry->rows() > 0 ) { $row = $qry->Fetch(); $target_collection = $row->collection_id; } else { $c->messages[] = translate('Can only add tickets for existing collection paths which you own'); return $ticketrow; } } $_POST['dav_owner_id'] = $id; $_POST['target_collection_id'] = $target_collection; $ticket_id = check_by_regex($_POST['ticket_id'], '/[A-Za-z0-9]+/'); $ticketrow->SetWhere( 'dav_owner_id='.$id.' AND ticket_id='.AwlQuery::quote($ticket_id)); if ( isset($_POST['ticket_privileges']) ) { $privilege_bitpos = array_flip($privilege_names); $priv_names = array_keys($_POST['ticket_privileges']); $privs_dec = privilege_to_bits($priv_names); $_POST['privileges'] = sprintf('%024s',decbin($privs_dec)); $ticketrow->Assign('privileges', $privs_dec); } $c->messages[] = translate('Creating new ticket granting privileges to this Principal'); $ticketrow->Write( ); } return $ticketrow; } function edit_ticket_row( $row_data ) { global $id, $ticketrow; if ( isset($row_data->ticket_id) ) { $ticketrow->Initialise( $row_data ); } $privs_html = build_privileges_html( $ticketrow, 'ticket_privileges' ); $form_id = $ticketrow->Id(); $ticket_id = $row_data->ticket_id; $form_url = preg_replace( '#&(edit|delete)_[a-z]+=\d+#', '', $_SERVER['REQUEST_URI'] ); $template = << $ticket_id $privs_html ##submit## EOTEMPLATE; $ticketrow->SetTemplate( $template ); $ticketrow->Title(""); return $ticketrow->Render(); } function access_ticket_browser() { global $c, $id, $editor, $can_write_principal; $browser = new Browser(translate('Access Tickets')); $browser->AddColumn( 'ticket_id', translate('Ticket ID'), '', '' ); $browser->AddColumn( 'target', translate('Target'), '', '%s', "COALESCE(d.dav_name,c.dav_name)" ); $browser->AddColumn( 'expires', translate('Expires'), '', '', 'TO_CHAR(expires,\'YYYY-MM-DD HH:MI:SS\')'); $browser->AddColumn( 'privs', translate('Privileges'), '', '', 'privileges', '', '', 'privilege_format_function' ); $delurl = $c->base_url . '/admin.php?action=edit&t=principal&id='.$id.'&ticket_id=##URL:ticket_id##&subaction=delete_ticket'; $browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" ); $browser->SetOrdering( 'target', 'A' ); $browser->SetJoins( 'access_ticket t LEFT JOIN collection c ON (target_collection_id=collection_id) LEFT JOIN caldav_data d ON (target_resource_id=dav_id)' ); $browser->SetWhere( 'dav_owner_id = '.intval($editor->Value('principal_id')) ); $browser->RowFormat( '', '', '#even' ); $browser->DoQuery(); if ( $can_write_principal ) { $ticket_id = substr( str_replace('/', '', str_replace('+', '',base64_encode(sha1(date('r') .rand(0,2100000000) . microtime(true),true)))), 7, 8); $extra_row = array( 'ticket_id' => $ticket_id, 'expires' => date( 'Y-m-d', time() + (86400 * 31) ), 'target' => '/'.$editor->Value('username').'/'.$c->home_calendar_name.'/' ); $browser->MatchedRow('ticket_id', $ticket_id, 'edit_ticket_row'); $browser->AddRow($extra_row); } return $browser; } function confirm_delete_ticket($confirmation_hash) { $html = '
'; $html .= sprintf('%s "%s" %s %s', translate('Deleting Ticket:'), $_GET['ticket_id'], $_SERVER['REQUEST_URI'], $confirmation_hash, translate('Confirm Deletion of the Ticket'), translate('The access ticket will be deleted.') ); $html .= "
\n"; return $html; } function principal_collection_browser() { global $c, $page_elements, $id, $editor; $browser = new Browser(translate('Principal Collections')); $browser->AddColumn( 'collection_id', translate('ID'), 'right', '##collection_link##' ); $rowurl = $c->base_url . '/admin.php?action=edit&t=collection&id='; $browser->AddHidden( 'collection_link', "'' || collection_id || ''" ); $browser->AddColumn( 'dav_name', translate('Path') ); $browser->AddColumn( 'dav_displayname', translate('Display Name') ); $browser->AddColumn( 'publicly_readable', translate('Public'), 'centre', '', 'CASE WHEN publicly_readable THEN \''.translate('Yes').'\' ELSE \''.translate('No').'\' END' ); $browser->AddColumn( 'privs', translate('Privileges'), '', '', "COALESCE( privileges_list(default_privileges), '[".translate('from principal')."]')" ); $delurl = $c->base_url . '/admin.php?action=edit&t=principal&id='.$id.'&dav_name=##URL:dav_name##&subaction=delete_collection'; $browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" ); $browser->SetOrdering( 'dav_name', 'A' ); $browser->SetJoins( "collection " ); $browser->SetWhere( 'user_no = '.intval($editor->Value('user_no')) ); $browser->AddRow( array( 'dav_name' => ''.translate('Create Collection').'' )); if ( $c->enable_row_linking ) { $browser->RowFormat( '', '', '#even' ); } else { $browser->RowFormat( '', '', '#even' ); } $browser->DoQuery(); return $browser; } function confirm_delete_collection($confirmation_hash) { $html = '
'; $html .= sprintf('%s "%s" %s %s', translate('Deleting Collection:'), $_GET['dav_name'], $_SERVER['REQUEST_URI'], $confirmation_hash, translate('Confirm Deletion of the Collection'), translate('All collection data will be unrecoverably deleted.') ); $html .= "
\n"; return $html; } function bindings_to_other_browser() { global $c, $page_elements, $id, $editor; $browser = new Browser(translate('Bindings to other collections')); $browser->AddColumn( 'bind_id', translate('ID'), '', '' ); $browser->AddHidden( 'b.dav_owner_id' ); $browser->AddHidden( 'p.principal_id' ); $browser->AddColumn( 'bound_as', translate('Bound As'), '', '%s', 'b.dav_name' ); $browser->AddColumn( 'dav_name', translate('To Collection'), '', '%s', 'c.dav_name' ); $browser->AddColumn( 'access_ticket_id', translate('Ticket ID'), '', '' ); $browser->AddColumn( 'privs', translate('Privileges'), '', '', "privileges_list(privileges)" ); $delurl = $c->base_url . sprintf('/admin.php?action=edit&t=principal&id=%s&bind_id=##bind_id##&subaction=delete_bind_in', $editor->Value('principal_id')); $browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" ); $browser->SetOrdering( 'target', 'A' ); $browser->SetJoins( 'dav_binding b LEFT JOIN collection c ON (bound_source_id=collection_id) LEFT JOIN access_ticket t ON (ticket_id=access_ticket_id) LEFT JOIN principal p USING(user_no)' ); $browser->SetWhere( 'b.dav_name ~ '.sprintf("'^/%s/'", $editor->Value('username')) ); $browser->RowFormat( '', '', '#even' ); $browser->DoQuery(); return $browser; } function confirm_delete_bind_in($confirmation_hash) { $html = '
'; $html .= sprintf('%s "%s" %s %s', translate('Deleting Binding:'), $_GET['bind_id'], $_SERVER['REQUEST_URI'], $confirmation_hash, translate('Confirm Deletion of the Binding'), translate('The binding will be deleted.') ); $html .= "
\n"; return $html; } function bindings_to_us_browser() { global $c, $page_elements, $id, $editor; $browser = new Browser(translate('Bindings to this Principal\'s Collections')); $browser->AddColumn( 'bind_id', translate('ID'), '', '' ); $browser->AddHidden( 'b.dav_owner_id' ); $browser->AddHidden( 'p.principal_id' ); $browser->AddColumn( 'dav_name', translate('Collection'), '', '%s', 'c.dav_name' ); $browser->AddColumn( 'bound_as', translate('Bound As'), '', '%s', 'b.dav_name' ); $browser->AddColumn( 'access_ticket_id', translate('Ticket ID'), '', '' ); $browser->AddColumn( 'privs', translate('Privileges'), '', '', "privileges_list(privileges)" ); $delurl = $c->base_url . '/admin.php?action=edit&t=principal&id=##principal_id##&bind_id=##bind_id##&subaction=delete_binding'; $browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" ); $browser->SetOrdering( 'target', 'A' ); $browser->SetJoins( 'dav_binding b LEFT JOIN collection c ON (bound_source_id=collection_id) LEFT JOIN access_ticket t ON (ticket_id=access_ticket_id) LEFT JOIN principal p USING(user_no)' ); $browser->SetWhere( 'p.principal_id = '.intval($editor->Value('principal_id')) ); $browser->RowFormat( '', '', '#even' ); $browser->DoQuery(); return $browser; } function confirm_delete_binding( $confirmation_hash ) { $html = '
'; $html .= sprintf('%s "%s" %s %s', translate('Deleting Binding:'), $_GET['bind_id'], $_SERVER['REQUEST_URI'], $confirmation_hash, translate('Confirm Deletion of the Binding'), translate('The binding will be deleted.') ); $html .= "
\n"; return $html; } if ( isset($_GET['subaction']) ) { if ( handle_subaction($_GET['subaction']) && 'delete_principal' == $_GET['subaction'] ) { return true; } } $editor = principal_editor(); $page_elements[] = $editor; if ( isset($id) && $id > 0 ) { $c->stylesheets[] = 'css/browse.css'; $c->scripts[] = 'js/browse.js'; if ( isset($delete_principal_confirmation_required) ) $page_elements[] = confirm_delete_principal($delete_principal_confirmation_required, $editor->Value('displayname')); $page_elements[] = group_memberships_browser(); if ( $editor->Value('type_id') == 3 ) { $grouprow = group_row_editor(); $page_elements[] = group_members_browser(); } $grantrow = grant_row_editor(); $page_elements[] = principal_grants_browser(); if ( isset($delete_grant_confirmation_required) ) $page_elements[] = confirm_delete_grant($delete_grant_confirmation_required); $ticketrow = ticket_row_editor(); $page_elements[] = access_ticket_browser(); if ( isset($delete_ticket_confirmation_required) ) $page_elements[] = confirm_delete_ticket($delete_ticket_confirmation_required); $page_elements[] = principal_collection_browser(); if ( isset($delete_collection_confirmation_required) ) $page_elements[] = confirm_delete_collection($delete_collection_confirmation_required); $page_elements[] = bindings_to_other_browser(); if ( isset($delete_bind_in_confirmation_required) ) $page_elements[] = confirm_delete_bind_in($delete_bind_in_confirmation_required); $page_elements[] = bindings_to_us_browser(); if ( isset($delete_binding_confirmation_required) ) $page_elements[] = confirm_delete_binding($delete_binding_confirmation_required); } davical-1.1.1/inc/caldav-MKTICKET.php0000644000000000000000000001143611747372457013756 0ustar * @copyright Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log('MKTICKET', 'method handler'); require_once('DAVResource.php'); $request->NeedPrivilege('DAV::bind'); require_once('XMLDocument.php'); $reply = new XMLDocument(array( 'DAV:' => '', 'http://www.xythos.com/namespaces/StorageServer' => 'T' )); $target = new DAVResource( $request->path ); if ( ! $target->Exists() ) { $request->XMLResponse( 404, new XMLElement( 'error', new XMLElement('resource-must-not-be-null'), $reply->GetXmlNsArray() ) ); } if ( ! isset($request->xml_tags) ) { $request->XMLResponse( 400, new XMLElement( 'error', new XMLElement('missing-xml-for-request'), $reply->GetXmlNsArray() ) ); } $xmltree = BuildXMLTree( $request->xml_tags, $position); if ( $xmltree->GetNSTag() != 'http://www.xythos.com/namespaces/StorageServer:ticketinfo' && $xmltree->GetNSTag() != 'DAV::ticketinfo' ) { $request->XMLResponse( 400, new XMLElement( 'error', new XMLElement('invalid-xml-for-request'), $reply->GetXmlNsArray() ) ); } $ticket_timeout = 'Seconds-3600'; $ticket_privs_array = array('read-free-busy'); foreach( $xmltree->GetContent() AS $k => $v ) { // switch( $v->GetNSTag() ) { case 'DAV::timeout': case 'http://www.xythos.com/namespaces/StorageServer:timeout': $ticket_timeout = $v->GetContent(); break; case 'DAV::privilege': case 'http://www.xythos.com/namespaces/StorageServer:privilege': $ticket_privs_array = $v->GetElements(); // Ensure we always get an array back $ticket_privileges = 0; foreach( $ticket_privs_array AS $k1 => $v1 ) { $ticket_privileges |= privilege_to_bits( $v1->GetNSTag() ); } if ( $ticket_privileges & privilege_to_bits('write') ) $ticket_privileges |= privilege_to_bits( 'read' ); if ( $ticket_privileges & privilege_to_bits('read') ) $ticket_privileges |= privilege_to_bits( array('read-free-busy', 'read-current-user-privilege-set') ); if ( $ticket_privileges & privilege_to_bits('read-free-busy') ) $ticket_privileges |= privilege_to_bits( 'schedule-query-freebusy'); break; } } if ( $ticket_timeout == 'infinity' ) { $sql_timeout = null; } else if ( preg_match( '{^([a-z]+)-(\d+)$}i', $ticket_timeout, $matches ) ) { /** It isn't specified, but timeout seems to be 'unit-number' like 'Seconds-3600', so we make it '3600 Seconds' which PostgreSQL understands */ $sql_timeout = $matches[2] . ' ' . $matches[1]; } else { $sql_timeout = $ticket_timeout; } $collection_id = $target->GetProperty('collection_id'); $resource_id = $target->GetProperty('dav_id'); $i = 0; do { $ticket_id = substr( str_replace('/', '', str_replace('+', '',base64_encode(sha1(date('r') .rand(0,2100000000) . microtime(true),true)))), 7, 8); $qry = new AwlQuery( 'INSERT INTO access_ticket ( ticket_id, dav_owner_id, privileges, target_collection_id, target_resource_id, expires ) VALUES( :ticket_id, :owner, :privs::INT::BIT(24), :collection, :resource, (current_timestamp + :expires::interval) )', array( ':ticket_id' => $ticket_id, ':owner' => $session->principal_id, ':privs' => $ticket_privileges, ':collection' => $collection_id, ':resource' => $resource_id, ':expires' => $sql_timeout, ) ); $result = $qry->Exec('MKTICKET', __LINE__, __FILE__); } while( !$result && $i++ < 2 ); $privs = new XMLElement('privilege'); foreach( bits_to_privilege($ticket_privileges) AS $k => $v ) { $reply->NSElement($privs, $v); } $ticketinfo = new XMLElement( 'T:ticketinfo', array( new XMLElement( 'T:id', $ticket_id), new XMLElement( 'owner', $reply->href( ConstructURL('/'.$session->username.'/') ) ), $privs, new XMLElement( 'T:timeout', $ticket_timeout), new XMLElement( 'T:visits', 'infinity') ) ); $prop = new XMLElement( "prop", new XMLElement('T:ticketdiscovery', $ticketinfo), $reply->GetXmlNsArray() ); header('Ticket: '.$ticket_id); $request->XMLResponse( 200, $prop ); davical-1.1.1/inc/autodiscover-handler.php0000644000000000000000000000520211755642445015423 0ustar enable_autodiscover) || ! $c->enable_autodiscover ) { $request->DoResponse( 404 ); exit(0); // unneccessary } $ns_outlook_req_2006 = "http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006"; $ns_exchange_resp_2006 = "http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006"; $ns_outlook_resp_2006a = "http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a"; function errorResponse( $code, $message, $debugdata = '' ) { global $request, $ns_exchange_resp_2006; $error_time_id = time(); $error_time = gmdate('h:i:s', $error_time_id); $response = << $code $message $debugdata ERROR; $request->DoResponse( $code, $response, 'text/xml; charset="utf-8"' ); exit(0); // unneccessary } if ( !isset($request->xml_tags) ) errorResponse( 406, translate("Body contains no XML data!") ); $position = 0; $xmltree = BuildXMLTree( $request->xml_tags, $position); if ( !is_object($xmltree) ) errorResponse( 406, translate("REPORT body is not valid XML data!") ); $user_email = $xmltree->GetPath( '/'.$ns_outlook_req_2006.':Autodiscover'. '/'.$ns_outlook_req_2006.':Request'. '/'.$ns_outlook_req_2006.':EMailAddress'); if ( count($user_email) < 1 ) errorResponse(500,"User not found."); $user_email = $user_email[0]->GetContent(); $principal = new Principal(); $reply = new XMLDocument( array( $ns_outlook_resp_2006a => "" ) ); $response = array( new XMLElement( 'User', array( new XMLElement( 'DisplayName', $principal->$fullname ), new XMLElement('AutoDiscoverSMTPAddress',$user_email), ) ) ); $response[] = new XMLElement('Account', array( new XMLElement( 'AccountType', 'email' ), // The only allowed accounttype new XMLElement('Action','settings'), new XMLElement('Protocol', array( new XMLElement('Type', 'DAV'), new XMLElement('Server', $c->domain_name ), new XMLElement('LoginName', $principal->username()) ) ) ) ); $autodiscover = new XMLElement( "Autodiscover", $responses, $reply->GetXmlNsArray(), $ns_exchange_resp_2006 ); $request->XMLResponse( 207, $autodiscover ); davical-1.1.1/inc/RRule-v2.php0000644000000000000000000015543211771733201012657 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ if ( !class_exists('DateTime') ) return; /** * Try and extract something like "Pacific/Auckland" or "America/Indiana/Indianapolis" if possible, given * the VTIMEZONE component that is passed in. This is much more complex than olson_from_tzstring since * we start to examine the rules and work out what actual timezone this might be. */ function olson_from_vtimezone( vComponent $vtz ) { $tzid = $vtz->GetProperty('TZID'); if ( empty($tzid) ) $tzid = $vtz->GetProperty('TZID'); if ( !empty($tzid) ) { $result = olson_from_tzstring($tzid); if ( !empty($result) ) return $result; } /** * @todo: We'll do other stuff here, in due course... */ return null; } // define( 'DEBUG_RRULE', true); define( 'DEBUG_RRULE', false ); /** * Wrap the DateTimeZone class to allow parsing some iCalendar TZID strangenesses */ class RepeatRuleTimeZone extends DateTimeZone { private $tz_defined; public function __construct($in_dtz = null) { $this->tz_defined = false; if ( !isset($in_dtz) ) return; $olson = olson_from_tzstring($in_dtz); if ( isset($olson) ) { try { parent::__construct($olson); $this->tz_defined = $olson; } catch (Exception $e) { dbg_error_log( 'ERROR', 'Could not handle timezone "%s" (%s) - will use floating time', $in_dtz, $olson ); parent::__construct('UTC'); $this->tz_defined = false; } } else { dbg_error_log( 'ERROR', 'Could not recognize timezone "%s" - will use floating time', $in_dtz ); parent::__construct('UTC'); $this->tz_defined = false; } } function tzid() { if ( $this->tz_defined === false ) return false; $tzid = $this->getName(); if ( $tzid != 'UTC' ) return $tzid; return $this->tz_defined; } } /** * Provide a useful way of dealing with RFC5545 duration strings of the form * ^-?P(\dW)|((\dD)?(T(\dH)?(\dM)?(\dS)?)?)$ */ class Rfc5545Duration { private $epoch_seconds = null; private $days = 0; private $secs = 0; private $as_text = ''; /** * Construct a new Rfc5545Duration either from incoming seconds or a text string. * @param mixed $in_duration */ function __construct( $in_duration ) { if ( is_integer($in_duration) ) { $this->epoch_seconds = $in_duration; $this->as_text = ''; } else if ( gettype($in_duration) == 'string' ) { // preg_match('{^-?P(\dW)|((\dD)?(T(\dH)?(\dM)?(\dS)?)?)$}i', $in_duration, $matches) ) { $this->as_text = $in_duration; $this->epoch_seconds = null; } else { // fatal('Passed duration is neither numeric nor string!'); } } /** * Return true if $this and $other are equal, false otherwise. * @param Rfc5545Duration $other * @return boolean */ function equals( $other ) { if ( $this == $other ) return true; if ( $this->asSeconds() == $other->asSeconds() ) return true; return false; } /** * Returns the duration as epoch seconds. */ function asSeconds() { if ( !isset($this->epoch_seconds) ) { if ( preg_match('{^(-?)P(\d+W)|((\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?)$}i', $this->as_text, $matches) ) { if ( isset($matches[2]) ) $this->days = ($matches[2] * 7); else { if ( isset($matches[4]) ) $this->days = $matches[4]; $this->secs = 0; if ( isset($matches[6]) ) $this->secs += $matches[6] * 3600; if ( isset($matches[7]) ) $this->days += $matches[7] * 60; if ( isset($matches[8]) ) $this->days += $matches[8]; } if ( $matches[1] == '-' ) { $this->days *= -1; $this->secs *= -1; } $this->epoch_seconds = ($this->days * 86400) + $this->secs; } else { throw new Exception('Invalid epoch: "'+$this->as_text+"'"); } } return $this->epoch_seconds; } /** * Returns the duration as a text string of the form ^(-?)P(\d+W)|((\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?)$ * @return string The stringified stuff. */ function __toString() { if ( empty($this->as_text) ) { $this->as_text = ($this->epoch_seconds < 0 ? '-P' : 'P'); $in_duration = abs($this->epoch_seconds); if ( $in_duration >= 86400 ) { $this->days = floor($in_duration / 86400); $in_duration -= $this->days * 86400; if ( $in_duration == 0 && ($this->days / 7) == floor($this->days / 7) ) { $this->as_text .= ($this->days/7).'W'; return $this->as_text; } $this->as_text .= $this->days.'D'; } if ( $in_duration > 0 ) { $secs = $in_duration; $this->as_text .= 'T'; $hours = floor($in_duration / 3600); if ( $hours > 0 ) $this->as_text .= $hours . 'H'; $minutes = floor(($in_duration % 3600) / 60); if ( $minutes > 0 ) $this->as_text .= $minutes . 'M'; $seconds = $in_duration % 60; if ( $seconds > 0 ) $this->as_text .= $seconds . 'S'; } } return $this->as_text; } /** * Factory method to return an Rfc5545Duration object from the difference * between two dates. * * This is flawed, at present: we should really localise both dates and work * out the difference in days, then localise the times and work out the difference * between the clock times. On the other hand we're replacing a quick and dirty * hack that did it exactly the same way in the past, so we're not making things * any *worse* and at least we're making it clear that it could be improved... * * The problem strikes (as they all do) across DST boundaries. * * @todo Improve this to calculate the days difference and then the clock time diff * and work from there. * * @param RepeatRuleDateTime $d1 * @param RepeatRuleDateTime $d2 * @return Rfc5545Duration */ static function fromTwoDates( $d1, $d2 ) { $diff = $d2->epoch() - $d1->epoch(); return new Rfc5545Duration($diff); } } /** * Wrap the DateTime class to make it friendlier to passing in random strings from iCalendar * objects, and especially the random stuff used to identify timezones. We also add some * utility methods and stuff too, in order to simplify some of the operations we need to do * with dates. */ class RepeatRuleDateTime extends DateTime { // public static $Format = 'Y-m-d H:i:s'; public static $Format = 'c'; private static $UTCzone; private $tzid; private $is_date; public function __construct($date = null, $dtz = null, $is_date = null ) { if ( !isset(self::$UTCzone) ) self::$UTCzone = new RepeatRuleTimeZone('UTC'); $this->is_date = false; if ( isset($is_date) ) $this->is_date = $is_date; if ( !isset($date) ) { $date = date('Ymd\THis'); // Floating $dtz = self::$UTCzone; } $this->tzid = null; if ( is_object($date) && method_exists($date,'GetParameterValue') ) { $tzid = $date->GetParameterValue('TZID'); $actual_date = $date->Value(); if ( isset($tzid) ) { $dtz = new RepeatRuleTimeZone($tzid); $this->tzid = $dtz->tzid(); } else { $dtz = self::$UTCzone; if ( substr($actual_date,-1) == 'Z' ) { $this->tzid = 'UTC'; $actual_date = substr($actual_date, 0, strlen($actual_date) - 1); } } if ( strlen($actual_date) == 8 ) { // We allow dates without VALUE=DATE parameter, but we don't create them like that $this->is_date = true; } // $value_type = $date->GetParameterValue('VALUE'); // if ( isset($value_type) && $value_type == 'DATE' ) $this->is_date = true; $date = $actual_date; if ( DEBUG_RRULE ) printf( "Date%s property%s: %s%s\n", ($this->is_date ? "" : "Time"), (isset($this->tzid) ? ' with timezone' : ''), $date, (isset($this->tzid) ? ' in '.$this->tzid : '') ); } elseif (preg_match('/;TZID= ([^:;]+) (?: ;.* )? : ( \d{8} (?:T\d{6})? ) (Z)?/x', $date, $matches) ) { $date = $matches[2]; $this->is_date = (strlen($date) == 8); if ( isset($matches[3]) && $matches[3] == 'Z' ) { $dtz = self::$UTCzone; $this->tzid = 'UTC'; } else if ( isset($matches[1]) && $matches[1] != '' ) { $dtz = new RepeatRuleTimeZone($matches[1]); $this->tzid = $dtz->tzid(); } else { $dtz = self::$UTCzone; $this->tzid = null; } if ( DEBUG_RRULE ) printf( "Date%s property%s: %s%s\n", ($this->is_date ? "" : "Time"), (isset($this->tzid) ? ' with timezone' : ''), $date, (isset($this->tzid) ? ' in '.$this->tzid : '') ); } elseif ( ( $dtz === null || $dtz == '' ) && preg_match('{;VALUE=DATE (?:;[^:]+) : ((?:[12]\d{3}) (?:0[1-9]|1[012]) (?:0[1-9]|[12]\d|3[01]Z?) )$}x', $date, $matches) ) { $this->is_date = true; $date = $matches[1]; // Floating $dtz = self::$UTCzone; $this->tzid = null; if ( DEBUG_RRULE ) printf( "Floating Date value: %s\n", $date ); } elseif ( $dtz === null || $dtz == '' ) { $dtz = self::$UTCzone; if ( preg_match('/(\d{8}(T\d{6})?)(Z?)/', $date, $matches) ) { $date = $matches[1]; $this->tzid = ( $matches[3] == 'Z' ? 'UTC' : null ); } $this->is_date = (strlen($date) == 8 ); if ( DEBUG_RRULE ) printf( "Date%s value with timezone: %s in %s\n", ($this->is_date?"":"Time"), $date, $this->tzid ); } elseif ( is_string($dtz) ) { $dtz = new RepeatRuleTimeZone($dtz); $this->tzid = $dtz->tzid(); $type = gettype($date); if ( DEBUG_RRULE ) printf( "Date%s $type with timezone: %s in %s\n", ($this->is_date?"":"Time"), $date, $this->tzid ); } else { $this->tzid = $dtz->getName(); $type = gettype($date); if ( DEBUG_RRULE ) printf( "Date%s $type with timezone: %s in %s\n", ($this->is_date?"":"Time"), $date, $this->tzid ); } parent::__construct($date, $dtz); if ( isset($is_date) ) $this->is_date = $is_date; return $this; } public function __toString() { return (string)parent::format(self::$Format) . ' ' . parent::getTimeZone()->getName(); } public function AsDate() { return $this->format('Ymd'); } public function setAsFloat() { unset($this->tzid); } public function isFloating() { return !isset($this->tzid); } public function isDate() { return $this->is_date; } public function setAsDate() { $this->is_date = true; } public function modify( $interval ) { // print ">>$interval<<\n"; if ( preg_match('{^(-)?P(([0-9-]+)W)?(([0-9-]+)D)?T?(([0-9-]+)H)?(([0-9-]+)M)?(([0-9-]+)S)?$}', $interval, $matches) ) { $minus = (isset($matches[1])?$matches[1]:''); $interval = ''; if ( isset($matches[2]) && $matches[2] != '' ) $interval .= $minus . $matches[3] . ' weeks '; if ( isset($matches[4]) && $matches[4] != '' ) $interval .= $minus . $matches[5] . ' days '; if ( isset($matches[6]) && $matches[6] != '' ) $interval .= $minus . $matches[7] . ' hours '; if ( isset($matches[8]) && $matches[8] != '' ) $interval .= $minus . $matches[9] . ' minutes '; if (isset($matches[10]) &&$matches[10] != '' ) $interval .= $minus . $matches[11] . ' seconds '; } // printf( "Modify '%s' by: >>%s<<\n", $this->__toString(), $interval ); // print_r($this); if ( !isset($interval) || $interval == '' ) $interval = '1 day'; if ( parent::format('d') > 28 && strstr($interval,'month') !== false ) { $this->setDate(null,null,28); } parent::modify($interval); return $this->__toString(); } /** * Always returns a time localised to UTC. Even floating times are converted to UTC * using the server's currently configured PHP timezone. Even dates will include a * time, which will be non-zero if they were localised dates. * * @see RepeatRuleDateTime::FloatOrUTC() */ public function UTC($fmt = 'Ymd\THis\Z' ) { $gmt = clone($this); if ( $this->tzid != 'UTC' ) { if ( isset($this->tzid)) { $dtz = parent::getTimezone(); } else { $dtz = new DateTimeZone(date_default_timezone_get()); } $offset = 0 - $dtz->getOffset($gmt); $gmt->modify( $offset . ' seconds' ); } return $gmt->format($fmt); } /** * If this is a localised time then this will return the UTC equivalent. If it is a * floating time, then you will just get the floating time. If it is a date then it * will be returned as a date. Note that if it is a *localised* date then the answer * will still be the UTC equivalent but only the date itself will be returned. * * If return_floating_times is true then all dates will be returned as floating times * and UTC will not be returned. * * @see RepeatRuleDateTime::UTC() */ public function FloatOrUTC($return_floating_times = false) { $gmt = clone($this); if ( !$return_floating_times && isset($this->tzid) && $this->tzid != 'UTC' ) { $dtz = parent::getTimezone(); $offset = 0 - $dtz->getOffset($gmt); $gmt->modify( $offset . ' seconds' ); } if ( $this->is_date ) return $gmt->format('Ymd'); if ( $return_floating_times ) return $gmt->format('Ymd\THis'); return $gmt->format('Ymd\THis') . (!$return_floating_times && isset($this->tzid) ? 'Z' : ''); } /** * Returns the string following a property name for an RFC5545 DATE-TIME value. */ public function RFC5545($return_floating_times = false) { $result = ''; if ( isset($this->tzid) && $this->tzid != 'UTC' ) { $result = ';TZID='.$this->tzid; } if ( $this->is_date ) { $result .= ';VALUE=DATE:' . $this->format('Ymd'); } else { $result .= ':' . $this->format('Ymd\THis'); if ( !$return_floating_times && isset($this->tzid) && $this->tzid == 'UTC' ) { $result .= 'Z'; } } return $result; } public function setTimeZone( $tz ) { if ( is_string($tz) ) { $tz = new RepeatRuleTimeZone($tz); $this->tzid = $tz->tzid(); } parent::setTimeZone( $tz ); return $this; } public function getTimeZone() { return $this->tzid; } /** * Returns a 1 if this year is a leap year, otherwise a 0 * @param int $year The year we are quizzical about. * @return 1 if this is a leap year, 0 otherwise */ public static function hasLeapDay($year) { if ( ($year % 4) == 0 && (($year % 100) != 0 || ($year % 400) == 0) ) return 1; return 0; } /** * Returns the number of days in a year/month pair * @param int $year * @param int $month * @return int the number of days in the month */ public static function daysInMonth( $year, $month ) { if ($month == 4 || $month == 6 || $month == 9 || $month == 11) return 30; else if ($month != 2) return 31; return 28 + RepeatRuleDateTime::hasLeapDay($year); } function setDate( $year=null, $month=null, $day=null ) { if ( !isset($year) ) $year = parent::format('Y'); if ( !isset($month) ) $month = parent::format('m'); if ( !isset($day) ) $day = parent::format('d'); if ( $day < 0 ) { $day += RepeatRuleDateTime::daysInMonth($year, $month) + 1; } parent::setDate( $year , $month , $day ); return $this; } function setYearDay( $yearday ) { if ( $yearday > 0 ) { $current_yearday = parent::format('z') + 1; } else { $current_yearday = (parent::format('z') - (365 + parent::format('L'))); } $diff = $yearday - $current_yearday; if ( $diff < 0 ) $this->modify('-P'.-$diff.'D'); else if ( $diff > 0 ) $this->modify('P'.$diff.'D'); // printf( "Current: %d, Looking for: %d, Diff: %d, What we got: %s (%d,%d)\n", $current_yearday, $yearday, $diff, // parent::format('Y-m-d'), (parent::format('z')+1), ((parent::format('z') - (365 + parent::format('L')))) ); return $this; } function year() { return parent::format('Y'); } function month() { return parent::format('m'); } function day() { return parent::format('d'); } function hour() { return parent::format('H'); } function minute() { return parent::format('i'); } function second() { return parent::format('s'); } function epoch() { return parent::format('U'); } } /** * This class is used to hold a pair of dates defining a range. The range may be open-ended by including * a null for one end or the other, or both. * * @author Andrew McMillan */ class RepeatRuleDateRange { public $from; public $until; /** * Construct a new RepeatRuleDateRange which will be the range between $date1 and $date2. The earliest of the two * dates will be used as the start of the period, the latest as the end. If one of the dates is null then the order * of the parameters is significant, with the null treated as -infinity if it is first, or +infinity if it is second. * If both parameters are null then the range is from -infinity to +infinity. * * @param RepeatRuleDateTime $date1 * @param RepeatRuleDateTime $date2 */ function __construct( $date1, $date2 ) { if ( $date1 != null && $date2 != null && $date1 > $date2 ) { $this->from = $date2; $this->until = $date1; } else { $this->from = $date1; $this->until = $date2; } } /** * Assess whether this range overlaps the supplied range. null values are treated as infinity. * @param RepeatRuleDateRange $other * @return boolean */ function overlaps( RepeatRuleDateRange $other ) { if ( ($this->until == null && $this->from == null) || ($other->until == null && $other->from == null ) ) return true; if ( $this->until == null && $other->until == null ) return true; if ( $this->from == null && $other->from == null ) return true; if ( $this->until == null ) return ($other->until > $this->from); if ( $this->from == null ) return ($other->from < $this->until); if ( $other->until == null ) return ($this->until > $other->from); if ( $other->from == null ) return ($thi->from < $other->until); return !( $this->until < $other->from || $this->from > $other->until ); } /** * Get an Rfc5545Duration from this date range. If the from date is null it will be null. * If the until date is null the duration will either be 1 day (if the from is a date) or 0 otherwise. * * @return NULL|Rfc5545Duration */ function getDuration() { if ( !isset($this->from) ) return null; if ( $this->from->isDate() && !isset($this->until) ) $duration = 'P1D'; else if ( !isset($this->until) ) $duration = 'P0D'; else $duration = ( $this->until->epoch() - $this->from->epoch() ); return new Rfc5545Duration( $duration ); } } /** * This class is an implementation of RRULE parsing and expansion, as per RFC5545. It should be reasonably * complete, except that it does not handle changing the WKST - there may be a few errors in unusual rules * also, but all of the common cases should be handled correctly. * * @author Andrew McMillan */ class RepeatRule { private $base; private $until; private $freq; private $count; private $interval; private $bysecond; private $byminute; private $byhour; private $bymonthday; private $byyearday; private $byweekno; private $byday; private $bymonth; private $bysetpos; private $wkst; private $instances; private $position; private $finished; private $current_base; private $original_rule; public function __construct( $basedate, $rrule, $is_date=null, $return_floating_times=false ) { if ( $return_floating_times ) $basedate->setAsFloat(); $this->base = (is_object($basedate) ? $basedate : new RepeatRuleDateTime($basedate) ); $this->original_rule = $rrule; if ( DEBUG_RRULE ) { printf( "Constructing RRULE based on: '%s', rrule: '%s' (we float: %s)\n", $basedate, $rrule, ($return_floating_times?"yes":"no") ); } if ( preg_match('{FREQ=([A-Z]+)(;|$)}', $rrule, $m) ) $this->freq = $m[1]; if ( preg_match('{UNTIL=([0-9TZ]+)(;|$)}', $rrule, $m) ) $this->until = new RepeatRuleDateTime($m[1],$this->base->getTimeZone(),$is_date); if ( preg_match('{COUNT=([0-9]+)(;|$)}', $rrule, $m) ) $this->count = $m[1]; if ( preg_match('{INTERVAL=([0-9]+)(;|$)}', $rrule, $m) ) $this->interval = $m[1]; if ( preg_match('{WKST=(MO|TU|WE|TH|FR|SA|SU)(;|$)}', $rrule, $m) ) $this->wkst = $m[1]; if ( preg_match('{BYDAY=(([+-]?[0-9]{0,2}(MO|TU|WE|TH|FR|SA|SU),?)+)(;|$)}', $rrule, $m) ) $this->byday = explode(',',$m[1]); if ( preg_match('{BYYEARDAY=([0-9,+-]+)(;|$)}', $rrule, $m) ) $this->byyearday = explode(',',$m[1]); if ( preg_match('{BYWEEKNO=([0-9,+-]+)(;|$)}', $rrule, $m) ) $this->byweekno = explode(',',$m[1]); if ( preg_match('{BYMONTHDAY=([0-9,+-]+)(;|$)}', $rrule, $m) ) $this->bymonthday = explode(',',$m[1]); if ( preg_match('{BYMONTH=(([+-]?[0-1]?[0-9],?)+)(;|$)}', $rrule, $m) ) $this->bymonth = explode(',',$m[1]); if ( preg_match('{BYSETPOS=(([+-]?[0-9]{1,3},?)+)(;|$)}', $rrule, $m) ) $this->bysetpos = explode(',',$m[1]); if ( preg_match('{BYSECOND=([0-9,]+)(;|$)}', $rrule, $m) ) $this->bysecond = explode(',',$m[1]); if ( preg_match('{BYMINUTE=([0-9,]+)(;|$)}', $rrule, $m) ) $this->byminute = explode(',',$m[1]); if ( preg_match('{BYHOUR=([0-9,]+)(;|$)}', $rrule, $m) ) $this->byhour = explode(',',$m[1]); if ( !isset($this->interval) ) $this->interval = 1; switch( $this->freq ) { case 'SECONDLY': $this->freq_name = 'second'; break; case 'MINUTELY': $this->freq_name = 'minute'; break; case 'HOURLY': $this->freq_name = 'hour'; break; case 'DAILY': $this->freq_name = 'day'; break; case 'WEEKLY': $this->freq_name = 'week'; break; case 'MONTHLY': $this->freq_name = 'month'; break; case 'YEARLY': $this->freq_name = 'year'; break; default: /** need to handle the error, but FREQ is mandatory so unlikely */ } $this->frequency_string = sprintf('+%d %s', $this->interval, $this->freq_name ); if ( DEBUG_RRULE ) printf( "Frequency modify string is: '%s', base is: '%s'\n", $this->frequency_string, $this->base->format('c') ); $this->Start($return_floating_times); } /** * If this repeat rule has an UNTIL= or COUNT= then we can know it will end. Eventually. * @return boolean Whether or not one of these properties is present. */ public function hasLimitedOccurrences() { return ( isset($this->count) || isset($this->until) ); } public function set_timezone( $tzstring ) { $this->base->setTimezone(new DateTimeZone($tzstring)); } public function Start($return_floating_times=false) { $this->instances = array(); $this->GetMoreInstances($return_floating_times); $this->rewind(); $this->finished = false; } public function rewind() { $this->position = -1; } /** * Return the next date in the repeating series. * @param boolean $return_floating_times Whether to return dates as floating times. * @return vComponent The next instance. */ public function next($return_floating_times=false) { $this->position++; return $this->current($return_floating_times); } public function current($return_floating_times=false) { if ( !$this->valid() ) return null; if ( !isset($this->instances[$this->position]) ) $this->GetMoreInstances($return_floating_times); if ( !$this->valid() ) return null; if ( DEBUG_RRULE ) printf( "Returning date from position %d: %s (%s)\n", $this->position, $this->instances[$this->position]->format('c'), $this->instances[$this->position]->FloatOrUTC($return_floating_times) ); return $this->instances[$this->position]; } public function key($return_floating_times=false) { if ( !$this->valid() ) return null; if ( !isset($this->instances[$this->position]) ) $this->GetMoreInstances($return_floating_times); if ( !isset($this->keys[$this->position]) ) { $this->keys[$this->position] = $this->instances[$this->position]; } return $this->keys[$this->position]; } public function valid() { if ( isset($this->instances[$this->position]) || !$this->finished ) return true; return false; } /** * This function returns an array which lists the order of processing, and whether the processing is * to expand or limit based on this component. * * Note that yearly-byday and monthly-byday have special handling which is coded within the * expand_byday() method * @param $freq a string indicating the frequency. */ private static function rrule_expand_limit( $freq ) { switch( $freq ) { case 'YEARLY': return array( 'bymonth' => 'expand', 'byweekno' => 'expand', 'byyearday' => 'expand', 'bymonthday' => 'expand', 'byday' => 'expand', 'byhour' => 'expand', 'byminute' => 'expand', 'bysecond' => 'expand' ); case 'MONTHLY': return array( 'bymonth' => 'limit', 'bymonthday' => 'expand', 'byday' => 'expand', 'byhour' => 'expand', 'byminute' => 'expand', 'bysecond' => 'expand' ); case 'WEEKLY': return array( 'bymonth' => 'limit', 'byday' => 'expand', 'byhour' => 'expand', 'byminute' => 'expand', 'bysecond' => 'expand' ); case 'DAILY': return array( 'bymonth' => 'limit', 'bymonthday' => 'limit', 'byday' => 'limit', 'byhour' => 'expand', 'byminute' => 'expand', 'bysecond' => 'expand' ); case 'HOURLY': return array( 'bymonth' => 'limit', 'bymonthday' => 'limit', 'byday' => 'limit', 'byhour' => 'limit', 'byminute' => 'expand', 'bysecond' => 'expand' ); case 'MINUTELY': return array( 'bymonth' => 'limit', 'bymonthday' => 'limit', 'byday' => 'limit', 'byhour' => 'limit', 'byminute' => 'limit', 'bysecond' => 'expand' ); case 'SECONDLY': return array( 'bymonth' => 'limit', 'bymonthday' => 'limit', 'byday' => 'limit', 'byhour' => 'limit', 'byminute' => 'limit', 'bysecond' => 'limit' ); } dbg_error_log('ERROR','Invalid frequency code "%s" - pretending it is "DAILY"', $freq); return array( 'bymonth' => 'limit', 'bymonthday' => 'limit', 'byday' => 'limit', 'byhour' => 'expand', 'byminute' => 'expand', 'bysecond' => 'expand' ); } private function GetMoreInstances($return_floating_times=false) { if ( $this->finished ) return; $got_more = false; $loop_limit = 10; $loops = 0; if ( $return_floating_times ) $this->base->setAsFloat(); while( !$this->finished && !$got_more && $loops++ < $loop_limit ) { if ( !isset($this->current_base) ) { $this->current_base = clone($this->base); } else { $this->current_base->modify( $this->frequency_string ); } if ( $return_floating_times ) $this->current_base->setAsFloat(); if ( DEBUG_RRULE ) printf( "Getting more instances from: '%s' - %d\n", $this->current_base->format('c'), count($this->instances) ); $this->current_set = array( clone($this->current_base) ); foreach( self::rrule_expand_limit($this->freq) AS $bytype => $action ) { if ( isset($this->{$bytype}) ) { $this->{$action.'_'.$bytype}(); if ( !isset($this->current_set[0]) ) break; } } sort($this->current_set); if ( isset($this->bysetpos) ) $this->limit_bysetpos(); $position = count($this->instances) - 1; if ( DEBUG_RRULE ) printf( "Inserting %d from current_set into position %d\n", count($this->current_set), $position + 1 ); foreach( $this->current_set AS $k => $instance ) { if ( $instance < $this->base ) continue; if ( isset($this->until) && $instance > $this->until ) { $this->finished = true; return; } if ( !isset($this->instances[$position]) || $instance != $this->instances[$position] ) { $got_more = true; $position++; $this->instances[$position] = $instance; if ( DEBUG_RRULE ) printf( "Added date %s into position %d in current set\n", $instance->format('c'), $position ); if ( isset($this->count) && ($position + 1) >= $this->count ) { $this->finished = true; return; } } } } } public static function rrule_day_number( $day ) { switch( $day ) { case 'SU': return 0; case 'MO': return 1; case 'TU': return 2; case 'WE': return 3; case 'TH': return 4; case 'FR': return 5; case 'SA': return 6; } return false; } static public function date_mask( $date, $y, $mo, $d, $h, $mi, $s ) { $date_parts = explode(',',$date->format('Y,m,d,H,i,s')); if ( isset($y) || isset($mo) || isset($d) ) { if ( isset($y) ) $date_parts[0] = $y; if ( isset($mo) ) $date_parts[1] = $mo; if ( isset($d) ) $date_parts[2] = $d; $date->setDate( $date_parts[0], $date_parts[1], $date_parts[2] ); } if ( isset($h) || isset($mi) || isset($s) ) { if ( isset($h) ) $date_parts[3] = $h; if ( isset($mi) ) $date_parts[4] = $mi; if ( isset($s) ) $date_parts[5] = $s; $date->setTime( $date_parts[3], $date_parts[4], $date_parts[5] ); } return $date; } private function expand_bymonth() { $instances = $this->current_set; $this->current_set = array(); foreach( $instances AS $k => $instance ) { foreach( $this->bymonth AS $k => $month ) { $expanded = $this->date_mask( clone($instance), null, $month, null, null, null, null); if ( DEBUG_RRULE ) printf( "Expanded BYMONTH $month into date %s\n", $expanded->format('c') ); $this->current_set[] = $expanded; } } } private function expand_bymonthday() { $instances = $this->current_set; $this->current_set = array(); foreach( $instances AS $k => $instance ) { foreach( $this->bymonthday AS $k => $monthday ) { $expanded = $this->date_mask( clone($instance), null, null, $monthday, null, null, null); if ( DEBUG_RRULE ) printf( "Expanded BYMONTHDAY $monthday into date %s from %s\n", $expanded->format('c'), $instance->format('c') ); $this->current_set[] = $expanded; } } } private function expand_byyearday() { $instances = $this->current_set; $this->current_set = array(); $days_set = array(); foreach( $instances AS $k => $instance ) { foreach( $this->byyearday AS $k => $yearday ) { $on_yearday = clone($instance); $on_yearday->setYearDay($yearday); if ( isset($days_set[$on_yearday->UTC()]) ) continue; $this->current_set[] = $on_yearday; $days_set[$on_yearday->UTC()] = true; } } } private function expand_byday_in_week( $day_in_week ) { /** * @todo This should really allow for WKST, since if we start a series * on (eg.) TH and interval > 1, a MO, TU, FR repeat will not be in the * same week with this code. */ $dow_of_instance = $day_in_week->format('w'); // 0 == Sunday foreach( $this->byday AS $k => $weekday ) { $dow = self::rrule_day_number($weekday); $offset = $dow - $dow_of_instance; if ( $offset < 0 ) $offset += 7; $expanded = clone($day_in_week); $expanded->modify( sprintf('+%d day', $offset) ); $this->current_set[] = $expanded; if ( DEBUG_RRULE ) printf( "Expanded BYDAY(W) $weekday into date %s\n", $expanded->format('c') ); } } private function expand_byday_in_month( $day_in_month ) { $first_of_month = $this->date_mask( clone($day_in_month), null, null, 1, null, null, null); $dow_of_first = $first_of_month->format('w'); // 0 == Sunday $days_in_month = cal_days_in_month(CAL_GREGORIAN, $first_of_month->format('m'), $first_of_month->format('Y')); foreach( $this->byday AS $k => $weekday ) { if ( preg_match('{([+-])?(\d)?(MO|TU|WE|TH|FR|SA|SU)}', $weekday, $matches ) ) { $dow = self::rrule_day_number($matches[3]); $first_dom = 1 + $dow - $dow_of_first; if ( $first_dom < 1 ) $first_dom +=7; // e.g. 1st=WE, dow=MO => 1+1-3=-1 => MO is 6th, etc. $whichweek = intval($matches[2]); if ( DEBUG_RRULE ) printf( "Expanding BYDAY(M) $weekday in month of %s\n", $first_of_month->format('c') ); if ( $whichweek > 0 ) { $whichweek--; $monthday = $first_dom; if ( $matches[1] == '-' ) { $monthday += 35; while( $monthday > $days_in_month ) $monthday -= 7; $monthday -= (7 * $whichweek); } else { $monthday += (7 * $whichweek); } if ( $monthday > 0 && $monthday <= $days_in_month ) { $expanded = $this->date_mask( clone($day_in_month), null, null, $monthday, null, null, null); if ( DEBUG_RRULE ) printf( "Expanded BYDAY(M) $weekday now $monthday into date %s\n", $expanded->format('c') ); $this->current_set[] = $expanded; } } else { for( $monthday = $first_dom; $monthday <= $days_in_month; $monthday += 7 ) { $expanded = $this->date_mask( clone($day_in_month), null, null, $monthday, null, null, null); if ( DEBUG_RRULE ) printf( "Expanded BYDAY(M) $weekday now $monthday into date %s\n", $expanded->format('c') ); $this->current_set[] = $expanded; } } } } } private function expand_byday_in_year( $day_in_year ) { $first_of_year = $this->date_mask( clone($day_in_year), null, 1, 1, null, null, null); $dow_of_first = $first_of_year->format('w'); // 0 == Sunday $days_in_year = 337 + cal_days_in_month(CAL_GREGORIAN, 2, $first_of_year->format('Y')); foreach( $this->byday AS $k => $weekday ) { if ( preg_match('{([+-])?(\d)?(MO|TU|WE|TH|FR|SA|SU)}', $weekday, $matches ) ) { $expanded = clone($first_of_year); $dow = self::rrule_day_number($matches[3]); $first_doy = 1 + $dow - $dow_of_first; if ( $first_doy < 1 ) $first_doy +=7; // e.g. 1st=WE, dow=MO => 1+1-3=-1 => MO is 6th, etc. $whichweek = intval($matches[2]); if ( DEBUG_RRULE ) printf( "Expanding BYDAY(Y) $weekday from date %s\n", $instance->format('c') ); if ( $whichweek > 0 ) { $whichweek--; $yearday = $first_doy; if ( $matches[1] == '-' ) { $yearday += 371; while( $yearday > $days_in_year ) $yearday -= 7; $yearday -= (7 * $whichweek); } else { $yearday += (7 * $whichweek); } if ( $yearday > 0 && $yearday <= $days_in_year ) { $expanded->modify(sprintf('+%d day', $yearday - 1)); if ( DEBUG_RRULE ) printf( "Expanded BYDAY(Y) $weekday now $yearday into date %s\n", $expanded->format('c') ); $this->current_set[] = $expanded; } } else { $expanded->modify(sprintf('+%d day', $first_doy - 1)); for( $yearday = $first_doy; $yearday <= $days_in_year; $yearday += 7 ) { if ( DEBUG_RRULE ) printf( "Expanded BYDAY(Y) $weekday now $yearday into date %s\n", $expanded->format('c') ); $this->current_set[] = clone($expanded); $expanded->modify('+1 week'); } } } } } private function expand_byday() { if ( !isset($this->current_set[0]) ) return; if ( $this->freq == 'MONTHLY' || $this->freq == 'YEARLY' ) { if ( isset($this->bymonthday) || isset($this->byyearday) ) { $this->limit_byday(); /** Per RFC5545 3.3.10 from note 1&2 to table */ return; } } $instances = $this->current_set; $this->current_set = array(); foreach( $instances AS $k => $instance ) { if ( $this->freq == 'MONTHLY' ) { $this->expand_byday_in_month($instance); } else if ( $this->freq == 'WEEKLY' ) { $this->expand_byday_in_week($instance); } else { // YEARLY if ( isset($this->bymonth) ) { $this->expand_byday_in_month($instance); } else if ( isset($this->byweekno) ) { $this->expand_byday_in_week($instance); } else { $this->expand_byday_in_year($instance); } } } } private function expand_byhour() { $instances = $this->current_set; $this->current_set = array(); foreach( $instances AS $k => $instance ) { foreach( $this->bymonth AS $k => $month ) { $this->current_set[] = $this->date_mask( clone($instance), null, null, null, $hour, null, null); } } } private function expand_byminute() { $instances = $this->current_set; $this->current_set = array(); foreach( $instances AS $k => $instance ) { foreach( $this->bymonth AS $k => $month ) { $this->current_set[] = $this->date_mask( clone($instance), null, null, null, null, $minute, null); } } } private function expand_bysecond() { $instances = $this->current_set; $this->current_set = array(); foreach( $instances AS $k => $instance ) { foreach( $this->bymonth AS $k => $second ) { $this->current_set[] = $this->date_mask( clone($instance), null, null, null, null, null, $second); } } } private function limit_generally( $fmt_char, $element_name ) { $instances = $this->current_set; $this->current_set = array(); foreach( $instances AS $k => $instance ) { foreach( $this->{$element_name} AS $k => $element_value ) { if ( DEBUG_RRULE ) printf( "Limiting '$fmt_char' on '%s' => '%s' ?=? '%s' ? %s\n", $instance->format('c'), $instance->format($fmt_char), $element_value, ($instance->format($fmt_char) == $element_value ? 'Yes' : 'No') ); if ( $instance->format($fmt_char) == $element_value ) $this->current_set[] = $instance; } } } private function limit_byday() { $fmt_char = 'w'; $instances = $this->current_set; $this->current_set = array(); foreach( $this->byday AS $k => $weekday ) { $dow = self::rrule_day_number($weekday); foreach( $instances AS $k => $instance ) { if ( DEBUG_RRULE ) printf( "Limiting '$fmt_char' on '%s' => '%s' ?=? '%s' (%d) ? %s\n", $instance->format('c'), $instance->format($fmt_char), $weekday, $dow, ($instance->format($fmt_char) == $dow ? 'Yes' : 'No') ); if ( $instance->format($fmt_char) == $dow ) $this->current_set[] = $instance; } } } private function limit_bymonth() { $this->limit_generally( 'm', 'bymonth' ); } private function limit_byyearday() { $this->limit_generally( 'z', 'byyearday' ); } private function limit_bymonthday() { $this->limit_generally( 'd', 'bymonthday' ); } private function limit_byhour() { $this->limit_generally( 'H', 'byhour' ); } private function limit_byminute() { $this->limit_generally( 'i', 'byminute' ); } private function limit_bysecond() { $this->limit_generally( 's', 'bysecond' ); } private function limit_bysetpos( ) { $instances = $this->current_set; $count = count($instances); $this->current_set = array(); foreach( $this->bysetpos AS $k => $element_value ) { if ( DEBUG_RRULE ) printf( "Limiting bysetpos %s of %d instances\n", $element_value, $count ); if ( $element_value > 0 ) { $this->current_set[] = $instances[$element_value - 1]; } else if ( $element_value < 0 ) { $this->current_set[] = $instances[$count + $element_value]; } } } } require_once("vComponent.php"); /** * Expand the event instances for an RDATE or EXDATE property * * @param string $property RDATE or EXDATE, depending... * @param array $component A vComponent which is a VEVENT, VTODO or VJOURNAL * @param array $range_end A date after which we care less about expansion * * @return array An array keyed on the UTC dates, referring to the component */ function rdate_expand( $dtstart, $property, $component, $range_end = null, $is_date=null, $return_floating_times=false ) { $properties = $component->GetProperties($property); $expansion = array(); foreach( $properties AS $p ) { $timezone = $p->GetParameterValue('TZID'); $rdate = $p->Value(); $rdates = explode( ',', $rdate ); foreach( $rdates AS $k => $v ) { $rdate = new RepeatRuleDateTime( $v, $timezone, $is_date); if ( $return_floating_times ) $rdate->setAsFloat(); $expansion[$rdate->FloatOrUTC($return_floating_times)] = $component; if ( $rdate > $range_end ) break; } } return $expansion; } /** * Expand the event instances for an RRULE property * * @param object $dtstart A RepeatRuleDateTime which is the master dtstart * @param string $property RDATE or EXDATE, depending... * @param array $component A vComponent which is a VEVENT, VTODO or VJOURNAL * @param array $range_end A date after which we care less about expansion * * @return array An array keyed on the UTC dates, referring to the component */ function rrule_expand( $dtstart, $property, $component, $range_end, $is_date=null, $return_floating_times=false ) { $expansion = array(); $recur = $component->GetProperty($property); if ( !isset($recur) ) return $expansion; $recur = $recur->Value(); $this_start = $component->GetProperty('DTSTART'); if ( isset($this_start) ) { $this_start = new RepeatRuleDateTime($this_start); } else { $this_start = clone($dtstart); } if ( $return_floating_times ) $this_start->setAsFloat(); // if ( DEBUG_RRULE ) print_r( $this_start ); if ( DEBUG_RRULE ) printf( "RRULE: %s (floating: %s)\n", $recur, ($return_floating_times?"yes":"no") ); $rule = new RepeatRule( $this_start, $recur, $is_date, $return_floating_times ); $i = 0; $result_limit = 1000; while( $date = $rule->next($return_floating_times) ) { // if ( DEBUG_RRULE ) printf( "[%3d] %s\n", $i, $date->UTC() ); $expansion[$date->FloatOrUTC($return_floating_times)] = $component; if ( $i++ >= $result_limit || $date > $range_end ) break; } // if ( DEBUG_RRULE ) print_r( $expansion ); return $expansion; } /** * Expand the event instances for an iCalendar VEVENT (or VTODO) * * Note: expansion here does not apply modifications to instances other than modifying start/end/due/duration. * * @param object $vResource A vComponent which is a VCALENDAR containing components needing expansion * @param object $range_start A RepeatRuleDateTime which is the beginning of the range for events, default -6 weeks * @param object $range_end A RepeatRuleDateTime which is the end of the range for events, default +6 weeks * * @return vComponent The original vComponent, with the instances of the internal components expanded. */ function expand_event_instances( $vResource, $range_start = null, $range_end = null, $return_floating_times=false ) { global $c; $components = $vResource->GetComponents(); if ( empty($range_start) ) { $range_start = new RepeatRuleDateTime(); $range_start->modify('-6 weeks'); } if ( empty($range_end) ) { $range_end = clone($range_start); $range_end->modify('+6 months'); } $new_components = array(); $instances = array(); $expand = false; $dtstart = null; $is_date = false; $has_repeats = false; $dtstart_type = 'DTSTART'; foreach( $components AS $k => $comp ) { if ( $comp->GetType() != 'VEVENT' && $comp->GetType() != 'VTODO' && $comp->GetType() != 'VJOURNAL' ) { if ( $comp->GetType() != 'VTIMEZONE' ) $new_components[] = $comp; continue; } if ( !isset($dtstart) ) { $dtstart_prop = $comp->GetProperty($dtstart_type); if ( !isset($dtstart_prop) && $comp->GetType() != 'VTODO' ) { $dtstart_type = 'DUE'; $dtstart_prop = $comp->GetProperty($dtstart_type); } if ( !isset($dtstart_prop) ) continue; $dtstart = new RepeatRuleDateTime( $dtstart_prop ); if ( $return_floating_times ) $dtstart->setAsFloat(); if ( DEBUG_RRULE ) printf( "Component is: %s (floating: %s)\n", $comp->GetType(), ($return_floating_times?"yes":"no") ); $is_date = $dtstart->isDate(); $instances[$dtstart->FloatOrUTC($return_floating_times)] = $comp; $rrule = $comp->GetProperty('RRULE'); $has_repeats = isset($rrule); } $p = $comp->GetProperty('RECURRENCE-ID'); if ( isset($p) && $p->Value() != '' ) { $range = $p->GetParameterValue('RANGE'); $recur_utc = new RepeatRuleDateTime($p); if ( $is_date ) $recur_utc->setAsDate(); $recur_utc = $recur_utc->FloatOrUTC($return_floating_times); if ( isset($range) && $range == 'THISANDFUTURE' ) { foreach( $instances AS $k => $v ) { if ( DEBUG_RRULE ) printf( "Removing overridden instance at: $k\n" ); if ( $k >= $recur_utc ) unset($instances[$k]); } } else { unset($instances[$recur_utc]); } } else if ( DEBUG_RRULE ) { $p = $comp->GetProperty('SUMMARY'); $summary = ( isset($p) ? $p->Value() : 'not set'); $p = $comp->GetProperty('UID'); $uid = ( isset($p) ? $p->Value() : 'not set'); printf( "Processing event '%s' with UID '%s' starting on %s\n", $summary, $uid, $dtstart->FloatOrUTC($return_floating_times) ); print( "Instances at start"); foreach( $instances AS $k => $v ) { print ' : '.$k; } print "\n"; } $instances += rrule_expand($dtstart, 'RRULE', $comp, $range_end, null, $return_floating_times); if ( DEBUG_RRULE ) { print( "After rrule_expand"); foreach( $instances AS $k => $v ) { print ' : '.$k; } print "\n"; } $instances += rdate_expand($dtstart, 'RDATE', $comp, $range_end, null, $return_floating_times); if ( DEBUG_RRULE ) { print( "After rdate_expand"); foreach( $instances AS $k => $v ) { print ' : '.$k; } print "\n"; } foreach ( rdate_expand($dtstart, 'EXDATE', $comp, $range_end, null, $return_floating_times) AS $k => $v ) { unset($instances[$k]); } if ( DEBUG_RRULE ) { print( "After exdate_expand"); foreach( $instances AS $k => $v ) { print ' : '.$k; } print "\n"; } } $last_duration = null; $early_start = null; $new_components = array(); $start_utc = $range_start->FloatOrUTC($return_floating_times); $end_utc = $range_end->FloatOrUTC($return_floating_times); foreach( $instances AS $utc => $comp ) { if ( $utc > $end_utc ) { if ( DEBUG_RRULE ) printf( "We're done: $utc is out of the range.\n"); break; } $end_type = ($comp->GetType() == 'VTODO' ? 'DUE' : 'DTEND'); $duration = $comp->GetProperty('DURATION'); if ( !isset($duration) || $duration->Value() == '' ) { $instance_start = $comp->GetProperty($dtstart_type); $dtsrt = new RepeatRuleDateTime( $instance_start ); if ( $return_floating_times ) $dtsrt->setAsFloat(); $instance_end = $comp->GetProperty($end_type); if ( isset($instance_end) ) { $dtend = new RepeatRuleDateTime( $instance_end ); $duration = Rfc5545Duration::fromTwoDates($dtsrt, $dtend); } else { if ( $instance_start->GetParameterValue('VALUE') == 'DATE' ) { $duration = new Rfc5545Duration('P1D'); } else { $duration = new Rfc5545Duration(0); } } } else { $duration = new Rfc5545Duration($duration->Value()); } if ( $utc < $start_utc ) { if ( isset($early_start) && isset($last_duration) && $duration->equals($last_duration) ) { if ( $utc < $early_start ) { if ( DEBUG_RRULE ) printf( "Next please: $utc is before $early_start and before $start_utc.\n"); continue; } } else { /** Calculate the latest possible start date when this event would overlap our range start */ $latest_start = clone($range_start); $latest_start->modify('-'.$duration); $early_start = $latest_start->FloatOrUTC($return_floating_times); $last_duration = $duration; if ( $utc < $early_start ) { if ( DEBUG_RRULE ) printf( "Another please: $utc is before $early_start and before $start_utc.\n"); continue; } } } $component = clone($comp); if ( isset($c->expanded_instances_include_rrule) ) { $component->ClearProperties( array('DTSTART'=> true, 'DUE' => true, 'DTEND' => true ) ); } else { $component->ClearProperties( array('DTSTART'=> true, 'DUE' => true, 'DTEND' => true, 'RRULE' => true, 'RDATE' => true, 'EXDATE' => true) ); } $component->AddProperty('DTSTART', $utc, ($is_date ? array('VALUE' => 'DATE') : null) ); $component->AddProperty('DURATION', $duration ); if ( $has_repeats && $dtstart->FloatOrUTC($return_floating_times) != $utc ) $component->AddProperty('RECURRENCE-ID', $utc, ($is_date ? array('VALUE' => 'DATE') : null) ); $new_components[$utc] = $component; } // Add overriden instances foreach( $components AS $k => $comp ) { $p = $comp->GetProperty('RECURRENCE-ID'); if ( isset($p) && $p->Value() != '') { if ( !isset($new_components[$p->Value()]) ) { // The component we're replacing is outside the range. Unless the replacement // is *in* the range we will move along to the next one. $dtstart_prop = $comp->GetProperty($dtstart_type); if ( !isset($dtstart_prop) ) continue; // No start: no expansion. Note that we consider 'DUE' to be a start if DTSTART is missing $dtstart = new RepeatRuleDateTime( $dtstart_prop ); $is_date = $dtstart->isDate(); if ( $return_floating_times ) $dtstart->setAsFloat(); $dtstart = $dtstart->FloatOrUTC($return_floating_times); if ( $dtstart > $end_utc ) continue; // Start after end of range, skip it $end_type = ($comp->GetType() == 'VTODO' ? 'DUE' : 'DTEND'); $duration = $comp->GetProperty('DURATION'); if ( !isset($duration) || $duration->Value() == '' ) { $instance_end = $comp->GetProperty($end_type); if ( isset($instance_end) ) { $dtend = new RepeatRuleDateTime( $instance_end ); if ( $return_floating_times ) $dtend->setAsFloat(); $dtend = $dtend->FloatOrUTC($return_floating_times); } else { $dtend = $dtstart + ($is_date ? $dtstart + 86400 : 0 ); } } else { $duration = new Rfc5545Duration($duration->Value()); $dtend = $dtstart + $duration->asSeconds(); } if ( $dtend < $start_utc ) continue; // End before start of range: skip that too. } if ( DEBUG_RRULE ) printf( "Replacing overridden instance at %s\n", $p->Value()); $new_components[$p->Value()] = $comp; } } $vResource->SetComponents($new_components); return $vResource; } /** * Return a date range for this component. * @param vComponent $comp * @throws Exception (1) When DTSTART is not present but the RFC says MUST and (2) when we get an unsupported component * @return RepeatRuleDateRange */ function getComponentRange(vComponent $comp) { $dtstart_prop = $comp->GetProperty('DTSTART'); $duration_prop = $comp->GetProperty('DURATION'); if ( isset($duration_prop) ) { if ( !isset($dtstart_prop) ) throw new Exception('Invalid '.$comp->GetType().' containing DURATION without DTSTART', 0); $dtstart = new RepeatRuleDateTime($dtstart_prop); $dtend = clone($dtstart); $dtend->modify(new Rfc5545Duration($duration_prop->Value())); } else { $completed_prop = null; switch ( $comp->GetType() ) { case 'VEVENT': if ( !isset($dtstart_prop) ) throw new Exception('Invalid VEVENT without DTSTART', 0); $dtend_prop = $comp->GetProperty('DTEND'); break; case 'VTODO': $completed_prop = $comp->GetProperty('COMPLETED'); $dtend_prop = $comp->GetProperty('DUE'); break; case 'VJOURNAL': if ( !isset($dtstart_prop) ) $dtstart_prop = $comp->GetProperty('DTSTAMP'); $dtend_prop = $dtstart_prop; default: throw new Exception('getComponentRange cannot handle "'.$comp->GetType().'" components', 0); } if ( isset($dtstart_prop) ) $dtstart = new RepeatRuleDateTime($dtstart_prop); else $dtstart = null; if ( isset($dtend_prop) ) $dtend = new RepeatRuleDateTime($dtend_prop); else $dtend = null; if ( isset($completed_prop) ) { $completed = new RepeatRuleDateTime($completed_prop); if ( !isset($dtstart) || (isset($dtstart) && $completed < $dtstart) ) $dtstart = $completed; if ( !isset($dtend) || (isset($dtend) && $completed > $dtend) ) $dtend = $completed; } } return new RepeatRuleDateRange($dtstart, $dtend); } /** * Return a RepeatRuleDateRange from the earliest start to the latest end of the event. * * @todo: This should probably be made part of the VCalendar object when we move the RRule.php into AWL. * * @param object $vResource A vComponent which is a VCALENDAR containing components needing expansion * @return RepeatRuleDateRange Representing the range of time covered by the event. */ function getVCalendarRange( $vResource ) { global $c; $components = $vResource->GetComponents(); $dtstart = null; $duration = null; $earliest_start = null; $latest_end = null; $has_repeats = false; foreach( $components AS $k => $comp ) { if ( $comp->GetType() == 'VTIMEZONE' ) continue; $range = getComponentRange($comp); $dtstart = $range->from; if ( !isset($dtstart) ) continue; $duration = $range->getDuration(); $rrule = $comp->GetProperty('RRULE'); $limited_occurrences = true; if ( isset($rrule) ) { $rule = new RepeatRule($dtstart, $rrule); $limited_occurrences = $rule->hasLimitedOccurrences(); } if ( $limited_occurrences ) { $instances = array(); $instances[$dtstart->FloatOrUTC()] = $dtstart; if ( !isset($range_end) ) { $range_end = new RepeatRuleDateTime(); $range_end->modify('+150 years'); } $instances += rrule_expand($dtstart, 'RRULE', $comp, $range_end); $instances += rdate_expand($dtstart, 'RDATE', $comp, $range_end); foreach ( rdate_expand($dtstart, 'EXDATE', $comp, $range_end) AS $k => $v ) { unset($instances[$k]); } if ( count($instances) < 1 ) { if ( empty($earliest_start) || $dtstart < $earliest_start ) $earliest_start = $dtstart; $latest_end = null; break; } $instances = array_keys($instances); asort($instances); $first = new RepeatRuleDateTime($instances[0]); $last = new RepeatRuleDateTime($instances[count($instances)-1]); $last->modify($duration); if ( empty($earliest_start) || $first < $earliest_start ) $earliest_start = $first; if ( empty($latest_end) || $last > $latest_end ) $latest_end = $last; } else { if ( empty($earliest_start) || $dtstart < $earliest_start ) $earliest_start = $dtstart; $latest_end = null; break; } } return new RepeatRuleDateRange($earliest_start, $latest_end ); } davical-1.1.1/inc/caldav-MKCOL.php0000644000000000000000000002453611756041224013376 0ustar * @copyright Catalyst IT Ltd, Morphoss Ltd - http://www.morphoss.com/ * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ dbg_error_log('MKCOL', 'method handler'); require_once('AwlQuery.php'); $request->NeedPrivilege('DAV::bind'); $displayname = $request->path; // Enforce trailling '/' on collection name if ( ! preg_match( '#/$#', $request->path ) ) { dbg_error_log( 'MKCOL', 'Add trailling "/" to "%s"', $request->path); $request->path .= '/'; } $parent_container = '/'; if ( preg_match( '#^(.*/)([^/]+)(/)?$#', $request->path, $matches ) ) { $parent_container = $matches[1]; $displayname = $matches[2]; } require_once('DAVResource.php'); $parent = new DAVResource( $parent_container ); if ( $parent->IsSchedulingCollection( 'inbox' ) ) { $request->PreconditionFailed(403, 'urn:ietf:params:xml:ns:caldav:no-mkcol-in-inbox' ); } $request_type = $request->method; $is_calendar = ($request_type == 'MKCALENDAR'); $is_addressbook = false; $resourcetypes = ''; if ($is_calendar) $resourcetypes .= ''; require_once('XMLDocument.php'); $reply = new XMLDocument(array( 'DAV:' => '', 'urn:ietf:params:xml:ns:caldav' => 'C' )); $failure_code = null; $failure = array(); $dav_properties = array(); if ( isset($request->xml_tags) ) { /** * The MKCOL request may contain XML to set some DAV properties */ $position = 0; $xmltree = BuildXMLTree( $request->xml_tags, $position); if ( $xmltree->GetNSTag() == 'DAV::mkcol' ) $request_type = 'extended-mkcol'; if ( $xmltree->GetNSTag() != 'urn:ietf:params:xml:ns:caldav:mkcalendar' && $request_type != 'extended-mkcol' ) { $request->DoResponse( 406, sprintf('The XML is not a "DAV::mkcol" or "urn:ietf:params:xml:ns:caldav:mkcalendar" document (%s)', $xmltree->GetNSTag()) ); } $setprops = $xmltree->GetContent(); // $setprops = $setprops[0]->GetContent(); // $setprops = $setprops[0]->GetContent(); // the array of properties. foreach( $setprops AS $k => $setting ) { $tag = $setting->GetNSTag(); $content = $setting->RenderContent(0,null,true); dbg_error_log( 'MKCOL', 'Processing tag "%s"', $tag); switch( $tag ) { case 'DAV::resourcetype': /** Any value for resourcetype other than 'calendar' is ignored */ dbg_error_log( 'MKCOL', 'Extended MKCOL with resourcetype specified. "%s"', $content); $is_addressbook = count($setting->GetPath('DAV::resourcetype/urn:ietf:params:xml:ns:carddav:addressbook')); $is_calendar = count($setting->GetPath('DAV::resourcetype/urn:ietf:params:xml:ns:caldav:calendar')); if ( $is_addressbook && $is_calendar ) { $failure['set-'.$tag] = new XMLElement( 'propstat', array( new XMLElement( 'prop', new XMLElement($reply->Tag($tag))), new XMLElement( 'status', 'HTTP/1.1 409 Conflict' ), new XMLElement('responsedescription', translate('Collections may not be both CalDAV calendars and CardDAV addressbooks at the same time') ) )); } else { $resourcetypes = $setting->GetPath('DAV::resourcetype/*'); $types = ''; foreach( $resourcetypes AS $k => $v ) { $types .= '<'.$v->GetNSTag().'/>'; } $resourcetypes = $types; $success[$tag] = 1; } break; case 'DAV::displayname': $displayname = $content; /** * @todo This is definitely a bug in SOHO Organizer and we probably should respond * with an error, rather than silently doing what they *seem* to want us to do. */ if ( preg_match( '/^SOHO.Organizer.6\./', $_SERVER['HTTP_USER_AGENT'] ) ) { dbg_error_log( 'MKCOL', 'Displayname is "/" to "%s"', $request->path); $parent_container = $request->path; $request->path .= $content . '/'; } $success[$tag] = 1; break; case 'urn:ietf:params:xml:ns:caldav:supported-calendar-component-set': /** We allow this to be written as a dead property */ $dav_properties[$tag] = $content; $success[$tag] = 1; break; case 'urn:ietf:params:xml:ns:caldav:supported-calendar-data': /** Ignored, since we will support iCalendar 2.0 */ case 'urn:ietf:params:xml:ns:caldav:calendar-data': /** Ignored, since we will support iCalendar 2.0 */ case 'urn:ietf:params:xml:ns:caldav:max-resource-size': /** Ignored, since we will support arbitrary size */ case 'urn:ietf:params:xml:ns:caldav:min-date-time': /** Ignored, since we will support arbitrary time */ case 'urn:ietf:params:xml:ns:caldav:max-date-time': /** Ignored, since we will support arbitrary time */ case 'urn:ietf:params:xml:ns:caldav:max-instances': /** Ignored, since we will support arbitrary instances */ $success[$tag] = 1; break; /** * The following properties are read-only, so they will cause the request to fail */ case 'DAV::getetag': case 'DAV::getcontentlength': case 'DAV::getcontenttype': case 'DAV::getlastmodified': case 'DAV::creationdate': case 'DAV::lockdiscovery': case 'DAV::supportedlock': $failure['set-'.$tag] = new XMLElement( 'propstat', array( new XMLElement( 'prop', new XMLElement($reply->Tag($tag))), new XMLElement( 'status', 'HTTP/1.1 409 Conflict' ), new XMLElement('responsedescription', translate('Property is read-only') ) )); if ( isset($failure_code) && $failure_code != 409 ) $failure_code = 207; else if ( !isset($failure_code) ) $failure_code = 409; break; /** * If we don't have any special processing for the property, we just store it verbatim (which will be an XML fragment). */ default: $dav_properties[$tag] = $content; $success[$tag] = 1; break; } } /** * If we have encountered any instances of failure, the whole damn thing fails. */ if ( count($failure) > 0 ) { $props = array(); $status = array(); foreach( $success AS $tag => $v ) { // Unfortunately although these succeeded, we failed overall, so they didn't happen... $props[] = new XMLElement($reply->Tag($tag)); } $status[] = new XMLElement( 'propstat', array( new XMLElement('prop', $props), new XMLElement('status', 'HTTP/1.1 424 Failed Dependency' ) )); if ( $request_type == 'extended-mkcol' ) { $request->DoResponse( $failure_code, $reply->Render('mkcol-response', array_merge( $status, $failure ), 'text/xml; charset="utf-8"' ) ); } else { array_unshift( $failure, $reply->href( ConstructURL($request->path) ) ); $failure[] = new XMLElement('responsedescription', translate('Some properties were not able to be set.') ); $request->DoResponse( 207, $reply->Render('multistatus', new XMLElement( 'response', $failure )), 'text/xml; charset="utf-8"' ); } } } $sql = 'SELECT * FROM collection WHERE dav_name = :dav_name'; $qry = new AwlQuery( $sql, array( ':dav_name' => $request->path) ); if ( ! $qry->Exec('MKCOL',__LINE__,__FILE__) ) { $request->DoResponse( 500, translate('Error querying database.') ); } if ( $qry->rows() != 0 ) { $request->DoResponse( 405, translate('A collection already exists at that location.') ); } $qry = new AwlQuery(); $qry->Begin(); if ( ! $qry->QDo( 'INSERT INTO collection ( user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, is_addressbook, resourcetypes, created, modified ) VALUES( :user_no, :parent_container, :dav_name, :dav_etag, :dav_displayname, :is_calendar, :is_addressbook, :resourcetypes, current_timestamp, current_timestamp )', array( ':user_no' => $request->user_no, ':parent_container' => $parent_container, ':dav_name' => $request->path, ':dav_etag' => md5($request->user_no. $request->path), ':dav_displayname' => $displayname, ':is_calendar' => ($is_calendar ? 't' : 'f'), ':is_addressbook' => ($is_addressbook ? 't' : 'f'), ':resourcetypes' => $resourcetypes ) ) ) { $request->DoResponse( 500, translate('Error writing calendar details to database.') ); } foreach( $dav_properties AS $k => $v ) { if ( ! $qry->QDo('SELECT set_dav_property( :dav_name, :user_no::integer, :tag::text, :value::text )', array( ':dav_name' => $request->path, ':user_no' => $request->user_no, ':tag' => $k, ':value' => $v) ) ) { $request->DoResponse( 500, translate('Error writing calendar properties to database.') ); } } if ( !$qry->Commit() ) { $request->DoResponse( 500, translate('Error writing calendar details to database.') ); } dbg_error_log( 'MKCOL', 'New calendar "%s" created named "%s" for user "%d" in parent "%s"', $request->path, $displayname, $session->user_no, $parent_container); header('Cache-Control: no-cache'); /** RFC4791 mandates this at 5.3.1 */ $request->DoResponse( 201, '' ); /** * @todo We could also respond to the request... * * * * * * Lisa's Events * Calendar restricted to events. * * * * * * * * */ davical-1.1.1/inc/caldav-REPORT-cardquery.php0000644000000000000000000002034711776165361015550 0ustar GetElements(); foreach( $expansion AS $k => $v ) { if ( $v instanceof XMLElement ) $address_data_properties[strtoupper($v->GetAttribute('name'))] = true; } } /** * Build the array of properties to include in the report output */ $qry_content = $xmltree->GetContent('urn:ietf:params:xml:ns:carddav:addressbook-query'); $proptype = $qry_content[0]->GetNSTag(); $properties = array(); switch( $proptype ) { case 'DAV::prop': $qry_props = $xmltree->GetPath('/urn:ietf:params:xml:ns:carddav:addressbook-query/'.$proptype.'/*'); foreach( $qry_content[0]->GetElements() AS $k => $v ) { $properties[$v->GetNSTag()] = 1; if ( $v->GetNSTag() == 'urn:ietf:params:xml:ns:carddav:address-data' ) get_address_properties($v); } break; case 'DAV::allprop': $properties['DAV::allprop'] = 1; if ( $qry_content[1]->GetNSTag() == 'DAV::include' ) { foreach( $qry_content[1]->GetElements() AS $k => $v ) { $include_properties[] = $v->GetNSTag(); /** $include_properties is referenced in DAVResource where allprop is expanded */ if ( $v->GetNSTag() == 'urn:ietf:params:xml:ns:carddav:address-data' ) get_address_properties($v); } } break; default: $properties[$proptype] = 1; } if ( empty($properties) ) $properties['DAV::allprop'] = 1; /** * There can only be *one* FILTER element. */ $qry_filters = $xmltree->GetPath('/urn:ietf:params:xml:ns:carddav:addressbook-query/urn:ietf:params:xml:ns:carddav:filter/*'); if ( count($qry_filters) != 1 ) { /* $qry_filters = $qry_filters[0]; // There can only be one FILTER element } else { */ $qry_filters = false; } /** * While we can construct our SQL to apply some filters in the query, other filters * need to be checked against the retrieved record. This is for handling those ones. * * @param array $filter An array of XMLElement which is the filter definition * @param string $item The database row retrieved for this calendar item * * @return boolean True if the check succeeded, false otherwise. */ function apply_filter( $filters, $item ) { global $session, $c, $request; if ( count($filters) == 0 ) return true; dbg_error_log("cardquery","Applying filter for item '%s'", $item->dav_name ); $vcard = new vComponent( $item->caldav_data ); return $vcard->TestFilter($filters); } /** * Process a filter fragment returning an SQL fragment */ $need_post_filter = false; $matchnum = 0; function SqlFilterCardDAV( $filter, $components, $property = null, $parameter = null ) { global $need_post_filter, $target_collection, $matchnum; $sql = ""; $params = array(); if ( !is_array($filter) ) { dbg_error_log( "cardquery", "Filter is of type '%s', but should be an array of XML Tags.", gettype($filter) ); } foreach( $filter AS $k => $v ) { $tag = $v->GetNSTag(); dbg_error_log("cardquery", "Processing $tag into SQL - %d, '%s', %d\n", count($components), $property, isset($parameter) ); $not_defined = ""; switch( $tag ) { case 'urn:ietf:params:xml:ns:carddav:text-match': $search = $v->GetContent(); $negate = $v->GetAttribute("negate-condition"); $collation = $v->GetAttribute("collation"); switch( strtolower($collation) ) { case 'i;octet': $comparison = 'LIKE'; break; case 'i;ascii-casemap': case 'i;unicode-casemap': default: $comparison = 'ILIKE'; break; } $pname = ':text_match_'.$matchnum++; $params[$pname] = '%'.$search.'%'; dbg_error_log("cardquery", " text-match: (%s%s %s '%s') ", (isset($negate) && strtolower($negate) == "yes" ? "NOT ": ""), $property, $comparison, $params[$pname] ); $sql .= sprintf( "AND (%s%s %s $pname) ", (isset($negate) && strtolower($negate) == "yes" ? "NOT ": ""), $property, $comparison ); break; case 'urn:ietf:params:xml:ns:carddav:prop-filter': $propertyname = $v->GetAttribute("name"); switch( $propertyname ) { case 'VERSION': case 'UID': case 'NICKNAME': case 'FN': case 'NOTE': case 'ORG': case 'URL': case 'FBURL': case 'CALADRURI': case 'CALURI': $property = strtolower($propertyname); break; case 'N': $property = 'name'; break; default: $need_post_filter = true; dbg_error_log("cardquery", "Could not handle 'prop-filter' on %s in SQL", $propertyname ); continue; } $subfilter = $v->GetContent(); $success = SqlFilterCardDAV( $subfilter, $components, $property, $parameter ); if ( $success === false ) continue; else { $sql .= $success['sql']; $params = array_merge( $params, $success['params'] ); } break; case 'urn:ietf:params:xml:ns:carddav:param-filter': $need_post_filter = true; return false; /** Figure out how to handle PARAM-FILTER conditions in the SQL */ /* $parameter = $v->GetAttribute("name"); $subfilter = $v->GetContent(); $success = SqlFilterCardDAV( $subfilter, $components, $property, $parameter ); if ( $success === false ) continue; else { $sql .= $success['sql']; $params = array_merge( $params, $success['params'] ); } break; */ default: dbg_error_log("cardquery", "Could not handle unknown tag '%s' in calendar query report", $tag ); break; } } dbg_error_log("cardquery", "Generated SQL was '%s'", $sql ); return array( 'sql' => $sql, 'params' => $params ); } /** * Something that we can handle, at least roughly correctly. */ $responses = array(); $target_collection = new DAVResource($request->path); $bound_from = $target_collection->bound_from(); if ( !$target_collection->Exists() ) { $request->DoResponse( 404 ); } if ( ! $target_collection->IsAddressbook() ) { $request->DoResponse( 403, translate('The addressbook-query report must be run against an addressbook collection') ); } /** * @todo Once we are past DB version 1.2.1 we can change this query more radically. The best performance to * date seems to be: * SELECT caldav_data.*,address_item.* FROM collection JOIN address_item USING (collection_id,user_no) * JOIN caldav_data USING (dav_id) WHERE collection.dav_name = '/user1/home/' * AND caldav_data.caldav_type = 'VEVENT' ORDER BY caldav_data.user_no, caldav_data.dav_name; */ $params = array(); $where = ' WHERE caldav_data.collection_id = ' . $target_collection->resource_id(); if ( is_array($qry_filters) ) { dbg_log_array( 'cardquery', 'qry_filters', $qry_filters, true ); $components = array(); $filter_fragment = SqlFilterCardDAV( $qry_filters, $components ); if ( $filter_fragment !== false ) { $where .= ' '.$filter_fragment['sql']; $params = $filter_fragment['params']; } } else { dbg_error_log( 'cardquery', 'No query filters' ); } $sql = 'SELECT * FROM caldav_data INNER JOIN addressbook_resource USING(dav_id)'. $where; if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) $sql .= " ORDER BY dav_id"; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec("cardquery",__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $address_object = $qry->Fetch() ) { if ( !$need_post_filter || apply_filter( $qry_filters, $address_object ) ) { if ( $bound_from != $target_collection->dav_name() ) { $address_object->dav_name = str_replace( $bound_from, $target_collection->dav_name(), $address_object->dav_name); } if ( count($address_data_properties) > 0 ) { $vcard = new VCard($address_object->caldav_data); $vcard->MaskProperties($address_data_properties); $address_object->caldav_data = $vcard->Render(); } $responses[] = component_to_xml( $properties, $address_object ); } } } $multistatus = new XMLElement( "multistatus", $responses, $reply->GetXmlNsArray() ); $request->XMLResponse( 207, $multistatus ); davical-1.1.1/inc/caldav-GET-functions.php0000644000000000000000000001406011776146514015157 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ require_once("iCalendar.php"); require_once("DAVResource.php"); function obfuscated_event( $icalendar ) { // The user is not admin / owner of this calendar looking at his calendar and can not admin the other cal, // or maybe they don't have *read* access but they got here, so they must at least have free/busy access // so we will present an obfuscated version of the event that just says "Busy" (translated :-) $confidential = new iCalComponent(); $confidential->SetType($icalendar->GetType()); $confidential->AddProperty( 'SUMMARY', translate('Busy') ); $confidential->AddProperty( 'CLASS', 'CONFIDENTIAL' ); $confidential->SetProperties( $icalendar->GetProperties('DTSTART'), 'DTSTART' ); $confidential->SetProperties( $icalendar->GetProperties('RRULE'), 'RRULE' ); $confidential->SetProperties( $icalendar->GetProperties('DURATION'), 'DURATION' ); $confidential->SetProperties( $icalendar->GetProperties('DTEND'), 'DTEND' ); $confidential->SetProperties( $icalendar->GetProperties('UID'), 'UID' ); $confidential->SetProperties( $icalendar->GetProperties('CREATED'), 'CREATED' ); return $confidential; } function export_iCalendar( DAVResource $dav_resource ) { global $session, $c, $request; if ( ! $dav_resource->IsCalendar() && !(isset($c->get_includes_subcollections) && $c->get_includes_subcollections) ) { /** RFC2616 says we must send an Allow header if we send a 405 */ header("Allow: PROPFIND,PROPPATCH,OPTIONS,MKCOL,REPORT,DELETE"); $request->DoResponse( 405, translate("GET requests on collections are only supported for calendars.") ); } /** * The CalDAV specification does not define GET on a collection, but typically this is * used as a .ics download for the whole collection, which is what we do also. */ if ( isset($c->get_includes_subcollections) && $c->get_includes_subcollections ) { $where = 'caldav_data.collection_id IN '; $where .= '(SELECT bound_source_id FROM dav_binding WHERE dav_binding.dav_name ~ :path_match '; $where .= 'UNION '; $where .= 'SELECT collection_id FROM collection WHERE collection.dav_name ~ :path_match) '; $params = array( ':path_match' => '^'.$request->path ); $distinct = 'DISTINCT ON (calendar_item.uid) '; } else { $where = 'caldav_data.collection_id = :collection_id '; $params = array( ':collection_id' => $dav_resource->resource_id() ); $distinct = ''; } $sql = 'SELECT '.$distinct.' caldav_data, class, caldav_type, calendar_item.user_no, logged_user '; $sql .= 'FROM collection INNER JOIN caldav_data USING(collection_id) '; $sql .= 'INNER JOIN calendar_item USING ( dav_id ) WHERE '.$where; if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) $sql .= ' ORDER BY calendar_item.uid, calendar_item.dav_id'; $qry = new AwlQuery( $sql, $params ); if ( !$qry->Exec("GET",__LINE__,__FILE__) ) { $request->DoResponse( 500, translate("Database Error") ); } /** * Here we are constructing a whole calendar response for this collection, including * the timezones that are referred to by the events we have selected. */ $vcal = new iCalComponent(); $vcal->VCalendar(); $displayname = $dav_resource->GetProperty('displayname'); if ( isset($displayname) ) { $vcal->AddProperty("X-WR-CALNAME", $displayname); } if ( !empty($c->auto_refresh_duration) ) { $vcal->AddProperty("X-APPLE-AUTO-REFRESH-INTERVAL", $c->auto_refresh_duration); $vcal->AddProperty("AUTO-REFRESH", $c->auto_refresh_duration); $vcal->AddProperty("X-PUBLISHED-TTL", $c->auto_refresh_duration); } $need_zones = array(); $timezones = array(); while( $event = $qry->Fetch() ) { $ical = new iCalComponent( $event->caldav_data ); /** Save the timezone component(s) into a minimal set for inclusion later */ $event_zones = $ical->GetComponents('VTIMEZONE',true); foreach( $event_zones AS $k => $tz ) { $tzid = $tz->GetPValue('TZID'); if ( !isset($tzid) ) continue ; if ( $tzid != '' && !isset($timezones[$tzid]) ) { $timezones[$tzid] = $tz; } } /** Work out which ones are actually used here */ $comps = $ical->GetComponents('VTIMEZONE',false); foreach( $comps AS $k => $comp ) { $tzid = $comp->GetPParamValue('DTSTART', 'TZID'); if ( isset($tzid) && !isset($need_zones[$tzid]) ) $need_zones[$tzid] = 1; $tzid = $comp->GetPParamValue('DUE', 'TZID'); if ( isset($tzid) && !isset($need_zones[$tzid]) ) $need_zones[$tzid] = 1; $tzid = $comp->GetPParamValue('DTEND', 'TZID'); if ( isset($tzid) && !isset($need_zones[$tzid]) ) $need_zones[$tzid] = 1; if ( $dav_resource->HavePrivilegeTo('all',false) || $session->user_no == $event->user_no || $session->user_no == $event->logged_user || ( isset($session->email) && $c->allow_get_email_visibility && $comp->IsAttendee($session->email) ) ) { /** * These people get to see all of the event, and they should always * get any alarms as well. */ $vcal->AddComponent($comp); continue; } /** No visibility even of the existence of these events if they aren't admin/owner/attendee */ if ( $event->class == 'PRIVATE' ) continue; if ( ! $dav_resource->HavePrivilegeTo('DAV::read') || $event->class == 'CONFIDENTIAL' ) { $vcal->AddComponent(obfuscated_event($comp)); } elseif ( isset($c->hide_alarm) && $c->hide_alarm ) { // Otherwise we hide the alarms (if configured to) $comp->ClearComponents('VALARM'); $vcal->AddComponent($comp); } else { $vcal->AddComponent($comp); } } } /** Put the timezones on there that we need */ foreach( $need_zones AS $tzid => $v ) { if ( isset($timezones[$tzid]) ) $vcal->AddComponent($timezones[$tzid]); } return $vcal->Render(); } davical-1.1.1/inc/caldav-OPTIONS.php0000644000000000000000000000174211633117640013656 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log("OPTIONS", "method handler"); include_once('DAVResource.php'); $resource = new DAVResource($request->path); /** * The spec calls for this to be controlled by 'read' access, but we expand * that a little to also allow read-current-user-privilege-set since we grant that * more generally and Mozilla attempts this and gets upset... */ $resource->NeedPrivilege( array('DAV::read','DAV::read-current-user-privilege-set'), true ); if ( !$resource->Exists() ) { $request->DoResponse( 404, translate("No collection found at that location.") ); } $allowed = implode( ', ', array_keys($resource->FetchSupportedMethods()) ); header( 'Allow: '.$allowed); $request->DoResponse( 200, "" ); davical-1.1.1/inc/log_caldav_action.php0000644000000000000000000000244111246135773014727 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 * * This file is intended to be used as a template, perhaps the user of this service * will want to log actions in a very different manner and this can be used as an * example of how to go about doing that. */ /** * Log the action * @param string $action_type INSERT / UPDATE or DELETE * @param string $uid The UID of the modified item * @param integer $user_no The user owning the containing collection. * @param integer $collection_id The ID of the containing collection. * @param string $dav_name The DAV path of the item, relative to the DAViCal base path */ function log_caldav_action( $action_type, $uid, $user_no, $collection_id, $dav_name ) { global $c; $logline = sprintf( '%s %s %s %s %s %s', gmdate('Ymd\THis\Z'), $action_type, $uid, $user_no, $collection_id, $dav_name ); if ( !isset($c->action_log_name) ) { error_log( $logline ); return; } $logline .= "\n"; $logfile = fopen( $c->action_log_name, "a+" ); fwrite( $logfile, $logline ); fclose($logfile); } davical-1.1.1/inc/drivers_ldap.php0000644000000000000000000006055311776257425013774 0ustar , * Andrew McMillan * @copyright Maxime Delorme * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ require_once("auth-functions.php"); class ldapDrivers { /**#@+ * @access private */ /** * Holds the LDAP connection parameters */ var $connect; /**#@-*/ /** * Initializes the LDAP connection * * @param array $config The configuration data */ function __construct($config) { global $c; $host=$config['host']; $port=$config['port']; if(!function_exists('ldap_connect')){ $c->messages[] = i18n("drivers_ldap : function ldap_connect not defined, check your php_ldap module"); $this->valid=false; return ; } //Set LDAP protocol version if (isset($config['protocolVersion'])) ldap_set_option($this->connect, LDAP_OPT_PROTOCOL_VERSION, $config['protocolVersion']); if (isset($config['optReferrals'])) ldap_set_option($this->connect, LDAP_OPT_REFERRALS, $config['optReferrals']); if ($port) $this->connect=ldap_connect($host, $port); else $this->connect=ldap_connect($host); if (! $this->connect){ $c->messages[] = sprintf(translate( 'drivers_ldap : Unable to connect to LDAP with port %s on host %s'), $port, $host ); $this->valid=false; return ; } dbg_error_log( "LDAP", "drivers_ldap : Connected to LDAP server %s",$host ); // Start TLS if desired (requires protocol version 3) if (isset($config['startTLS'])) { if (!ldap_set_option($this->connect, LDAP_OPT_PROTOCOL_VERSION, 3)) { $c->messages[] = i18n('drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supported'); $this->valid=false; return; } if (!ldap_start_tls($this->connect)) { $c->messages[] = i18n('drivers_ldap : Could not start TLS: ldap_start_tls() failed'); $this->valid=false; return; } } //Set the search scope to be used, default to subtree. This sets the functions to be called later. if (!isset($config['scope'])) $config['scope'] = 'subtree'; switch (strtolower($config['scope'])) { case "base": $this->ldap_query_one = 'ldap_read'; $this->ldap_query_all = 'ldap_read'; break; case "onelevel": $this->ldap_query_one = 'ldap_list'; $this->ldap_query_all = 'ldap_search'; break; default: $this->ldap_query_one = 'ldap_search'; $this->ldap_query_all = 'ldap_search'; break; } //connect as root if (!ldap_bind($this->connect, (isset($config['bindDN']) ? $config['bindDN'] : null), (isset($config['passDN']) ? $config['passDN'] : null) ) ){ $bindDN = isset($config['bindDN']) ? $config['bindDN'] : 'anonymous'; $passDN = isset($config['passDN']) ? $config['passDN'] : 'anonymous'; dbg_error_log( "LDAP", i18n('drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s'), $host, $port, $bindDN ); $c->messages[] = i18n( 'drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachable'); $this->valid=false; return ; } $this->valid = true; //root to start search $this->baseDNUsers = is_string($config['baseDNUsers']) ? array($config['baseDNUsers']) : $config['baseDNUsers']; $this->filterUsers = (isset($config['filterUsers']) ? $config['filterUsers'] : null); $this->baseDNGroups = is_string($config['baseDNGroups']) ? array($config['baseDNGroups']) : $config['baseDNGroups']; $this->filterGroups = (isset($config['filterGroups']) ? $config['filterGroups'] : null); } /** * Retrieve all users from the LDAP directory */ function getAllUsers($attributes){ global $c; $query = $this->ldap_query_all; foreach($this->baseDNUsers as $baseDNUsers) { $entry = $query($this->connect,$baseDNUsers,$this->filterUsers,$attributes); if (!ldap_first_entry($this->connect,$entry)) { $c->messages[] = sprintf(translate('Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<'), $this->filterUsers, join(', ', $attributes), $baseDNUsers); } $row = array(); for($i = ldap_first_entry($this->connect,$entry); $i && $arr = ldap_get_attributes($this->connect,$i); $i = ldap_next_entry($this->connect,$i) ) { $row = array(); for ($j=0; $j < $arr['count']; $j++) { $row[$arr[$j]] = $arr[$arr[$j]][0]; } $ret[]=$row; } } return $ret; } /** * Retrieve all groups from the LDAP directory */ function getAllGroups($attributes){ global $c; $query = $this->ldap_query_all; foreach($this->baseDNGroups as $baseDNGroups) { $entry = $query($this->connect,$baseDNGroups,$this->filterGroups,$attributes); if (!ldap_first_entry($this->connect,$entry)) { $c->messages[] = sprintf(translate('Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<'), $this->filterGroups, join(', ', $attributes), $baseDNGroups); } $row = array(); for($i = ldap_first_entry($this->connect,$entry); $i && $arr = ldap_get_attributes($this->connect,$i); $i = ldap_next_entry($this->connect,$i) ) { for ($j=0; $j < $arr['count']; $j++) { $row[$arr[$j]] = count($arr[$arr[$j]])>2?$arr[$arr[$j]]:$arr[$arr[$j]][0]; } $ret[]=$row; } } return $ret; } /** * Returns the result of the LDAP query * * @param string $filter The filter used to search entries * @param array $attributes Attributes to be returned * @param string $passwd password to check * @return array Contains selected attributes from all entries corresponding to the given filter */ function requestUser( $filter, $attributes=NULL, $username, $passwd) { global $c; $entry=NULL; // We get the DN of the USER $query = $this->ldap_query_one; foreach($this->baseDNUsers as $baseDNUsers) { $entry = $query($this->connect, $baseDNUsers, $filter, $attributes); if (ldap_first_entry($this->connect,$entry) ) break; dbg_error_log( "LDAP", "drivers_ldap : Failed to find user with baseDN: %s", $baseDNUsers ); } if ( !ldap_first_entry($this->connect, $entry) ){ dbg_error_log( "ERROR", "drivers_ldap : Unable to find the user with filter %s",$filter ); return false; } else { dbg_error_log( "LDAP", "drivers_ldap : Found a user using filter %s",$filter ); } $dnUser = ldap_get_dn($this->connect, ldap_first_entry($this->connect,$entry)); if ( isset($c->authenticate_hook['config']['i_use_mode_kerberos']) && $c->authenticate_hook['config']['i_use_mode_kerberos'] == "i_know_what_i_am_doing") { dbg_error_log( "LDAP", "drivers_ldap : Skipping password Check for user %s which should be the same as %s",$username , $_SERVER["REMOTE_USER"]); if ($username != $_SERVER["REMOTE_USER"]) { return false; } } else if ( empty($passwd) || preg_match('/[\x00-\x19]/',$passwd) ) { // See http://www.php.net/manual/en/function.ldap-bind.php#73718 for more background dbg_error_log( 'LDAP', 'drivers_ldap : user %s supplied empty or invalid password: login rejected', $dnUser ); return false; } else { if ( !@ldap_bind($this->connect, $dnUser, $passwd) ) { dbg_error_log( "LDAP", "drivers_ldap : Failed to bind to user %s ", $dnUser ); return false; } } dbg_error_log( "LDAP", "drivers_ldap : Bound to user %s using password %s", $dnUser, (isset($c->dbg['password']) && $c->dbg['password'] ? $passwd : 'another delicious password for the debugging monster!') ); $i = ldap_first_entry($this->connect,$entry); $arr = ldap_get_attributes($this->connect,$i); for( $i=0; $i<$arr['count']; $i++ ) { $ret[$arr[$i]]=$arr[$arr[$i]][0]; } return $ret; } } /** * A generic function to create and fetch static objects */ function getStaticLdap() { global $c; // Declare a static variable to hold the object instance static $instance; // If the instance is not there, create one if(!isset($instance)) { $ldapDrivers = new ldapDrivers($c->authenticate_hook['config']); } return $ldapDrivers; } /** * Synchronise a cached user with one from LDAP * @param object $principal A Principal object to be updated (or created) */ function sync_user_from_LDAP( Principal &$principal, $mapping, $ldap_values ) { global $c; dbg_error_log( "LDAP", "Going to sync the user from LDAP" ); $fields_to_set = array(); $updateable_fields = Principal::updateableFields(); foreach( $updateable_fields AS $field ) { if ( isset($mapping[$field]) ) { $tab_part_fields = explode(',',$mapping[$field]); foreach( $tab_part_fields as $part_field ) { if ( isset($ldap_values[$part_field]) ) { if (isset($fields_to_set[$field]) ) { $fields_to_set[$field] .= ' '.$ldap_values[$part_field]; } else { $fields_to_set[$field] = $ldap_values[$part_field]; } } } dbg_error_log( "LDAP", "Setting usr->%s to %s from LDAP field %s", $field, $fields_to_set[$field], $mapping[$field] ); } else if ( isset($c->authenticate_hook['config']['default_value']) && is_array($c->authenticate_hook['config']['default_value']) && isset($c->authenticate_hook['config']['default_value'][$field] ) ) { $fields_to_set[$field] = $c->authenticate_hook['config']['default_value'][$field]; dbg_error_log( "LDAP", "Setting usr->%s to %s from configured defaults", $field, $c->authenticate_hook['config']['default_value'][$field] ); } } if ( $principal->Exists() ) { $principal->Update($fields_to_set); } else { $principal->Create($fields_to_set); CreateHomeCollections($principal->username()); CreateDefaultRelationships($principal->username()); } } /* * explode the multipart mapping */ function array_values_mapping($mapping){ $attributes=array(); foreach ( $mapping as $field ) { $tab_part_field = explode(",",$field); foreach( $tab_part_field as $part_field ) { $attributes[] = $part_field; } } return $attributes; } /** * Check the username / password against the LDAP server */ function LDAP_check($username, $password ){ global $c; $ldapDriver = getStaticLdap(); if ( !$ldapDriver->valid ) { sleep(1); // Sleep very briefly to try and survive intermittent issues $ldapDriver = getStaticLdap(); if ( !$ldapDriver->valid ) { dbg_error_log( "ERROR", "Couldn't contact LDAP server for authentication" ); header( sprintf("HTTP/1.1 %d %s", 503, translate("Authentication server unavailable.")) ); exit(0); } } $mapping = $c->authenticate_hook['config']['mapping_field']; if ( isset($mapping['active']) && !isset($mapping['user_active']) ) { // Backward compatibility: now 'user_active' $mapping['user_active'] = $mapping['active']; unset($mapping['active']); } if ( isset($mapping['updated']) && !isset($mapping['modified']) ) { // Backward compatibility: now 'modified' $mapping['modified'] = $mapping['updated']; unset($mapping['updated']); } $attributes = array_values_mapping($mapping); /** * If the config contains a filter that starts with a ( then believe * them and don't modify it, otherwise wrap the filter. */ $filter_munge = ""; if ( preg_match( '/^\(/', $ldapDriver->filterUsers ) ) { $filter_munge = $ldapDriver->filterUsers; } else if ( isset($ldapDriver->filterUsers) && $ldapDriver->filterUsers != '' ) { $filter_munge = "($ldapDriver->filterUsers)"; } $filter = "(&$filter_munge(".$mapping['username']."=$username))"; $valid = $ldapDriver->requestUser( $filter, $attributes, $username, $password ); // is a valid user or not if ( !$valid ) { dbg_error_log( "LDAP", "user %s is not a valid user",$username ); return false; } $ldap_timestamp = $valid[$mapping['modified']]; /** * This splits the LDAP timestamp apart and assigns values to $Y $m $d $H $M and $S */ foreach($c->authenticate_hook['config']['format_updated'] as $k => $v) $$k = substr($ldap_timestamp,$v[0],$v[1]); $ldap_timestamp = "$Y"."$m"."$d"."$H"."$M"."$S"; $valid[$mapping['modified']] = "$Y-$m-$d $H:$M:$S"; $principal = new Principal('username',$username); if ( $principal->Exists() ) { // should we update it ? $db_timestamp = $principal->modified; $db_timestamp = substr(strtr($db_timestamp, array(':' => '',' '=>'','-'=>'')),0,14); if( $ldap_timestamp <= $db_timestamp ) { return $principal; // no need to update } // we will need to update the user record } else { dbg_error_log( "LDAP", "user %s doesn't exist in local DB, we need to create it",$username ); } $principal->setUsername($username); // The local cached user doesn't exist, or is older, so we create/update their details sync_user_from_LDAP( $principal, $mapping, $valid ); return $principal; } /** * sync LDAP Groups against the DB */ function sync_LDAP_groups(){ global $c; $ldapDriver = getStaticLdap(); if ( ! $ldapDriver->valid ) return; $mapping = $c->authenticate_hook['config']['group_mapping_field']; //$attributes = array('cn','modifyTimestamp','memberUid'); $attributes = array_values_mapping($mapping); $ldap_groups_tmp = $ldapDriver->getAllGroups($attributes); if ( sizeof($ldap_groups_tmp) == 0 ) return; $member_field = $mapping['members']; foreach($ldap_groups_tmp as $key => $ldap_group){ $group_mapping = $ldap_group[$mapping['username']]; $ldap_groups_info[$group_mapping] = $ldap_group; if ( is_array($ldap_groups_info[$group_mapping][$member_field]) ) { unset( $ldap_groups_info[$group_mapping][$member_field]['count'] ); } else { $ldap_groups_info[$group_mapping][$member_field] = array($ldap_groups_info[$group_mapping][$member_field]); } unset($ldap_groups_tmp[$key]); } $db_groups = array(); $db_group_members = array(); $qry = new AwlQuery( "SELECT g.username AS group_name, member.username AS member_name FROM dav_principal g LEFT JOIN group_member ON (g.principal_id=group_member.group_id) LEFT JOIN dav_principal member ON (member.principal_id=group_member.member_id) WHERE g.type_id = 3"); $qry->Exec('sync_LDAP',__LINE__,__FILE__); while($db_group = $qry->Fetch()) { $db_groups[$db_group->group_name] = $db_group->group_name; $db_group_members[$db_group->group_name][] = $db_group->member_name; } $ldap_groups = array_keys($ldap_groups_info); // users only in ldap $groups_to_create = array_diff($ldap_groups,$db_groups); // users only in db $groups_to_deactivate = array_diff($db_groups,$ldap_groups); // users present in ldap and in the db $groups_to_update = array_intersect($db_groups,$ldap_groups); if ( sizeof ( $groups_to_create ) ){ $c->messages[] = sprintf(i18n('- creating groups : %s'),join(', ',$groups_to_create)); $validUserFields = get_fields('usr'); foreach ( $groups_to_create as $k => $group ){ $user = (object) array(); if ( isset($c->authenticate_hook['config']['default_value']) && is_array($c->authenticate_hook['config']['default_value']) ) { foreach ( $c->authenticate_hook['config']['default_value'] as $field => $value ) { if ( isset($validUserFields[$field]) ) { $user->{$field} = $value; dbg_error_log( "LDAP", "Setting usr->%s to %s from configured defaults", $field, $value ); } } } $user->user_no = 0; $ldap_values = $ldap_groups_info[$group]; foreach ( $mapping as $field => $value ) { dbg_error_log( "LDAP", "Considering copying %s", $field ); if ( isset($validUserFields[$field]) ) { $user->{$field} = $ldap_values[$value]; dbg_error_log( "LDAP", "Setting usr->%s to %s from LDAP field %s", $field, $ldap_values[$value], $value ); } } if ($user->fullname=="") { $user->fullname = $group; } if ($user->displayname=="") { $user->displayname = $group; } $user->username = $group; $user->updated = "now"; /** @todo Use the 'updated' timestamp from LDAP for groups too */ $principal = new Principal('username',$group); if ( $principal->Exists() ) { $principal->Update($user); } else { $principal->Create($user); } $qry = new AwlQuery( "UPDATE dav_principal set type_id = 3 WHERE username=:group ",array(':group'=>$group) ); $qry->Exec('sync_LDAP',__LINE__,__FILE__); Principal::cacheDelete('username', $group); $c->messages[] = sprintf(i18n('- adding users %s to group : %s'),join(',',$ldap_groups_info[$group][$mapping['members']]),$group); foreach ( $ldap_groups_info[$group][$mapping['members']] as $member ){ $qry = new AwlQuery( "INSERT INTO group_member SELECT g.principal_id AS group_id,u.principal_id AS member_id FROM dav_principal g, dav_principal u WHERE g.username=:group AND u.username=:member;",array (':group'=>$group,':member'=>$member) ); $qry->Exec('sync_LDAP_groups',__LINE__,__FILE__); Principal::cacheDelete('username', $member); } } } if ( sizeof ( $groups_to_update ) ){ $c->messages[] = sprintf(i18n('- updating groups : %s'),join(', ',$groups_to_update)); foreach ( $groups_to_update as $group ){ $db_members = array_values ( $db_group_members[$group] ); $ldap_members = array_values ( $ldap_groups_info[$group][$member_field] ); $add_users = array_diff ( $ldap_members, $db_members ); if ( sizeof ( $add_users ) ){ $c->messages[] = sprintf(i18n('- adding %s to group : %s'),join(', ', $add_users ), $group); foreach ( $add_users as $member ){ $qry = new AwlQuery( "INSERT INTO group_member SELECT g.principal_id AS group_id,u.principal_id AS member_id FROM dav_principal g, dav_principal u WHERE g.username=:group AND u.username=:member",array (':group'=>$group,':member'=>$member) ); $qry->Exec('sync_LDAP_groups',__LINE__,__FILE__); Principal::cacheDelete('username', $member); } } $remove_users = @array_flip( @array_flip( array_diff( $db_members, $ldap_members ) )); if ( sizeof ( $remove_users ) ){ $c->messages[] = sprintf(i18n('- removing %s from group : %s'),join(', ', $remove_users ), $group); foreach ( $remove_users as $member ){ $qry = new AwlQuery( "DELETE FROM group_member USING dav_principal g,dav_principal m WHERE group_id=g.principal_id AND member_id=m.principal_id AND g.username=:group AND m.username=:member",array (':group'=>$group,':member'=>$member) ); $qry->Exec('sync_LDAP_groups',__LINE__,__FILE__); Principal::cacheDelete('username', $member); } } } } if ( sizeof ( $groups_to_deactivate ) ){ $c->messages[] = sprintf(i18n('- deactivate groups : %s'),join(', ',$groups_to_deactivate)); foreach ( $groups_to_deactivate as $group ){ $qry = new AwlQuery( 'UPDATE dav_principal set active=FALSE WHERE username=:group AND type_id = 3',array(':group'=>$group) ); $qry->Exec('sync_LDAP',__LINE__,__FILE__); Principal::cacheFlush('username=:group AND type_id = 3', array(':group'=>$group) ); } } } /** * sync LDAP against the DB */ function sync_LDAP(){ global $c; $ldapDriver = getStaticLdap(); if ( ! $ldapDriver->valid ) return; $mapping = $c->authenticate_hook['config']['mapping_field']; $attributes = array_values_mapping($mapping); $ldap_users_tmp = $ldapDriver->getAllUsers($attributes); if ( sizeof($ldap_users_tmp) == 0 ) return; foreach($ldap_users_tmp as $key => $ldap_user){ $ldap_users_info[$ldap_user[$mapping['username']]] = $ldap_user; unset($ldap_users_tmp[$key]); } $qry = new AwlQuery( "SELECT username, user_no, modified as updated FROM dav_principal where type_id=1"); $qry->Exec('sync_LDAP',__LINE__,__FILE__); while($db_user = $qry->Fetch()) { $db_users[] = $db_user->username; $db_users_info[$db_user->username] = array('user_no' => $db_user->user_no, 'updated' => $db_user->updated); } // all users from ldap $ldap_users = array_keys($ldap_users_info); // users only in ldap $users_to_create = array_diff($ldap_users,$db_users); // users only in db $users_to_deactivate = array_diff($db_users,$ldap_users); // users present in ldap and in the db $users_to_update = array_intersect($db_users,$ldap_users); // creation of all users; if ( sizeof($users_to_create) ) { $c->messages[] = sprintf(i18n('- creating record for users : %s'),join(', ',$users_to_create)); foreach( $users_to_create as $username ) { $principal = new Principal( 'username', $username ); $valid = $ldap_users_info[$username]; $ldap_timestamp = $valid[$mapping['modified']]; if ( !empty($c->authenticate_hook['config']['format_updated']) ) { /** * This splits the LDAP timestamp apart and assigns values to $Y $m $d $H $M and $S */ foreach($c->authenticate_hook['config']['format_updated'] as $k => $v) $$k = substr($ldap_timestamp,$v[0],$v[1]); $ldap_timestamp = $Y.$m.$d.$H.$M.$S; } else if ( preg_match('{^(\d{8})(\d{6})(Z)?$', $ldap_timestamp, $matches ) ) { $ldap_timestamp = $matches[1].'T'.$matches[2].$matches[3]; } else if ( empty($ldap_timestamp) ) { $ldap_timestamp = date('c'); } $valid[$mapping['modified']] = $ldap_timestamp; sync_user_from_LDAP( $principal, $mapping, $valid ); } } // deactivating all users $params = array(); $i = 0; $paramstring = ''; foreach( $users_to_deactivate AS $v ) { if ( isset($c->do_not_sync_from_ldap) && isset($c->do_not_sync_from_ldap[$v]) ) continue; if ( $i > 0 ) $paramstring .= ','; $paramstring .= ':u'.$i.'::text'; $params[':u'.$i++] = strtolower($v); } if ( count($params) > 0 ) { $c->messages[] = sprintf(i18n('- deactivating users : %s'),join(', ',$users_to_deactivate)); $qry = new AwlQuery( 'UPDATE usr SET active = FALSE WHERE lower(username) IN ('.$paramstring.')', $params); $qry->Exec('sync_LDAP',__LINE__,__FILE__); Principal::cacheFlush('lower(username) IN ('.$paramstring.')', $params); } // updating all users if ( sizeof($users_to_update) ) { foreach ( $users_to_update as $key=> $username ) { $principal = new Principal( 'username', $username ); $valid=$ldap_users_info[$username]; $ldap_timestamp = $valid[$mapping['modified']]; $valid['user_no'] = $db_users_info[$username]['user_no']; $mapping['user_no'] = 'user_no'; /** * This splits the LDAP timestamp apart and assigns values to $Y $m $d $H $M and $S */ foreach($c->authenticate_hook['config']['format_updated'] as $k => $v) { $$k = substr($ldap_timestamp,$v[0],$v[1]); } $ldap_timestamp = $Y.$m.$d.$H.$M.$S; $valid[$mapping['modified']] = "$Y-$m-$d $H:$M:$S"; $db_timestamp = substr(strtr($db_users_info[$username]['updated'], array(':' => '',' '=>'','-'=>'')),0,14); if ( $ldap_timestamp > $db_timestamp ) { sync_user_from_LDAP($principal, $mapping, $valid ); } else { unset($users_to_update[$key]); $users_nothing_done[] = $username; } } if ( sizeof($users_to_update) ) $c->messages[] = sprintf(i18n('- updating user records : %s'),join(', ',$users_to_update)); if ( sizeof($users_nothing_done) ) $c->messages[] = sprintf(i18n('- nothing done on : %s'),join(', ', $users_nothing_done)); } $admins = 0; $qry = new AwlQuery( "SELECT count(*) AS admins FROM usr JOIN role_member USING ( user_no ) JOIN roles USING (role_no) WHERE usr.active=TRUE AND role_name='Admin'"); $qry->Exec('sync_LDAP',__LINE__,__FILE__); while ( $db_user = $qry->Fetch() ) { $admins = $db_user->admins; } if ( $admins == 0 ) { $c->messages[] = sprintf(i18n('Warning: there are no active admin users! You should fix this before logging out. Consider using the $c->do_not_sync_from_ldap configuration setting.')); } } davical-1.1.1/inc/DAVResource.php0000644000000000000000000021376011776300724013427 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once('AwlCache.php'); require_once('AwlQuery.php'); require_once('DAVPrincipal.php'); require_once('DAVTicket.php'); require_once('iCalendar.php'); /** * A class for things to do with a DAV Resource * * @package davical */ class DAVResource { /** * @var The partial URL of the resource within our namespace, which this resource is being retrieved as */ protected $dav_name; /** * @var Boolean: does the resource actually exist yet? */ protected $exists; /** * @var The unique etag associated with the current version of the resource */ protected $unique_tag; /** * @var The actual resource content, if it exists and is not a collection */ protected $resource; /** * @var The parent of the resource, which will always be a collection */ protected $parent; /** * @var The types of the resource, possibly multiple */ protected $resourcetypes; /** * @var The type of the content */ protected $contenttype; /** * @var The canonical name which this resource exists at */ protected $bound_from; /** * @var An object which is the collection record for this resource, or for it's container */ private $collection; /** * @var An object which is the principal for this resource, or would be if it existed. */ private $principal; /** * @var A bit mask representing the current user's privileges towards this DAVResource */ private $privileges; /** * @var True if this resource is a collection of any kind */ private $_is_collection; /** * @var True if this resource is a principal-URL */ private $_is_principal; /** * @var True if this resource is a calendar collection */ private $_is_calendar; /** * @var True if this resource is a binding to another resource */ private $_is_binding; /** * @var True if this resource is a binding to an external resource */ private $_is_external; /** * @var True if this resource is an addressbook collection */ private $_is_addressbook; /** * @var True if this resource is, or is in, a proxy collection */ private $_is_proxy_request; /** * @var An array of the methods we support on this resource. */ private $supported_methods; /** * @var An array of the reports we support on this resource. */ private $supported_reports; /** * @var An array of the dead properties held for this resource */ private $dead_properties; /** * @var An array of the component types we support on this resource. */ private $supported_components; /** * @var An array of DAVTicket objects if any apply to this resource, such as via a bind. */ private $tickets; /** * Constructor * @param mixed $parameters If null, an empty Resourced is created. * If it is an object then it is expected to be a record that was * read elsewhere. */ function __construct( $parameters = null ) { $this->exists = null; $this->bound_from = null; $this->dav_name = null; $this->unique_tag = null; $this->resource = null; $this->collection = null; $this->principal = null; $this->parent = null; $this->resourcetypes = null; $this->contenttype = null; $this->privileges = null; $this->dead_properties = null; $this->supported_methods = null; $this->supported_reports = null; $this->_is_collection = false; $this->_is_principal = false; $this->_is_calendar = false; $this->_is_binding = false; $this->_is_external = false; $this->_is_addressbook = false; $this->_is_proxy_request = false; if ( isset($parameters) && is_object($parameters) ) { $this->FromRow($parameters); } else if ( isset($parameters) && is_array($parameters) ) { if ( isset($parameters['path']) ) { $this->FromPath($parameters['path']); } } else if ( isset($parameters) && is_string($parameters) ) { $this->FromPath($parameters); } } /** * Initialise from a database row * @param object $row The row from the DB. */ function FromRow($row) { global $c; if ( $row == null ) return; $this->exists = true; $this->dav_name = $row->dav_name; $this->bound_from = (isset($row->bound_from)? $row->bound_from : $row->dav_name); $this->_is_collection = preg_match( '{/$}', $this->dav_name ); if ( $this->_is_collection ) { $this->contenttype = 'httpd/unix-directory'; $this->collection = (object) array(); $this->resource_id = $row->collection_id; $this->_is_principal = preg_match( '{^/[^/]+/$}', $this->dav_name ); if ( preg_match( '#^(/principals/[^/]+/[^/]+)/?$#', $this->dav_name, $matches) ) { $this->collection->dav_name = $matches[1].'/'; $this->collection->type = 'principal_link'; $this->_is_principal = true; } } else { $this->resource = (object) array(); if ( isset($row->dav_id) ) $this->resource_id = $row->dav_id; } dbg_error_log( 'DAVResource', ':FromRow: Named "%s" is%s a collection.', $this->dav_name, ($this->_is_collection?'':' not') ); foreach( $row AS $k => $v ) { if ( $this->_is_collection ) $this->collection->{$k} = $v; else $this->resource->{$k} = $v; switch ( $k ) { case 'created': case 'modified': $this->{$k} = $v; break; case 'resourcetypes': if ( $this->_is_collection ) $this->{$k} = $v; break; case 'dav_etag': $this->unique_tag = '"'.$v.'"'; break; } } if ( $this->_is_collection ) { if ( !isset( $this->collection->type ) || $this->collection->type == 'collection' ) { if ( $this->_is_principal ) $this->collection->type = 'principal'; else if ( $row->is_calendar == 't' ) { $this->collection->type = 'calendar'; } else if ( $row->is_addressbook == 't' ) { $this->collection->type = 'addressbook'; } else if ( isset($row->is_proxy) && $row->is_proxy == 't' ) { $this->collection->type = 'proxy'; } else if ( preg_match( '#^((/[^/]+/)\.(in|out)/)[^/]*$#', $this->dav_name, $matches ) ) $this->collection->type = 'schedule-'. $matches[3]. 'box'; else if ( $this->dav_name == '/' ) $this->collection->type = 'root'; else $this->collection->type = 'collection'; } $this->_is_calendar = ($this->collection->is_calendar == 't'); $this->_is_addressbook = ($this->collection->is_addressbook == 't'); $this->_is_proxy_request = ($this->collection->type == 'proxy'); if ( $this->_is_principal && !isset($this->resourcetypes) ) { $this->resourcetypes = ''; } else if ( $this->_is_proxy_request ) { $this->resourcetypes = $this->collection->resourcetypes; } if ( isset($this->collection->dav_displayname) ) $this->collection->displayname = $this->collection->dav_displayname; } else { $this->resourcetypes = ''; if ( isset($this->resource->caldav_data) ) { if ( isset($this->resource->summary) )$this->resource->displayname = $this->resource->summary; if ( strtoupper(substr($this->resource->caldav_data,0,15)) == 'BEGIN:VCALENDAR' ) { $this->contenttype = 'text/calendar'; if ( !$this->HavePrivilegeTo('read') && $this->HavePrivilegeTo('read-free-busy') ) { $vcal = new iCalComponent($this->resource->caldav_data); $confidential = $vcal->CloneConfidential(); $this->resource->caldav_data = $confidential->Render(); $this->resource->displayname = $this->resource->summary = translate('Busy'); $this->resource->description = null; $this->resource->location = null; $this->resource->url = null; } else if ( isset($c->hide_alarm) && $c->hide_alarm && !$this->HavePrivilegeTo('write') ) { $vcal1 = new iCalComponent($this->resource->caldav_data); $comps = $vcal1->GetComponents(); $vcal2 = new iCalComponent(); $vcal2->VCalendar(); foreach( $comps AS $comp ) { $comp->ClearComponents('VALARM'); $vcal2->AddComponent($comp); } $this->resource->displayname = $this->resource->summary = $vcal2->GetPValue('SUMMARY'); $this->resource->caldav_data = $vcal2->Render(); } } else if ( strtoupper(substr($this->resource->caldav_data,0,11)) == 'BEGIN:VCARD' ) { $this->contenttype = 'text/vcard'; } else if ( strtoupper(substr($this->resource->caldav_data,0,11)) == 'BEGIN:VLIST' ) { $this->contenttype = 'text/x-vlist'; } } } } /** * Initialise from a path * @param object $inpath The path to populate the resource data from */ function FromPath($inpath) { global $c; $this->dav_name = DeconstructURL($inpath); $this->FetchCollection(); if ( $this->_is_collection ) { if ( $this->_is_principal || $this->collection->type == 'principal' ) $this->FetchPrincipal(); } else { $this->FetchResource(); } dbg_error_log( 'DAVResource', ':FromPath: Path "%s" is%s a collection%s.', $this->dav_name, ($this->_is_collection?' '.$this->resourcetypes:' not'), ($this->_is_principal?' and a principal':'') ); } private function ReadCollectionFromDatabase() { global $c, $session; $this->collection = (object) array( 'collection_id' => -1, 'type' => 'nonexistent', 'is_calendar' => false, 'is_principal' => false, 'is_addressbook' => false ); $base_sql = 'SELECT collection.*, path_privs(:session_principal::int8, collection.dav_name,:scan_depth::int), '; $base_sql .= 'p.principal_id, p.type_id AS principal_type_id, '; $base_sql .= 'p.displayname AS principal_displayname, p.default_privileges AS principal_default_privileges, '; $base_sql .= 'timezones.vtimezone '; $base_sql .= 'FROM collection LEFT JOIN principal p USING (user_no) '; $base_sql .= 'LEFT JOIN timezones ON (collection.timezone=timezones.tzid) '; $base_sql .= 'WHERE '; $sql = $base_sql .'collection.dav_name = :raw_path '; $params = array( ':raw_path' => $this->dav_name, ':session_principal' => $session->principal_id, ':scan_depth' => $c->permission_scan_depth ); if ( !preg_match( '#/$#', $this->dav_name ) ) { $sql .= ' OR collection.dav_name = :up_to_slash OR collection.dav_name = :plus_slash '; $params[':up_to_slash'] = preg_replace( '#[^/]*$#', '', $this->dav_name); $params[':plus_slash'] = $this->dav_name.'/'; } $sql .= 'ORDER BY LENGTH(collection.dav_name) DESC LIMIT 1'; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec('DAVResource') && $qry->rows() == 1 && ($row = $qry->Fetch()) ) { $this->collection = $row; $this->collection->exists = true; if ( $row->is_calendar == 't' ) $this->collection->type = 'calendar'; else if ( $row->is_addressbook == 't' ) $this->collection->type = 'addressbook'; else if ( preg_match( '#^((/[^/]+/)\.(in|out)/)[^/]*$#', $this->dav_name, $matches ) ) $this->collection->type = 'schedule-'. $matches[3]. 'box'; else $this->collection->type = 'collection'; } else if ( preg_match( '{^( ( / ([^/]+) / ) \.(in|out)/ ) [^/]*$}x', $this->dav_name, $matches ) ) { // The request is for a scheduling inbox or outbox (or something inside one) and we should auto-create it $params = array( ':username' => $matches[3], ':parent_container' => $matches[2], ':dav_name' => $matches[1] ); $params[':boxname'] = ($matches[4] == 'in' ? ' Inbox' : ' Outbox'); $this->collection_type = 'schedule-'. $matches[4]. 'box'; $params[':resourcetypes'] = sprintf('', $this->collection_type ); $sql = <<Exec('DAVResource'); dbg_error_log( 'DAVResource', 'Created new collection as "%s".', trim($params[':boxname']) ); $params = array( ':raw_path' => $this->dav_name, ':session_principal' => $session->principal_id, ':scan_depth' => $c->permission_scan_depth ); $qry = new AwlQuery( $base_sql . ' dav_name = :raw_path', $params ); if ( $qry->Exec('DAVResource') && $qry->rows() == 1 && ($row = $qry->Fetch()) ) { $this->collection = $row; $this->collection->exists = true; $this->collection->type = $this->collection_type; } } else if ( preg_match( '#^(/([^/]+)/calendar-proxy-(read|write))/?[^/]*$#', $this->dav_name, $matches ) ) { $this->collection->type = 'proxy'; $this->_is_proxy_request = true; $this->proxy_type = $matches[3]; $this->collection->dav_name = $this->dav_name; $this->collection->dav_displayname = sprintf( '%s proxy %s', $matches[2], $matches[3] ); $this->collection->exists = true; $this->collection->parent_container = $matches[1] . '/'; } else if ( preg_match( '#^(/[^/]+)/?$#', $this->dav_name, $matches) || preg_match( '#^((/principals/[^/]+/)[^/]+)/?$#', $this->dav_name, $matches) ) { $this->_is_principal = true; $this->FetchPrincipal(); $this->collection->is_principal = true; $this->collection->type = 'principal'; } else if ( $this->dav_name == '/' ) { $this->collection->dav_name = '/'; $this->collection->type = 'root'; $this->collection->exists = true; $this->collection->displayname = $c->system_name; $this->collection->default_privileges = (1 | 16 | 32); $this->collection->parent_container = '/'; } else { $sql = << $this->dav_name, ':session_principal' => $session->principal_id, ':scan_depth' => $c->permission_scan_depth ); if ( !preg_match( '#/$#', $this->dav_name ) ) { $sql .= ' OR dav_binding.dav_name = :up_to_slash OR collection.dav_name = :plus_slash OR dav_binding.dav_name = :plus_slash '; $params[':up_to_slash'] = preg_replace( '#[^/]*$#', '', $this->dav_name); $params[':plus_slash'] = $this->dav_name.'/'; } $sql .= ' ORDER BY LENGTH(dav_binding.dav_name) DESC LIMIT 1'; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec('DAVResource',__LINE__,__FILE__) && $qry->rows() == 1 && ($row = $qry->Fetch()) ) { $this->collection = $row; $this->collection->exists = true; $this->collection->parent_set = $row->parent_container; $this->collection->parent_container = $row->bind_parent_container; $this->collection->bound_from = $row->dav_name; $this->collection->dav_name = $row->bound_to; if ( $row->is_calendar == 't' ) $this->collection->type = 'calendar'; else if ( $row->is_addressbook == 't' ) $this->collection->type = 'addressbook'; else if ( preg_match( '#^((/[^/]+/)\.(in|out)/)[^/]*$#', $this->dav_name, $matches ) ) $this->collection->type = 'schedule-'. $matches[3]. 'box'; else $this->collection->type = 'collection'; if ( strlen($row->external_url) > 8 ) { $this->_is_external = true; if ( $row->external_type == 'calendar' ) $this->collection->type = 'calendar'; else if ( $row->external_type == 'addressbook' ) $this->collection->type = 'addressbook'; else $this->collection->type = 'collection'; } $this->_is_binding = true; $this->bound_from = str_replace( $row->bound_to, $row->dav_name, $this->dav_name); if ( isset($row->access_ticket_id) ) { if ( !isset($this->tickets) ) $this->tickets = array(); $this->tickets[] = new DAVTicket($row->access_ticket_id); } } else { dbg_error_log( 'DAVResource', 'No collection for path "%s".', $this->dav_name ); $this->collection->exists = false; $this->collection->dav_name = preg_replace('{/[^/]*$}', '/', $this->dav_name); } } } /** * Find the collection associated with this resource. */ protected function FetchCollection() { global $session; /** * RFC4918, 8.3: Identifiers for collections SHOULD end in '/' * - also discussed at more length in 5.2 * * So we look for a collection which matches one of the following URLs: * - The exact request. * - If the exact request, doesn't end in '/', then the request URL with a '/' appended * - The request URL truncated to the last '/' * The collection URL for this request is therefore the longest row in the result, so we * can "... ORDER BY LENGTH(dav_name) DESC LIMIT 1" */ dbg_error_log( 'DAVResource', ':FetchCollection: Looking for collection for "%s".', $this->dav_name ); // Try and pull the answer out of a hat $cache = getCacheInstance(); $cache_ns = 'collection-'.preg_replace( '{/[^/]*$}', '/', $this->dav_name); $cache_key = 'dav_resource'.$session->user_no; $this->collection = $cache->get( $cache_ns, $cache_key ); if ( $this->collection === false ) { $this->ReadCollectionFromDatabase(); if ( $this->collection->type != 'principal' ) { $cache_ns = 'collection-'.$this->collection->dav_name; @dbg_error_log( 'Cache', ':FetchCollection: Setting cache ns "%s" key "%s". Type: %s', $cache_ns, $cache_key, $this->collection->type ); $cache->set( $cache_ns, $cache_key, $this->collection ); } @dbg_error_log( 'DAVResource', ':FetchCollection: Found collection named "%s" of type "%s".', $this->collection->dav_name, $this->collection->type ); } else { @dbg_error_log( 'Cache', ':FetchCollection: Got cache ns "%s" key "%s". Type: %s', $cache_ns, $cache_key, $this->collection->type ); if ( preg_match( '#^(/[^/]+)/?$#', $this->dav_name, $matches) || preg_match( '#^((/principals/[^/]+/)[^/]+)/?$#', $this->dav_name, $matches) ) { $this->_is_principal = true; $this->FetchPrincipal(); $this->collection->is_principal = true; $this->collection->type = 'principal'; } @dbg_error_log( 'DAVResource', ':FetchCollection: Read cached collection named "%s" of type "%s".', $this->collection->dav_name, $this->collection->type ); } if ( isset($this->collection->bound_from) ) { $this->_is_binding = true; $this->bound_from = str_replace( $this->collection->bound_to, $this->collection->bound_from, $this->dav_name); if ( isset($this->collection->access_ticket_id) ) { if ( !isset($this->tickets) ) $this->tickets = array(); $this->tickets[] = new DAVTicket($this->collection->access_ticket_id); } } $this->_is_collection = ( $this->_is_principal || $this->collection->dav_name == $this->dav_name || $this->collection->dav_name == $this->dav_name.'/' ); if ( $this->_is_collection ) { $this->dav_name = $this->collection->dav_name; $this->resource_id = $this->collection->collection_id; $this->_is_calendar = ($this->collection->type == 'calendar'); $this->_is_addressbook = ($this->collection->type == 'addressbook'); $this->contenttype = 'httpd/unix-directory'; if ( !isset($this->exists) && isset($this->collection->exists) ) { // If this seems peculiar it's because we only set it to false above... $this->exists = $this->collection->exists; } if ( $this->exists ) { if ( isset($this->collection->dav_etag) ) $this->unique_tag = '"'.$this->collection->dav_etag.'"'; if ( isset($this->collection->created) ) $this->created = $this->collection->created; if ( isset($this->collection->modified) ) $this->modified = $this->collection->modified; if ( isset($this->collection->dav_displayname) ) $this->collection->displayname = $this->collection->dav_displayname; } else { if ( !isset($this->parent) ) $this->GetParentContainer(); $this->user_no = $this->parent->GetProperty('user_no'); } if ( isset($this->collection->resourcetypes) ) $this->resourcetypes = $this->collection->resourcetypes; else { $this->resourcetypes = ''; if ( $this->_is_principal ) $this->resourcetypes .= ''; if ( $this->_is_addressbook ) $this->resourcetypes .= ''; if ( $this->_is_calendar ) $this->resourcetypes .= ''; } } } /** * Find the principal associated with this resource. */ protected function FetchPrincipal() { if ( isset($this->principal) ) return; $this->principal = new DAVPrincipal( array( "path" => $this->bound_from() ) ); if ( $this->_is_principal ) { $this->exists = $this->principal->Exists(); $this->collection->dav_name = $this->dav_name(); $this->collection->type = 'principal'; if ( $this->exists ) { $this->collection = $this->principal->AsCollection(); $this->displayname = $this->principal->GetProperty('displayname'); $this->user_no = $this->principal->user_no(); $this->resource_id = $this->principal->principal_id(); $this->created = $this->principal->created; $this->modified = $this->principal->modified; $this->resourcetypes = $this->principal->resourcetypes; } } } /** * Retrieve the actual resource. */ protected function FetchResource() { global $c, $session; if ( isset($this->exists) ) return; // True or false, we've got what we can already if ( $this->_is_collection ) return; // We have all we're going to read $sql = << $this->bound_from() ); $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec('DAVResource') && $qry->rows() > 0 ) { $this->exists = true; $row = $qry->Fetch(); $this->FromRow($row); } else { $this->exists = false; } } /** * Fetch any dead properties for this URL */ protected function FetchDeadProperties() { if ( isset($this->dead_properties) ) return; $this->dead_properties = array(); if ( !$this->exists || !$this->_is_collection ) return; $qry = new AwlQuery('SELECT property_name, property_value FROM property WHERE dav_name= :dav_name', array(':dav_name' => $this->dav_name) ); if ( $qry->Exec('DAVResource') ) { while ( $property = $qry->Fetch() ) { $this->dead_properties[$property->property_name] = self::BuildDeadPropertyXML($property->property_name,$property->property_value); } } } public static function BuildDeadPropertyXML($property_name, $raw_string) { if ( !preg_match('{^\s*<.*>\s*$}s', $raw_string) ) return $raw_string; $xmlns = null; if ( preg_match( '{^(.*):([^:]+)$}', $property_name, $matches) ) { $xmlns = $matches[1]; $property_name = $matches[2]; } $xml = sprintf('<%s%s>%s', $property_name, (isset($xmlns)?' xmlns="'.$xmlns.'"':''), $raw_string, $property_name); $xml_parser = xml_parser_create_ns('UTF-8'); $xml_tags = array(); xml_parser_set_option ( $xml_parser, XML_OPTION_SKIP_WHITE, 1 ); xml_parser_set_option ( $xml_parser, XML_OPTION_CASE_FOLDING, 0 ); $rc = xml_parse_into_struct( $xml_parser, $xml, $xml_tags ); if ( $rc == false ) { dbg_error_log( 'ERROR', 'XML parsing error: %s at line %d, column %d', xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser), xml_get_current_column_number($xml_parser) ); dbg_error_log( 'ERROR', "Error occurred in:\n%s\n",$xml); return $raw_string; } xml_parser_free($xml_parser); $position = 0; $xmltree = BuildXMLTree( $xml_tags, $position); $content = $xmltree->GetContent(); return $content[0]; } /** * Build permissions for this URL */ protected function FetchPrivileges() { global $session, $request; if ( $this->dav_name == '/' || $this->dav_name == '' || $this->_is_external ) { $this->privileges = (1 | 16 | 32); // read + read-acl + read-current-user-privilege-set dbg_error_log( 'DAVResource', ':FetchPrivileges: Read permissions for user accessing /' ); return; } if ( $session->AllowedTo('Admin') ) { $this->privileges = privilege_to_bits('all'); dbg_error_log( 'DAVResource', ':FetchPrivileges: Full permissions for an administrator.' ); return; } if ( $this->IsPrincipal() ) { if ( !isset($this->principal) ) $this->FetchPrincipal(); $this->privileges = $this->principal->Privileges(); dbg_error_log( 'DAVResource', ':FetchPrivileges: Privileges of "%s" for user accessing principal "%s"', $this->privileges, $this->principal->username() ); return; } if ( ! isset($this->collection) ) $this->FetchCollection(); $this->privileges = 0; if ( !isset($this->collection->path_privs) ) { if ( !isset($this->parent) ) $this->GetParentContainer(); $this->collection->path_privs = $this->parent->Privileges(); $this->collection->user_no = $this->parent->GetProperty('user_no'); $this->collection->principal_id = $this->parent->GetProperty('principal_id'); } $this->privileges = $this->collection->path_privs; if ( is_string($this->privileges) ) $this->privileges = bindec( $this->privileges ); dbg_error_log( 'DAVResource', ':FetchPrivileges: Privileges of "%s" for user "%s" accessing "%s"', decbin($this->privileges), $session->username, $this->dav_name() ); if ( isset($request->ticket) && $request->ticket->MatchesPath($this->bound_from()) ) { $this->privileges |= $request->ticket->privileges(); dbg_error_log( 'DAVResource', ':FetchPrivileges: Applying permissions for ticket "%s" now: %s', $request->ticket->id(), decbin($this->privileges) ); } if ( isset($this->tickets) ) { if ( !isset($this->resource_id) ) $this->FetchResource(); foreach( $this->tickets AS $k => $ticket ) { if ( $ticket->MatchesResource($this->resource_id()) || $ticket->MatchesPath($this->bound_from()) ) { $this->privileges |= $ticket->privileges(); dbg_error_log( 'DAVResource', ':FetchPrivileges: Applying permissions for ticket "%s" now: %s', $ticket->id(), decbin($this->privileges) ); } } } } /** * Get a DAVResource which is the parent to this resource. */ function GetParentContainer() { if ( $this->dav_name == '/' ) return null; if ( !isset($this->parent) ) { if ( $this->_is_collection ) { dbg_error_log( 'DAVResource', 'Retrieving "%s" - parent of "%s" (dav_name: %s)', $this->parent_path(), $this->collection->dav_name, $this->dav_name() ); $this->parent = new DAVResource( $this->parent_path() ); } else { dbg_error_log( 'DAVResource', 'Retrieving "%s" - parent of "%s" (dav_name: %s)', $this->parent_path(), $this->collection->dav_name, $this->dav_name() ); $this->parent = new DAVResource($this->collection->dav_name); } } return $this->parent; } /** * Fetch the parent to this resource. This is deprecated - use GetParentContainer() instead. */ function FetchParentContainer() { deprecated('DAVResource::FetchParentContainer'); return $this->GetParentContainer(); } /** * Return the privileges bits for the current session user to this resource */ function Privileges() { if ( !isset($this->privileges) ) $this->FetchPrivileges(); return $this->privileges; } /** * Does the user have the privileges to do what is requested. * @param $do_what mixed The request privilege name, or array of privilege names, to be checked. * @param $any boolean Whether we accept any of the privileges. The default is true, unless the requested privilege is 'all', when it is false. * @return boolean Whether they do have one of those privileges against this resource. */ function HavePrivilegeTo( $do_what, $any = null ) { if ( !isset($this->privileges) ) $this->FetchPrivileges(); if ( !isset($any) ) $any = ($do_what != 'all'); $test_bits = privilege_to_bits( $do_what ); dbg_error_log( 'DAVResource', 'Testing %s privileges of "%s" (%s) against allowed "%s" => "%s" (%s)', ($any?'any':'exactly'), $do_what, decbin($test_bits), decbin($this->privileges), ($this->privileges & $test_bits), decbin($this->privileges & $test_bits) ); if ( $any ) { return ($this->privileges & $test_bits) > 0; } else { return ($this->privileges & $test_bits) == $test_bits; } } /** * Check if we have the needed privilege or send an error response. If the user does not have the privileges then * the call will not return, and an XML error document will be output. * * @param string $privilege The name of the needed privilege. * @param boolean $any Whether we accept any of the privileges. The default is true, unless the requested privilege is 'all', when it is false. */ function NeedPrivilege( $privilege, $any = null ) { global $request; // Do the test if ( $this->HavePrivilegeTo($privilege, $any) ) return; // They failed, so output the error $request->NeedPrivilege( $privilege, $this->dav_name ); exit(0); // Unecessary, but might clarify things } /** * Returns the array of privilege names converted into XMLElements */ function BuildPrivileges( $privilege_names=null, &$xmldoc=null ) { if ( $privilege_names == null ) { if ( !isset($this->privileges) ) $this->FetchPrivileges(); $privilege_names = bits_to_privilege($this->privileges, ($this->_is_collection ? $this->collection->type : null ) ); } return privileges_to_XML( $privilege_names, $xmldoc); } /** * Returns the array of supported methods */ function FetchSupportedMethods( ) { if ( isset($this->supported_methods) ) return $this->supported_methods; $this->supported_methods = array( 'OPTIONS' => '', 'PROPFIND' => '', 'REPORT' => '', 'DELETE' => '', 'LOCK' => '', 'UNLOCK' => '', 'MOVE' => '' ); if ( $this->IsCollection() ) { /* if ( $this->IsPrincipal() ) { $this->supported_methods['MKCALENDAR'] = ''; $this->supported_methods['MKCOL'] = ''; } */ switch ( $this->collection->type ) { case 'root': case 'email': // We just override the list completely here. $this->supported_methods = array( 'OPTIONS' => '', 'PROPFIND' => '', 'REPORT' => '' ); break; case 'schedule-outbox': $this->supported_methods = array_merge( $this->supported_methods, array( 'POST' => '', 'PROPPATCH' => '', 'MKTICKET' => '', 'DELTICKET' => '' ) ); break; case 'schedule-inbox': case 'calendar': $this->supported_methods['GET'] = ''; $this->supported_methods['PUT'] = ''; $this->supported_methods['HEAD'] = ''; $this->supported_methods['MKTICKET'] = ''; $this->supported_methods['DELTICKET'] = ''; $this->supported_methods['ACL'] = ''; break; case 'collection': $this->supported_methods['MKTICKET'] = ''; $this->supported_methods['DELTICKET'] = ''; $this->supported_methods['BIND'] = ''; $this->supported_methods['ACL'] = ''; case 'principal': $this->supported_methods['GET'] = ''; $this->supported_methods['HEAD'] = ''; $this->supported_methods['MKCOL'] = ''; $this->supported_methods['MKCALENDAR'] = ''; $this->supported_methods['PROPPATCH'] = ''; $this->supported_methods['BIND'] = ''; $this->supported_methods['ACL'] = ''; break; } } else { $this->supported_methods = array_merge( $this->supported_methods, array( 'GET' => '', 'HEAD' => '', 'PUT' => '', 'MKTICKET' => '', 'DELTICKET' => '' ) ); } return $this->supported_methods; } /** * Returns the array of supported methods converted into XMLElements */ function BuildSupportedMethods( ) { if ( !isset($this->supported_methods) ) $this->FetchSupportedMethods(); $methods = array(); foreach( $this->supported_methods AS $k => $v ) { // dbg_error_log( 'DAVResource', ':BuildSupportedMethods: Adding method "%s" which is "%s".', $k, $v ); $methods[] = new XMLElement( 'supported-method', null, array('name' => $k) ); } return $methods; } /** * Returns the array of supported reports */ function FetchSupportedReports( ) { if ( isset($this->supported_reports) ) return $this->supported_reports; $this->supported_reports = array( 'DAV::principal-property-search' => '', 'DAV::principal-search-property-set' => '', 'DAV::expand-property' => '', 'DAV::sync-collection' => '' ); if ( !isset($this->collection) ) $this->FetchCollection(); if ( $this->collection->is_calendar ) { $this->supported_reports = array_merge( $this->supported_reports, array( 'urn:ietf:params:xml:ns:caldav:calendar-query' => '', 'urn:ietf:params:xml:ns:caldav:calendar-multiget' => '', 'urn:ietf:params:xml:ns:caldav:free-busy-query' => '' ) ); } if ( $this->collection->is_addressbook ) { $this->supported_reports = array_merge( $this->supported_reports, array( 'urn:ietf:params:xml:ns:carddav:addressbook-query' => '', 'urn:ietf:params:xml:ns:carddav:addressbook-multiget' => '' ) ); } return $this->supported_reports; } /** * Returns the array of supported reports converted into XMLElements */ function BuildSupportedReports( &$reply ) { if ( !isset($this->supported_reports) ) $this->FetchSupportedReports(); $reports = array(); foreach( $this->supported_reports AS $k => $v ) { dbg_error_log( 'DAVResource', ':BuildSupportedReports: Adding supported report "%s" which is "%s".', $k, $v ); $report = new XMLElement('report'); $reply->NSElement($report, $k ); $reports[] = new XMLElement('supported-report', $report ); } return $reports; } /** * Fetches an array of the access_ticket records applying to this path */ function FetchTickets( ) { global $c; if ( isset($this->access_tickets) ) return; $this->access_tickets = array(); $sql = 'SELECT access_ticket.*, COALESCE( resource.dav_name, collection.dav_name) AS target_dav_name, (access_ticket.expires < current_timestamp) AS expired, dav_principal.dav_name AS principal_dav_name, EXTRACT( \'epoch\' FROM (access_ticket.expires - current_timestamp)) AS seconds, path_privs(access_ticket.dav_owner_id,collection.dav_name,:scan_depth) AS grantor_collection_privileges FROM access_ticket JOIN collection ON (target_collection_id = collection_id) JOIN dav_principal ON (dav_owner_id = principal_id) LEFT JOIN caldav_data resource ON (resource.dav_id = access_ticket.target_resource_id) WHERE target_collection_id = :collection_id '; $params = array(':collection_id' => $this->collection->collection_id, ':scan_depth' => $c->permission_scan_depth); if ( $this->IsCollection() ) { $sql .= 'AND target_resource_id IS NULL'; } else { if ( !isset($this->exists) ) $this->FetchResource(); $sql .= 'AND target_resource_id = :dav_id'; $params[':dav_id'] = $this->resource->dav_id; } if ( isset($this->exists) && !$this->exists ) return; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec('DAVResource',__LINE__,__FILE__) && $qry->rows() ) { while( $ticket = $qry->Fetch() ) { $this->access_tickets[] = $ticket; } } } /** * Returns the array of tickets converted into XMLElements * * If the current user does not have DAV::read-acl privilege on this resource they * will only get to see the tickets where they are the owner, or which they supplied * along with the request. * * @param &XMLDocument $reply A reference to the XMLDocument used to construct the reply * @return XMLTreeFragment A fragment of an XMLDocument to go in the reply */ function BuildTicketinfo( &$reply ) { global $session, $request; if ( !isset($this->access_tickets) ) $this->FetchTickets(); $tickets = array(); $show_all = $this->HavePrivilegeTo('DAV::read-acl'); foreach( $this->access_tickets AS $meh => $trow ) { if ( !$show_all && ( $trow->dav_owner_id == $session->principal_id || $request->ticket->id() == $trow->ticket_id ) ) continue; dbg_error_log( 'DAVResource', ':BuildTicketinfo: Adding access_ticket "%s" which is "%s".', $trow->ticket_id, $trow->privileges ); $ticket = new XMLElement( $reply->Tag( 'ticketinfo', 'http://www.xythos.com/namespaces/StorageServer', 'TKT' ) ); $reply->NSElement($ticket, 'http://www.xythos.com/namespaces/StorageServer:id', $trow->ticket_id ); $reply->NSElement($ticket, 'http://www.xythos.com/namespaces/StorageServer:owner', $reply->href( ConstructURL($trow->principal_dav_name)) ); $reply->NSElement($ticket, 'http://www.xythos.com/namespaces/StorageServer:timeout', (isset($trow->seconds) ? sprintf( 'Seconds-%d', $trow->seconds) : 'infinity') ); $reply->NSElement($ticket, 'http://www.xythos.com/namespaces/StorageServer:visits', 'infinity' ); $privs = array(); foreach( bits_to_privilege(bindec($trow->privileges) & bindec($trow->grantor_collection_privileges) ) AS $k => $v ) { $privs[] = $reply->NewXMLElement($v); } $reply->NSElement($ticket, 'DAV::privilege', $privs ); $tickets[] = $ticket; } return $tickets; } /** * Checks whether the resource is locked, returning any lock token, or false * * @todo This logic does not catch all locking scenarios. For example an infinite * depth request should check the permissions for all collections and resources within * that. At present we only maintain permissions on a per-collection basis though. */ function IsLocked( $depth = 0 ) { if ( !isset($this->_locks_found) ) { $this->_locks_found = array(); /** * Find the locks that might apply and load them into an array */ $sql = 'SELECT * FROM locks WHERE :this_path::text ~ (\'^\'||dav_name||:match_end)::text'; $qry = new AwlQuery($sql, array( ':this_path' => $this->dav_name, ':match_end' => ($depth == DEPTH_INFINITY ? '' : '$') ) ); if ( $qry->Exec('DAVResource',__LINE__,__FILE__) ) { while( $lock_row = $qry->Fetch() ) { $this->_locks_found[$lock_row->opaquelocktoken] = $lock_row; } } else { $this->DoResponse(500,i18n("Database Error")); // Does not return. } } foreach( $this->_locks_found AS $lock_token => $lock_row ) { if ( $lock_row->depth == DEPTH_INFINITY || $lock_row->dav_name == $this->dav_name ) { return $lock_token; } } return false; // Nothing matched } /** * Checks whether this resource is a collection */ function IsCollection() { return $this->_is_collection; } /** * Checks whether this resource is a principal */ function IsPrincipal() { return $this->_is_collection && $this->_is_principal; } /** * Checks whether this resource is a calendar */ function IsCalendar() { return $this->_is_collection && $this->_is_calendar; } /** * Checks whether this resource is a scheduling inbox/outbox collection * @param string $type The type of scheduling collection, 'inbox', 'outbox' or 'any' */ function IsSchedulingCollection( $type = 'any' ) { if ( $this->_is_collection && preg_match( '{schedule-(inbox|outbox)}', $this->collection->type, $matches ) ) { return ($type == 'any' || $type == $matches[1]); } return false; } /** * Checks whether this resource is IN a scheduling inbox/outbox collection * @param string $type The type of scheduling collection, 'inbox', 'outbox' or 'any' */ function IsInSchedulingCollection( $type = 'any' ) { if ( !$this->_is_collection && preg_match( '{schedule-(inbox|outbox)}', $this->collection->type, $matches ) ) { return ($type == 'any' || $type == $matches[1]); } return false; } /** * Checks whether this resource is an addressbook */ function IsAddressbook() { return $this->_is_collection && $this->_is_addressbook; } /** * Checks whether this resource is a bind to another resource */ function IsBinding() { return $this->_is_binding; } /** * Checks whether this resource is a bind to an external resource */ function IsExternal() { return $this->_is_external; } /** * Checks whether this resource actually exists, in the virtual sense, within the hierarchy */ function Exists() { if ( ! isset($this->exists) ) { if ( $this->IsPrincipal() ) { if ( !isset($this->principal) ) $this->FetchPrincipal(); $this->exists = $this->principal->Exists(); } else if ( ! $this->IsCollection() ) { if ( !isset($this->resource) ) $this->FetchResource(); } } // dbg_error_log('DAVResource',' Checking whether "%s" exists. It would appear %s.', $this->dav_name, ($this->exists ? 'so' : 'not') ); return $this->exists; } /** * Checks whether the container for this resource actually exists, in the virtual sense, within the hierarchy */ function ContainerExists() { if ( $this->collection->dav_name != $this->dav_name ) { return $this->collection->exists; } $parent = $this->GetParentContainer(); return $parent->Exists(); } /** * Returns the URL of our resource */ function url() { if ( !isset($this->dav_name) ) { throw Exception("What! How can dav_name not be set?"); } return ConstructURL($this->dav_name); } /** * Returns the dav_name of the resource in our internal namespace */ function dav_name() { if ( isset($this->dav_name) ) return $this->dav_name; return null; } /** * Returns the dav_name of the resource we are bound to, within our internal namespace */ function bound_from() { if ( isset($this->bound_from) ) return $this->bound_from; return $this->dav_name(); } /** * Sets the dav_name of the resource we are bound as */ function set_bind_location( $new_dav_name ) { if ( !isset($this->bound_from) && isset($this->dav_name) ) { $this->bound_from = $this->dav_name; } $this->dav_name = $new_dav_name; return $this->dav_name; } /** * Returns the dav_name of the resource in our internal namespace */ function parent_path() { if ( $this->IsCollection() ) { if ( !isset($this->collection) ) $this->FetchCollection(); if ( !isset($this->collection->parent_container) ) { $this->collection->parent_container = preg_replace( '{[^/]+/$}', '', $this->bound_from()); } return $this->collection->parent_container; } return preg_replace( '{[^/]+$}', '', $this->bound_from()); } /** * Returns the principal-URL for this resource */ function principal_url() { if ( !isset($this->principal) ) $this->FetchPrincipal(); return $this->principal->url(); } /** * Returns the internal user_no for the principal for this resource */ function user_no() { if ( !isset($this->principal) ) $this->FetchPrincipal(); return $this->principal->user_no(); } /** * Returns the internal collection_id for this collection, or the collection containing this resource */ function collection_id() { if ( !isset($this->collection) ) $this->FetchCollection(); return $this->collection->collection_id; } /** * Returns the database row for this resource */ function resource() { if ( !isset($this->resource) ) $this->FetchResource(); return $this->resource; } /** * Returns the unique_tag (ETag or getctag) for this resource */ function unique_tag() { if ( isset($this->unique_tag) ) return $this->unique_tag; if ( $this->IsPrincipal() && !isset($this->principal) ) { $this->FetchPrincipal(); $this->unique_tag = $this->principal->unique_tag(); } else if ( !$this->_is_collection && !isset($this->resource) ) $this->FetchResource(); if ( $this->exists !== true || !isset($this->unique_tag) ) $this->unique_tag = ''; return $this->unique_tag; } /** * Returns the definitive resource_id for this resource - usually a dav_id */ function resource_id() { if ( isset($this->resource_id) ) return $this->resource_id; if ( $this->IsPrincipal() && !isset($this->principal) ) $this->FetchPrincipal(); else if ( !$this->_is_collection && !isset($this->resource) ) $this->FetchResource(); if ( $this->exists !== true || !isset($this->resource_id) ) $this->resource_id = null; return $this->resource_id; } /** * Returns the current sync_token for this collection, or the containing collection */ function sync_token() { if ( $this->IsPrincipal() ) return null; if ( $this->collection_id() == 0 ) return null; if ( !isset($this->sync_token) ) { $sql = 'SELECT new_sync_token( 0, :collection_id) AS sync_token'; $params = array( ':collection_id' => $this->collection_id()); $qry = new AwlQuery($sql, $params ); if ( !$qry->Exec() || !$row = $qry->Fetch() ) { if ( !$qry->QDo('SELECT new_sync_token( 0, :collection_id) AS sync_token', $params) ) throw new Exception('Problem with database query'); $row = $qry->Fetch(); } $this->sync_token = 'data:,'.$row->sync_token; } return $this->sync_token; } /** * Checks whether the target collection is publicly_readable */ function IsPublic() { return ( isset($this->collection->publicly_readable) && $this->collection->publicly_readable == 't' ); } /** * Checks whether the target collection is for public events only */ function IsPublicOnly() { return ( isset($this->collection->publicly_events_only) && $this->collection->publicly_events_only == 't' ); } /** * Return the type of whatever contains this resource, or would if it existed. */ function ContainerType() { if ( $this->IsPrincipal() ) return 'root'; if ( !$this->IsCollection() ) return $this->collection->type; if ( ! isset($this->collection->parent_container) ) return null; if ( isset($this->parent_container_type) ) return $this->parent_container_type; if ( preg_match('#/[^/]+/#', $this->collection->parent_container) ) { $this->parent_container_type = 'principal'; } else { $qry = new AwlQuery('SELECT * FROM collection WHERE dav_name = :parent_name', array( ':parent_name' => $this->collection->parent_container ) ); if ( $qry->Exec('DAVResource') && $qry->rows() > 0 && $parent = $qry->Fetch() ) { if ( $parent->is_calendar == 't' ) $this->parent_container_type = 'calendar'; else if ( $parent->is_addressbook == 't' ) $this->parent_container_type = 'addressbook'; else if ( preg_match( '#^((/[^/]+/)\.(in|out)/)[^/]*$#', $this->dav_name, $matches ) ) $this->parent_container_type = 'schedule-'. $matches[3]. 'box'; else $this->parent_container_type = 'collection'; } else $this->parent_container_type = null; } return $this->parent_container_type; } /** * BuildACE - construct an XMLElement subtree for a DAV::ace */ function BuildACE( &$xmldoc, $privs, $principal ) { $privilege_names = bits_to_privilege($privs, ($this->_is_collection ? $this->collection->type : 'resource')); $privileges = array(); foreach( $privilege_names AS $k ) { $privilege = new XMLElement('privilege'); if ( isset($xmldoc) ) $xmldoc->NSElement($privilege,$k); else $privilege->NewElement($k); $privileges[] = $privilege; } $ace = new XMLElement('ace', array( new XMLElement('principal', $principal), new XMLElement('grant', $privileges ) ) ); return $ace; } /** * Return ACL settings */ function GetACL( &$xmldoc ) { global $c, $session; if ( !isset($this->principal) ) $this->FetchPrincipal(); $default_privs = $this->principal->default_privileges; if ( isset($this->collection->default_privileges) ) $default_privs = $this->collection->default_privileges; $acl = array(); $acl[] = $this->BuildACE($xmldoc, pow(2,25) - 1, new XMLElement('property', new XMLElement('owner')) ); $qry = new AwlQuery('SELECT dav_principal.dav_name, grants.* FROM grants JOIN dav_principal ON (to_principal=principal_id) WHERE by_collection = :collection_id OR by_principal = :principal_id ORDER BY by_collection', array( ':collection_id' => $this->collection->collection_id, ':principal_id' => $this->principal->principal_id() ) ); if ( $qry->Exec('DAVResource') && $qry->rows() > 0 ) { $by_collection = null; while( $grant = $qry->Fetch() ) { if ( !isset($by_collection) ) $by_collection = isset($grant->by_collection); if ( $by_collection && !isset($grant->by_collection) ) break; $acl[] = $this->BuildACE($xmldoc, $grant->privileges, $xmldoc->href(ConstructURL($grant->dav_name)) ); } } $acl[] = $this->BuildACE($xmldoc, $default_privs, new XMLElement('authenticated') ); return $acl; } /** * Return general server-related properties, in plain form */ function GetProperty( $name ) { global $c, $session; // dbg_error_log( 'DAVResource', ':GetProperty: Fetching "%s".', $name ); $value = null; switch( $name ) { case 'collection_id': return $this->collection_id(); break; case 'principal_id': if ( !isset($this->principal) ) $this->FetchPrincipal(); return $this->principal->principal_id(); break; case 'resourcetype': if ( isset($this->resourcetypes) ) { $this->resourcetypes = preg_replace('{^\s*<(.*)/>\s*$}', '$1', $this->resourcetypes); $type_list = preg_split('{(/>\s*<|\n)}', $this->resourcetypes); foreach( $type_list AS $k => $resourcetype ) { if ( preg_match( '{^([^:]+):([^:]+) \s+ xmlns:([^=]+)="([^"]+)" \s* $}x', $resourcetype, $matches ) ) { $type_list[$k] = $matches[4] .':' .$matches[2]; } else if ( preg_match( '{^([^:]+) \s+ xmlns="([^"]+)" \s* $}x', $resourcetype, $matches ) ) { $type_list[$k] = $matches[2] .':' .$matches[1]; } } return $type_list; } case 'resource': if ( !isset($this->resource) ) $this->FetchResource(); return clone($this->resource); break; case 'dav-data': if ( !isset($this->resource) ) $this->FetchResource(); return $this->resource->caldav_data; break; case 'principal': if ( !isset($this->principal) ) $this->FetchPrincipal(); return clone($this->principal); break; default: if ( isset($this->{$name}) ) { if ( ! is_object($this->{$name}) ) return $this->{$name}; return clone($this->{$name}); } if ( $this->_is_principal ) { if ( !isset($this->principal) ) $this->FetchPrincipal(); if ( isset($this->principal->{$name}) ) return $this->principal->{$name}; if ( isset($this->collection->{$name}) ) return $this->collection->{$name}; } else if ( $this->_is_collection ) { if ( isset($this->collection->{$name}) ) return $this->collection->{$name}; if ( isset($this->principal->{$name}) ) return $this->principal->{$name}; } else { if ( !isset($this->resource) ) $this->FetchResource(); if ( isset($this->resource->{$name}) ) return $this->resource->{$name}; if ( !isset($this->principal) ) $this->FetchPrincipal(); if ( isset($this->principal->{$name}) ) return $this->principal->{$name}; if ( isset($this->collection->{$name}) ) return $this->collection->{$name}; } if ( isset($this->{$name}) ) { if ( ! is_object($this->{$name}) ) return $this->{$name}; return clone($this->{$name}); } // dbg_error_log( 'DAVResource', ':GetProperty: Failed to find property "%s" on "%s".', $name, $this->dav_name ); } return $value; } /** * Return an array which is an expansion of the DAV::allprop */ function DAV_AllProperties() { if ( isset($this->dead_properties) ) $this->FetchDeadProperties(); $allprop = array_merge( (isset($this->dead_properties)?$this->dead_properties:array()), (isset($include_properties)?$include_properties:array()), array( 'DAV::getcontenttype', 'DAV::resourcetype', 'DAV::getcontentlength', 'DAV::displayname', 'DAV::getlastmodified', 'DAV::creationdate', 'DAV::getetag', 'DAV::getcontentlanguage', 'DAV::supportedlock', 'DAV::lockdiscovery', 'DAV::owner', 'DAV::principal-URL', 'DAV::current-user-principal', 'urn:ietf:params:xml:ns:carddav:max-resource-size', 'urn:ietf:params:xml:ns:carddav:supported-address-data', 'urn:ietf:params:xml:ns:carddav:addressbook-description', 'urn:ietf:params:xml:ns:carddav:addressbook-home-set' ) ); return $allprop; } /** * Return general server-related properties for this URL */ function ResourceProperty( $tag, $prop, &$reply, &$denied ) { global $c, $session, $request; // dbg_error_log( 'DAVResource', 'Processing "%s" on "%s".', $tag, $this->dav_name ); if ( $reply === null ) $reply = $GLOBALS['reply']; switch( $tag ) { case 'DAV::allprop': $property_list = $this->DAV_AllProperties(); $discarded = array(); foreach( $property_list AS $k => $v ) { $this->ResourceProperty($v, $prop, $reply, $discarded); } break; case 'DAV::href': $prop->NewElement('href', ConstructURL($this->dav_name) ); break; case 'DAV::resource-id': if ( $this->resource_id > 0 ) $reply->DAVElement( $prop, 'resource-id', $reply->href(ConstructURL('/.resources/'.$this->resource_id) ) ); else return false; break; case 'DAV::parent-set': $sql = << $this->bound_from() ) ); $parents = array(); if ( $qry->Exec('DAVResource',__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $row = $qry->Fetch() ) { $parents[$row->parent_container] = true; } } $parents[preg_replace( '{(?<=/)[^/]+/?$}','',$this->bound_from())] = true; $parents[preg_replace( '{(?<=/)[^/]+/?$}','',$this->dav_name())] = true; $parent_set = $reply->DAVElement( $prop, 'parent-set' ); foreach( $parents AS $parent => $v ) { if ( preg_match( '{^(.*)?/([^/]+)/?$}', $parent, $matches ) ) { $reply->DAVElement($parent_set, 'parent', array( new XMLElement( 'href', ConstructURL($matches[1])), new XMLElement( 'segment', $matches[2]) )); } else if ( $parent == '/' ) { $reply->DAVElement($parent_set, 'parent', array( new XMLElement( 'href', '/'), new XMLElement( 'segment', ( ConstructURL('/') == '/caldav.php/' ? 'caldav.php' : '')) )); } } break; case 'DAV::getcontenttype': if ( !isset($this->contenttype) && !$this->_is_collection && !isset($this->resource) ) $this->FetchResource(); $prop->NewElement('getcontenttype', $this->contenttype ); break; case 'DAV::resourcetype': $resourcetypes = $prop->NewElement('resourcetype' ); if ( $this->_is_collection ) { $type_list = $this->GetProperty('resourcetype'); if ( !is_array($type_list) ) return true; // dbg_error_log( 'DAVResource', ':ResourceProperty: "%s" are "%s".', $tag, implode(', ',$type_list) ); foreach( $type_list AS $k => $v ) { if ( $v == '' ) continue; $reply->NSElement( $resourcetypes, $v ); } if ( $this->_is_binding ) { $reply->NSElement( $resourcetypes, 'http://xmlns.davical.org/davical:webdav-binding' ); } } break; case 'DAV::getlastmodified': /** getlastmodified is HTTP Date format: i.e. the Last-Modified header in response to a GET */ $reply->NSElement($prop, $tag, ISODateToHTTPDate($this->GetProperty('modified')) ); break; case 'DAV::creationdate': /** creationdate is ISO8601 format */ $reply->NSElement($prop, $tag, DateToISODate($this->GetProperty('created'), true) ); break; case 'DAV::getcontentlength': if ( $this->_is_collection ) return false; if ( !isset($this->resource) ) $this->FetchResource(); if ( isset($this->resource) ) { $reply->NSElement($prop, $tag, strlen($this->resource->caldav_data) ); } break; case 'DAV::getcontentlanguage': $locale = (isset($c->current_locale) ? $c->current_locale : ''); if ( isset($this->locale) && $this->locale != '' ) $locale = $this->locale; $reply->NSElement($prop, $tag, $locale ); break; case 'DAV::acl-restrictions': $reply->NSElement($prop, $tag, array( new XMLElement('grant-only'), new XMLElement('no-invert') ) ); break; case 'DAV::inherited-acl-set': $inherited_acls = array(); if ( ! $this->_is_collection ) { $inherited_acls[] = $reply->href(ConstructURL($this->collection->dav_name)); } $reply->NSElement($prop, $tag, $inherited_acls ); break; case 'DAV::owner': // The principal-URL of the owner if ( $this->IsExternal() ){ $reply->DAVElement( $prop, 'owner', $reply->href( ConstructURL($this->collection->bound_from )) ); } else { $reply->DAVElement( $prop, 'owner', $reply->href( ConstructURL(DeconstructURL($this->principal_url())) ) ); } break; case 'DAV::add-member': if ( ! $this->_is_collection ) return false; $reply->DAVElement( $prop, 'add-member', $reply->href(ConstructURL(DeconstructURL($this->url())).'?add-member') ); break; // Empty tag responses. case 'DAV::group': case 'DAV::alternate-URI-set': $reply->NSElement($prop, $tag ); break; case 'DAV::getetag': if ( $this->_is_collection ) return false; $reply->NSElement($prop, $tag, $this->unique_tag() ); break; case 'http://calendarserver.org/ns/:getctag': if ( ! $this->_is_collection ) return false; $reply->NSElement($prop, $tag, $this->unique_tag() ); break; case 'DAV::sync-token': if ( ! $this->_is_collection ) return false; $sync_token = $this->sync_token(); if ( empty($sync_token) ) return false; $reply->NSElement($prop, $tag, $sync_token ); break; case 'http://calendarserver.org/ns/:calendar-proxy-read-for': $proxy_type = 'read'; case 'http://calendarserver.org/ns/:calendar-proxy-write-for': if ( isset($c->disable_caldav_proxy) && $c->disable_caldav_proxy ) return false; if ( !isset($proxy_type) ) $proxy_type = 'write'; // ProxyFor is an already constructed URL $reply->CalendarserverElement($prop, 'calendar-proxy-'.$proxy_type.'-for', $reply->href( $this->principal->ProxyFor($proxy_type) ) ); break; case 'DAV::current-user-privilege-set': if ( $this->HavePrivilegeTo('DAV::read-current-user-privilege-set') ) { $reply->NSElement($prop, $tag, $this->BuildPrivileges() ); } else { $denied[] = $tag; } break; case 'urn:ietf:params:xml:ns:caldav:supported-calendar-data': if ( ! $this->IsCalendar() && ! $this->IsSchedulingCollection() ) return false; $reply->NSElement($prop, $tag, 'text/calendar' ); break; case 'urn:ietf:params:xml:ns:caldav:supported-calendar-component-set': if ( ! $this->_is_collection ) return false; if ( $this->IsCalendar() ) { if ( !isset($this->dead_properties) ) $this->FetchDeadProperties(); if ( isset($this->dead_properties[$tag]) ) { $set_of_components = explode('"', $this->dead_properties[$tag]); foreach( $set_of_components AS $k => $v ) { if ( !preg_match('{(VEVENT|VTODO|VJOURNAL|VTIMEZONE|VFREEBUSY|VPOLL|VAVAILABILITY)}', $v) ) { unset( $set_of_components[$k] ); } } } else { $set_of_components = array( 'VEVENT', 'VTODO', 'VJOURNAL', 'VTIMEZONE', 'VFREEBUSY', 'VPOLL', 'VAVAILABILITY' ); } } else if ( $this->IsSchedulingCollection() ) $set_of_components = array( 'VEVENT', 'VTODO', 'VFREEBUSY' ); else return false; $components = array(); foreach( $set_of_components AS $v ) { $components[] = $reply->NewXMLElement( 'comp', '', array('name' => $v), 'urn:ietf:params:xml:ns:caldav'); } $reply->CalDAVElement($prop, 'supported-calendar-component-set', $components ); break; case 'DAV::supported-method-set': $prop->NewElement('supported-method-set', $this->BuildSupportedMethods() ); break; case 'DAV::supported-report-set': $prop->NewElement('supported-report-set', $this->BuildSupportedReports( $reply ) ); break; case 'DAV::supportedlock': $prop->NewElement('supportedlock', new XMLElement( 'lockentry', array( new XMLElement('lockscope', new XMLElement('exclusive')), new XMLElement('locktype', new XMLElement('write')), ) ) ); break; case 'DAV::supported-privilege-set': $prop->NewElement('supported-privilege-set', $request->BuildSupportedPrivileges($reply) ); break; case 'DAV::principal-collection-set': $prop->NewElement( 'principal-collection-set', $reply->href( ConstructURL('/') ) ); break; case 'DAV::current-user-principal': $prop->NewElement('current-user-principal', $reply->href( ConstructURL(DeconstructURL($request->principal->url())) ) ); break; case 'SOME-DENIED-PROPERTY': /** indicating the style for future expansion */ $denied[] = $reply->Tag($tag); break; case 'urn:ietf:params:xml:ns:caldav:calendar-timezone': if ( ! $this->_is_collection ) return false; if ( !isset($this->collection->vtimezone) || $this->collection->vtimezone == '' ) return false; $cal = new iCalComponent(); $cal->VCalendar(); $cal->AddComponent( new iCalComponent($this->collection->vtimezone) ); $reply->NSElement($prop, $tag, $cal->Render() ); break; case 'urn:ietf:params:xml:ns:carddav:address-data': case 'urn:ietf:params:xml:ns:caldav:calendar-data': if ( $this->_is_collection ) return false; if ( !isset($c->sync_resource_data_ok) || $c->sync_resource_data_ok == false ) return false; if ( !isset($this->resource) ) $this->FetchResource(); $reply->NSElement($prop, $tag, $this->resource->caldav_data ); break; case 'urn:ietf:params:xml:ns:carddav:max-resource-size': if ( ! $this->_is_collection || !$this->_is_addressbook ) return false; $reply->NSElement($prop, $tag, 65500 ); break; case 'urn:ietf:params:xml:ns:carddav:supported-address-data': if ( ! $this->_is_collection || !$this->_is_addressbook ) return false; $address_data = $reply->NewXMLElement( 'address-data', false, array( 'content-type' => 'text/vcard', 'version' => '3.0'), 'urn:ietf:params:xml:ns:carddav'); $reply->NSElement($prop, $tag, $address_data ); break; case 'DAV::acl': if ( $this->HavePrivilegeTo('DAV::read-acl') ) { $reply->NSElement($prop, $tag, $this->GetACL( $reply ) ); } else { $denied[] = $tag; } break; case 'http://www.xythos.com/namespaces/StorageServer:ticketdiscovery': case 'DAV::ticketdiscovery': $reply->NSElement($prop,'http://www.xythos.com/namespaces/StorageServer:ticketdiscovery', $this->BuildTicketinfo($reply) ); break; default: $property_value = $this->GetProperty(preg_replace('{^.*:}', '', $tag)); if ( isset($property_value) ) { $reply->NSElement($prop, $tag, $property_value ); } else { if ( !isset($this->dead_properties) ) $this->FetchDeadProperties(); if ( isset($this->dead_properties[$tag]) ) { $reply->NSElement($prop, $tag, $this->dead_properties[$tag] ); } else { // dbg_error_log( 'DAVResource', 'Request for unsupported property "%s" of path "%s".', $tag, $this->dav_name ); return false; } } } return true; } /** * Construct XML propstat fragment for this resource * * @param array of string $properties The requested properties for this resource * * @return string An XML fragment with the requested properties for this resource */ function GetPropStat( $properties, &$reply, $props_only = false ) { global $request; dbg_error_log('DAVResource',':GetPropStat: propstat for href "%s"', $this->dav_name ); $prop = new XMLElement('prop', null, null, 'DAV:'); $denied = array(); $not_found = array(); foreach( $properties AS $k => $tag ) { if ( is_object($tag) ) { dbg_error_log( 'DAVResource', ':GetPropStat: "$properties" should be an array of text. Assuming this object is an XMLElement!.' ); $tag = $tag->GetNSTag(); } $found = $this->ResourceProperty($tag, $prop, $reply, $denied ); if ( !$found ) { if ( !isset($this->principal) ) $this->FetchPrincipal(); $found = $this->principal->PrincipalProperty( $tag, $prop, $reply, $denied ); } if ( ! $found ) { // dbg_error_log( 'DAVResource', 'Request for unsupported property "%s" of resource "%s".', $tag, $this->dav_name ); $not_found[] = $tag; } } if ( $props_only ) return $prop; $status = new XMLElement('status', 'HTTP/1.1 200 OK', null, 'DAV:' ); $elements = array( new XMLElement( 'propstat', array($prop,$status), null, 'DAV:' ) ); if ( count($denied) > 0 ) { $status = new XMLElement('status', 'HTTP/1.1 403 Forbidden', null, 'DAV:' ); $noprop = new XMLElement('prop', null, null, 'DAV:'); foreach( $denied AS $k => $v ) { $reply->NSElement($noprop, $v); } $elements[] = new XMLElement( 'propstat', array( $noprop, $status), null, 'DAV:' ); } if ( !$request->PreferMinimal() && count($not_found) > 0 ) { $status = new XMLElement('status', 'HTTP/1.1 404 Not Found', null, 'DAV:' ); $noprop = new XMLElement('prop', null, null, 'DAV:'); foreach( $not_found AS $k => $v ) { $reply->NSElement($noprop,$v); } $elements[] = new XMLElement( 'propstat', array( $noprop, $status), null, 'DAV:' ); } return $elements; } /** * Render XML for this resource * * @param array $properties The requested properties for this principal * @param reference $reply A reference to the XMLDocument being used for the reply * * @return string An XML fragment with the requested properties for this principal */ function RenderAsXML( $properties, &$reply, $bound_parent_path = null ) { global $session, $c, $request; dbg_error_log('DAVResource',':RenderAsXML: Resource "%s" exists(%d)', $this->dav_name, $this->Exists() ); if ( !$this->Exists() ) return null; $elements = $this->GetPropStat( $properties, $reply ); if ( isset($bound_parent_path) ) { $dav_name = str_replace( $this->parent_path(), $bound_parent_path, $this->dav_name ); } else { $dav_name = $this->dav_name; } array_unshift( $elements, $reply->href(ConstructURL($dav_name))); $response = new XMLElement( 'response', $elements, null, 'DAV:' ); return $response; } } davical-1.1.1/inc/other_translated_strings.php0000644000000000000000000000223711633117640016406 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ dbg_error_log("REPORT", "method handler"); require_once("XMLDocument.php"); require_once('DAVResource.php'); require_once('RRule-v2.php'); if ( ! ini_get('open_basedir') && (isset($c->dbg['ALL']) || (isset($c->dbg['report']) && $c->dbg['report'])) ) { $fh = fopen('/tmp/REPORT.txt','w'); if ( $fh ) { fwrite($fh,$request->raw_post); fclose($fh); } } if ( !isset($request->xml_tags) ) { $request->DoResponse( 406, translate("REPORT body contains no XML data!") ); } $position = 0; $xmltree = BuildXMLTree( $request->xml_tags, $position); if ( !is_object($xmltree) ) { $request->DoResponse( 406, translate("REPORT body is not valid XML data!") ); } $target = new DAVResource($request->path); if ( $xmltree->GetNSTag() != 'DAV::principal-property-search' && $xmltree->GetNSTag() != 'DAV::principal-property-search-set' ) { $target->NeedPrivilege( array('DAV::read', 'urn:ietf:params:xml:ns:caldav:read-free-busy'), true ); // They may have either } require_once("vCalendar.php"); $reportnum = -1; $report = array(); $denied = array(); $unsupported = array(); if ( isset($prop_filter) ) unset($prop_filter); if ( $xmltree->GetNSTag() == 'urn:ietf:params:xml:ns:caldav:free-busy-query' ) { include("caldav-REPORT-freebusy.php"); exit; // Not that the above include should return anyway } $reply = new XMLDocument( array( "DAV:" => "" ) ); switch( $xmltree->GetNSTag() ) { case 'DAV::principal-property-search': include("caldav-REPORT-principal.php"); exit; // Not that it should return anyway. case 'DAV::principal-search-property-set': include("caldav-REPORT-pps-set.php"); exit; // Not that it should return anyway. case 'DAV::sync-collection': if ( $target->IsExternal() ) { require_once("external-fetch.php"); update_external ( $target ); } include("caldav-REPORT-sync-collection.php"); exit; // Not that it should return anyway. case 'DAV::expand-property': if ( $target->IsExternal() ) { require_once("external-fetch.php"); update_external ( $target ); } include("caldav-REPORT-expand-property.php"); exit; // Not that it should return anyway. case 'DAV::principal-match': include("caldav-REPORT-principal-match.php"); exit; // Not that it should return anyway. } /** * Return XML for a single component from the DB * * @param array $properties The properties for this component * @param string $item The DB row data for this component * * @return string An XML document which is the response for the component */ function component_to_xml( $properties, $item ) { global $session, $c, $request, $reply; dbg_error_log("REPORT","Building XML Response for item '%s'", $item->dav_name ); $denied = array(); $unsupported = array(); $caldav_data = $item->caldav_data; $displayname = preg_replace( '{^.*/}', '', $item->dav_name ); $type = 'unknown'; $contenttype = 'text/plain'; switch( $item->caldav_type ) { case 'VJOURNAL': case 'VEVENT': case 'VTODO': $displayname = $item->summary; $type = 'calendar'; $contenttype = 'text/calendar'; break; case 'VCARD': $displayname = $item->fn; $type = 'vcard'; $contenttype = 'text/vcard'; break; } if ( $type == 'calendar' ) { if ( isset($properties['calendar-data']) || isset($properties['displayname']) ) { if ( !$request->AllowedTo('all') && $session->user_no != $item->user_no ) { // the user is not admin / owner of this calendar looking at his calendar and can not admin the other cal if ( $item->class == 'CONFIDENTIAL' || !$request->AllowedTo('read') ) { dbg_error_log("REPORT","Anonymising confidential event for: %s", $item->dav_name ); $vcal = new vCalendar( $caldav_data ); $caldav_data = $vcal->Confidential()->Render(); $displayname = translate('Busy'); } } } if ( isset($c->hide_alarm) && $c->hide_alarm ) { $dav_resource = new DAVResource($item->dav_name); if ( isset($properties['calendar-data']) && !$dav_resource->HavePrivilegeTo('write') ) { dbg_error_log("REPORT","Stripping event alarms for: %s", $item->dav_name ); $vcal = new vCalendar($caldav_data); $vcal->ClearComponents('VALARM'); $caldav_data = $vcal->Render(); } } } $url = ConstructURL($item->dav_name); $prop = new XMLElement("prop"); $need_resource = false; foreach( $properties AS $full_tag => $v ) { $base_tag = preg_replace('{^.*:}', '', $full_tag ); switch( $full_tag ) { case 'DAV::getcontentlength': $contentlength = strlen($caldav_data); $prop->NewElement($base_tag, $contentlength ); break; case 'DAV::getlastmodified': $prop->NewElement($base_tag, ISODateToHTTPDate($item->modified) ); break; case 'urn:ietf:params:xml:ns:caldav:calendar-data': if ( $type == 'calendar' ) $reply->CalDAVElement($prop, $base_tag, $caldav_data ); else $unsupported[] = $base_tag; break; case 'urn:ietf:params:xml:ns:carddav:address-data': if ( $type == 'vcard' ) $reply->CardDAVElement($prop, $base_tag, $caldav_data ); else $unsupported[] = $base_tag; break; case 'DAV::getcontenttype': $prop->NewElement($base_tag, $contenttype ); break; case 'DAV::current-user-principal': $prop->NewElement("current-user-principal", $request->current_user_principal_xml); break; case 'DAV::displayname': $prop->NewElement($base_tag, $displayname ); break; case 'DAV::resourcetype': $prop->NewElement($base_tag); // Just an empty resourcetype for a non-collection. break; case 'DAV::getetag': $prop->NewElement($base_tag, '"'.$item->dav_etag.'"' ); break; case '"current-user-privilege-set"': $prop->NewElement($base_tag, privileges($request->permissions) ); break; default: // It's harder. We need the DAVResource() to get this one. $need_resource = true; } if ( $need_resource ) break; } $href = new XMLElement("href", $url ); if ( $need_resource ) { if ( !isset($dav_resource) ) $dav_resource = new DAVResource($item->dav_name); $elements = $dav_resource->GetPropStat(array_keys($properties), $reply); array_unshift($elements, $href); } else { $elements = array($href); $status = new XMLElement("status", "HTTP/1.1 200 OK" ); $elements[] = new XMLElement( "propstat", array( $prop, $status) ); if ( count($denied) > 0 ) { $status = new XMLElement("status", "HTTP/1.1 403 Forbidden" ); $noprop = new XMLElement("prop"); foreach( $denied AS $k => $v ) { $reply->NSElement($noprop, $v); } $elements[] = new XMLElement( "propstat", array( $noprop, $status) ); } if ( ! $request->PreferMinimal() && count($unsupported) > 0 ) { $status = new XMLElement("status", "HTTP/1.1 404 Not Found" ); $noprop = new XMLElement("prop"); foreach( $unsupported AS $k => $v ) { $reply->NSElement($noprop, $v); } $elements[] = new XMLElement( "propstat", array( $noprop, $status) ); } } $response = new XMLElement( "response", $elements ); return $response; } if ( $target->IsExternal() ) { require_once("external-fetch.php"); update_external ( $target ); } // These reports are always allowed to see the resource_data because they are special $c->sync_resource_data_ok = true; if ( $xmltree->GetNSTag() == "urn:ietf:params:xml:ns:caldav:calendar-query" ) { $calquery = $xmltree->GetPath("/urn:ietf:params:xml:ns:caldav:calendar-query/*"); include("caldav-REPORT-calquery.php"); } elseif ( $xmltree->GetNSTag() == "urn:ietf:params:xml:ns:caldav:calendar-multiget" ) { $mode = 'caldav'; $qry_content = $xmltree->GetContent('urn:ietf:params:xml:ns:caldav:calendar-multiget'); include("caldav-REPORT-multiget.php"); } elseif ( $xmltree->GetNSTag() == "urn:ietf:params:xml:ns:carddav:addressbook-multiget" ) { $mode = 'carddav'; $qry_content = $xmltree->GetContent('urn:ietf:params:xml:ns:carddav:addressbook-multiget'); include("caldav-REPORT-multiget.php"); } elseif ( $xmltree->GetNSTag() == "urn:ietf:params:xml:ns:carddav:addressbook-query" ) { $cardquery = $xmltree->GetPath("/urn:ietf:params:xml:ns:carddav:addressbook-query/*"); include("caldav-REPORT-cardquery.php"); } else { dbg_error_log( 'ERROR', "Request for unsupported report type '%s'.", $xmltree->GetNSTag() ); $request->PreconditionFailed( 403, 'DAV::supported-report', sprintf( '"%s" is not a supported report type', $xmltree->GetNSTag()) ); } davical-1.1.1/inc/DAVPrincipal.php0000644000000000000000000005302511767336605013564 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ require_once('Principal.php'); /** * A class for things to do with a DAV Principal * * @package davical */ class DAVPrincipal extends Principal { /** * @var RFC4791: Identifies the URL(s) of any WebDAV collections that contain * calendar collections owned by the associated principal resource. */ private $calendar_home_set; /** * @var CardDAV: Identifies the URL(s) of any WebDAV collections that contain * addressbook collections owned by the associated principal resource. */ private $addressbook_home_set; /** * @var Obsolete: Identifies the URL(s) of any calendars participating in free/busy */ private $calendar_free_busy_set; /** * @var RFC3744: The principals that are direct members of this group. */ protected $_is_group; /** * @var RFC3744: The principals that are direct members of this group. */ private $group_member_set; /** * @var RFC3744: The groups in which the principal is directly a member. */ private $group_membership; /** * @var caldav-cu-proxy-02: The principals which this one has read permissions on. */ private $read_proxy_for; /** * @var caldav-cu-proxy-02: The principals which this one has read-write prmissions for. */ private $write_proxy_for; /** * @var caldav-cu-proxy-02: The principals which have read permissions on this one. */ private $read_proxy_group; /** * @var caldav-cu-proxy-02: The principals which have write permissions on this one. */ private $write_proxy_group; /** * @var CardDAV: The URL to an addressbook entry for this principal */ private $principal_address; /** * A unique tag which will change if this principal changes * @var string */ private $unique_tag; /** * Constructor * @param mixed $parameters If null, an empty Principal is created. If it * is an integer then that ID is read (if possible). If it is * an array then the Principal matching the supplied elements * is read. If it is an object then it is expected to be a 'usr' * record that was read elsewhere. * * @return boolean Whether we actually read data from the DB to initialise the record. */ function __construct( $parameters = null ) { global $session, $c; $this->exists = null; if ( $parameters == null ) return; if ( is_object($parameters) ) { dbg_error_log( 'principal', 'Principal: record for %s', $parameters->username ); parent::__construct('username',$parameters->username); } else if ( is_int($parameters) ) { dbg_error_log( 'principal', 'Principal: %d', $parameters ); parent::__construct('principal_id',$parameters); } else if ( is_array($parameters) ) { if ( ! isset($parameters['options']['allow_by_email']) ) $parameters['options']['allow_by_email'] = false; if ( isset($parameters['username']) ) { parent::__construct('username',$parameters['username']); } else if ( isset($parameters['user_no']) ) { parent::__construct('user_no',$parameters['user_no']); } else if ( isset($parameters['principal_id']) ) { parent::__construct('principal_id',$parameters['principal_id']); } else if ( isset($parameters['email']) ) { parent::__construct('email',$parameters['email']); } else if ( isset($parameters['path']) ) { parent::__construct('path',$parameters['path']); } else if ( isset($parameters['principal-property-search']) ) { $username = $this->PropertySearch($parameters['principal-property-search']); parent::__construct('username',$username); } } if ( ! $this->exists ) return; $this->InitialiseRecord(); } /** * Initialise the Principal object from a $usr record from the DB. * @param object $usr The usr record from the DB. */ function InitialiseRecord() { global $c; $this->unique_tag = '"'.md5($this->username . $this->modified).'"'; $this->_is_group = (isset($this->type_id) && $this->type_id == 3); $this->principal_address = $this->url . 'principal.vcf'; $this->user_address_set = array( 'mailto:'.$this->email, $this->url, // ConstructURL( '/~'.$this->username.'/', true ), // ConstructURL( '/__uuids__/'.$this->username.'/', true ), ); if ( isset ( $c->notifications_server ) ) { $this->xmpp_uri = 'xmpp:pubsub.'.$c->notifications_server['host'].'?pubsub;node=/davical-'.$this->principal_id; $this->xmpp_server = $c->notifications_server['host']; } if ( $this->_is_group ) { $this->group_member_set = array(); $qry = new AwlQuery('SELECT usr.username FROM group_member JOIN principal ON (principal_id=member_id) JOIN usr USING(user_no) WHERE group_id = :group_id ORDER BY principal.principal_id ', array( ':group_id' => $this->principal_id) ); if ( $qry->Exec('DAVPrincipal') && $qry->rows() > 0 ) { while( $member = $qry->Fetch() ) { $this->group_member_set[] = ConstructURL( '/'. $member->username . '/', true); } } } $this->group_membership = array(); $qry = new AwlQuery('SELECT usr.username FROM group_member JOIN principal ON (principal_id=group_id) JOIN usr USING(user_no) WHERE member_id = :member_id UNION SELECT usr.username FROM group_member LEFT JOIN grants ON (to_principal=group_id) JOIN principal ON (principal_id=by_principal) JOIN usr USING(user_no) WHERE member_id = :member_id and by_principal != member_id ORDER BY 1', array( ':member_id' => $this->principal_id ) ); if ( $qry->Exec('DAVPrincipal') && $qry->rows() > 0 ) { while( $group = $qry->Fetch() ) { $this->group_membership[] = ConstructURL( '/'. $group->username . '/', true); } } $this->read_proxy_group = null; $this->write_proxy_group = null; $this->write_proxy_for = null; $this->read_proxy_for = null; dbg_error_log( 'principal', ' User: %s (%d) URL: %s, By Email: %d', $this->username, $this->user_no, $this->url, $this->by_email ); } /** * Split this out so we do it as infrequently as possible, given the cost. */ function FetchProxyGroups() { global $c; $this->read_proxy_group = array(); $this->write_proxy_group = array(); $this->write_proxy_for = array(); $this->read_proxy_for = array(); if ( isset($c->disable_caldav_proxy) && $c->disable_caldav_proxy ) return; $write_priv = privilege_to_bits(array('write')); // whom are we a proxy for? who is a proxy for us? // (as per Caldav Proxy section 5.1 Paragraph 7 and 5) $sql = 'SELECT principal_id, username, pprivs(:request_principal::int8,principal_id,:scan_depth::int) FROM principal JOIN usr USING(user_no) WHERE principal_id IN (SELECT * from p_has_proxy_access_to(:request_principal,:scan_depth))'; $params = array( ':request_principal' => $this->principal_id, ':scan_depth' => $c->permission_scan_depth ); $qry = new AwlQuery($sql, $params); if ( $qry->Exec('DAVPrincipal') && $qry->rows() > 0 ) { while( $relationship = $qry->Fetch() ) { if ( (bindec($relationship->pprivs) & $write_priv) != 0 ) { $this->write_proxy_for[] = ConstructURL( '/'. $relationship->username . '/', true); $this->group_membership[] = ConstructURL( '/'. $relationship->username . '/calendar-proxy-write/', true); } else { $this->read_proxy_for[] = ConstructURL( '/'. $relationship->username . '/', true); $this->group_membership[] = ConstructURL( '/'. $relationship->username . '/calendar-proxy-read/', true); } } } $sql = 'SELECT principal_id, username, pprivs(:request_principal::int8,principal_id,:scan_depth::int) FROM principal JOIN usr USING(user_no) WHERE principal_id IN (SELECT * from grants_proxy_access_from_p(:request_principal,:scan_depth))'; $qry = new AwlQuery($sql, $params ); // reuse $params assigned for earlier query if ( $qry->Exec('DAVPrincipal') && $qry->rows() > 0 ) { while( $relationship = $qry->Fetch() ) { if ( bindec($relationship->pprivs) & $write_priv ) { $this->write_proxy_group[] = ConstructURL( '/'. $relationship->username . '/', true); } else { $this->read_proxy_group[] = ConstructURL( '/'. $relationship->username . '/', true); } } } // @dbg_error_log( 'principal', 'Read-proxy-for: %s', implode(',',$this->read_proxy_for) ); // @dbg_error_log( 'principal', 'Write-proxy-for: %s', implode(',',$this->write_proxy_for) ); // @dbg_error_log( 'principal', 'Read-proxy-group: %s', implode(',',$this->read_proxy_group) ); // @dbg_error_log( 'principal', 'Write-proxy-group: %s', implode(',',$this->write_proxy_group) ); } /** * Accessor for the read proxy group */ function ReadProxyGroup() { if ( !isset($this->read_proxy_group) ) $this->FetchProxyGroups(); return $this->read_proxy_group; } /** * Accessor for the write proxy group */ function WriteProxyGroup() { if ( !isset($this->write_proxy_group) ) $this->FetchProxyGroups(); return $this->write_proxy_group; } /** * Accessor for read or write proxy * @param string read/write - which sort of proxy list is requested. */ function ProxyFor( $type ) { if ( !isset($this->read_proxy_for) ) $this->FetchProxyGroups(); if ( $type == 'write' ) return $this->write_proxy_for; return $this->read_proxy_for; } /** * Accessor for the group membership - the groups this principal is a member of */ function GroupMembership() { if ( !isset($this->read_proxy_group) ) $this->FetchProxyGroups(); return $this->group_membership; } /** * Accessor for the group member set - the members of this group */ function GroupMemberSet() { if ( ! $this->_is_group ) return null; return $this->group_member_set; } /** * Is this a group principal? * @return boolean Whether this is a group principal */ function IsGroup() { return $this->_is_group; } /** * Return an arbitrary property * @return string The name of the arbitrary property */ function GetProperty( $property_id ) { switch( $property_id ) { case 'DAV::resource-id': if ( $this->exists && $this->principal_id > 0 ) ConstructURL('/.resources/'.$this->principal_id); else return null; break; } if ( isset($this->{$property_id}) ) { if ( ! is_object($this->{$property_id}) ) return $this->{$property_id}; return clone($this->{$property_id}); } return null; } /** * Returns the unique_tag (ETag or getctag) for this resource */ public function unique_tag() { if ( isset($this->unique_tag) ) return $this->unique_tag; if ( $this->exists !== true ) $this->unique_tag = '"-1"'; return $this->unique_tag; } /** * Get the calendar_home_set, as lazily as possible */ function calendar_home_set() { if ( !isset($this->calendar_home_set) ) { $this->calendar_home_set = array(); $qry = new AwlQuery('SELECT DISTINCT parent_container FROM collection WHERE is_calendar AND dav_name ~ :dav_name_start', array( ':dav_name_start' => '^'.$this->dav_name)); if ( $qry->Exec('principal',__LINE__,__FILE__) ) { if ( $qry->rows() > 0 ) { while( $calendar = $qry->Fetch() ) { $this->calendar_home_set[] = ConstructURL($calendar->parent_container, true); } } else { $this->calendar_home_set[] = $this->url; } } } return $this->calendar_home_set; } /** * Get the addressbook_home_set, as lazily as possible */ function addressbook_home_set() { if ( !isset($this->addressbook_home_set) ) { $this->addressbook_home_set = array(); $qry = new AwlQuery('SELECT DISTINCT parent_container FROM collection WHERE is_addressbook AND dav_name ~ :dav_name_start', array( ':dav_name_start' => '^'.$this->dav_name)); if ( $qry->Exec('principal',__LINE__,__FILE__) ) { if ( $qry->rows() > 0 ) { while( $addressbook = $qry->Fetch() ) { $this->addressbook_home_set[] = ConstructURL($addressbook->parent_container, true); } } else { $this->addressbook_home_set[] = $this->url; } } } return $this->addressbook_home_set; } /** * Get the calendar_free_busy_set, as lazily as possible */ function calendar_free_busy_set() { if ( !isset($this->calendar_free_busy_set) ) { /** * calendar-free-busy-set has been dropped from draft 5 of the scheduling extensions for CalDAV * in favour of ??? */ $this->calendar_free_busy_set = array(); $qry = new AwlQuery('SELECT dav_name FROM collection WHERE is_calendar AND (schedule_transp = \'opaque\' OR schedule_transp IS NULL) AND dav_name ~ :dav_name_start ORDER BY user_no, collection_id', array( ':dav_name_start' => '^'.$this->dav_name)); if ( $qry->Exec('principal',__LINE__,__FILE__) ) { while( $calendar = $qry->Fetch() ) { $this->calendar_free_busy_set[] = ConstructURL($calendar->dav_name, true); } } } return $this->calendar_free_busy_set; } /** * Return the privileges bits for the current session user to this resource */ function Privileges() { global $session; if ( !isset($this->privileges) ) $this->privileges = 0; if ( is_string($this->privileges) ) $this->privileges = bindec( $this->privileges ); if ( $this->_is_group ) { if ( isset($session->principal) && in_array($session->principal->url(), $this->GroupMemberSet()) ) { $this->privileges |= privilege_to_bits( array('DAV::read', 'DAV::read-current-user-privilege-set') ); } } return $this->privileges; } /** * Returns a representation of the principal as a collection */ function AsCollection() { $dav_name = (isset($this->original_request_url) ? DeconstructURL($this->original_request_url) : $this->dav_name()); $collection = (object) array( 'collection_id' => ($this->principal_id() ? $this->principal_id() : 0), 'is_calendar' => false, 'is_addressbook' => false, 'is_principal' => true, 'type' => 'principal' . (isset($this->original_request_url) ? '_link' : ''), 'user_no' => ($this->user_no() ? $this->user_no() : 0), 'username' => $this->username(), 'dav_name' => $dav_name, 'parent_container' => '/', 'email' => ($this->email()? $this->email() : ''), 'created' => $this->created, 'updated' => $this->modified, 'dav_etag' => substr($this->unique_tag(),1,-1), 'resourcetypes' => $this->resourcetypes ); $collection->dav_displayname = (isset($this->dav_displayname) ? $this->dav_displayname : (isset($this->fullname) ? $this->fullname : $collection->username)); return $collection; } function PropertySearch( $parameters ) { throw new Exception("Unimplemented!"); } /** * Returns properties which are specific to this principal */ function PrincipalProperty( $tag, $prop, &$reply, &$denied ) { dbg_error_log('principal',': RenderAsXML: Principal Property "%s"', $tag ); switch( $tag ) { case 'DAV::getcontenttype': $reply->DAVElement( $prop, 'getcontenttype', 'httpd/unix-directory' ); break; case 'DAV::resourcetype': $reply->DAVElement( $prop, 'resourcetype', array( new XMLElement('principal'), new XMLElement('collection')) ); break; case 'DAV::displayname': $reply->DAVElement( $prop, 'displayname', $this->fullname ); break; case 'DAV::principal-URL': $reply->DAVElement( $prop, 'principal-URL', $reply->href($this->url()) ); break; case 'DAV::getlastmodified': $reply->DAVElement( $prop, 'getlastmodified', ISODateToHTTPDate($this->modified) ); break; case 'DAV::creationdate': $reply->DAVElement( $prop, 'creationdate', DateToISODate($this->created) ); break; case 'DAV::getcontentlanguage': /** Use the principal's locale by preference, otherwise system default */ $locale = (isset($c->current_locale) ? $c->current_locale : ''); if ( isset($this->locale) && $this->locale != '' ) $locale = $this->locale; $reply->DAVElement( $prop, 'getcontentlanguage', $locale ); break; case 'DAV::group-member-set': if ( ! $this->_is_group ) return false; $reply->DAVElement( $prop, 'group-member-set', $reply->href($this->group_member_set) ); break; case 'DAV::group-membership': $reply->DAVElement( $prop, 'group-membership', $reply->href($this->GroupMembership()) ); break; case 'urn:ietf:params:xml:ns:caldav:schedule-inbox-URL': $reply->CalDAVElement($prop, 'schedule-inbox-URL', $reply->href($this->url('schedule-inbox')) ); break; case 'urn:ietf:params:xml:ns:caldav:schedule-outbox-URL': $reply->CalDAVElement($prop, 'schedule-outbox-URL', $reply->href($this->url('schedule-outbox')) ); break; case 'urn:ietf:params:xml:ns:caldav:schedule-default-calendar-URL': $reply->CalDAVElement($prop, 'schedule-default-calendar-URL', $reply->href($this->url('schedule-default-calendar')) ); break; case 'http://calendarserver.org/ns/:dropbox-home-URL': $reply->CalendarserverElement($prop, 'dropbox-home-URL', $reply->href($this->url('dropbox')) ); break; case 'http://calendarserver.org/ns/:xmpp-server': if ( ! isset( $this->xmpp_uri ) ) return false; $reply->CalendarserverElement($prop, 'xmpp-server', $this->xmpp_server ); break; case 'http://calendarserver.org/ns/:xmpp-uri': if ( ! isset( $this->xmpp_uri ) ) return false; $reply->CalendarserverElement($prop, 'xmpp-uri', $this->xmpp_uri ); break; case 'urn:ietf:params:xml:ns:carddav:addressbook-home-set': $reply->CardDAVElement($prop, $tag, $reply->href( $this->addressbook_home_set() ) ); break; case 'urn:ietf:params:xml:ns:caldav:calendar-home-set': $reply->CalDAVElement($prop, $tag, $reply->href( $this->calendar_home_set() ) ); break; case 'urn:ietf:params:xml:ns:caldav:calendar-free-busy-set': $reply->CalDAVElement( $prop, 'calendar-free-busy-set', $reply->href( $this->calendar_free_busy_set() ) ); break; case 'urn:ietf:params:xml:ns:caldav:calendar-user-address-set': $reply->CalDAVElement($prop, 'calendar-user-address-set', $reply->href($this->user_address_set) ); break; case 'DAV::owner': // After a careful reading of RFC3744 we see that this must be the principal-URL of the owner $reply->DAVElement( $prop, 'owner', $reply->href( $this->url ) ); break; // Empty tag responses. case 'DAV::alternate-URI-set': $reply->DAVElement( $prop, $reply->Tag($tag)); break; case 'SOME-DENIED-PROPERTY': /** @todo indicating the style for future expansion */ $denied[] = $reply->Tag($tag); break; default: return false; break; } return true; } /** * Render XML for a single Principal (user) from the DB * * @param array $properties The requested properties for this principal * @param reference $reply A reference to the XMLDocument being used for the reply * @param boolean $props_only Default false. If true will only return the fragment with the properties, not a full response fragment. * * @return string An XML fragment with the requested properties for this principal */ function RenderAsXML( $properties, &$reply, $props_only = false ) { global $request; dbg_error_log('principal',': RenderAsXML: Principal "%s"', $this->username ); $prop = new XMLElement('prop'); $denied = array(); $not_found = array(); foreach( $properties AS $k => $tag ) { if ( ! $this->PrincipalProperty( $tag, $prop, $reply, $denied ) ) { dbg_error_log( 'principal', 'Request for unsupported property "%s" of principal "%s".', $tag, $this->username ); $not_found[] = $reply->Tag($tag); } } if ( $props_only ) return $prop; $status = new XMLElement('status', 'HTTP/1.1 200 OK' ); $propstat = new XMLElement( 'propstat', array( $prop, $status) ); $href = $reply->href($this->url ); $elements = array($href,$propstat); if ( count($denied) > 0 ) { $status = new XMLElement('status', 'HTTP/1.1 403 Forbidden' ); $noprop = new XMLElement('prop'); foreach( $denied AS $k => $v ) { $noprop->NewElement( $v ); } $elements[] = new XMLElement( 'propstat', array( $noprop, $status) ); } if ( count($not_found) > 0 ) { $status = new XMLElement('status', 'HTTP/1.1 404 Not Found' ); $noprop = new XMLElement('prop'); foreach( $not_found AS $k => $v ) { $noprop->NewElement( $v ); } $elements[] = new XMLElement( 'propstat', array( $noprop, $status) ); } $response = new XMLElement( 'response', $elements ); return $response; } } davical-1.1.1/inc/caldav-REPORT-freebusy.php0000644000000000000000000000161711732445235015365 0ustar GetContent('urn:ietf:params:xml:ns:caldav:free-busy-query'); $fbq_start = $fbq_content[0]->GetAttribute('start'); $fbq_end = $fbq_content[0]->GetAttribute('end'); if ( ! ( isset($fbq_start) || isset($fbq_end) ) ) { $request->DoResponse( 400, 'All valid freebusy requests MUST contain a time-range filter' ); } $range_start = new RepeatRuleDateTime($fbq_start); $range_end = new RepeatRuleDateTime($fbq_end); /** We use the same code for the REPORT, the POST and the freebusy GET... */ $freebusy = get_freebusy( '^' . $request->path . $request->DepthRegexTail(true), $range_start, $range_end ); $result = new iCalComponent(); $result->VCalendar(); $result->AddComponent($freebusy); $request->DoResponse( 200, $result->Render(), 'text/calendar' ); // Won't return from that davical-1.1.1/inc/always.php.in0000644000000000000000000005370111776251623013212 0ustar * @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ if ( preg_match('{/always.php$}', $_SERVER['SCRIPT_NAME'] ) ) header('Location: index.php'); // Ensure the configuration starts out as an empty object. $c = (object) array(); $c->script_start_time = microtime(true); // Ditto for a few other global things unset($session); unset($request); unset($dbconn); unset($_awl_dbconn); unset($include_properties); // An ultra-simple exception handler to catch errors that occur // before we get a more functional exception handler in place... function early_exception_handler($e) { if ( !headers_sent() ) { header("Content-type: text/plain"); header( sprintf("HTTP/1.1 %d %s", 500, getStatusMessage(500)) ); } else { echo "
\n";
    // Too late to set resultcode :-(
  }
  try {
    @ob_flush(); // Seems like it should be better to do the following but is problematic on PHP5.3 at least: while ( ob_get_level() > 0 ) ob_end_flush();
  }
  catch( Exception $ignored ) {}
  echo "Exception [".$e->getCode()."] ".$e->getmessage()."\n";
  echo "At line ", $e->getLine(), " of ", $e->getFile(), "\n";
  echo "================= Stack Trace ===================\n";

  $trace = array_reverse($e->getTrace());
  foreach( $trace AS $k => $v ) {
    printf( "%s[%d] %s%s%s()\n", $v['file'], $v['line'], (isset($v['class'])?$v['class']:''), (isset($v['type'])?$v['type']:''), (isset($v['function'])?$v['function']:'') );
  }
  
}
set_exception_handler('early_exception_handler');

$c->default_timezone = ini_get('date.timezone');
if ( empty($c->default_timezone) ) {
  $c->default_timezone = 'UTC';
  date_default_timezone_set('UTC');
}

// Default some of the configurable values
$c->sysabbr     = 'davical';
$c->admin_email = 'admin@davical.example.com';
$c->system_name = 'DAViCal CalDAV Server';
$c->domain_name = (isset($_SERVER['SERVER_NAME'])?$_SERVER['SERVER_NAME']:$_SERVER['SERVER_ADDR']);
$c->save_time_zone_defs = true;
$c->collections_always_exist = false;
$c->allow_get_email_visibility = false;
$c->permission_scan_depth = 2;
$c->expand_pdo_parameters = true;
$c->home_calendar_name    = 'calendar';
$c->home_addressbook_name = 'addresses';
$c->enable_row_linking = true;
$c->enable_scheduling = false;
$c->http_auth_mode = 'Basic';
// $c->default_locale = array('es_MX', 'es_AR', 'es', 'pt');  // An array of locales to try, or just a single locale
// $c->local_tzid = 'Pacific/Auckland';  // Perhaps we should read from /etc/timezone - I wonder how standard that is?
$c->default_locale = 'en';
$c->locale_path = '../locale';
$c->base_url = preg_replace('#/[^/]+\.php.*$#', '', $_SERVER['SCRIPT_NAME']);
$c->base_directory = preg_replace('#/[^/]*$#', '', $_SERVER['DOCUMENT_ROOT']);
$c->default_privileges = array('read-free-busy', 'schedule-deliver');

$c->enable_auto_schedule = true;

$c->schema_major = $c->schema_minor = $c->schema_patch = 0;

$c->stylesheets = array( $c->base_url.'/davical.css' );
$c->images      = $c->base_url . '/images';

// Add a default for newly created users
$c->template_usr = array( 'active' => true,
                          'locale' => 'en_GB',
                          'date_format_type' => 'E',
                          'email_ok' => date('Y-m-d')
                        );

$c->hide_TODO = true;                      // VTODO only visible to collection owner
$c->readonly_webdav_collections = true;    // WebDAV access is readonly

// Kind of private configuration values
$c->total_query_time = 0;

$c->dbg = array();


// Utilities
if ( isset($skip_errors) ) $skip_errors = true;
if ( ! @include_once('AWLUtilities.php') ) {
  if ( isset($skip_errors) ) $skip_errors = false;
  $try_paths = array(
        '../../awl/inc'
      , '/usr/share/awl/inc'        // Where it ends up on Debian
      , '/usr/share/php/awl/inc'    // Fedora's standard for PHP libraries
      , '/usr/local/share/awl/inc'
  );
  foreach( $try_paths AS $awl_include_path ) {
    if ( @file_exists($awl_include_path.'/AWLUtilities.php') ) {
      set_include_path( $awl_include_path. PATH_SEPARATOR. get_include_path());
      break;
    }
  }
  if ( ! @include_once('AWLUtilities.php') ) {
    echo "Could not find the AWL libraries. Are they installed? Check your include_path in php.ini!\n";
    @ob_flush(); exit(0);
  }
}
if ( isset($skip_errors) ) $skip_errors = false;

// Ensure that ../inc is in our included paths as early as possible
set_include_path( '../inc'. PATH_SEPARATOR. get_include_path());


/** We actually discovered this and worked around it earlier, but we can't log it until the utilties are loaded */
if ( !isset($_SERVER['SERVER_NAME']) ) {
  @dbg_error_log( 'WARN', "Your webserver is not setting the SERVER_NAME parameter. You may need to set \$c->domain_name in your configuration.  Using IP address meanhwhile..." );
}

/**
* Calculate the simplest form of reference to this page, excluding the PATH_INFO following the script name.
*/
$c->protocol_server_port = sprintf( '%s://%s%s',
                 (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'? 'https' : 'http'),
                 $_SERVER['SERVER_NAME'],
                 (
                    ( (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on')
                                        && (!isset($_SERVER['SERVER_PORT']) || $_SERVER['SERVER_PORT'] == 80) )
                           || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'
                           				&& (!isset($_SERVER['SERVER_PORT']) || $_SERVER['SERVER_PORT'] == 443) )
                   ? ''
                   : ':'.$_SERVER['SERVER_PORT']
                 ) );
$c->protocol_server_port_script = $c->protocol_server_port . ($_SERVER['SCRIPT_NAME'] == '/index.php' ? '' : $_SERVER['SCRIPT_NAME']);


/**
* We use @file_exists because things like open_basedir might noisily deny
* access which could break DAViCal completely by causing output to start
* too early.
*/
ob_start( );
if ( @file_exists('/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php') ) {
  include('/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php');
}
else if ( @file_exists('/etc/davical/config.php') ) {
  include('/etc/davical/config.php');
}
else if ( @file_exists('/usr/local/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php') ) {
  include('/usr/local/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php');
}
else if ( @file_exists('/usr/local/etc/davical/config.php') ) {
  include('/usr/local/etc/davical/config.php');
}
else if ( @file_exists('../config/config.php') ) {
  include('../config/config.php');
}
else if ( @file_exists('config/config.php') ) {
  include('config/config.php');
}
else {
  include('davical_configuration_missing.php');
  @ob_flush();  exit(0);
}
$config_warnings = trim(ob_get_contents());
ob_end_clean();

if ( !isset($c->page_title) ) $c->page_title = $c->system_name;

if ( isset($_SERVER['HTTP_X_DAVICAL_TESTCASE']) ) {
  @dbg_error_log( 'LOG', '==========> Test case =%s=', $_SERVER['HTTP_X_DAVICAL_TESTCASE'] );
}
else if ( isset($c->dbg['script_start']) && $c->dbg['script_start'] ) {
  // Only log this if more than a little debugging of some sort is turned on, somewhere
  @dbg_error_log( 'LOG', '==========> method =%s= =%s= =%s= =%s= =%s=',
         $_SERVER['REQUEST_METHOD'], $c->protocol_server_port_script, (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '$_SERVER[PATH_INFO] undefined'), $c->base_url, $c->base_directory );
}

/**
* Now that we have loaded the configuration file we can switch to a
* default site locale.  This may be overridden by each user.
*/
putenv("LANG=". $c->default_locale);
if ( function_exists('awl_set_locale') ) {
  awl_set_locale($c->default_locale);
  init_gettext( 'davical', $c->locale_path );
}

/**
* Work out our version
*
*/
$c->code_version = 0;
$c->want_awl_version = 0.46;
$c->version_string = '0.9.9.4'; // The actual version # is replaced into that during the build /release process
if ( isset($c->version_string) && preg_match( '/(\d+)\.(\d+)\.(\d+)(.*)/', $c->version_string, $matches) ) {
  $c->code_major = $matches[1];
  $c->code_minor = $matches[2];
  $c->code_patch = $matches[3];
  $c->code_version = (($c->code_major * 1000) + $c->code_minor).'.'.$c->code_patch;
  dbg_error_log('caldav', 'Version (%d.%d.%d) == %s', $c->code_major, $c->code_minor, $c->code_patch, $c->code_version);
  @header( sprintf('Server: %d.%d', $c->code_major, $c->code_minor) );
}

/**
* Force the domain name to what was in the configuration file
*/
$_SERVER['SERVER_NAME'] = $c->domain_name;

require_once('AwlQuery.php');

$c->want_dbversion = array(1,2,9);
$c->schema_version = 0;
$qry = new AwlQuery( 'SELECT schema_major, schema_minor, schema_patch FROM awl_db_revision ORDER BY schema_id DESC LIMIT 1;' );
if ( $qry->Exec('always',__LINE__,__FILE__) && $row = $qry->Fetch() ) {
  $c->schema_version = doubleval( sprintf( '%d%03d.%03d', $row->schema_major, $row->schema_minor, $row->schema_patch) );
  $c->wanted_version = doubleval( sprintf( '%d%03d.%03d', $c->want_dbversion[0], $c->want_dbversion[1], $c->want_dbversion[2]) );
  $c->schema_major = $row->schema_major;
  $c->schema_minor = $row->schema_minor;
  $c->schema_patch = $row->schema_patch;
  if ( $c->schema_version < $c->wanted_version ) {
    $c->messages[] = sprintf( 'Database schema needs upgrading. Current: %d.%d.%d, Desired: %d.%d.%d',
             $row->schema_major, $row->schema_minor, $row->schema_patch, $c->want_dbversion[0], $c->want_dbversion[1], $c->want_dbversion[2]);
  }
  if ( isset($_SERVER['HTTP_X_DAVICAL_TESTCASE']) ) $qry->QDo('SET TIMEZONE TO \'Pacific/Auckland\'');
}

require_once('Principal.php');

/**
 * Return the HTTP status code description for a given code. Hopefully
 * this is an efficient way to code this.
 * @return string The text for a give HTTP status code, in english
 */
function getStatusMessage($status) {
  switch( $status ) {
    case 100:  $ans = 'Continue';                             break;
    case 101:  $ans = 'Switching Protocols';                  break;
    case 200:  $ans = 'OK';                                   break;
    case 201:  $ans = 'Created';                              break;
    case 202:  $ans = 'Accepted';                             break;
    case 203:  $ans = 'Non-Authoritative Information';        break;
    case 204:  $ans = 'No Content';                           break;
    case 205:  $ans = 'Reset Content';                        break;
    case 206:  $ans = 'Partial Content';                      break;
    case 207:  $ans = 'Multi-Status';                         break;
    case 300:  $ans = 'Multiple Choices';                     break;
    case 301:  $ans = 'Moved Permanently';                    break;
    case 302:  $ans = 'Found';                                break;
    case 303:  $ans = 'See Other';                            break;
    case 304:  $ans = 'Not Modified';                         break;
    case 305:  $ans = 'Use Proxy';                            break;
    case 307:  $ans = 'Temporary Redirect';                   break;
    case 400:  $ans = 'Bad Request';                          break;
    case 401:  $ans = 'Unauthorized';                         break;
    case 402:  $ans = 'Payment Required';                     break;
    case 403:  $ans = 'Forbidden';                            break;
    case 404:  $ans = 'Not Found';                            break;
    case 405:  $ans = 'Method Not Allowed';                   break;
    case 406:  $ans = 'Not Acceptable';                       break;
    case 407:  $ans = 'Proxy Authentication Required';        break;
    case 408:  $ans = 'Request Timeout';                      break;
    case 409:  $ans = 'Conflict';                             break;
    case 410:  $ans = 'Gone';                                 break;
    case 411:  $ans = 'Length Required';                      break;
    case 412:  $ans = 'Precondition Failed';                  break;
    case 413:  $ans = 'Request Entity Too Large';             break;
    case 414:  $ans = 'Request-URI Too Long';                 break;
    case 415:  $ans = 'Unsupported Media Type';               break;
    case 416:  $ans = 'Requested Range Not Satisfiable';      break;
    case 417:  $ans = 'Expectation Failed';                   break;
    case 422:  $ans = 'Unprocessable Entity';                 break;
    case 423:  $ans = 'Locked';                               break;
    case 424:  $ans = 'Failed Dependency';                    break;
    case 500:  $ans = 'Internal Server Error';                break;
    case 501:  $ans = 'Not Implemented';                      break;
    case 502:  $ans = 'Bad Gateway';                          break;
    case 503:  $ans = 'Service Unavailable';                  break;
    case 504:  $ans = 'Gateway Timeout';                      break;
    case 505:  $ans = 'HTTP Version Not Supported';           break;
    default:   $ans = 'Unknown HTTP Status Code '.$status;
  }
  return $ans;
}


/**
* Construct a URL from the supplied dav_name.  The URL will be urlencoded,
* except for any '/' characters in it.
* @param string $partial_path  The part of the path after the script name
*/
function ConstructURL( $partial_path, $force_script = false ) {
  global $c;

  if ( ! isset($c->_url_script_path) ) {
    $c->protocol_server_port_script = str_replace( 'index.php', 'caldav.php', $c->protocol_server_port_script);
    $c->_url_script_path = (preg_match('#/$#', $c->protocol_server_port_script) ? 'caldav.php' : '');
    $c->_url_script_path = $c->protocol_server_port_script . $c->_url_script_path;
  }

  $url = $c->_url_script_path;
  if ( $force_script ) {
    if ( ! preg_match( '#/caldav\.php$#', $url ) ) $url .= '/caldav.php';
  }
  $url .= str_replace( '%2F', '/', rawurlencode($partial_path));
  $url = preg_replace( '#^(https?://.+)//#', '$1/', $url );  // Ensure we don't double any '/'
  $url = preg_replace('#^https?://[^/]+#', '', $url );       // Remove any protocol + hostname portion

  if ( strstr($url, 'caldav.php/caldav.php') !== false ) {
//    trace_bug('Duplicated caldav.php/ in URL "%s" from partial_path=%s, force_script=%s', $url, $partial_path, ($force_script?'true':'false'));
    $url = str_replace( 'caldav.php/caldav.php', 'caldav.php', $url );  // Ensure we don't double any 'caldav.php/'
  }

  return $url;
}


/**
* Deconstruct a dav_name from the supplied URL.  The dav_name will be urldecoded.
*
* @param string $partial_path  The part of the path after the script name
*/
function DeconstructURL( $url, $force_script = false ) {
  global $c;

  $dav_name = rawurldecode($url);

  /** Allow a path like .../username/calendar.ics to translate into the calendar URL */
  if ( preg_match( '#^(/[^/]+/[^/]+).ics$#', $dav_name, $matches ) ) {
    $dav_name = $matches[1]. '/';
  }

  /** remove any leading protocol/server/port/prefix... */
  if ( !isset($c->deconstruction_base_path) ) $c->deconstruction_base_path = ConstructURL('/');
  if ( preg_match( '%^(.*?)'.str_replace('%', '\\%',$c->deconstruction_base_path).'(.*)$%', $dav_name, $matches ) ) {
    if ( $matches[1] == '' || $matches[1] == $c->protocol_server_port ) {
      $dav_name = $matches[2];
    }
  }

  /** strip doubled slashes */
  if ( strstr($dav_name,'//') ) $dav_name = preg_replace( '#//+#', '/', $dav_name);

  if ( substr($dav_name,0,1) != '/' ) $dav_name = '/'.$dav_name;

  return $dav_name;
}


/**
* Convert a date from ISO format into the sad old HTTP format.
* @param string $isodate The date to convert
*/
function ISODateToHTTPDate( $isodate ) {
  // It is necessary to use English for this, explicitly.  See Debian BTS Bug#661985 for more info.
  $month = gmstrftime('%m', strtotime($isodate));
  switch( intval($month) ) {
  	case 1: $month = 'Jan'; break;
  	case 2: $month = 'Feb'; break;
  	case 3: $month = 'Mar'; break;
  	case 4: $month = 'Apr'; break;
  	case 5: $month = 'May'; break;
  	case 6: $month = 'Jun'; break;
  	case 7: $month = 'Jul'; break;
  	case 8: $month = 'Aug'; break;
  	case 9: $month = 'Sep'; break;
  	case 10: $month = 'Oct'; break;
  	case 11: $month = 'Nov'; break;
  	case 12: $month = 'Dec'; break;
  	default:
  		throw new Exception('Invalid month '.$month);
  }
  // Use strtotime since strptime is not available on Windows platform.
  return( gmstrftime('%a, %d '.$month.' %Y %H:%M:%S GMT', strtotime($isodate)) );
}

/**
* Convert a date into ISO format into the sparkly new ISO format.
* @param string $indate The date to convert
*/
function DateToISODate( $indate, $in_utc=false ) {
  // Use strtotime since strptime is not available on Windows platform.
  if ( $in_utc ) return( gmdate('Ymd\THis\Z', strtotime($indate)) );
  return( date('c', strtotime($indate)) );
}

/**
* Given a privilege string, or an array of privilege strings, return a bit mask
* of the privileges.
* @param mixed $raw_privs The string (or array of strings) of privilege names
* @return integer A bit mask of the privileges.
*/
define("DAVICAL_MAXPRIV", "65535");
define("DAVICAL_ADDRESSBOOK_MAXPRIV", "1023");
function privilege_to_bits( $raw_privs ) {
  $out_priv = 0;

  if ( gettype($raw_privs) == 'string' ) $raw_privs = array( $raw_privs );

  if ( ! is_array($raw_privs) ) $raw_privs = array($raw_privs);

  foreach( $raw_privs AS $priv ) {
    $trim_priv = trim(strtolower(preg_replace( '/^.*:/', '', $priv)));
    switch( $trim_priv ) {
      case 'read'                            : $out_priv |=     1;  break;
      case 'write-properties'                : $out_priv |=     2;  break;
      case 'write-content'                   : $out_priv |=     4;  break;
      case 'unlock'                          : $out_priv |=     8;  break;
      case 'read-acl'                        : $out_priv |=    16;  break;
      case 'read-current-user-privilege-set' : $out_priv |=    32;  break;
      case 'bind'                            : $out_priv |=    64;  break;
      case 'unbind'                          : $out_priv |=   128;  break;
      case 'write-acl'                       : $out_priv |=   256;  break;
      case 'read-free-busy'                  : $out_priv |=   512;  break;
      case 'schedule-deliver-invite'         : $out_priv |=  1024;  break;
      case 'schedule-deliver-reply'          : $out_priv |=  2048;  break;
      case 'schedule-query-freebusy'         : $out_priv |=  4096;  break;
      case 'schedule-send-invite'            : $out_priv |=  8192;  break;
      case 'schedule-send-reply'             : $out_priv |= 16384;  break;
      case 'schedule-send-freebusy'          : $out_priv |= 32768;  break;

      /** Aggregates of Privileges */
      case 'write'                           : $out_priv |=   198;  break; // 2 + 4 + 64 + 128
      case 'schedule-deliver'                : $out_priv |=  7168;  break; // 1024 + 2048 + 4096
      case 'schedule-send'                   : $out_priv |= 57344;  break; // 8192 + 16384 + 32768
      case 'all'                             : $out_priv  = DAVICAL_MAXPRIV;  break;
      case 'fake_privilege_for_input'        : break;
      default:
        dbg_error_log( 'ERROR', 'Cannot convert privilege of "%s" into bits.', $priv );

    }
  }

  // 'all' will include future privileges
  if ( ($out_priv & DAVICAL_MAXPRIV) >= DAVICAL_MAXPRIV ) $out_priv = pow(2,24) - 1;
  return $out_priv;
}


/**
* Given a bit mask of the privileges, will return an array of the
* text values of privileges.
* @param integer $raw_bits A bit mask of the privileges.
* @return mixed The string (or array of strings) of privilege names
*/
function bits_to_privilege( $raw_bits, $resourcetype = 'resource' ) {
  $out_priv = array();

  if ( is_string($raw_bits) ) {
    $raw_bits = bindec($raw_bits);
  }

  if ( ($raw_bits & DAVICAL_MAXPRIV) == DAVICAL_MAXPRIV ) $out_priv[] = 'all';

  if ( ($raw_bits &   1) != 0 ) $out_priv[] = 'DAV::read';
  if ( ($raw_bits &   8) != 0 ) $out_priv[] = 'DAV::unlock';
  if ( ($raw_bits &  16) != 0 ) $out_priv[] = 'DAV::read-acl';
  if ( ($raw_bits &  32) != 0 ) $out_priv[] = 'DAV::read-current-user-privilege-set';
  if ( ($raw_bits & 256) != 0 ) $out_priv[] = 'DAV::write-acl';
  if ( ($resourcetype == 'calendar' || $resourcetype == 'proxy' || $resourcetype == '*') && ($raw_bits & 512) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:read-free-busy';

  if ( ($raw_bits & 198) != 0 ) {
    if ( ($raw_bits & 198) == 198 ) $out_priv[] = 'DAV::write';
    if ( ($raw_bits &   2) != 0 ) $out_priv[] = 'DAV::write-properties';
    if ( ($raw_bits &   4) != 0 ) $out_priv[] = 'DAV::write-content';
    if ( ($raw_bits &  64) != 0 ) $out_priv[] = 'DAV::bind';
    if ( ($raw_bits & 128) != 0 ) $out_priv[] = 'DAV::unbind';
  }

  if ( ($resourcetype == 'schedule-inbox' || $resourcetype == '*') && ($raw_bits & 7168) != 0 ) {
    if ( ($raw_bits & 7168) == 7168 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-deliver';
    if ( ($raw_bits & 1024) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-deliver-invite';
    if ( ($raw_bits & 2048) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-deliver-reply';
    if ( ($raw_bits & 4096) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-query-freebusy';
  }

  if ( ($resourcetype == 'schedule-outbox' || $resourcetype == '*') && ($raw_bits & 57344) != 0 ) {
    if ( ($raw_bits & 57344) == 57344 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-send';
    if ( ($raw_bits &  8192) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-send-invite';
    if ( ($raw_bits & 16384) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-send-reply';
    if ( ($raw_bits & 32768) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-send-freebusy';
  }

//  dbg_error_log( 'DAVResource', ' Privilege bit "%s" is "%s".', $raw_bits, implode(', ', $out_priv) );

  return $out_priv;
}


/**
* Returns the array of privilege names converted into XMLElements
*/
function privileges_to_XML( $privilege_names, &$xmldoc=null ) {
  if ( !isset($xmldoc) && isset($GLOBALS['reply']) ) $xmldoc = $GLOBALS['reply'];
  $privileges = array();
  foreach( $privilege_names AS $k ) {
    $privilege = new XMLElement('privilege');
    if ( isset($xmldoc) )
      $xmldoc->NSElement($privilege,$k);
    else
      $privilege->NewElement($k);
    $privileges[] = $privilege;
  }
  return $privileges;
}

davical-1.1.1/inc/caldav-PROPPATCH.php0000644000000000000000000003461511756041235014072 0ustar  
* @copyright Morphoss Ltd - http://www.morphoss.com/
* @license   http://gnu.org/copyleft/gpl.html GNU GPL v2
*/
dbg_error_log("PROPPATCH", "method handler");

require_once('vCalendar.php');
require_once('DAVResource.php');

$dav_resource = new DAVResource($request->path);
if ( !$dav_resource->HavePrivilegeTo('DAV::write-properties') ) {
  $parent = $dav_resource->GetParentContainer();
  if ( !$dav_resource->IsBinding() || !$parent->HavePrivilegeTo('DAV::write') ) {
    $request->PreconditionFailed(403, 'DAV::write-properties', 'You do not have permission to write properties to that resource' );
  }
}

$position = 0;
$xmltree = BuildXMLTree( $request->xml_tags, $position);

// echo $xmltree->Render();

if ( $xmltree->GetNSTag() != "DAV::propertyupdate" ) {
  $request->PreconditionFailed( 403, 'DAV::propertyupdate', 'XML request did not contain a <propertyupdate> tag' );
}

/**
* Find the properties being set, and the properties being removed
*/
$setprops = $xmltree->GetPath("/DAV::propertyupdate/DAV::set/DAV::prop/*");
$rmprops  = $xmltree->GetPath("/DAV::propertyupdate/DAV::remove/DAV::prop/*");

/**
* We build full status responses for failures.  For success we just record
* it, since the multistatus response only applies to failure.  While it is
* not explicitly stated in RFC2518, from reading between the lines (8.2.1)
* a success will return 200 OK [with an empty response].
*/
$failure   = array();
$success   = array();

$reply = new XMLDocument( array( 'DAV:' => '') );

/**
 * Small utility function to add propstat for one failure
 * @param unknown_type $tag
 * @param unknown_type $status
 * @param unknown_type $description
 * @param unknown_type $error_tag
 */
function add_failure( $type, $tag, $status, $description=null, $error_tag = null) {
  global $failure, $reply;
  $prop = new XMLElement('prop');
  $reply->NSElement($prop, $tag);
  $propstat = array($prop,new XMLElement( 'status', $status ));

  if ( isset($description))
    $propstat[] = new XMLElement( 'responsedescription', $description );
  if ( isset($error_tag) )
    $propstat[] = new XMLElement( 'error', new XMLElement( $error_tag ) );

  $failure[$type.'-'.$tag] = new XMLElement('propstat', $propstat ); 
}


/**
* Not much for it but to process the incoming settings in a big loop, doing
* the special-case stuff as needed and falling through to a default which
* stuffs the property somewhere we will be able to retrieve it from later.
*/
$qry = new AwlQuery();
$qry->Begin();
$setcalendar = count($xmltree->GetPath('/DAV::propertyupdate/DAV::set/DAV::prop/DAV::resourcetype/urn:ietf:params:xml:ns:caldav:calendar'));
foreach( $setprops AS $k => $setting ) {
  $tag = $setting->GetNSTag();
  $content = $setting->RenderContent(0,null,true);

  switch( $tag ) {

    case 'DAV::displayname':
      /**
      * Can't set displayname on resources - only collections or principals
      */
      if ( $dav_resource->IsCollection() || $dav_resource->IsPrincipal() ) {
        if ( $dav_resource->IsBinding() ) {
          $qry->QDo('UPDATE dav_binding SET dav_displayname = :displayname WHERE dav_name = :dav_name',
                                            array( ':displayname' => $content, ':dav_name' => $dav_resource->dav_name()) );
        }
        else if ( $dav_resource->IsPrincipal() ) {
          $qry->QDo('UPDATE dav_principal SET fullname = :displayname, displayname = :displayname, modified = current_timestamp WHERE user_no = :user_no',
                                            array( ':displayname' => $content, ':user_no' => $request->user_no) );
        }
        else {
          $qry->QDo('UPDATE collection SET dav_displayname = :displayname, modified = current_timestamp WHERE dav_name = :dav_name',
                                            array( ':displayname' => $content, ':dav_name' => $dav_resource->dav_name()) );
        }
        $success[$tag] = 1;
      }
      else {
        add_failure('set', $tag, 'HTTP/1.1 403 Forbidden',
             translate("The displayname may only be set on collections, principals or bindings."), 'cannot-modify-protected-property');
      }
      break;

    case 'DAV::resourcetype':
      /**
      * We only allow resourcetype setting on a normal collection, and not on a resource, a principal or a bind.
      * Only collections may be CalDAV calendars or addressbooks, and they may not be both.
      */
      $resourcetypes = $setting->GetPath('DAV::resourcetype/*');
      $setcollection = false;
      $setcalendar = false;
      $setaddressbook = false;
      $setother = false;
      foreach( $resourcetypes AS $xnode ) {
        switch( $xnode->GetNSTag() ) {
          case 'urn:ietf:params:xml:ns:caldav:calendar':      $setcalendar = true;      break;
          case 'urn:ietf:params:xml:ns:carddav:addressbook':  $setaddressbook = true;   break;
          case 'DAV::collection': $setcollection = true; break;
          default:
            $setother = true;
        }
      }
      if ( $dav_resource->IsCollection() && $setcollection && ! $dav_resource->IsPrincipal() && ! $dav_resource->IsBinding()
          && !($setcalendar && $setaddressbook) && !$setother ) {
        $resourcetypes = '';
        if ( $setcalendar ) $resourcetypes .= '';
        else if ( $setaddressbook ) $resourcetypes .= '';
        $qry->QDo('UPDATE collection SET is_calendar = :is_calendar::boolean, is_addressbook = :is_addressbook::boolean,
                     resourcetypes = :resourcetypes WHERE dav_name = :dav_name',
                    array( ':dav_name' => $dav_resource->dav_name(), ':resourcetypes' => $resourcetypes,
                           ':is_calendar' => $setcalendar, ':is_addressbook' => $setaddressbook ) );
        $success[$tag] = 1;
      }
      else if ( $setcalendar && $setaddressbook ) {
        add_failure('set', $tag, 'HTTP/1.1 409 Conflict',
            translate("A collection may not be both a calendar and an addressbook."));
      }
      else if ( $setother ) {
        add_failure('set', $tag, 'HTTP/1.1 403 Forbidden',
             translate("Unsupported resourcetype modification."), 'cannot-modify-protected-property');
      }
      else {
        add_failure('set', $tag, 'HTTP/1.1 403 Forbidden',
             translate("Resources may not be changed to / from collections."), 'cannot-modify-protected-property');
      }
      break;

    case 'urn:ietf:params:xml:ns:caldav:schedule-calendar-transp':
      if ( $dav_resource->IsCollection() && ( $dav_resource->IsCalendar() || $setcalendar ) && !$dav_resource->IsBinding() ) {
        $transparency = $setting->GetPath('urn:ietf:params:xml:ns:caldav:schedule-calendar-transp/*');
        $transparency = preg_replace( '{^.*:}', '', $transparency[0]->GetNSTag());
        $qry->QDo('UPDATE collection SET schedule_transp = :transparency WHERE dav_name = :dav_name',
                    array( ':dav_name' => $dav_resource->dav_name(), ':transparency' => $transparency ) );
        $success[$tag] = 1;
      }
      else {
        add_failure('set', $tag, 'HTTP/1.1 409 Conflict',
              translate("The CalDAV:schedule-calendar-transp property may only be set on calendars."));
      }
      break;

    case 'urn:ietf:params:xml:ns:caldav:calendar-free-busy-set':
      add_failure('set', $tag, 'HTTP/1.1 409 Conflict',
            translate("The calendar-free-busy-set is superseded by the  schedule-calendar-transp property of a calendar collection.") );
      break;

    case 'urn:ietf:params:xml:ns:caldav:calendar-timezone':
      if ( $dav_resource->IsCollection() && $dav_resource->IsCalendar() && ! $dav_resource->IsBinding() ) {
        $tzcomponent = $setting->GetPath('urn:ietf:params:xml:ns:caldav:calendar-timezone');
        $tzstring = $tzcomponent[0]->GetContent();
        $calendar = new vCalendar( $tzstring );
        $timezones = $calendar->GetComponents('VTIMEZONE');
        if ( count($timezones) == 0 ) break;
        $tz = $timezones[0];  // Backward compatibility
        $tzid = $tz->GetPValue('TZID');
        $params = array( ':tzid' => $tzid );
        $qry = new AwlQuery('SELECT 1 FROM timezones WHERE tzid = :tzid', $params );
        if ( $qry->Exec('PUT',__LINE__,__FILE__) && $qry->rows() == 0 ) {
          $params[':olson_name'] = $calendar->GetOlsonName($tz);
          $params[':vtimezone'] = (isset($tz) ? $tz->Render() : null );
          $qry->QDo('INSERT INTO timezones (tzid, olson_name, active, vtimezone) VALUES(:tzid,:olson_name,false,:vtimezone)', $params );
        }
        
        $qry->QDo('UPDATE collection SET timezone = :tzid WHERE dav_name = :dav_name',
                                       array( ':tzid' => $tzid, ':dav_name' => $dav_resource->dav_name()) );
      }
      else {
        add_failure('set', $tag, 'HTTP/1.1 409 Conflict', translate("calendar-timezone property is only valid for a calendar."));
      }
      break;

    /**
    * The following properties are read-only, so they will cause the request to fail
    */
    case 'http://calendarserver.org/ns/:getctag':
    case 'DAV::owner':
    case 'DAV::principal-collection-set':
    case 'urn:ietf:params:xml:ns:caldav:calendar-user-address-set':
    case 'urn:ietf:params:xml:ns:caldav:schedule-inbox-URL':
    case 'urn:ietf:params:xml:ns:caldav:schedule-outbox-URL':
    case 'DAV::getetag':
    case 'DAV::getcontentlength':
    case 'DAV::getcontenttype':
    case 'DAV::getlastmodified':
    case 'DAV::creationdate':
    case 'DAV::lockdiscovery':
    case 'DAV::supportedlock':
      add_failure('set', $tag, 'HTTP/1.1 409 Conflict', translate("Property is read-only"), new XMLElement( 'cannot-modify-protected-property'));
      break;

    /**
    * If we don't have any special processing for the property, we just store it verbatim (which will be an XML fragment).
    */
    default:
      $qry->QDo('SELECT set_dav_property( :dav_name, :user_no::integer, :tag::text, :value::text)',
            array( ':dav_name' => $dav_resource->dav_name(), ':user_no' => $request->user_no, ':tag' => $tag, ':value' => $content) );
      $success[$tag] = 1;
      break;
  }
}

foreach( $rmprops AS $k => $setting ) {
  $tag = $setting->GetNSTag();
  $content = $setting->RenderContent();

  switch( $tag ) {

    case 'DAV::resourcetype':
      add_failure('rm', $tag, 'HTTP/1.1 409 Conflict',
            translate("DAV::resourcetype may only be set to a new value, it may not be removed."), 'cannot-modify-protected-property');
      break;

    case 'urn:ietf:params:xml:ns:caldav:calendar-timezone':
      if ( $dav_resource->IsCollection() && $dav_resource->IsCalendar() && ! $dav_resource->IsBinding() ) {
        $qry->QDo('UPDATE collection SET timezone = NULL WHERE dav_name = :dav_name', array( ':dav_name' => $dav_resource->dav_name()) );
      }
      else {
        add_failure('rm', $tag, 'HTTP/1.1 409 Conflict',
              translate("calendar-timezone property is only valid for a calendar."), 'cannot-modify-protected-property');
      }
      break;

    /**
    * The following properties are read-only, so they will cause the request to fail
    */
    case 'http://calendarserver.org/ns/:getctag':
    case 'DAV::owner':
    case 'DAV::principal-collection-set':
    case 'urn:ietf:params:xml:ns:caldav:CALENDAR-USER-ADDRESS-SET':
    case 'urn:ietf:params:xml:ns:caldav:schedule-inbox-URL':
    case 'urn:ietf:params:xml:ns:caldav:schedule-outbox-URL':
    case 'DAV::getetag':
    case 'DAV::getcontentlength':
    case 'DAV::getcontenttype':
    case 'DAV::getlastmodified':
    case 'DAV::creationdate':
    case 'DAV::displayname':
    case 'DAV::lockdiscovery':
    case 'DAV::supportedlock':
      add_failure('rm', $tag, 'HTTP/1.1 409 Conflict', translate("Property is read-only"));
      dbg_error_log( 'PROPPATCH', ' RMProperty %s is read only and cannot be removed', $tag);
      break;

    /**
    * If we don't have any special processing then we must have to just delete it.  Nonexistence is not failure.
    */
    default:
      $qry->QDo('DELETE FROM property WHERE dav_name=:dav_name AND property_name=:property_name',
                  array( ':dav_name' => $dav_resource->dav_name(), ':property_name' => $tag) );
      $success[$tag] = 1;
      break;
  }
}


/**
* If we have encountered any instances of failure, the whole damn thing fails.
*/
if ( count($failure) > 0 ) {

  $qry->Rollback();
  
  $url = ConstructURL($request->path);
  $multistatus = new XMLElement('multistatus');
  array_unshift($failure,new XMLElement('responsedescription', translate("Some properties were not able to be changed.") ));
  array_unshift($failure,new XMLElement('href', $url));
  $response = $reply->DAVElement($multistatus,'response', $failure);
  
  if ( !empty($success) ) { 
    $prop = new XMLElement('prop');
    foreach( $success AS $tag => $v ) {
      $reply->NSElement($prop, $tag);
    }
    $reply->DAVElement($response, 'propstat', array( $prop, new XMLElement( 'status', 'HTTP/1.1 424 Failed Dependency' )) );
  }  
  $request->DoResponse( 207, $reply->Render($multistatus), 'text/xml; charset="utf-8"' );

}

/**
* Otherwise we will try and do the SQL. This is inside a transaction, so PostgreSQL guarantees the atomicity
*/
if ( $qry->Commit() ) {

  $cache = getCacheInstance();
  $cache_ns = null;
  if ( $dav_resource->IsPrincipal() ) {
    $cache_ns = 'principal-'.$dav_resource->dav_name();
  }
  else if ( $dav_resource->IsCollection() ) {
    // Uncache anything to do with the collection
    $cache_ns = 'collection-'.$dav_resource->dav_name();
  }

  if ( isset($cache_ns) ) $cache->delete( $cache_ns, null );

  if ( $request->PreferMinimal() ) {
    $request->DoResponse(200); // Does not return.
  }

  $url = ConstructURL($request->path);
  $multistatus = new XMLElement('multistatus');
  $reply->DAVElement($multistatus,'href', $url);
  $reply->DAVElement($multistatus,'responsedescription', translate("All requested changes were made.") );

  $prop = new XMLElement('prop');
  foreach( $success AS $tag => $v ) {
    $reply->NSElement($prop, $tag);
  }
  $reply->DAVElement($multistatus, 'propstat', array( $prop, new XMLElement( 'status', 'HTTP/1.1 200 OK' )) );
  
  $url = ConstructURL($request->path);
  array_unshift( $failure, new XMLElement('href', $url ) );
  
  $request->DoResponse( 207, $reply->Render($multistatus), 'text/xml; charset="utf-8"' );
}

/**
* Or it was all crap.
*/
$request->DoResponse( 500 );
exit(0); // unneccessary

davical-1.1.1/htdocs/0000755000000000000000000000000011776303360011275 5ustar  davical-1.1.1/htdocs/caldav.php0000644000000000000000000001330211732217375013241 0ustar  
* @copyright Catalyst .Net Ltd, Morphoss Ltd 
* @license   http://gnu.org/copyleft/gpl.html GNU GPL v2 or later
*/
if ( isset($_SERVER['PATH_INFO']) && preg_match( '{^(/favicon.ico|davical.css|(images|js|css)/.+)$}', $_SERVER['PATH_INFO'], $matches ) ) {
  $filename = $_SERVER['DOCUMENT_ROOT'] . preg_replace('{(\.\.|\\\\)}', '', $matches[1]);
  $fh = @fopen($matches[1],'r');
  if ( ! $fh ) {
    @header( sprintf("HTTP/1.1 %d %s", 404, 'Not found') );
  }
  else {
    fpassthru($fh);
  }
  @ob_flush(); exit(0);
}
require_once('./always.php');

if ( isset($_SERVER['PATH_INFO']) && preg_match( '{^/\.well-known/(.+)$}', $_SERVER['PATH_INFO'], $matches ) ) {
  require ('well-known.php');
  @ob_flush(); exit(0);
}
elseif ( isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'] == '/autodiscover/autodiscover.xml' ) {
  require ('autodiscover-handler.php');
  @ob_flush(); exit(0);
}

function logRequestHeaders() {
  global $c;
  
  /** Log the request headers */
  $lines = apache_request_headers();
  dbg_error_log( "LOG ", "***************** Request Header ****************" );
  dbg_error_log( "LOG ", "%s %s", $_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'] );
  foreach( $lines AS $k => $v ) {
    if ( $k != 'Authorization' || (isset($c->dbg['password']) && $c->dbg['password'] ) ) 
      dbg_error_log( "LOG headers", "-->%s: %s", $k, $v );
    else
      dbg_error_log( "LOG headers", "-->%s: %s", $k, 'Delicious tasty password eaten by debugging monster!' );
  }
  dbg_error_log( "LOG ", "******************** Request ********************" );

  // Log the request in all it's gory detail.
  $lines = preg_split( '#[\r\n]+#', $c->raw_post );
  foreach( $lines AS $v ) {
    dbg_error_log( "LOG request", "-->%s", $v );
  }
  unset($lines);
}

if ( !isset($c->raw_post) ) $c->raw_post = file_get_contents( 'php://input');
if ( (isset($c->dbg['ALL']) && $c->dbg['ALL']) || (isset($c->dbg['request']) && $c->dbg['request']) )
  logRequestHeaders();


require_once('HTTPAuthSession.php');
$session = new HTTPAuthSession();

function send_dav_header() {
  global $c;

  /**
  * access-control is rfc3744, we do most of it, but no way to say that.
  * calendar-schedule is another one we do most of, but the spec is not final yet either.
  */
  if ( isset($c->override_dav_header) ) {
    $dav = $c->override_dav_header;
  }
  else {
    $dav = '1, 2, 3, access-control, calendar-access, calendar-schedule, extended-mkcol, bind, addressbook';
    if ( $c->enable_auto_schedule ) $dav .= ', calendar-auto-schedule';
    if ( !isset($c->disable_caldav_proxy) || $c->disable_caldav_proxy == false) $dav .= ', calendar-proxy';
  }
  $dav = explode( "\n", wordwrap( $dav ) );
  foreach( $dav AS $v ) {
    header( 'DAV: '.trim($v, ', '), false);
  }
}
send_dav_header();  // Avoid polluting global namespace

require_once('CalDAVRequest.php');
$request = new CalDAVRequest();

$allowed = implode( ', ', array_keys($request->supported_methods) );
// header( 'Allow: '.$allowed);

if ( ! ($request->IsPrincipal() || isset($request->collection) || $request->method == 'PUT' || $request->method == 'MKCALENDAR' || $request->method == 'MKCOL' ) ) {
  if ( preg_match( '#^/principals/users(/.*/)$#', $request->path, $matches ) ) {
    // Although this doesn't work with the iPhone, perhaps it will with iCal...
    /** @todo integrate handling this URL into CalDAVRequest.php */
    $redirect_url = ConstructURL('/caldav.php'.$matches[1]);
    dbg_error_log( 'LOG WARNING', 'Redirecting %s for "%s" to "%s"', $request->method, $request->path, $redirect_url );
    header('Location: '.$redirect_url );
    @ob_flush(); exit(0);
  }
}
param_to_global('add_member','.*');
$add_member = isset($add_member);

switch ( $request->method ) {
  case 'OPTIONS':    include_once('caldav-OPTIONS.php');   break;
  case 'REPORT':     include_once('caldav-REPORT.php');    break;
  case 'PROPFIND':   include('caldav-PROPFIND.php');       break;
  case 'GET':        include('caldav-GET.php');            break;
  case 'HEAD':       include('caldav-GET.php');            break;
  case 'PROPPATCH':  include('caldav-PROPPATCH.php');      break;
  case 'POST':
    if ( !$add_member ) {
      include('caldav-POST.php');
      break;
    }
  case 'PUT':
    switch( $request->content_type ) {
      case 'text/calendar':
        include('caldav-PUT-vcalendar.php');
        break;
      case 'text/vcard':
      case 'text/x-vcard':
        include('caldav-PUT-vcard.php');
        break;
      default:
        include('caldav-PUT-default.php');
        break;
    }
    break;
  case 'MKCALENDAR': include('caldav-MKCOL.php');          break;
  case 'MKCOL':      include('caldav-MKCOL.php');          break;
  case 'DELETE':     include('caldav-DELETE.php');         break;
  case 'MOVE':       include('caldav-MOVE.php');           break;
  case 'ACL':        include('caldav-ACL.php');            break;
  case 'LOCK':       include('caldav-LOCK.php');           break;
  case 'UNLOCK':     include('caldav-LOCK.php');           break;
  case 'MKTICKET':   include('caldav-MKTICKET.php');       break;
  case 'DELTICKET':  include('caldav-DELTICKET.php');      break;
  case 'BIND':       include('caldav-BIND.php');           break;

  case 'TESTRRULE':  include('test-RRULE-v2.php');         break;

  default:
    dbg_error_log( 'caldav', 'Unhandled request method >>%s<<', $request->method );
    dbg_log_array( 'caldav', '_SERVER', $_SERVER, true );
    dbg_error_log( 'caldav', 'RAW: %s', str_replace("\n", '',str_replace("\r", '', $request->raw_post)) );
}

$request->DoResponse( 500, translate('The application program does not understand that request.') );

davical-1.1.1/htdocs/always.php0000644000000000000000000005370211776252161013317 0ustar  
* @copyright Catalyst .Net Ltd, Morphoss Ltd 
* @license   http://gnu.org/copyleft/gpl.html GNU GPL v2 or later
*/

if ( preg_match('{/always.php$}', $_SERVER['SCRIPT_NAME'] ) ) header('Location: index.php');

// Ensure the configuration starts out as an empty object.
$c = (object) array();
$c->script_start_time = microtime(true);

// Ditto for a few other global things
unset($session); unset($request); unset($dbconn); unset($_awl_dbconn); unset($include_properties);

// An ultra-simple exception handler to catch errors that occur
// before we get a more functional exception handler in place...
function early_exception_handler($e) {
  if ( !headers_sent() ) {
    header("Content-type: text/plain");
    header( sprintf("HTTP/1.1 %d %s", 500, getStatusMessage(500)) );
  }
  else {
    echo "
\n";
    // Too late to set resultcode :-(
  }
  try {
    @ob_flush(); // Seems like it should be better to do the following but is problematic on PHP5.3 at least: while ( ob_get_level() > 0 ) ob_end_flush();
  }
  catch( Exception $ignored ) {}
  echo "Exception [".$e->getCode()."] ".$e->getmessage()."\n";
  echo "At line ", $e->getLine(), " of ", $e->getFile(), "\n";
  echo "================= Stack Trace ===================\n";

  $trace = array_reverse($e->getTrace());
  foreach( $trace AS $k => $v ) {
    printf( "%s[%d] %s%s%s()\n", $v['file'], $v['line'], (isset($v['class'])?$v['class']:''), (isset($v['type'])?$v['type']:''), (isset($v['function'])?$v['function']:'') );
  }
  
}
set_exception_handler('early_exception_handler');

$c->default_timezone = ini_get('date.timezone');
if ( empty($c->default_timezone) ) {
  $c->default_timezone = 'UTC';
  date_default_timezone_set('UTC');
}

// Default some of the configurable values
$c->sysabbr     = 'davical';
$c->admin_email = 'admin@davical.example.com';
$c->system_name = 'DAViCal CalDAV Server';
$c->domain_name = (isset($_SERVER['SERVER_NAME'])?$_SERVER['SERVER_NAME']:$_SERVER['SERVER_ADDR']);
$c->save_time_zone_defs = true;
$c->collections_always_exist = false;
$c->allow_get_email_visibility = false;
$c->permission_scan_depth = 2;
$c->expand_pdo_parameters = true;
$c->home_calendar_name    = 'calendar';
$c->home_addressbook_name = 'addresses';
$c->enable_row_linking = true;
$c->enable_scheduling = false;
$c->http_auth_mode = 'Basic';
// $c->default_locale = array('es_MX', 'es_AR', 'es', 'pt');  // An array of locales to try, or just a single locale
// $c->local_tzid = 'Pacific/Auckland';  // Perhaps we should read from /etc/timezone - I wonder how standard that is?
$c->default_locale = 'en';
$c->locale_path = '../locale';
$c->base_url = preg_replace('#/[^/]+\.php.*$#', '', $_SERVER['SCRIPT_NAME']);
$c->base_directory = preg_replace('#/[^/]*$#', '', $_SERVER['DOCUMENT_ROOT']);
$c->default_privileges = array('read-free-busy', 'schedule-deliver');

$c->enable_auto_schedule = true;

$c->schema_major = $c->schema_minor = $c->schema_patch = 0;

$c->stylesheets = array( $c->base_url.'/davical.css' );
$c->images      = $c->base_url . '/images';

// Add a default for newly created users
$c->template_usr = array( 'active' => true,
                          'locale' => 'en_GB',
                          'date_format_type' => 'E',
                          'email_ok' => date('Y-m-d')
                        );

$c->hide_TODO = true;                      // VTODO only visible to collection owner
$c->readonly_webdav_collections = true;    // WebDAV access is readonly

// Kind of private configuration values
$c->total_query_time = 0;

$c->dbg = array();


// Utilities
if ( isset($skip_errors) ) $skip_errors = true;
if ( ! @include_once('AWLUtilities.php') ) {
  if ( isset($skip_errors) ) $skip_errors = false;
  $try_paths = array(
        '../../awl/inc'
      , '/usr/share/awl/inc'        // Where it ends up on Debian
      , '/usr/share/php/awl/inc'    // Fedora's standard for PHP libraries
      , '/usr/local/share/awl/inc'
  );
  foreach( $try_paths AS $awl_include_path ) {
    if ( @file_exists($awl_include_path.'/AWLUtilities.php') ) {
      set_include_path( $awl_include_path. PATH_SEPARATOR. get_include_path());
      break;
    }
  }
  if ( ! @include_once('AWLUtilities.php') ) {
    echo "Could not find the AWL libraries. Are they installed? Check your include_path in php.ini!\n";
    @ob_flush(); exit(0);
  }
}
if ( isset($skip_errors) ) $skip_errors = false;

// Ensure that ../inc is in our included paths as early as possible
set_include_path( '../inc'. PATH_SEPARATOR. get_include_path());


/** We actually discovered this and worked around it earlier, but we can't log it until the utilties are loaded */
if ( !isset($_SERVER['SERVER_NAME']) ) {
  @dbg_error_log( 'WARN', "Your webserver is not setting the SERVER_NAME parameter. You may need to set \$c->domain_name in your configuration.  Using IP address meanhwhile..." );
}

/**
* Calculate the simplest form of reference to this page, excluding the PATH_INFO following the script name.
*/
$c->protocol_server_port = sprintf( '%s://%s%s',
                 (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'? 'https' : 'http'),
                 $_SERVER['SERVER_NAME'],
                 (
                    ( (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on')
                                        && (!isset($_SERVER['SERVER_PORT']) || $_SERVER['SERVER_PORT'] == 80) )
                           || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'
                           				&& (!isset($_SERVER['SERVER_PORT']) || $_SERVER['SERVER_PORT'] == 443) )
                   ? ''
                   : ':'.$_SERVER['SERVER_PORT']
                 ) );
$c->protocol_server_port_script = $c->protocol_server_port . ($_SERVER['SCRIPT_NAME'] == '/index.php' ? '' : $_SERVER['SCRIPT_NAME']);


/**
* We use @file_exists because things like open_basedir might noisily deny
* access which could break DAViCal completely by causing output to start
* too early.
*/
ob_start( );
if ( @file_exists('/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php') ) {
  include('/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php');
}
else if ( @file_exists('/etc/davical/config.php') ) {
  include('/etc/davical/config.php');
}
else if ( @file_exists('/usr/local/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php') ) {
  include('/usr/local/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php');
}
else if ( @file_exists('/usr/local/etc/davical/config.php') ) {
  include('/usr/local/etc/davical/config.php');
}
else if ( @file_exists('../config/config.php') ) {
  include('../config/config.php');
}
else if ( @file_exists('config/config.php') ) {
  include('config/config.php');
}
else {
  include('davical_configuration_missing.php');
  @ob_flush();  exit(0);
}
$config_warnings = trim(ob_get_contents());
ob_end_clean();

if ( !isset($c->page_title) ) $c->page_title = $c->system_name;

if ( isset($_SERVER['HTTP_X_DAVICAL_TESTCASE']) ) {
  @dbg_error_log( 'LOG', '==========> Test case =%s=', $_SERVER['HTTP_X_DAVICAL_TESTCASE'] );
}
else if ( isset($c->dbg['script_start']) && $c->dbg['script_start'] ) {
  // Only log this if more than a little debugging of some sort is turned on, somewhere
  @dbg_error_log( 'LOG', '==========> method =%s= =%s= =%s= =%s= =%s=',
         $_SERVER['REQUEST_METHOD'], $c->protocol_server_port_script, (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '$_SERVER[PATH_INFO] undefined'), $c->base_url, $c->base_directory );
}

/**
* Now that we have loaded the configuration file we can switch to a
* default site locale.  This may be overridden by each user.
*/
putenv("LANG=". $c->default_locale);
if ( function_exists('awl_set_locale') ) {
  awl_set_locale($c->default_locale);
  init_gettext( 'davical', $c->locale_path );
}

/**
* Work out our version
*
*/
$c->code_version = 0;
$c->want_awl_version = '0.53';
$c->version_string = '1.1.1'; // The actual version # is replaced into that during the build /release process
if ( isset($c->version_string) && preg_match( '/(\d+)\.(\d+)\.(\d+)(.*)/', $c->version_string, $matches) ) {
  $c->code_major = $matches[1];
  $c->code_minor = $matches[2];
  $c->code_patch = $matches[3];
  $c->code_version = (($c->code_major * 1000) + $c->code_minor).'.'.$c->code_patch;
  dbg_error_log('caldav', 'Version (%d.%d.%d) == %s', $c->code_major, $c->code_minor, $c->code_patch, $c->code_version);
  @header( sprintf('Server: %d.%d', $c->code_major, $c->code_minor) );
}

/**
* Force the domain name to what was in the configuration file
*/
$_SERVER['SERVER_NAME'] = $c->domain_name;

require_once('AwlQuery.php');

$c->want_dbversion = array(1,2,11);
$c->schema_version = 0;
$qry = new AwlQuery( 'SELECT schema_major, schema_minor, schema_patch FROM awl_db_revision ORDER BY schema_id DESC LIMIT 1;' );
if ( $qry->Exec('always',__LINE__,__FILE__) && $row = $qry->Fetch() ) {
  $c->schema_version = doubleval( sprintf( '%d%03d.%03d', $row->schema_major, $row->schema_minor, $row->schema_patch) );
  $c->wanted_version = doubleval( sprintf( '%d%03d.%03d', $c->want_dbversion[0], $c->want_dbversion[1], $c->want_dbversion[2]) );
  $c->schema_major = $row->schema_major;
  $c->schema_minor = $row->schema_minor;
  $c->schema_patch = $row->schema_patch;
  if ( $c->schema_version < $c->wanted_version ) {
    $c->messages[] = sprintf( 'Database schema needs upgrading. Current: %d.%d.%d, Desired: %d.%d.%d',
             $row->schema_major, $row->schema_minor, $row->schema_patch, $c->want_dbversion[0], $c->want_dbversion[1], $c->want_dbversion[2]);
  }
  if ( isset($_SERVER['HTTP_X_DAVICAL_TESTCASE']) ) $qry->QDo('SET TIMEZONE TO \'Pacific/Auckland\'');
}

require_once('Principal.php');

/**
 * Return the HTTP status code description for a given code. Hopefully
 * this is an efficient way to code this.
 * @return string The text for a give HTTP status code, in english
 */
function getStatusMessage($status) {
  switch( $status ) {
    case 100:  $ans = 'Continue';                             break;
    case 101:  $ans = 'Switching Protocols';                  break;
    case 200:  $ans = 'OK';                                   break;
    case 201:  $ans = 'Created';                              break;
    case 202:  $ans = 'Accepted';                             break;
    case 203:  $ans = 'Non-Authoritative Information';        break;
    case 204:  $ans = 'No Content';                           break;
    case 205:  $ans = 'Reset Content';                        break;
    case 206:  $ans = 'Partial Content';                      break;
    case 207:  $ans = 'Multi-Status';                         break;
    case 300:  $ans = 'Multiple Choices';                     break;
    case 301:  $ans = 'Moved Permanently';                    break;
    case 302:  $ans = 'Found';                                break;
    case 303:  $ans = 'See Other';                            break;
    case 304:  $ans = 'Not Modified';                         break;
    case 305:  $ans = 'Use Proxy';                            break;
    case 307:  $ans = 'Temporary Redirect';                   break;
    case 400:  $ans = 'Bad Request';                          break;
    case 401:  $ans = 'Unauthorized';                         break;
    case 402:  $ans = 'Payment Required';                     break;
    case 403:  $ans = 'Forbidden';                            break;
    case 404:  $ans = 'Not Found';                            break;
    case 405:  $ans = 'Method Not Allowed';                   break;
    case 406:  $ans = 'Not Acceptable';                       break;
    case 407:  $ans = 'Proxy Authentication Required';        break;
    case 408:  $ans = 'Request Timeout';                      break;
    case 409:  $ans = 'Conflict';                             break;
    case 410:  $ans = 'Gone';                                 break;
    case 411:  $ans = 'Length Required';                      break;
    case 412:  $ans = 'Precondition Failed';                  break;
    case 413:  $ans = 'Request Entity Too Large';             break;
    case 414:  $ans = 'Request-URI Too Long';                 break;
    case 415:  $ans = 'Unsupported Media Type';               break;
    case 416:  $ans = 'Requested Range Not Satisfiable';      break;
    case 417:  $ans = 'Expectation Failed';                   break;
    case 422:  $ans = 'Unprocessable Entity';                 break;
    case 423:  $ans = 'Locked';                               break;
    case 424:  $ans = 'Failed Dependency';                    break;
    case 500:  $ans = 'Internal Server Error';                break;
    case 501:  $ans = 'Not Implemented';                      break;
    case 502:  $ans = 'Bad Gateway';                          break;
    case 503:  $ans = 'Service Unavailable';                  break;
    case 504:  $ans = 'Gateway Timeout';                      break;
    case 505:  $ans = 'HTTP Version Not Supported';           break;
    default:   $ans = 'Unknown HTTP Status Code '.$status;
  }
  return $ans;
}


/**
* Construct a URL from the supplied dav_name.  The URL will be urlencoded,
* except for any '/' characters in it.
* @param string $partial_path  The part of the path after the script name
*/
function ConstructURL( $partial_path, $force_script = false ) {
  global $c;

  if ( ! isset($c->_url_script_path) ) {
    $c->protocol_server_port_script = str_replace( 'index.php', 'caldav.php', $c->protocol_server_port_script);
    $c->_url_script_path = (preg_match('#/$#', $c->protocol_server_port_script) ? 'caldav.php' : '');
    $c->_url_script_path = $c->protocol_server_port_script . $c->_url_script_path;
  }

  $url = $c->_url_script_path;
  if ( $force_script ) {
    if ( ! preg_match( '#/caldav\.php$#', $url ) ) $url .= '/caldav.php';
  }
  $url .= str_replace( '%2F', '/', rawurlencode($partial_path));
  $url = preg_replace( '#^(https?://.+)//#', '$1/', $url );  // Ensure we don't double any '/'
  $url = preg_replace('#^https?://[^/]+#', '', $url );       // Remove any protocol + hostname portion

  if ( strstr($url, 'caldav.php/caldav.php') !== false ) {
//    trace_bug('Duplicated caldav.php/ in URL "%s" from partial_path=%s, force_script=%s', $url, $partial_path, ($force_script?'true':'false'));
    $url = str_replace( 'caldav.php/caldav.php', 'caldav.php', $url );  // Ensure we don't double any 'caldav.php/'
  }

  return $url;
}


/**
* Deconstruct a dav_name from the supplied URL.  The dav_name will be urldecoded.
*
* @param string $partial_path  The part of the path after the script name
*/
function DeconstructURL( $url, $force_script = false ) {
  global $c;

  $dav_name = rawurldecode($url);

  /** Allow a path like .../username/calendar.ics to translate into the calendar URL */
  if ( preg_match( '#^(/[^/]+/[^/]+).ics$#', $dav_name, $matches ) ) {
    $dav_name = $matches[1]. '/';
  }

  /** remove any leading protocol/server/port/prefix... */
  if ( !isset($c->deconstruction_base_path) ) $c->deconstruction_base_path = ConstructURL('/');
  if ( preg_match( '%^(.*?)'.str_replace('%', '\\%',$c->deconstruction_base_path).'(.*)$%', $dav_name, $matches ) ) {
    if ( $matches[1] == '' || $matches[1] == $c->protocol_server_port ) {
      $dav_name = $matches[2];
    }
  }

  /** strip doubled slashes */
  if ( strstr($dav_name,'//') ) $dav_name = preg_replace( '#//+#', '/', $dav_name);

  if ( substr($dav_name,0,1) != '/' ) $dav_name = '/'.$dav_name;

  return $dav_name;
}


/**
* Convert a date from ISO format into the sad old HTTP format.
* @param string $isodate The date to convert
*/
function ISODateToHTTPDate( $isodate ) {
  // It is necessary to use English for this, explicitly.  See Debian BTS Bug#661985 for more info.
  $month = gmstrftime('%m', strtotime($isodate));
  switch( intval($month) ) {
  	case 1: $month = 'Jan'; break;
  	case 2: $month = 'Feb'; break;
  	case 3: $month = 'Mar'; break;
  	case 4: $month = 'Apr'; break;
  	case 5: $month = 'May'; break;
  	case 6: $month = 'Jun'; break;
  	case 7: $month = 'Jul'; break;
  	case 8: $month = 'Aug'; break;
  	case 9: $month = 'Sep'; break;
  	case 10: $month = 'Oct'; break;
  	case 11: $month = 'Nov'; break;
  	case 12: $month = 'Dec'; break;
  	default:
  		throw new Exception('Invalid month '.$month);
  }
  // Use strtotime since strptime is not available on Windows platform.
  return( gmstrftime('%a, %d '.$month.' %Y %H:%M:%S GMT', strtotime($isodate)) );
}

/**
* Convert a date into ISO format into the sparkly new ISO format.
* @param string $indate The date to convert
*/
function DateToISODate( $indate, $in_utc=false ) {
  // Use strtotime since strptime is not available on Windows platform.
  if ( $in_utc ) return( gmdate('Ymd\THis\Z', strtotime($indate)) );
  return( date('c', strtotime($indate)) );
}

/**
* Given a privilege string, or an array of privilege strings, return a bit mask
* of the privileges.
* @param mixed $raw_privs The string (or array of strings) of privilege names
* @return integer A bit mask of the privileges.
*/
define("DAVICAL_MAXPRIV", "65535");
define("DAVICAL_ADDRESSBOOK_MAXPRIV", "1023");
function privilege_to_bits( $raw_privs ) {
  $out_priv = 0;

  if ( gettype($raw_privs) == 'string' ) $raw_privs = array( $raw_privs );

  if ( ! is_array($raw_privs) ) $raw_privs = array($raw_privs);

  foreach( $raw_privs AS $priv ) {
    $trim_priv = trim(strtolower(preg_replace( '/^.*:/', '', $priv)));
    switch( $trim_priv ) {
      case 'read'                            : $out_priv |=     1;  break;
      case 'write-properties'                : $out_priv |=     2;  break;
      case 'write-content'                   : $out_priv |=     4;  break;
      case 'unlock'                          : $out_priv |=     8;  break;
      case 'read-acl'                        : $out_priv |=    16;  break;
      case 'read-current-user-privilege-set' : $out_priv |=    32;  break;
      case 'bind'                            : $out_priv |=    64;  break;
      case 'unbind'                          : $out_priv |=   128;  break;
      case 'write-acl'                       : $out_priv |=   256;  break;
      case 'read-free-busy'                  : $out_priv |=   512;  break;
      case 'schedule-deliver-invite'         : $out_priv |=  1024;  break;
      case 'schedule-deliver-reply'          : $out_priv |=  2048;  break;
      case 'schedule-query-freebusy'         : $out_priv |=  4096;  break;
      case 'schedule-send-invite'            : $out_priv |=  8192;  break;
      case 'schedule-send-reply'             : $out_priv |= 16384;  break;
      case 'schedule-send-freebusy'          : $out_priv |= 32768;  break;

      /** Aggregates of Privileges */
      case 'write'                           : $out_priv |=   198;  break; // 2 + 4 + 64 + 128
      case 'schedule-deliver'                : $out_priv |=  7168;  break; // 1024 + 2048 + 4096
      case 'schedule-send'                   : $out_priv |= 57344;  break; // 8192 + 16384 + 32768
      case 'all'                             : $out_priv  = DAVICAL_MAXPRIV;  break;
      case 'fake_privilege_for_input'        : break;
      default:
        dbg_error_log( 'ERROR', 'Cannot convert privilege of "%s" into bits.', $priv );

    }
  }

  // 'all' will include future privileges
  if ( ($out_priv & DAVICAL_MAXPRIV) >= DAVICAL_MAXPRIV ) $out_priv = pow(2,24) - 1;
  return $out_priv;
}


/**
* Given a bit mask of the privileges, will return an array of the
* text values of privileges.
* @param integer $raw_bits A bit mask of the privileges.
* @return mixed The string (or array of strings) of privilege names
*/
function bits_to_privilege( $raw_bits, $resourcetype = 'resource' ) {
  $out_priv = array();

  if ( is_string($raw_bits) ) {
    $raw_bits = bindec($raw_bits);
  }

  if ( ($raw_bits & DAVICAL_MAXPRIV) == DAVICAL_MAXPRIV ) $out_priv[] = 'all';

  if ( ($raw_bits &   1) != 0 ) $out_priv[] = 'DAV::read';
  if ( ($raw_bits &   8) != 0 ) $out_priv[] = 'DAV::unlock';
  if ( ($raw_bits &  16) != 0 ) $out_priv[] = 'DAV::read-acl';
  if ( ($raw_bits &  32) != 0 ) $out_priv[] = 'DAV::read-current-user-privilege-set';
  if ( ($raw_bits & 256) != 0 ) $out_priv[] = 'DAV::write-acl';
  if ( ($resourcetype == 'calendar' || $resourcetype == 'proxy' || $resourcetype == '*') && ($raw_bits & 512) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:read-free-busy';

  if ( ($raw_bits & 198) != 0 ) {
    if ( ($raw_bits & 198) == 198 ) $out_priv[] = 'DAV::write';
    if ( ($raw_bits &   2) != 0 ) $out_priv[] = 'DAV::write-properties';
    if ( ($raw_bits &   4) != 0 ) $out_priv[] = 'DAV::write-content';
    if ( ($raw_bits &  64) != 0 ) $out_priv[] = 'DAV::bind';
    if ( ($raw_bits & 128) != 0 ) $out_priv[] = 'DAV::unbind';
  }

  if ( ($resourcetype == 'schedule-inbox' || $resourcetype == '*') && ($raw_bits & 7168) != 0 ) {
    if ( ($raw_bits & 7168) == 7168 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-deliver';
    if ( ($raw_bits & 1024) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-deliver-invite';
    if ( ($raw_bits & 2048) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-deliver-reply';
    if ( ($raw_bits & 4096) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-query-freebusy';
  }

  if ( ($resourcetype == 'schedule-outbox' || $resourcetype == '*') && ($raw_bits & 57344) != 0 ) {
    if ( ($raw_bits & 57344) == 57344 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-send';
    if ( ($raw_bits &  8192) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-send-invite';
    if ( ($raw_bits & 16384) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-send-reply';
    if ( ($raw_bits & 32768) != 0 ) $out_priv[] = 'urn:ietf:params:xml:ns:caldav:schedule-send-freebusy';
  }

//  dbg_error_log( 'DAVResource', ' Privilege bit "%s" is "%s".', $raw_bits, implode(', ', $out_priv) );

  return $out_priv;
}


/**
* Returns the array of privilege names converted into XMLElements
*/
function privileges_to_XML( $privilege_names, &$xmldoc=null ) {
  if ( !isset($xmldoc) && isset($GLOBALS['reply']) ) $xmldoc = $GLOBALS['reply'];
  $privileges = array();
  foreach( $privilege_names AS $k ) {
    $privilege = new XMLElement('privilege');
    if ( isset($xmldoc) )
      $xmldoc->NSElement($privilege,$k);
    else
      $privilege->NewElement($k);
    $privileges[] = $privilege;
  }
  return $privileges;
}

davical-1.1.1/htdocs/setup.php0000644000000000000000000004021011772254727013153 0ustar  \n";
  try {
    @ob_flush(); // Seems like it should be better to do the following but is problematic on PHP5.3 at least: while ( ob_get_level() > 0 ) ob_end_flush();
  }
  catch( Exception $ignored ) {}
  echo "Error [".$errno."] ".$errstr."\n";
  echo "At line ", $errline, " of ", $errfile, "\n";

  $e = new Exception();
  $trace = array_reverse($e->getTrace());
  echo "================= Stack Trace ===================\n";
  foreach( $trace AS $k => $v ) {
    printf( "%s[%d] %s%s%s()\n", $v['file'], $v['line'], (isset($v['class'])?$v['class']:''), (isset($v['type'])?$v['type']:''), (isset($v['function'])?$v['function']:'') );
  }
}

set_error_handler('catch_setup_errors', E_ALL);

class CheckResult {
  private $ok;
  private $use_class;
  private $description;
  
  function __construct( $success, $description=null, $use_class=null ) {
    $this->ok = (boolean) $success;
    $this->description = (isset($description)?$description : ($success===true? i18n('Passed') : i18n('Fail')));
    $this->use_class = (isset($use_class)?$use_class:($success===true?'dep_ok' : 'dep_fail'));        
  }
  
  public function getClass() {
    return $this->use_class;
  }

  public function setClass( $new_class ) {
    $this->use_class = $new_class;
  }

  public function getOK() {
    return $this->ok;
  }

  public function getDescription() {
    return translate($this->description);
  }

  public function setDescription( $new_desc ) {
    $this->description = $new_desc;
  }

}

/**
 * We put many of these checks before we even try to load always.php so that we
 * can try and do some diagnostic work to ensure it will load OK.
 */
function check_pgsql() {
  return new CheckResult(function_exists('pg_connect'));
}

function check_pdo() {
  return new CheckResult(class_exists('PDO'));
}

function check_pdo_pgsql() {
  global $loaded_extensions;

  if ( !check_pdo() ) return new CheckResult(false);
  return new CheckResult(isset($loaded_extensions['pdo_pgsql']));
}

function check_database_connection() {
  global $c;

  if ( !check_pdo_pgsql() ) return new CheckResult(false);
  return new CheckResult( !( empty($c->schema_major) || $c->schema_major == 0 || empty($c->schema_minor) || $c->schema_minor == 0) );
}

function check_gettext() {
  global $phpinfo, $loaded_extensions;

  if ( !function_exists('gettext') ) return new CheckResult(false);
  return new CheckResult(isset($loaded_extensions['gettext']));
}

function check_iconv() {
  global $phpinfo, $loaded_extensions;

  if ( !function_exists('iconv') ) return new CheckResult(false);
  return new CheckResult(isset($loaded_extensions['iconv']));
}

function check_ldap() {
  global $phpinfo, $loaded_extensions;

  if (!function_exists('ldap_connect')) return new CheckResult(false);
  return new CheckResult(isset($loaded_extensions['ldap']));
}

function check_real_php() {
  global $phpinfo, $loaded_extensions;
  // Looking for "Server API Apache 2.0 Filter" in the phpinfo
  if ( preg_match('{Server API.*Apache 2\.. Filter}', $phpinfo) ) return new CheckResult(false);
  return new CheckResult(true);
}

function check_calendar() {
  global $phpinfo, $loaded_extensions;

  if (!function_exists('cal_days_in_month')) return new CheckResult(false);
  return new CheckResult(isset($loaded_extensions['calendar']));
}

function check_suhosin_server_strip() {
  global $loaded_extensions;

  if ( !isset($loaded_extensions['suhosin']) ) return new CheckResult(true);
  return new CheckResult( ini_get('suhosin.server.strip') == "0"
       || strtolower(ini_get('suhosin.server.strip')) == "off"
       || ini_get('suhosin.server.strip') == "" );
}

function check_magic_quotes_gpc() {
  return new CheckResult( (get_magic_quotes_gpc() == 0) );
}

function check_magic_quotes_runtime() {
  return new CheckResult( (get_magic_quotes_runtime() == 0) );
}

function check_curl() {
  global $phpinfo, $loaded_extensions;

  if (!function_exists('curl_init')) return new CheckResult(false);
  return new CheckResult(isset($loaded_extensions['curl']));
}

$loaded_extensions = array_flip(get_loaded_extensions());


function do_error( $errormessage ) {
  // We can't translate this because we're testing these things even before 
  // the translation interface is available...
  printf("

%s

", $errormessage ); } if ( !check_gettext()->getOK() ) do_error("The GNU 'gettext' extension for PHP is not available."); if ( !check_pgsql()->getOK() ) do_error("PHP 'pgsql' functions are not available"); if ( !check_pdo()->getOK() ) do_error("PHP 'PDO' module is not available"); if ( !check_pdo_pgsql()->getOK() ) do_error("The PDO drivers for PostgreSQL are not available"); if ( !check_database_connection()->getOK() ) do_error("Unable to connect to database"); if ( !check_iconv()->getOK() ) do_error("The 'iconv' extension for PHP is not available"); function get_phpinfo() { ob_start( ); phpinfo(); $phpinfo = ob_get_contents( ); ob_end_clean( ); $phpinfo = preg_replace( '{^.*?}s', '', $phpinfo); $phpinfo = preg_replace( '{.*?$}s', '', $phpinfo); return $phpinfo; } $phpinfo = get_phpinfo(); try { include("./always.php"); set_error_handler('log_setup_error', E_ALL); include("DAViCalSession.php"); if ( check_pgsql()->GetOK() ) { $session->LoginRequired( (isset($c->restrict_setup_to_admin) && $c->restrict_setup_to_admin ? 'Admin' : null ) ); } } catch( Exception $e ) { class FakeSession { function AllowedTo() { return true; } } $session = new FakeSession(1); } include("interactive-page.php"); include("page-header.php"); require_once("AwlQuery.php"); function check_datetime() { if ( class_exists('DateTime') ) return new CheckResult(true); $result = new CheckResult(false); $result->setClass('dep_warning'); $result->setDescription(i18n('Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly recommended.')); return $result; } function check_schema_version() { global $c; if ( $c->want_dbversion[0] == $c->schema_major && $c->want_dbversion[1] == $c->schema_minor && $c->want_dbversion[2] == $c->schema_patch ) { return new CheckResult( true ); } $result = new CheckResult(false); if ( $c->want_dbversion[0] < $c->schema_major || ($c->want_dbversion[0] == $c->schema_major && $c->want_dbversion[1] < $c->schema_minor) || ($c->want_dbversion[0] == $c->schema_major && $c->want_dbversion[1] == $c->schema_minor && $c->want_dbversion[2] < $c->schema_patch) ) { $result->setClass('dep_warning'); } $result->setDescription( sprintf(i18n('Want: %s, Currently: %s'), implode('.',$c->want_dbversion), $c->schema_major.'.'.$c->schema_minor.'.'.$c->schema_patch)); return $result; } function check_davical_version() { global $c; $url = 'http://www.davical.org/current_davical_version?v='.$c->version_string; $version_file = @fopen($url, 'r'); if ( ! $version_file ) return new CheckResult( false, translate("Could not retrieve") . " '$url'", 'dep_warning' ); $current_version = trim(fread( $version_file,12)); fclose($version_file); $result = new CheckResult($c->version_string == $current_version); if ( ! $result->getOK() ) { if ( $c->version_string > $current_version ) { $result->setClass('dep_ok'); $result->setDescription( sprintf(i18n('Stable: %s, We have: %s !'), $current_version, $c->version_string) ); } else { $result->setDescription( sprintf(i18n('Want: %s, Currently: %s'), $current_version, $c->version_string) ); } } return $result; } function check_awl_version() { global $c; if ( !function_exists('awl_version') ) return new CheckResult(false); $result = new CheckResult($c->want_awl_version == awl_version()); if ( ! $result->getOK() ) { $result->setDescription( sprintf(i18n('Want: %s, Currently: %s'), $c->want_awl_version, awl_version()) ); if ( $c->want_awl_version < awl_version() ) $result->setClass('dep_warning'); } return $result; } function build_site_statistics() { $principals = translate('No. of Principals'); $collections = translate('No. of Collections'); $resources = translate('No. of Resources'); $table = << $principals$collections$resources %s EOTABLE; if ( !check_database_connection() ) { return sprintf( $table, ''.translate('Site Statistics require the database to be available!').''); } $sql = 'SELECT (SELECT count(1) FROM principal) AS principals, (SELECT count(1) FROM collection) AS collections, (SELECT count(1) FROM caldav_data) AS resources'; $qry = new AwlQuery($sql); if ( $qry->Exec('setup',__LINE__,__FILE__) && $s = $qry->Fetch() ) { $row = sprintf('%s%s%s', $s->principals, $s->collections, $s->resources ); return sprintf( $table, $row ); } return sprintf( $table, ''.translate('Site Statistics require the database to be available!').''); } function build_dependencies_table( ) { global $c; $dependencies = array( translate('Current DAViCal version ') => 'check_davical_version', translate('AWL Library version ') => 'check_awl_version', translate('PHP not using Apache Filter mode') => 'check_real_php', translate('PHP PDO module available') => 'check_pdo', translate('PDO PostgreSQL drivers') => 'check_pdo_pgsql', translate('Database is Connected') => 'check_database_connection', translate('DAViCal DB Schema version ') => 'check_schema_version', translate('GNU gettext support') => 'check_gettext', translate('PHP iconv support') => 'check_iconv', translate('PHP DateTime class') => 'check_datetime', translate('Suhosin "server.strip" disabled') => 'check_suhosin_server_strip', translate('PHP Magic Quotes GPC off') => 'check_magic_quotes_gpc', translate('PHP Magic Quotes runtime off') => 'check_magic_quotes_runtime', translate('PHP calendar extension available') => 'check_calendar', translate('PHP curl support') => 'check_curl' ); if ( isset($c->authenticate_hook) && isset($c->authenticate_hook['call']) && $c->authenticate_hook['call'] == 'LDAP_check') { $dependencies[translate('PHP LDAP module available')] = 'check_ldap'; } $dependencies_table = ''; $dep_tpl = ' %s %s Explanation on DAViCal Wiki '; foreach( $dependencies AS $k => $v ) { $check_result = $v(); $dependencies_table .= sprintf( $dep_tpl, $check_result->getClass(), $k, $check_result->getDescription(), rawurlencode($k) ); } return $dependencies_table; } $heading_setup = translate('Setup'); $paragraph_setup = translate('This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.'); /* $want_dbversion = implode('.',$c->want_dbversion); $heading_versions = translate('Current Versions'); if ( check_schema_version() != true ) { $paragraph_versions = translate('You are currently running DAViCal version %s. The database schema should be at version %s and it is at version %d.%d.%d.'); $paragraph_versions = sprintf( $paragraph_versions, $c->version_string, $want_dbversion, $c->schema_major, $c->schema_minor, $c->schema_patch); } else { $paragraph_versions = translate('You are currently running DAViCal version %s. The database schema is at version %d.%d.%d.'); $paragraph_versions = sprintf( $paragraph_versions, $c->version_string, $c->schema_major, $c->schema_minor, $c->schema_patch); } */ $heading_dependencies = translate('Dependencies'); $th_dependency = translate('Dependency'); $th_status = translate('Status'); $dependencies_table = build_dependencies_table(); $heading_site_statistics = translate('Site Statistics'); if ( check_database_connection()->GetOK() ) { try { $site_statistics_table = build_site_statistics(); } catch( Exception $e ) { $site_statistics_table = "Statistics unavailable"; } } else { $site_statistics_table = "Statistics unavailable"; } $heading_config_clients = translate('Configuring Calendar Clients for DAViCal'); $heading_config_davical = translate('Configuring DAViCal'); $davical_configuration_errors = ( $config_warnings == '' ? '' : '

' . translate('Your configuration produced PHP errors which should be corrected') . '

'
             . $config_warnings.'
' ); echo << tr.dep_ok { background-color:#80ff80; } tr.dep_fail { background-color:#ff8080; } tr.dep_warning { background-color:#ffb040; } table, table.dependencies { border: 1px grey solid; border-collapse: collapse; padding: 0.1em; margin: 0 1em 1.5em; } table tr td, table tr th, table.dependencies tr td, table.dependencies tr th { border: 1px grey solid; padding: 0.1em 0.2em; } p { padding: 0.3em 0.2em 0.7em; }

$heading_setup

$paragraph_setup

$heading_dependencies

$dependencies_table
$th_dependency $th_status

$heading_config_davical

If you can read this then things must be mostly working already.

$davical_configuration_errors

The installation page on the DAViCal website has some further information on how to install and configure this application.

$heading_config_clients

The client setup page on the DAViCal website has information on how to configure Evolution, Sunbird, Lightning and Mulberry to use remotely hosted calendars.

The administrative interface has no facility for viewing or modifying calendar data.

$heading_site_statistics

$site_statistics_table

PHP Information

EOBODY; include("page-footer.php"); davical-1.1.1/htdocs/tz.php0000644000000000000000000000177111651212132012435 0ustar * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require("./always.php"); require("PublicSession.php"); $session = new PublicSession(); param_to_global('action','{[a-z_-]+}'); param_to_global('format','{[a-z]+/[a-zA-Z0-9.+_-]+}'); param_to_global('changedsince','{.*}','changesince'); param_to_global('start'); param_to_global('end'); param_to_global('lang'); $returnall = isset($_GET['returnall']); param_to_global('tzid'); require_once('CalDAVRequest.php'); $request = new CalDAVRequest(); $code_file = sprintf( 'tz/%s.php', $action ); if ( ! @include_once( $code_file ) ) { $request->PreconditionFailed(400, "supported-action", 'The action "'.$action.'" is not understood.', 'urn:ietf:params:xml:ns:timezone-service' ); } $request->DoResponse( 500, translate("The application failed to understand that request.") ); davical-1.1.1/htdocs/admin.php0000644000000000000000000000260611765304646013110 0ustar LoginRequired(); require_once('AwlQuery.php'); param_to_global('action', '{(edit|browse)}', 'action'); param_to_global('component', '{[a-z0-9-_]+}', 't'); param_to_global('id', '{[a-z0-9-_]+}', 'id'); $c->stylesheets[] = 'css/'.$action.'.css'; if ( $c->enable_row_linking ) { $c->scripts[] = 'js/browse.js'; } require_once('interactive-page.php'); $page_elements = array(); $code_file = sprintf( 'ui/%s-%s.php', $component, $action ); if ( ! @include_once( $code_file ) ) { $c->messages[] = sprintf('No page found to %s %s%s%s', $action, ($action == 'browse' ? '' : 'a '), $component, ($action == 'browse' ? 's' : '')); include('page-header.php'); include('page-footer.php'); @ob_flush(); exit(0); } include('page-header.php'); /** * Page elements could be an array of viewers, browsers or something else * that supports the Render() method... or a non-object which we assume is * just a string of text that we echo. */ $heading_level = null; foreach( $page_elements AS $k => $page_element ) { if ( is_object($page_element) ) { echo $page_element->Render($heading_level); $heading_level = 'h2'; } else { echo $page_element; } } if (function_exists("post_render_function")) { post_render_function(); } include('page-footer.php'); davical-1.1.1/htdocs/robots.txt0000644000000000000000000000003111633117640013334 0ustar User-agent: * Disallow: /davical-1.1.1/htdocs/feed.php0000644000000000000000000002041511633117640012707 0ustar * @author Andrew McMillan * @license GPL v2 or later */ require_once("./always.php"); dbg_error_log( "feed", " User agent: %s", ((isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "Unfortunately Mulberry and Chandler don't send a 'User-agent' header with their requests :-(")) ); dbg_log_array( "headers", '_SERVER', $_SERVER, true ); require_once('AwlCache.php'); require_once("HTTPAuthSession.php"); $session = new HTTPAuthSession(); require_once('CalDAVRequest.php'); $request = new CalDAVRequest(); require_once("vComponent.php"); require_once("DAVResource.php"); /** * Function for creating anchor links out of plain text. * Source: http://stackoverflow.com/questions/1960461/convert-plain-text-hyperlinks-into-html-hyperlinks-in-php */ function hyperlink( $text ) { return preg_replace( '@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '$1', htmlspecialchars($text) ); } function caldav_get_feed( $request, $collection ) { global $c, $session; dbg_error_log("feed", "GET method handler"); $collection->NeedPrivilege( array('DAV::read') ); if ( ! $collection->Exists() ) { $request->DoResponse( 404, translate("Resource Not Found.") ); } if ( !$collection->IsCollection() || !$collection->IsCalendar() && !(isset($c->get_includes_subcollections) && $c->get_includes_subcollections) ) { $request->DoResponse( 405, translate("Feeds are only supported for calendars at present.") ); } // Try and pull the answer out of a hat $cache = getCacheInstance(); $cache_ns = 'collection-'.$collection->dav_name(); $cache_key = 'feed'.$session->user_no; $response = $cache->get( $cache_ns, $cache_key ); if ( $response !== false ) return $response; $principal = $collection->GetProperty('principal'); /** * The CalDAV specification does not define GET on a collection, but typically this is * used as a .ics download for the whole collection, which is what we do also. */ $sql = 'SELECT caldav_data, caldav_type, caldav_data.user_no, caldav_data.dav_name,'; $sql .= ' caldav_data.modified, caldav_data.created, '; $sql .= ' summary, dtstart, dtend, calendar_item.description '; $sql .= ' FROM collection INNER JOIN caldav_data USING(collection_id) INNER JOIN calendar_item USING ( dav_id ) WHERE '; if ( isset($c->get_includes_subcollections) && $c->get_includes_subcollections ) { $sql .= ' (collection.dav_name ~ :path_match '; $sql .= ' OR collection.collection_id IN (SELECT bound_source_id FROM dav_binding WHERE dav_binding.dav_name ~ :path_match)) '; $params = array( ':path_match' => '^'.$request->path ); } else { $sql .= ' caldav_data.collection_id = :collection_id '; $params = array( ':collection_id' => $collection->resource_id() ); } $sql .= ' ORDER BY caldav_data.created DESC'; $sql .= ' LIMIT '.(isset($c->feed_item_limit) ? $c->feed_item_limit : 15); $qry = new AwlQuery( $sql, $params ); if ( !$qry->Exec("GET",__LINE__,__FILE__) ) { $request->DoResponse( 500, translate("Database Error") ); } /** * Here we are constructing the feed response for this collection, including * the timezones that are referred to by the events we have selected. * Library used: http://framework.zend.com/manual/en/zend.feed.writer.html */ require_once('AtomFeed.php'); $feed = new AtomFeed(); $feed->setTitle('DAViCal Atom Feed: '. $collection->GetProperty('displayname')); $url = $c->protocol_server_port . $collection->url(); $url = preg_replace( '{/$}', '.ics', $url); $feed->setLink($url); $feed->setFeedLink($c->protocol_server_port_script . $request->path, 'atom'); $feed->addAuthor(array( 'name' => $principal->GetProperty('displayname'), 'email' => $principal->GetProperty('email'), 'uri' => $c->protocol_server_port . $principal->url(), )); $feed_description = $collection->GetProperty('description'); if ( isset($feed_description) && $feed_description != '' ) $feed->setDescription($feed_description); require_once('RRule-v2.php'); $need_zones = array(); $timezones = array(); while( $event = $qry->Fetch() ) { if ( $event->caldav_type != 'VEVENT' && $event->caldav_type != 'VTODO' && $event->caldav_type != 'VJOURNAL') { dbg_error_log( 'feed', 'Skipping peculiar "%s" component in VCALENDAR', $event->caldav_type ); continue; } $is_todo = ($event->caldav_type == 'VTODO'); $ical = new vComponent( $event->caldav_data ); $event_data = $ical->GetComponents('VTIMEZONE', false); $item = $feed->createEntry(); $item->setId( $c->protocol_server_port_script . ConstructURL($event->dav_name) ); $dt_created = new RepeatRuleDateTime( $event->created ); $item->setDateCreated( $dt_created->epoch() ); $dt_modified = new RepeatRuleDateTime( $event->modified ); $item->setDateModified( $dt_modified->epoch() ); $summary = $event->summary; $p_title = ($summary != '' ? $summary : translate('No summary')); if ( $is_todo ) $p_title = "TODO: " . $p_title; $item->setTitle($p_title); $content = ""; $dt_start = new RepeatRuleDateTime($event->dtstart); if ( $dt_start != null ) { $p_time = '' . translate('Time') . ': ' . strftime(translate('%F %T'), $dt_start->epoch()); $dt_end = new RepeatRuleDateTime($event->dtend); if ( $dt_end != null ) { $p_time .= ' - ' . ( $dt_end->AsDate() == $dt_start->AsDate() # Translators: his is the formatting of just the time. See http://php.net/manual/en/function.strftime.php ? strftime(translate('%T'), $dt_end->epoch()) # Translators: this is the formatting of a date with time. See http://php.net/manual/en/function.strftime.php : strftime(translate('%F %T'), $dt_end->epoch()) ); } $content .= $p_time; } $p_location = $event_data[0]->GetProperty('LOCATION'); if ( $p_location != null ) $content .= '
' .'' . translate('Location') . ': ' . hyperlink($p_location->Value()); $p_attach = $event_data[0]->GetProperty('ATTACH'); if ( $p_attach != null ) $content .= '
' .'' . translate('Attachment') . ': ' . hyperlink($p_attach->Value()); $p_url = $event_data[0]->GetProperty('URL'); if ( $p_url != null ) $content .= '
' .'' . translate('URL') . ': ' . hyperlink($p_url->Value()); $p_cat = $event_data[0]->GetProperty('CATEGORIES'); if ( $p_cat != null ) { $content .= '
' .'' . translate('Categories') . ': ' . $p_cat->Value(); $categories = explode(',',$p_cat->Value()); foreach( $categories AS $category ) { $item->addCategory( array('term' => trim($category)) ); } } $p_description = $event->description; if ( $p_description != '' ) { $content .= '
' .'
' .'' . translate('Description') . ':
' . ( nl2br(hyperlink($p_description)) ) ; $item->setDescription($p_description); } $item->setContent($content); $feed->addEntry($item); //break; } $last_modified = new RepeatRuleDateTime($collection->GetProperty('modified')); $feed->setDateModified($last_modified->epoch()); $response = $feed->export('atom'); $cache->set( $cache_ns, $cache_key, $response ); return $response; } if ( $request->method == 'GET' ) { $collection = new DAVResource($request->path); $response = caldav_get_feed( $request, $collection ); header( 'Content-Length: '.strlen($response) ); header( 'Etag: '.$collection->unique_tag() ); $request->DoResponse( 200, ($request->method == 'HEAD' ? '' : $response), 'text/xml; charset="utf-8"' ); } else { dbg_error_log( 'feed', 'Unhandled request method >>%s<<', $request->method ); dbg_log_array( 'feed', '_SERVER', $_SERVER, true ); dbg_error_log( 'feed', 'RAW: %s', str_replace("\n", '',str_replace("\r", '', $request->raw_post)) ); } $request->DoResponse( 500, translate('The application program does not understand that request.') ); /* vim: set ts=2 sw=2 tw=0 :*/ davical-1.1.1/htdocs/upgrade.php0000644000000000000000000000640111362722273013435 0ustar LoginRequired('Admin'); include("interactive-page.php"); $page_elements = array(); $page_elements[] = <<Upgrade Database

Currently this page does nothing. Suggestions or patches to make it do something useful will be gratefully received.
 

Upgrading DAViCal Versions

The update-davical-database should be run manually after upgrading the software to a new version of DAViCal.

In due course this program will implement the functionality which is currently contained in that script, but until then I'm afraid you do need to run it. EOBODY; include("classEditor.php"); include("AwlUpgrader.php"); $editor = new Editor(translate('Upgrade Database')); $editor->AddField('dbhost', "''"); $editor->AddField('dbport', "''"); $editor->AddField('dbname', "'davical'"); $editor->AddField('dbuser', "'davical_dba'"); $editor->AddField('dbpass', "''"); $editor->AddField('app_user', "'davical_app'"); $editor->AddField('apply_patches', "'t'"); $editor->AddField('owner', "davical_dba"); $prompt_dbname = translate('Database Name'); $prompt_dbuser = translate('Database Username'); $prompt_dbpass = translate('Database Password'); $prompt_dbport = translate('Database Port'); $prompt_dbhost = translate('Database Host'); $prompt_app_user = translate('Application DB User'); $prompt_do_patch = translate('Apply DB Patches'); $prompt_owner = translate('Database Owner'); $template = << Connection Parameters $prompt_dbhost: ##dbhost.input.20## $prompt_dbport: ##dbport.input.5## $prompt_dbname: ##dbname.input.20## $prompt_dbuser: ##dbuser.input.20## $prompt_dbpass: ##dbpass.password.20## Operation Parameters $prompt_app_user: ##app_user.input.20## $prompt_do_patch: ##apply_patches.checkbox## $prompt_owner: ##owner.input.20## ##submit## EOTEMPLATE; $editor->SetTemplate( $template ); $page_elements[] = $editor; $c->stylesheets[] = 'css/edit.css'; include("page-header.php"); /** * Page elements could be an array of viewers, browsers or something else * that supports the Render() method... or a non-object which we assume is * just a string of text that we echo. */ $heading_level = null; foreach( $page_elements AS $k => $page_element ) { if ( is_object($page_element) ) { echo $page_element->Render($heading_level); $heading_level = 'h2'; } else { echo $page_element; } } if (function_exists("post_render_function")) { post_render_function(); } include("page-footer.php"); davical-1.1.1/htdocs/js/0000755000000000000000000000000011776303360011711 5ustar davical-1.1.1/htdocs/js/browse.js0000644000000000000000000000322611314625510013543 0ustar /** * Simple function to send the browser to a given URL */ function Go( url ) { window.location=url; return true; } /** * Make this tag into a Link to a given URL */ function LinkTo( tag, url ) { tag.style.cursor = "pointer"; tag.setAttribute('onClick', "Go('" + url.replace(/&/g,'&') + "')"); tag.setAttribute('onMouseOut', "window.status='';return true;"); window.status = window.location.protocol + '//' + document.domain + url; tag.setAttribute('onMouseover', "window.status = window.location.protocol + '//' + document.domain + '" + url + "';return true;"); tag.setAttribute('href', url); return true; } /** * Make this tag and all of it's contents into a clickable link, using the link target from an * existing link target somewhere within the tag. Setting 'which1' to '1' will make the target * match the 1st href target within the HTML of the tag. * @param objectref tag A reference to the object which will become clickable. * @param int which1 A one-based index to select which internal href attribute will become the target. */ function LinkHref( tag, which1 ) { var urls = tag.innerHTML.match( / href="([^"]*)"/ig ); // alert(show_props(urls,'urls', 1)); try { var url = urls[which1 - 1]; urls = url.match( /="([^"]*)"/ ); } catch (e) { //alert("Here are the URLs found:\nYou appear to need to choose a different index for your LinkHref call (the second parameter). Add 1 to the index below for the correct URL shown and use that.\n\n" + show_props(urls,'urls', 0)); return false; } // alert(show_props(urls,'urls', 1)); url = urls[1]; // alert("Linking to >>>" + url + "<<<"); LinkTo(tag,url); return true; } davical-1.1.1/htdocs/iSchedule.php0000644000000000000000000001353411727253605013723 0ustar LoginRequired('Admin'); include("interactive-page.php"); require_once("AwlQuery.php"); require_once('iSchedule.php'); $page_elements = array(); $page_elements[] = <<iSchedule Configuration

iSchedule allows caldav servers to communicate directly with each other, bypassing the need to send invitations via email, for scheduled events where attendees are using different servers or providers. Additionally it enables freebusy lookups for remote attendees. Events and ToDos received via iSchedule will show up in the users scheduling inbox.
 

The iSchedule configuration requires a few DNS entries. DNS SRV record(s) will need to be created for all domains you wish to accept requests for, these are the domain portion of email address on Principal records in DAViCal examples are listed below for domains found in your database. At least 1 public key must also be published if you wish to send requests from this server.

EOBODY; $status = '

Status

'; if (!isset($c->scheduling_dkim_domain)) { $status .= <<ERROR

scheduling_dkim_domain not set

EOBODY; } elseif ( $c->scheduling_dkim_domain != $_SERVER['SERVER_NAME'] ) { $status .= <<WARNING

scheduling_dkim_domain does not match server name

EOBODY; } else { $status .= '
' . checkiSchedule() . '
'; } $page_elements[] = $status; function checkiSchedule () { global $c; $ret = ''; $s = new iSchedule (); $s->domain = $c->scheduling_dkim_domain; if (!$s->getServer()) $ret .= '

SRV record missing for '. $s->domain .' or DNS failure, the domain you are going to send events from should have an SRV record

' ; if ($s->remote_server != $c->scheduling_dkim_domain) $ret .= '

SRV record for '.$s->domain . ' points to wrong domain: ' . $s->remote_server . ' instead of ' . $c->scheduling_dkim_domain .'

'; $s->remote_server = $c->scheduling_dkim_domain; $s->remote_selector = $c->scheduling_dkim_selector; if (!$s->getTxt()) { if (isset($c->schedule_private_key)) $ret .= '

TXT record missing for '.$s->remote_selector . '._domainkey.' . $s->domain .' or DNS failure, Private RSA key is configured

' ; else { $keys = generateKeys(); $config = '

please add the following section to your DAViCal configuration file

$c->schedule_private_key = <<<ENDOFKEY' ."\n";
      $config .= $keys['private']; //implode ("\n", str_split ( base64_encode ( $keys['private'] ), 64 ));
      $config .= "ENDOFKEY\n
"; $config .= "
and create a DNS TXT record for " . $c->scheduling_dkim_selector . "._domainkey." . $c->scheduling_dkim_domain ; $config .= " that contains:
";
      $config .= "k=rsa; t=s; p=" . preg_replace('/-----(BEGIN|END) PUBLIC KEY-----\n/','',$keys['public']);
      $config .= '

'; $ret .= $config; } } if ( ! $s->parseTxt() ) $ret .= '

TXT record corrupt for '. $s->remote_selector .'._domainkey.'. $s->domain .' or DNS failure

' ; else if ( $ret == '' ) $ret = '

iSchedule OK

'; return $ret; } function generateKeys () { $config = array('private_key_bits' => 512, 'private_key_type' => OPENSSL_KEYTYPE_RSA); $newKey = openssl_pkey_new($config); if ( $newKey !== false ) { openssl_pkey_export($newKey,$privateKey); $publicKey=openssl_pkey_get_details($newKey); $publicKey=$publicKey['key']; return Array('private' => $privateKey, 'public' => $publicKey); } return false; } include("classEditor.php"); include("classBrowser.php"); function SRVOk ( $value, $name, $row ) { global $BrowserCurrentRow; if ( empty($BrowserCurrentRow->domain) ) return ''; // skip empty rows $s = new iSchedule(); $s->domain = $BrowserCurrentRow->domain; return translate( ( $s->getServer()?'OK': SRVFormat ( $s->domain ) ) ); } function SRVFormat ( $domain ) { global $c; switch ( @$_REQUEST['srv_format'] ) { case 'dnsmasq': return 'srv_host=_ischedules._tcp.' . $domain .','. ($c->scheduling_dkim_domain?$c->scheduling_dkim_domain:$_SERVER['SERVER_NAME']) .','. $_SERVER['SERVER_PORT'] ; case 'bind': //_http._tcp.example.com. IN SRV 0 5 80 www.example.com. return '_ischedules._tcp.' . $domain .'. IN SRV 0 5 ' . $_SERVER['SERVER_PORT'] .' '. ($c->scheduling_dkim_domain?$c->scheduling_dkim_domain:$_SERVER['SERVER_NAME']) ; default: return '_ischedules._tcp.' . $domain .' '. ($c->scheduling_dkim_domain?$c->scheduling_dkim_domain:$_SERVER['SERVER_NAME']) .' '. $_SERVER['SERVER_PORT'] ; } } $browser = new Browser(translate('iSchedule Domains')); $browser->AddColumn( "domain", translate('Domain'),'left','' ); // function AddColumn( $field, $header="", $align="", $format="", $sql="", $class="", $datatype="", $hook=null ) { $browser->AddColumn( "srvok", translate('SRV Record'),'right','',"''",'','','SRVOk' ); $browser->SetJoins( "usr " ); $browser->SetWhere( " email is not null and email <> ''" ); $browser->SetDistinct( " split_part(email,'@',2) as " ); $sql = "select distinct split_part(email,'@',2) as domain from usr where email is not null and email <> ''"; $page_elements[] = $browser; $c->stylesheets[] = 'css/edit.css'; include("page-header.php"); /** * Page elements could be an array of viewers, browsers or something else * that supports the Render() method... or a non-object which we assume is * just a string of text that we echo. */ $heading_level = null; foreach( $page_elements AS $k => $page_element ) { if ( is_object($page_element) ) { echo $page_element->Render($heading_level); $heading_level = 'h2'; } else { echo $page_element; } } if (function_exists("post_render_function")) { post_render_function(); } include("page-footer.php"); davical-1.1.1/htdocs/public.php0000644000000000000000000000447211751113752013270 0ustar * @copyright Catalyst .Net Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ require("./always.php"); dbg_error_log( "caldav", " User agent: %s", ((isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "Unfortunately Mulberry does not send a 'User-agent' header with its requests :-(")) ); dbg_log_array( "headers", '_SERVER', $_SERVER, true ); require("PublicSession.php"); $session = new PublicSession(); /** A simplified DAV header in this case */ $dav = "1, 2, calendar-access"; header( "DAV: $dav"); require_once("CalDAVRequest.php"); $request = new CalDAVRequest(); if ( ! $request->IsPublic() && (! isset($request->ticket) || $request->ticket->expired || ! $request->ticket->MatchesPath($request->path) ) ) { dbg_error_log( "caldav", 'Public: %d, Ticket: %d, Expired: %d, Matches(%s): %d', $request->IsPublic(), isset($request->ticket), (isset($request->ticket)?$request->ticket->expired:'--'), $request->path, (isset($request->ticket)?$request->ticket->MatchesPath($request->path):'--') ); $request->DoResponse( 403, translate('Anonymous users may only access public calendars') ); } switch ( $request->method ) { case 'OPTIONS': include_once("caldav-OPTIONS.php"); break; case 'REPORT': include_once("caldav-REPORT.php"); break; case 'PROPFIND': include_once("caldav-PROPFIND.php"); break; case 'GET': include_once("caldav-GET.php"); break; case 'HEAD': include_once("caldav-GET.php"); break; case 'PROPPATCH': case 'MKCALENDAR': case 'MKCOL': case 'PUT': case 'DELETE': case 'LOCK': case 'UNLOCK': $request->DoResponse( 403, translate('Anonymous users are not allowed to modify calendars') ); break; case 'TESTRRULE': include_once("test-RRULE.php"); break; default: dbg_error_log( "caldav", "Unhandled request method >>%s<<", $request->method ); dbg_log_array( "caldav", '_SERVER', $_SERVER, true ); dbg_error_log( "caldav", "RAW: %s", str_replace("\n", "",str_replace("\r", "", $request->raw_post)) ); } $request->DoResponse( 500, translate("The application program does not understand that request.") ); davical-1.1.1/htdocs/help.php0000644000000000000000000000244111633117640012733 0ustar LoginRequired(); include("interactive-page.php"); $c->page_title = "DAViCal CalDAV Server - Configuration Help"; include("page-header.php"); $wiki_help = ''; if ( isset($_SERVER['HTTP_REFERER']) ) { $wiki_help = preg_replace('#^.*/#', '', $_SERVER['HTTP_REFERER']); $wiki_help = preg_replace('#\.php.*$#', '', $wiki_help); $wiki_help = 'w/Help/'.$wiki_help; } $content = sprintf(translate('

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can\'t find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

'), $wiki_help); echo $content; include("page-footer.php"); davical-1.1.1/htdocs/index.php0000644000000000000000000000554411654150355013124 0ustar LoginRequired(); include("interactive-page.php"); include("page-header.php"); echo <<Administration

You are logged on as $session->username ($session->fullname)

EOBODY; ?>

Administration Functions

The administration of this application should be fairly simple. You can administer:

  • Users (or Resources or Groups) and the relationships between them
  • The types of relationships that are available

There is no ability to view and / or maintain calendars or events from within this administrative interface.

To do that you will need to use a CalDAV capable calendaring application such as Evolution, Sunbird, Thunderbird (with the Lightning extension) or Mulberry.

Principals: Users, Resources and Groups

These are the things which may have collections of calendar resources (i.e. calendars).

Here is a list of users (maybe :-). You can click on any user to see the full detail for that person (or group or resource - but from now we'll just call them users).

The primary differences between them are as follows:

  • Users will probably have calendars, and are likely to also log on to the system.
  • Resources do have calendars, but they will not usually log on.
  • Groups provide an intermediate linking to minimise administration overhead. They might not have calendars, and they will not usually log on.

Groups & Grants

  • Grants specify the access rights to a collection or a principal
  • Groups allow those granted rights to be assigned to a set of many principals in one action
  • Groups may be members of other groups, but complex nesting will hurt system performance

Configuring Calendar Clients for DAViCal

The DAViCal client setup page on sourceforge have information on how to configure Evolution, Sunbird, Lightning and Mulberry to use remotely hosted calendars.

The administrative interface has no facility for viewing or modifying calendar data.

Configuring DAViCal

If you can read this then things must be mostly working already.

The DAViCal installation page on sourceforge has some further information on how to install and configure this application.

a, .menu ul ul :hover > a, .menu a:hover, .menu ul ul a:hover { background-color:#3050c0; color:#f0f0a0; text-decoration:none; } /* make the second level visible when hover on first level list OR link */ .menu ul li:hover ul, .menu ul a:hover ul{ visibility:visible; } davical-1.1.1/htdocs/css/0000755000000000000000000000000011776303360012065 5ustar davical-1.1.1/htdocs/css/edit.css0000644000000000000000000000361011754173233013524 0ustar .left { text-align:left; } .center { text-align:center; white-space:nowrap; } .money, .right { text-align:right; } .entry, input.money, input.date { padding: 0; margin: 0 -2px; /* border: 1px #fffff0 dashed; background-color: #f0f8d0; */ font-size: 0.9em; font-family: Courier New, Courier, fixed; } input[type="checkbox"].entry { margin-top:0.25em; } select.entry { font-family: Helvetica Narrow, Arial Narrow, sans-serif; font-size: 85%; } th.h2 { font-size: 130%; font-weight: bold; font-family: verdana, sans-serif; padding: 0 0.3em; margin: 1px 0 0 0; line-height: inherit; text-align: left; } input { margin: 0; font-family: Courier New, monospace; } label, th.prompt { font-family: Verdana, sans-serif; font-weight: bolder; font-size: 110%; text-align: right; } label.entry { font-family: Verdana, sans-serif; font-weight: bolder; margin:0.2em 1em 0.2em 0.1em; padding:0 0.2em; line-height:1.6em; font-weight: bolder; } a.order, a.invisilink { text-decoration:none; color: inherit; } .submit { text-decoration: none; font: small-caps bold 95% sans-serif; color: #fff; background-color: #483D8B; padding: 0px 1px 1px 1px; margin: 0; vertical-align: text-bottom; border: thin outset; -moz-border-radius: 3px; } .submit:hover { color: #FFD700; border: thin inset; } a.submit { padding: 0.07em 0.25em; } table { background-color: #F0E8FF; border-collapse:collapse; margin-top:1px; margin-bottom:0.1em; } th { padding: 0.15em 0.3em 0; font-weight: bolder; background-color: #F0E8FF; } td { padding: 0 0.2em; border: thin white solid; } tr { vertical-align:top; border: thin white solid; } table.form_inner, table.form_inner tr, table.form_inner td, table.form_inner th { margin: 0; padding-left: 0; border: 0; border-collapse: collapse; } table.form_inner { width: 100%; } davical-1.1.1/htdocs/css/browse.css0000644000000000000000000000075111314625510014073 0ustar /* CSS for browse pages in DAViCal */ tr.header th, td { padding: 1px 4px; } tr.header th { font-family: Arial Narrow, sans-serif; background-color: #CDF; color: black; } tr.header a { color: inherit; text-decoration:none; border:0; } tr.r0:hover, tr.r1:hover { background-color:#AADEFF; } tr.r0 { background-color: white; } tr.r1 { background-color: #DEF; } img.order { border:0; } .right { text-align:right; } .left { text-align:left; } #browser h2 { margin: 0.8em 0 0.1em; }davical-1.1.1/htdocs/tools.php0000644000000000000000000001564511701150636013153 0ustar * @copyright Maxime Delorme * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 */ require_once("./always.php"); require_once("DAViCalSession.php"); $session->LoginRequired(); require_once("DataEntry.php"); require_once("interactive-page.php"); require_once("classBrowser.php"); require_once("caldav-PUT-functions.php"); include_once('check_UTF8.php'); if ( !$session->AllowedTo("Admin" ) ) { @ob_flush(); exit(0); } if( function_exists("sync_LDAP") && isset($_POST['Sync_LDAP'])){ sync_LDAP(); } if( function_exists("sync_LDAP_groups") && isset($_POST['Sync_LDAP_groups'])){ sync_LDAP_groups(); } if(isset($_POST['import_from_directory'])){ Tools::importFromDirectory(); } class Tools { function render(){ global $c; echo $this->renderImportFromDirectory(); if ( isset($c->authenticate_hook['call']) && $c->authenticate_hook['call'] == 'LDAP_check' && function_exists("sync_LDAP") ) { echo $this->renderSyncLDAP(); } } static function renderSyncLDAP(){ $html = '
'; $html .= '

'.translate('Sync LDAP with DAViCal') .'

'; $data = (object) array('directory_path' => '/path/to/your/ics/files','calendar_path' => 'home'); $ef = new EntryForm( $_SERVER['REQUEST_URI'],$data , true,true ); $html .= "\n"; $html .= $ef->StartForm( array("autocomplete" => "off" ) ); $html .= sprintf( "\n", translate("This operation does the following:
  • check valid users in LDAP directory
  • check users in DAViCal
then
  • if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • if a user is present in LDAP but not in DAViCal create the user in DAViCal
  • if a user in present in LDAP and DAViCal then update information in DAViCal
")); $html .= "
%s
\n"; $html .= $ef->SubmitButton( "Sync_LDAP", translate('Submit')); $html .= '

'.translate('Sync LDAP Groups with DAViCal') .'

'; $html .= "\n"; $html .= $ef->StartForm( array("autocomplete" => "off" ) ); $html .= sprintf( "\n", translate("This operation does the following:
  • check valid groups in LDAP directory
  • check groups in DAViCal
then
  • if a group is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in DAViCal
")); $html .= "
%s
\n"; $html .= $ef->SubmitButton( "Sync_LDAP_groups", translate('Submit')); $html .= $ef->EndForm(); $html .= "
"; return $html; } static function renderImportFromDirectory(){ $html = '
'; $html .= '

'.translate('Import all .ics files of a directory') .'

'; $html .= '

'.translate('This process will import each file in a directory named "username.ics" and create a user and calendar for each file to import.') .'

'; $data = (object) array('directory_path' => '/path/to/your/ics/files','calendar_path' => 'calendar'); $ef = new EntryForm( $_SERVER['REQUEST_URI'],$data , true,true ); $html .= "\n"; $html .= $ef->StartForm( array("autocomplete" => "off" ) ); $html .= $ef->DataEntryLine( translate("path to store your ics"), "%s", "text", "calendar_path", array( "size" => 20, "title" => translate("Set the path to store your ics e.g. 'calendar' will be referenced as /caldav.php/username/calendar/"), "help" => translate("WARNING: all events in this path will be deleted before inserting allof the ics file") ) , '' ); $html .= $ef->DataEntryLine( translate("Directory on the server"), "%s", "text", "directory_path", array( "size" => 20, "title" => translate("The path on the server where your .ics files are."))); $html .= "
\n"; $html .= $ef->SubmitButton( "import_from_directory", translate('Submit')); $html .= $ef->EndForm(); $html .= "
"; return $html; } static function importFromDirectory(){ global $c; if(empty($_POST["calendar_path"])){ dbg_error_log( "importFromDirectory", "calendar path not given"); return ; } $path_ics = $_POST["calendar_path"]; if ( substr($path_ics,-1,1) != '/' ) $path_ics .= '/'; // ensure that we target a collection if ( substr($path_ics,0,1) != '/' ) $path_ics = '/'.$path_ics; // ensure that we target a collection if(empty($_POST["directory_path"])){ dbg_error_log( "importFromDirectory", "directory path not given"); return ; } $dir = $_POST["directory_path"]; if(!is_readable($dir)){ $c->messages[] = sprintf(i18n('directory %s is not readable'),htmlspecialchars($dir)); dbg_error_log( "importFromDirectory", "directory is not readable"); return ; } if ($handle = opendir($dir)) { $c->readonly_webdav_collections = false; // Override this setting so we can create collections/events on import. while (false !== ($file = readdir($handle))) { if ($file == "." || $file == ".." || substr($file,-4) != '.ics') continue; if ( !is_readable($dir.'/'.$file) ) { dbg_error_log( "importFromDirectory", "ics file '%s' is not readable",$dir .'/'.$file); continue; } $ics = file_get_contents($dir.'/'.$file); $ics = trim($ics); if ( $ics != '' ) { if ( ! check_string($ics) ) { $c->messages[] = sprintf(translate('The file "%s" is not UTF-8 encoded, please check error for more details'),$dir.'/'.$file); continue; } $username = substr($file,0,-4); $principal = new Principal('username',$username); if ( !$principal->Exists() ) { $c->messages[] = sprintf(translate('The principal "%s" does not exist'),$username); continue; } $path = "/".$username.$path_ics; $user_no = $principal->user_no(); if ( controlRequestContainer($username, $user_no, $path, false) === -1) continue; dbg_error_log( "importFromDirectory", "importing to $path"); import_collection($ics,$user_no,$path,1); $c->messages[] = sprintf(translate('All events of user "%s" were deleted and replaced by those from file %s'),substr($file,0,-4),$dir.'/'.$file); } } closedir($handle); } } } $Tools = new Tools(); include("page-header.php"); $Tools->render(); include("page-footer.php"); davical-1.1.1/htdocs/images/0000755000000000000000000000000011776303360012542 5ustar davical-1.1.1/htdocs/images/down.gif0000644000000000000000000000007210705234304014167 0ustar GIF89a !, @ b<.;davical-1.1.1/htdocs/images/up.gif0000644000000000000000000000007310705234304013645 0ustar GIF89a !, @ qb& ;davical-1.1.1/htdocs/freebusy.php0000644000000000000000000000650611633117640013635 0ustar public_freebusy_url) && $c->public_freebusy_url ) { require_once("PublicSession.php"); $session = new PublicSession(); } else { require_once("HTTPAuthSession.php"); $session = new HTTPAuthSession(); } /** * Submission parameters recommended by calconnect, plus some generous alternatives */ param_to_global('fb_start', '#^[a-z0-9/:.,+-]+$#i', 'start', 'from'); param_to_global('fb_end', '#^[a-z0-9/:.,+-]+$#i', 'end', 'until', 'finish', 'to'); param_to_global('fb_period', '#^[+-]?P?(\d+[WD]?)(T(\d+H)?(\d+M)?(\d+S)?)?+$#', 'period'); param_to_global('fb_format', '#^\S+/\S+$#', 'format'); param_to_global('fb_user', '#^.*$#', 'user', 'userid', 'user_no', 'email'); param_to_global('fb_token', '#^[a-z0-9+/-]+$#i', 'token'); if ( isset($fb_period) ) $fb_period = strtoupper($fb_period); if ( !isset($fb_start) || $fb_start == '' ) $fb_start = date('Y-m-d\TH:i:s', time() - 86400 ); // no recommended default. -1 day if ( (!isset($fb_period) && !isset($fb_end)) || ($fb_period == '' && $fb_end == '') ) $fb_period = 'P44D'; // 44 days - 2 days more than recommended default /** * If fb_user (user, userid, user_no or email parameter) then we adjust * the path of the request to suit. */ if ( isset($fb_user) ) $_SERVER['PATH_INFO'] = '/'.$fb_user.'/'; /** * We also allow URLs like .../freebusy.php/user@example.com to work, so long as * the e-mail matches a single user whose calendar we have rights to. * @NOTE: It is OK for there to *be* duplicate e-mail addresses, just so long as we * only have read permission (or more) for only one of them. */ require_once("CalDAVRequest.php"); $request = new CalDAVRequest(array("allow_by_email" => 1)); $path_match = '^'.$request->path; if ( preg_match( '{^/(\S+@[a-z0-9][a-z0-9-]*[.][a-z0-9.-]+)/?$}i', $request->path, $matches ) ) { $principal = new Principal('email',$matches[1]); $path_match = '^'.$principal->dav_name(); } if ( isset($fb_format) && $fb_format != 'text/calendar' ) { $request->DoResponse( 406, translate('This server only supports the text/calendar format for freebusy URLs') ); } if ( ! $request->HavePrivilegeTo('read-free-busy') ) $request->DoResponse( 404 ); require_once("freebusy-functions.php"); switch ( $_SERVER['REQUEST_METHOD'] ) { case 'GET': $range_start = new RepeatRuleDateTime($fb_start); if ( !isset($fb_end) ) { $range_end = clone($range_start); $range_end->modify($fb_period); } else { $range_end = new RepeatRuleDateTime($fb_end); } $freebusy = get_freebusy( $path_match, $range_start, $range_end ); $result = new iCalComponent(); $result->VCalendar(); $result->AddComponent($freebusy); $request->DoResponse( 200, $result->Render(), 'text/calendar' ); break; default: dbg_error_log( "freebusy", "Unhandled request method >>%s<<", $_SERVER['REQUEST_METHOD'] ); dbg_log_array( "freebusy", 'HEADERS', $raw_headers ); dbg_log_array( "freebusy", '_SERVER', $_SERVER, true ); @dbg_error_log( "freebusy", "RAW: %s", str_replace("\n", "",str_replace("\r", "", $request->raw_post)) ); } davical-1.1.1/htdocs/.htaccess0000644000000000000000000000160611265573044013077 0ustar # SetHandler php-script # # Order allow,deny # Allow from all # # # # Order deny,allow # Deny from all # # RewriteEngine On # # Not if it's the root URL. You might want to comment this out if you # # want to use an explicit /index.php for getting to the admin pages. # RewriteCond %{REQUEST_URI} !^/$ # RewriteCond %{REQUEST_URI} !^/davical/$ # # Not if it explicitly specifies a .php program, stylesheet or image # RewriteCond %{REQUEST_URI} !\.(php|css|js|png|gif|jpg) # # Everything else gets rewritten to /caldav.php/... # RewriteRule ^(.*)$ /caldav.php$1 [NC,L] # # php_value include_path /usr/share/awl/inc # php_value magic_quotes_gpc 0 # php_value register_globals 0 # php_value open_basedir 1 # php_value error_reporting "E_ALL & ~E_NOTICE" # php_value default_charset "utf-8" davical-1.1.1/VERSION0000644000000000000000000000000611776150052011053 0ustar 1.1.1 davical-1.1.1/scripts/0000755000000000000000000000000011776303360011500 5ustar davical-1.1.1/scripts/load_calendar.php0000755000000000000000000000634111720660640014764 0ustar #!/usr/bin/env php readonly_webdav_collections = false; // Override any active default. dbg_error_log('load-collection',':Write: Loaded %d bytes from %s', strlen($ics), $source ); if ( !check_string($ics) ) { $ics = force_utf8($ics); if ( !check_string($ics) ) { printf( "The source file '%s' contains some non-UTF-8 characters.\n", $source ); exit(1); } } class FakeSession { var $user_no; var $principal_id; var $username; var $email; var $dav_name; var $principal; var $logged_in; function __construct($user_no = null) { if ( empty($user_no) ) { $this->user_no = -1; $this->principal_id = -1; $this->logged_in = false; return; } $this->user_no = $user_no; $principal = new Principal('user_no',$user_no); // Assign each field in the selected record to the object foreach( $principal AS $k => $v ) { $this->{$k} = $v; } $this->username = $principal->username(); $this->principal_id = $principal->principal_id(); $this->email = $principal->email(); $this->dav_name = $principal->dav_name(); $this->principal = $principal; $this->logged_in = true; } function AllowedTo($do_something) { return $this->logged_in; } } $session = new FakeSession(); $dest = new DAVResource($target); $session = new FakeSession($dest->user_no()); if ( $mode == 'append' && ! $dest->Exists() ) { printf( "The target '%s' does not exist.\n", $target ); exit(1); } if ( ! $dest->IsCollection() ) { printf( "The target '%s' is not a collection.\n", $target ); exit(1); } $user_no = $dest->user_no(); $username = $session->username; param_to_global('mode'); include_once('caldav-PUT-functions.php'); controlRequestContainer( $session->username, $dest->user_no(), $target, false, ($dest->IsPublic() ? true : false)); import_collection( $ics, $dest->user_no(), $target, $session->user_no, ($mode == 'append') ); printf(translate("Calendar '%s' was loaded from file.\n"), $target); davical-1.1.1/scripts/sync-remote-caldav.php0000755000000000000000000004374711633117640015724 0ustar #!/usr/bin/php sync_all = false; // Back to basics and sync everything into one mess $args->local_changes_win = true; // If true, and something has changed at both places, our local update will overwrite the remote $args->sync_in = false; // If true, remote changes will be applied locally $args->sync_out = false; // If true, local changes will be applied remotely $args->cache_directory = '.sync-cache'; function parse_arguments() { global $args; $opts = getopt( 'u:U:p:c:w:ioa' ); foreach( $opts AS $k => $v ) { switch( $k ) { case 'u': $args->url = $v; break; case 'U': $args->user = $v; break; case 'p': $args->pass = $v; break; case 'a': $args->sync_all = true; break; case 'c': $args->local_collection_path = $v; break; case 'w': $args->local_changes_win = (strtolower($v) != 'remote' ); break; case 'i': $args->sync_in = true; break; case 'o': $args->sync_out = true; break; case 'h': usage(); break; default: $args->{$k} = $v; } } } function usage() { echo << -U -p -c [...options] Required Options: -u The URL of the caldav collection on the remote server. -U The username on the remote server to connect as -p The password for the remote server -c The path to the local collection, e.g. /username/home/ note that any part of the local URL up to and including 'caldav.php' should be omitted. Other Options: -w remote If set to 'remote' and changes are seen in both calendars, the remote server will 'win' the argument. Any other value and the default will apply in that the changes on the local server will prevail. -i Sync inwards only. -o Sync outwards only EOUSAGE; exit(0); } parse_arguments(); if ( !isset($args->url) ) usage(); if ( !isset($args->user) ) usage(); if ( !isset($args->pass) ) usage(); if ( !isset($args->local_collection_path) ) usage(); if ( !preg_match('{/$}', $args->local_collection_path) ) $args->local_collection_path .= '/'; if ( !preg_match('{^/[^/]+/[^/]+/$}', $args->local_collection_path) ) { printf( "The local URL of '%s' looks wrong. It should be formed as '/username/collection/'\n", $args->local_collection_path ); } if ( !preg_match('{/$}', $args->url) ) $args->url .= '/'; $caldav = new CalDAVClient( $args->url, $args->user, $args->pass ); // // This will find the 'Principal URL' which we can query for user-related // // properties. // $principal_url = $caldav->FindPrincipal($args->url); // // // This will find the 'Calendar Home URL' which will be the folder(s) which // // contain all of the user's calendars // $calendar_home_set = $caldav->FindCalendarHome(); // // $calendar = null; // // // This will go through the calendar_home_set and find all of the users // // calendars on the remote server. // $calendars = $caldav->FindCalendars(); // if ( count($calendars) < 1 ) { // printf( "No calendars found based on '%s'\n", $args->url ); // } // // // Now we have all of the remote calendars, we will look for the URL that // // matches what we were originally supplied. While this seems laborious // // because we already have it, it means we could provide a match in some // // other way (e.g. on displayname) and we could also present a list to // // the user which is built from following the above process. // foreach( $calendars AS $k => $a_calendar ) { // if ( $a_calendar->url == $args->url ) $calendar = $a_calendar; // } // if ( !isset($calendar) ) $calendar = $calendars[0]; // In reality we could have omitted all of the above parts, If we really do // know the correct URL at the start. // Everything now will be at our calendar URL $caldav->SetCalendar($args->url); $calendar = $caldav->GetCalendarDetails(); printf( "Remote calendar '%s' is at %s\n", $calendar->displayname, $calendar->url ); // Generate a consistent filename for our synchronisation cache if ( ! file_exists($args->cache_directory) && ! is_dir($args->cache_directory) ) { mkdir($args->cache_directory, 0750 ); // Not incredibly sensitive file contents - URLs and ETags } $sync_cache_filename = $args->cache_directory .'/'. md5($args->user . $calendar->url); // Do we just need to sync everything across and overwrite all the local stuff? $sync_all = ( !file_exists($sync_cache_filename) || $args->sync_all); $sync_in = false; $sync_out = false; if ( $args->sync_in || !$args->sync_out ) $sync_in = true; if ( $args->sync_out || !$args->sync_in ) $sync_out = true; if ( ! $sync_all ) { /** * Read a structure out of the cache file containing: * server_getctag - A collection tag (string) from the remote server * local_getctag - A collection tag (string) from the local DB * server_etags - An array of event tags (strings) keyed on filename, from the server * local_etags - An array of event tags (strings) keyed on filename, from local DAViCal */ $cache = unserialize( file_get_contents($sync_cache_filename) ); // First compare the ctag for the calendar if ( isset($cache) && isset($cache->server_ctag) && isset($calendar->getctag) && $calendar->getctag == $cache->server_ctag ) { printf( 'No changes to remote calendar "%s" at "%s"'."\n", $calendar->displayname, $calendar->url ); $sync_in = false; } $qry = new AwlQuery('SELECT collection_id, dav_displayname AS displayname, dav_etag AS getctag FROM collection WHERE dav_name = :collection_dav_name', array(':collection_dav_name' => $args->local_collection_path) ); if ( $qry->Exec('sync-pull',__LINE__,__FILE__) && $qry->rows() > 0 ) { $local_calendar = $qry->Fetch(); // First compare the ctag for the calendar if ( isset($cache) && isset($cache->local_ctag) && isset($local_calendar->getctag) && $local_calendar->getctag == $cache->local_ctag ) { printf( 'No changes to local calendar "%s" at "%s"'."\n", $local_calendar->displayname, $args->local_collection_path ); $sync_out = false; } } } if ( !isset($cache) || !isset($cache->server_ctag) ) $sync_all = true; $remote_event_prefix = preg_replace('{^https?://[^/]+/}', '/', $calendar->url); $insert_urls = array(); $update_urls = array(); $local_delete_urls = array(); $server_delete_urls = array(); $push_urls = array(); $push_events = array(); $newcache = (object) array( 'server_ctag' => $calendar->getctag, 'local_ctag' => (isset($local_calendar->getctag) ? $local_calendar->getctag : null), 'server_etags' => array(), 'local_etags' => array() ); if ( isset($cache) ) { if ( !$sync_in && isset($cache->server_etags) ) $newcache->server_etags = $cache->server_etags; if ( !$sync_out && isset($cache->local_etags) ) $newcache->local_etags = $cache->local_etags; } if ( $sync_in ) { // So it seems we do need to sync. We now need to check each individual event // which might have changed, so we pull a list of event etags from the server. $server_etags = $caldav->GetCollectionETags(); // printf( "\nGetCollectionEtags Response:\n%s\n", $caldav->GetXmlResponse() ); // print_r( $server_etags ); if ( $sync_all ) { // The easy case. Sync them all, delete nothing $insert_urls = $server_etags; foreach( $server_etags AS $href => $etag ) { $fname = preg_replace('{^.*/}', '', $href); $newcache->server_etags[$fname] = $etag; printf( 'Need to pull "%s"'."\n", $href ); } } else { // Only sync the ones where the etag has changed. Delete any that are no // longer present at the remote end. foreach( $server_etags AS $href => $etag ) { $fname = preg_replace('{^.*/}', '', $href); $newcache->server_etags[$fname] = $etag; if ( isset($cache->server_etags[$fname]) ) { $cache_etag = $cache->server_etags[$fname]; unset($cache->server_etags[$fname]); if ( $cache_etag == $etag ) continue; $update_urls[$href] = 1; printf( 'Need to pull to update "%s"'."\n", $href ); } else { $insert_urls[$href] = 1; printf( 'Need to pull to insert "%s"'."\n", $href ); } } $local_delete_urls = $cache->server_etags; } // Fetch the calendar data $events = $caldav->CalendarMultiget( array_merge( array_keys($insert_urls), array_keys($update_urls)) ); // printf( "\nCalendarMultiget Request:\n%s\n Response:\n%s\n", $caldav->GetXmlRequest(), $caldav->GetXmlResponse() ); // print_r($events); printf( "Fetched %d possible changes.\n", count($events) ); if ( !preg_match( '{/$}', $remote_event_prefix) ) $remote_event_prefix .= '/'; } /** * This is a fairly tricky bit. We find local changes and check to see if they * are collisions. We actually have to check the data for a collision, since the * real data may in fact be identical, e.g. because of the -a option or something. * * Once we have verified that the target objects actually *are* different, then: * Change vs No change => The change is propagated to the other server * DELETE vs UPDATE/INSERT => DELETE always loses * UPDATE vs UPDATE => pick the winner according to arbitrary setting (see top of file) * INSERT vs INSERT => pick the winner according to arbitrary setting (see top of file) v. unlikely */ // Read the local ETag from DAViCal. $qry = new AwlQuery( 'SELECT dav_name, dav_etag, caldav_data FROM caldav_data WHERE collection_id = (SELECT collection_id FROM collection WHERE dav_name = :collection_dav_name)', array(':collection_dav_name' => $args->local_collection_path) ); if ( $qry->Exec('sync-pull',__LINE__,__FILE__) && $qry->rows() > 0 ) { $local_etags = array(); while( $local = $qry->Fetch() ) { $fname = preg_replace('{^.*/}', '', $local->dav_name); $newcache->local_etags[$fname] = $local->dav_etag; if ( !$sync_all && isset($cache->local_etags[$fname]) ) { $cache_etag = $cache->local_etags[$fname]; unset($cache->local_etags[$fname]); if ( $cache_etag == $local->dav_etag ) continue; } if ( isset($insert_urls[$remote_event_prefix.$fname]) ) { if ( $local->caldav_data == $events[$remote_event_prefix.$fname] ) { // Not actually changed. Ignore it at *both* ends! printf( "Not inserting '%s' (same at both ends).\n", $fname ); unset($insert_urls[$remote_event_prefix.$fname]); continue; } unset($insert_urls[$remote_event_prefix.$fname]); if ( ! $args->local_changes_win ) { printf( "Remote change to '%s' will overwrite local.\n", $fname ); $update_urls[$remote_event_prefix.$fname] = 1; continue; } printf( "Local change to '%s' will overwrite remote.\n", $fname ); } else if ( isset($update_urls[$remote_event_prefix.$fname]) ) { if ( $local->caldav_data == $events[$remote_event_prefix.$fname] ) { // Not actually changed. Ignore it at *both* ends! printf( "Not updating '%s' (same at both ends).\n", $fname ); unset($update_urls[$remote_event_prefix.$fname]); continue; } if ( $args->local_changes_win ) { unset($update_urls[$remote_event_prefix.$fname]); printf( "Local change to '%s' will overwrite remote.\n", $fname ); } else { printf( "Remote change to '%s' will overwrite local.\n", $fname ); continue; } } if ( $sync_out ) { $push_urls[$fname] = (isset($cache->server_etags[$remote_event_prefix.$fname]) ? $cache->server_etags[$remote_event_prefix.$fname] : '*'); $push_events[$fname] = $local->caldav_data; printf( "Need to push '%s'\n", $local->dav_name ); } else { printf( "Would push '%s' but not syncing out.\n", $local->dav_name ); } } if ( !$sync_all ) { foreach( $cache->local_etags AS $href => $etag ) { $fname = preg_replace('{^.*/}', '', $href); if ( !isset($insert_urls[$remote_event_prefix.$fname]) && !isset($update_urls[$remote_event_prefix.$fname]) && isset($cache->server_etags[$fname]) ) { $server_delete_urls[$fname] = $cache->server_etags[$remote_event_prefix.$fname]; printf( "Need to delete remote '%s'.\n", $fname ); } } } } printf( "Push: Found %d local changes to push & %d local deletions to push.\n", count($push_urls), count($server_delete_urls) ); printf( "Pull: Found %d creates, %d updates and %d deletions to apply locally.\n", count($insert_urls), count($update_urls), count($local_delete_urls) ); if ( $sync_in ) { printf( "Sync in\n" ); // Delete any local events which have been removed from the remote server foreach( $local_delete_urls AS $href => $v ) { $fname = preg_replace('{^.*/}', '', $href); $local_fname = $args->local_collection_path . $fname; $qry = new AwlQuery('DELETE FROM caldav_data WHERE caldav_type!=\'VTODO\' and dav_name = :dav_name', array( ':dav_name' => $local_fname ) ); $qry->Exec('sync_pull',__LINE__,__FILE__); unset($newcache->local_etags[$fname]); } unset($c->dbg['querystring']); // Update the local system with events that are new or updated on the remote server foreach( $events AS $href => $event ) { // Do what we need to write $v into the local calendar we are syncing to // at the $fname = preg_replace('{^.*/}', '', $href); $local_fname = $args->local_collection_path . $fname; simple_write_resource( $local_fname, $event, (isset($insert_urls[$href]) ? 'INSERT' : 'UPDATE') ); $newcache->local_etags[$fname] = md5($event); } $qry = new AwlQuery('SELECT collection_id, dav_displayname AS displayname, dav_etag AS getctag FROM collection WHERE dav_name = :collection_dav_name', array(':collection_dav_name' => $args->local_collection_path) ); if ( $qry->Exec('sync-pull',__LINE__,__FILE__) && $qry->rows() > 0 ) { $local_calendar = $qry->Fetch(); if ( isset($local_calendar->getctag) ) $newcache->local_ctag = $local_calendar->getctag; } } if ( $sync_out ) { printf( "Sync out\n" ); // Delete any remote events which have been removed from the local server foreach( $server_delete_urls AS $href => $etag ) { $caldav->DoDELETERequest( $args->url . $href, $etag ); printf( "\nDELETE Response:\n%s\n", $caldav->GetResponseHeaders() ); unset($newcache->server_etags[$fname]); } // Push locally updated events to the remote server foreach( $push_urls AS $href => $etag ) { $new_etag = $caldav->DoPUTRequest( $args->url . $href, $push_events[$href], $etag ); printf( "\nPUT:\n%s\nResponse:\n%s\n", $caldav->GetHttpRequest(), $caldav->GetResponseHeaders() ); if ( !isset($new_etag) || $new_etag == '' ) { if ( preg_match( '{^Location:\s+.*/([^/]+)$}im', $caldav->GetResponseHeaders(), $matches ) ) { /** How annoying. It seems the other server renamed the event on PUT so we move the local copy to match their name */ $new_href = preg_replace( '{\r?\n.*$}s', '', $matches[1]); $qry = new AwlQuery('UPDATE caldav_data SET dav_name = :new_dav_name WHERE dav_name = :old_dav_name', array( ':new_dav_name' => $args->local_collection_path . $new_href, ':old_dav_name' => $args->local_collection_path . $href ) ); $qry->Exec('sync_pull',__LINE__,__FILE__); $new_cache->local_etags[$new_href] = $new_cache->local_etags[$href]; unset($new_cache->local_etags[$href]); $href = $new_href; $caldav->DoHEADRequest( $args->url . $href ); if ( preg_match( '{^Etag:\s+"([^"]*)"\s*$}im', $caldav->httpResponseHeaders, $matches ) ) $new_etag = $matches[1]; printf( "\nHEAD:\n%s\nResponse:\n%s\n", $caldav->GetHttpRequest(), $caldav->GetResponseHeaders() ); } if ( !isset($new_etag) || $new_etag == '' ) { printf( "Unable to retrieve ETag for new event on remote server. Forcing bad ctag."); $force_ctag = 'Naughty server!'; } } $newcache->server_etags[$href] = $new_etag; } $calendar = $caldav->GetCalendarDetails(); if ( isset($force_ctag) ) $newcache->server_ctag = $force_ctag; else if ( isset($calendar->getctag) ) $newcache->server_ctag = $calendar->getctag; } // Now (re)write the cache file reflecting the current state. printf( "Rewriting cache file.\n" ); $cache_file = fopen($sync_cache_filename, 'w'); fwrite( $cache_file, serialize($newcache) ); fclose($cache_file); print_r($newcache); printf( "Completed.\n" ); davical-1.1.1/scripts/refresh-alarms.php0000755000000000000000000001451111656366130015132 0ustar #!/usr/bin/env php * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ $script_file = __FILE__; chdir(str_replace('/scripts/refresh-alarms.php','/htdocs',$script_file)); $_SERVER['SERVER_NAME'] = 'localhost'; /** * Call with something like e.g.: * * scripts/refresh_alarms.php -p P1800D -f P1D * */ $args = (object) array(); $args->debug = false; $args->set_last = false; $args->future = 'P400D'; $args->near_past = 'P1D'; $debugging = null; function parse_arguments() { global $args; $opts = getopt( 'f:p:s:d:lh' ); foreach( $opts AS $k => $v ) { switch( $k ) { case 'f': $args->future = $v; break; case 'p': $args->near_past = $v; break; case 's': $_SERVER['SERVER_NAME'] = $v; break; case 'd': $args->debug = true; $debugging = explode(',',$v); break; case 'l': $args->set_last = true; break; case 'h': usage(); break; default: $args->{$k} = $v; } } } function usage() { echo << The servername to be used to identify the DAViCal configuration file. -p Near past period to review for finding recently last instances: default 1 days ('P1D') -f Future period to consider for finding future alarms: default ~5 years ('P2000D') -l Try to set the 'last' alarm date in historical alarms -d xxx Enable debugging where 'xxx' is a comma-separated list of debug subsystems USAGE; exit(0); } parse_arguments(); if ( $args->debug && is_array($debugging )) { foreach( $debugging AS $v ) { $c->dbg[$v] = 1; } } $args->near_past = '-' . $args->near_past; require_once("./always.php"); require_once('AwlQuery.php'); require_once('RRule-v2.php'); require_once('vCalendar.php'); /** * Essentially what we are doing is: * UPDATE calendar_alarm SET next_trigger = (SELECT rrule_event_instances_range( dtstart + icalendar_interval_to_SQL(replace(trigger,'TRIGGER:','')), rrule, current_timestamp, current_timestamp + '2 days'::interval, 1) LIMIT 1) FROM calendar_item WHERE calendar_alarm.dav_id = calendar_item.dav_id AND next_trigger is null AND rrule IS NOT NULL */ $expand_range_start = new RepeatRuleDateTime(gmdate('Ymd\THis\Z')); $expand_range_end = new RepeatRuleDateTime(gmdate('Ymd\THis\Z')); $expand_range_end->modify( $args->future ); $earliest = clone($expand_range_start); $earliest->modify( $args->near_past ); if ( $args->debug ) printf( "Looking for event instances between '%s' and '%s'\n", $earliest->UTC(), $expand_range_end->UTC() ); $sql = 'SELECT * FROM calendar_alarm JOIN calendar_item USING (dav_id) JOIN caldav_data USING (dav_id) WHERE rrule IS NOT NULL AND next_trigger IS NULL'; if ( $args->debug ) printf( "%s\n", $sql ); $qry = new AwlQuery( $sql ); if ( $qry->Exec() && $qry->rows() ) { while( $alarm = $qry->Fetch() ) { if ( $args->debug ) printf( "refresh: Processing alarm for '%s' based on '%s','%s', '%s'\n", $alarm->dav_name, $alarm->dtstart, $alarm->rrule, $alarm->trigger ); $ic = new vComponent( $alarm->caldav_data ); $expanded = expand_event_instances( $ic, $earliest, $expand_range_end ); $expanded->MaskComponents( array( 'VEVENT'=>1, 'VTODO'=>1, 'VJOURNAL'=>1 ) ); $instances = $expanded->GetComponents(); $trigger = new vProperty( $alarm->trigger ); $related = $trigger->GetParameterValue('RELATED'); $first = new RepeatRuleDateTime($alarm->dtstart); $first->modify( $trigger->Value() ); $next = null; $last = null; foreach( $instances AS $k => $component ) { $when = new RepeatRuleDateTime( $component->GetPValue('DTSTART') ); // a UTC value if ( $args->debug ) printf( "refresh: Looking at event instance on '%s'\n", $when->UTC() ); if ( $related == 'END' ) { $when->modify( $component->GetPValue('DURATION') ); } $when->modify( $trigger->Value() ); if ( $when > $expand_range_start && $when < $expand_range_end && (!isset($next) || $when < $next) ) { $next = clone($when); } if ( $args->set_last && (!isset($last) || $when > $last) ) { $last = clone($when); } } $trigger_type = $trigger->GetParameterValue('VALUE'); if ( $trigger_type == 'DATE' || $trigger_type == 'DATE-TIME' || preg_match('{^\d{8}T\d{6}Z?$}', $trigger->Value()) ) { $first = new RepeatRuleDateTime($trigger); if ( $first > $expand_range_start && (empty($next) || $first < $next ) ) $next = $first; else if ( empty($next) ) { if ( $args->set_last && (empty($last) || $first > $last) ) $last = $first; } } if ( $args->set_last && !isset($last) && (!isset($next) || $next < $expand_range_Start) ) { $vc = new vCalendar( $alarm->caldav_data ); $range = getVCalendarRange($vc); if ( isset($range->until) && $range->until < $earliest ) $last = $range->until; } if ( isset($next) && $next < $expand_range_end ) { if ( $args->debug ) printf( "refresh: Found next alarm instance on '%s'\n", $next->UTC() ); $sql = 'UPDATE calendar_alarm SET next_trigger = :next WHERE dav_id = :id AND component = :component'; $update = new AwlQuery( $sql, array( ':next' => $next->UTC(), ':id' => $alarm->dav_id, ':component' => $alarm->component ) ); $update->Exec('refresh-alarms', __LINE__, __FILE__ ); } else if ( $args->set_last && isset($last) && $last < $earliest ) { if ( $args->debug ) printf( "refresh: Found past final alarm instance on '%s'\n", $last->UTC() ); $sql = 'UPDATE calendar_alarm SET next_trigger = :last WHERE dav_id = :id AND component = :component'; $update = new AwlQuery( $sql, array( ':last' => $last->UTC(), ':id' => $alarm->dav_id, ':component' => $alarm->component ) ); $update->Exec('refresh-alarms', __LINE__, __FILE__ ); } else if ( $args->debug && isset($next) && $next < $expand_range_end ) { printf( "refresh: Found next alarm instance on '%s' after '%s'\n", $next->UTC(), $expand_range_end->UTC() ); } } } davical-1.1.1/scripts/export_calendar.php0000755000000000000000000000333711721535166015375 0ustar #!/usr/bin/env php user_no = -1; $this->principal_id = -1; $this->logged_in = false; return; } $this->user_no = $user_no; $principal = new Principal('user_no',$user_no); // Assign each field in the selected record to the object foreach( $principal AS $k => $v ) { $this->{$k} = $v; } $this->username = $principal->username(); $this->principal_id = $principal->principal_id(); $this->email = $principal->email(); $this->dav_name = $principal->dav_name(); $this->principal = $principal; $this->logged_in = true; } function AllowedTo($do_something) { return $this->logged_in; } } $session = new FakeSession(); require("caldav-GET-functions.php"); $calendar = new DAVResource($source); echo export_iCalendar($calendar); davical-1.1.1/scripts/build-always.sh0000755000000000000000000000140111633117640014424 0ustar #!/bin/sh # # Apply the current version numbers into always.php from always.php.in # DAVICAL_VERSION="`head -n1 VERSION`" DB_VERSION="`grep 'SELECT new_db_revision' dba/davical.sql | cut -f2 -d'(' | cut -f1-3 -d,`" AWL_VERSION="`head -n1 ../awl/VERSION`" if [ -z "${AWL_VERSION}" ] ; then AWL_VERSION="'`grep 'want_awl_version' inc/always.php.in | cut -f2 -d= | cut -f1 -d';' | sed 's: ::g'`'" fi sed -e "/^ *.c->version_string *= *'[^']*' *;/ s/^ *.c->version_string *= *'[^']*' *;/\$c->version_string = '${DAVICAL_VERSION}';/" \ -e "/^ *.c->want_dbversion *=.*$/ s/^ *.c->want_dbversion *=.*$/\$c->want_dbversion = array(${DB_VERSION});/" \ -e "/^ *.c->want_awl_version *=.*$/ s/^ *.c->want_awl_version *=.*$/\$c->want_awl_version = '${AWL_VERSION}';/" davical-1.1.1/scripts/cron-sync-ldap.php0000755000000000000000000000152211651212132015031 0ustar #!/usr/bin/env php * @copyright Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later */ $script_file = __FILE__; if ( $argc < 2 ) { echo <<tzsource configuration value, with a further default to the zonedb/vtimezone directory relative to the root of the DAViCal installation. This script can be used to initialise or update the timezone information in DAViCal used for the in-built timezone service. USAGE; exit(1); } $_SERVER['SERVER_NAME'] = $argv[1]; $original_dir = getcwd(); chdir(str_replace('/scripts/tz-update.php','/htdocs',$script_file)); require_once("./always.php"); if ( isset($argv[2]) ) { $c->tzsource = $argv[2]; } require_once('vCalendar.php'); require_once('XMLDocument.php'); require_once('RRule-v2.php'); chdir($original_dir); $new_zones = 0; $modified_zones = 0; $added_aliases = 0; function fetch_remote_list($base_url ) { global $request; $result = array(); $list_url = $base_url . '?action=list'; printf( "Fetching timezone list\n", $list_url ); $raw_xml = file_get_contents($list_url); $xml_parser = xml_parser_create_ns('UTF-8'); $xml_tags = array(); xml_parser_set_option ( $xml_parser, XML_OPTION_SKIP_WHITE, 1 ); xml_parser_set_option ( $xml_parser, XML_OPTION_CASE_FOLDING, 0 ); $rc = xml_parse_into_struct( $xml_parser, $raw_xml, $xml_tags ); if ( $rc == false ) { dbg_error_log( 'ERROR', 'XML parsing error: %s at line %d, column %d', xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser), xml_get_current_column_number($xml_parser) ); $request->PreconditionFailed(400, 'invalid-xml', sprintf('XML parsing error: %s at line %d, column %d', xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser), xml_get_current_column_number($xml_parser) )); } xml_parser_free($xml_parser); $position = 0; return BuildXMLTree( $xml_tags, $position); } function fetch_remote_zone( $base_url, $tzid ) { $tz_url = $base_url . '?action=get&tzid=' .$tzid; printf( "Fetching zone for %s from %s\n", $tzid, $tz_url ); dbg_error_log( 'tz/updatecheck', "Fetching zone for %s from %s\n", $tzid, $tz_url ); $vtimezone = file_get_contents( $tz_url ); return $vtimezone; } function fetch_db_zone( $tzid ) { $tzrow = null; $qry = new AwlQuery('SELECT * FROM timezones WHERE tzid=:tzid', array(':tzid' => $tzid)); if ( $qry->Exec('tz/update',__LINE__,__FILE__) && $qry->rows() > 0 ) { $tzrow = $qry->Fetch(); } return $tzrow; } function write_updated_zone( $vtimezone, $tzid ) { global $new_zones, $modified_zones; if ( empty($vtimezone) ) { dbg_error_log('tz/updatecheck', 'Skipping zone "%s" - no data from server', $tzid ); return; } $tzrow = fetch_db_zone($tzid); if ( isset($tzrow) && $vtimezone == $tzrow->vtimezone ) { dbg_error_log('tz/updatecheck', 'Skipping zone "%s" - no change', $tzid ); return; } $vtz = new vCalendar($vtimezone); $last_modified = $vtz->GetPValue('LAST-MODIFIED'); if ( empty($last_modified) ) { $last_modified = gmdate('Ymd\THis\Z'); // Then it was probably that way when we last updated the data, too :-( if ( !empty($tzrow) ) { $old_vtz = new vCalendar($tzrow->vtimezone); $old_vtz->ClearProperties('LAST-MODIFIED'); // We need to add & remove this property so the Render is equivalent. $vtz->AddProperty('LAST-MODIFIED',$last_modified); $vtz->ClearProperties('LAST-MODIFIED'); if ( $vtz->Render() == $old_vtz->Render() ) { dbg_error_log('tz/updatecheck', 'Skipping zone "%s" - no change', $tzid ); return; } } $vtz->AddProperty('LAST-MODIFIED',$last_modified); } dbg_error_log('tz/updatecheck', 'Writing %s zone for "%s"', (empty($tzrow)?"new":"updated"), $tzid ); printf("Writing %s zone for '%s'\n", (empty($tzrow)?"new":"updated"), $tzid ); $params = array( ':tzid' => $tzid, ':olson_name' => $tzid, ':vtimezone' => $vtz->Render(), ':last_modified' => $last_modified, ':etag' => md5($vtz->Render()) ); if ( empty($tzrow) ) { $new_zones++; $sql = 'INSERT INTO timezones(tzid,active,olson_name,last_modified,etag,vtimezone) '; $sql .= 'VALUES(:tzid,TRUE,:olson_name,:last_modified,:etag,:vtimezone)'; } else { $modified_zones++; $sql = 'UPDATE timezones SET active=TRUE, olson_name=:olson_name, last_modified=:last_modified, '; $sql .= 'etag=:etag, vtimezone=:vtimezone WHERE tzid=:tzid'; } $qry = new AwlQuery($sql,$params); $qry->Exec('tz/update',__LINE__,__FILE__); } function write_zone_aliases( $tzid, $aliases ) { global $added_aliases; foreach( $aliases AS $alias_node ) { $alias = $alias_node->GetContent(); $params = array(':tzid' => $tzid, ':alias' => $alias ); $qry = new AwlQuery('SELECT * FROM tz_aliases JOIN timezones USING(our_tzno) WHERE tzid=:tzid AND tzalias=:alias', $params); if ( $qry->Exec('tz/update', __LINE__, __FILE__) && $qry->rows() < 1 ) { $qry->QDo('INSERT INTO tz_aliases(our_tzno,tzalias) SELECT our_tzno, :alias FROM timezones WHERE tzid = :tzid', $params); $added_aliases++; } } } if ( empty($c->tzsource) ) $c->tzsource = '../zonedb/vtimezones'; if ( preg_match('{^http}', $c->tzsource ) ) { $changesince = null; $qry = new AwlQuery("SELECT tzid, to_char(last_modified,'YYYY-MM-DD\"T\"HH24:MI:SS\"Z\"') AS last_modified FROM timezones"); $current_zones = array(); if ( $qry->Exec('tz/updatecheck',__LINE__,__FILE__) && $qry->rows() > 0 ) { while( $row = $qry->Fetch() ) $current_zones[$row->tzid] = new RepeatRuleDateTime($row->last_modified); } $xmltree = fetch_remote_list($c->tzsource); $zones = $xmltree->GetElements('urn:ietf:params:xml:ns:timezone-service:summary'); foreach( $zones AS $zone ) { $elements = $zone->GetElements('urn:ietf:params:xml:ns:timezone-service:tzid'); $tzid = $elements[0]->GetContent(); $elements = $zone->GetElements('urn:ietf:params:xml:ns:timezone-service:last-modified'); $last_modified = new RepeatRuleDateTime($elements[0]->GetContent()); if ( !isset($current_zones[$tzid]) || $last_modified > $current_zones[$tzid] ) { printf("Found timezone %s needs updating\n", $tzid ); $vtimezone = fetch_remote_zone($c->tzsource,$tzid); write_updated_zone($vtimezone, $tzid); } $elements = $zone->GetElements('urn:ietf:params:xml:ns:timezone-service:alias'); write_zone_aliases($tzid, $elements); } } else if ( file_exists($c->tzsource) ) { /** * Find all files recursively within the diectory given. * @param string $dirname The directory to find files in * @return array of filenames with full path */ function recursive_files( $dirname ) { $d = opendir($dirname); $result = array(); while( $fn = readdir($d) ) { if ( substr($fn,0,1) == '.' ) continue; if ( substr($fn,0,14) == 'primary-source' ) continue; $fn = $dirname.'/'.$fn; if ( is_dir($fn) ) { $result = array_merge($result,recursive_files($fn)); } else { $result[] = $fn; } } return $result; } $qry = new AwlQuery(); foreach( recursive_files($c->tzsource) AS $filename ) { $tzid = str_replace('.ics', '', str_replace($c->tzsource.'/', '', $filename)); $vtimezone = file_get_contents( $filename, false ); write_updated_zone($vtimezone, $tzid); } } else { dbg_error_log('ERROR', '$c->tzsource is not configured to a good source of timezone data'); } printf("Added %d new zones, updated data for %d zones and added %d new aliases\n", $new_zones, $modified_zones, $added_aliases); exit(0);davical-1.1.1/scripts/po/0000755000000000000000000000000011776303360012116 5ustar davical-1.1.1/scripts/po/rebuild-translations.sh0000755000000000000000000000421611633117640016621 0ustar #!/bin/sh # # Rebuild all of our strings to be translated. Written for # the DAViCal CalDAV Server by Andrew McMillan vaguely # based on something that originally came from Horde. # [ -n "${DEBUG}" ] && set -o xtrace PODIR="po" LOCALEDIR="locale" APPLICATION="davical" AWL_LOCATION="../awl" if [ ! -d "${AWL_LOCATION}" ]; then AWL_LOCATION="`find .. -type d -name 'awl-*.*'`" if [ ! -d "${AWL_LOCATION}" ]; then AWL_LOCATION=/usr/share/awl if [ ! -d "${AWL_LOCATION}" ]; then echo "I can't find a location for the AWL libraries and I need those strings too" exit 1 fi fi fi egrep -l '(i18n|translate)' htdocs/*.php inc/*.php inc/ui/*.php > ${PODIR}/pofilelist.tmp1 sed "s:../awl:${AWL_LOCATION}:" ${PODIR}/pofilelist.txt >> ${PODIR}/pofilelist.tmp1 sort ${PODIR}/pofilelist.tmp1 | uniq > ${PODIR}/pofilelist.tmp xgettext --no-location --add-comments=Translators --keyword=translate --keyword=i18n --output=${PODIR}/messages.tmp -s -f ${PODIR}/pofilelist.tmp sed 's.^"Content-Type: text/plain; charset=CHARSET\\n"."Content-Type: text/plain; charset=UTF-8\\n".' ${PODIR}/messages.tmp > ${PODIR}/messages.pot rm ${PODIR}/messages.tmp ${PODIR}/pofilelist.tmp ${PODIR}/pofilelist.tmp1 locale_list() { ls ${PODIR}/*.po | cut -f2 -d/ | cut -f1 -d. } build_supported_locales() { echo "TRUNCATE supported_locales;" echo "INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale )" echo " VALUES( 'en', 'English', 'English' );" for LOCALE in `locale_list`; do echo "INSERT INTO supported_locales ( locale, locale_name_en, locale_name_locale )" cat ${PODIR}/${LOCALE}.values done } build_supported_locales >dba/supported_locales.sql for LOCALE in `locale_list` ; do [ "${LOCALE}" = "en" ] && continue if [ ! -f ${PODIR}/${LOCALE}.po ] ; then cp ${PODIR}/messages.pot ${PODIR}/${LOCALE}.po fi msgmerge --no-fuzzy-matching --quiet --width 105 --update ${PODIR}/${LOCALE}.po ${PODIR}/messages.pot done for LOCALE in `locale_list` ; do [ "${LOCALE}" = "en" ] && continue mkdir -p ${LOCALEDIR}/${LOCALE}/LC_MESSAGES msgfmt ${PODIR}/${LOCALE}.po -o ${LOCALEDIR}/${LOCALE}/LC_MESSAGES/${APPLICATION}.mo done davical-1.1.1/CREDITS0000644000000000000000000000103111215137004011010 0ustar The DAViCal CalDAV Server is the brainchild of Andrew McMillan. Other people have contributed code and/or criticism to help the project along it's way: Maxime Delorme (LDAP, bugfixes, styles) Andrew Ruthven (a useful touchstone) And a big thank you to the translators: Cristina Radalescu Lorena Paoletti Guillaume Rosquin Nick Khazov Eelco Maljaars Rafał Ślubowski Many other people have contributed bug reports, fixes and in many small ways. These are acknowledged in the changelog and version control history. davical-1.1.1/locale/0000755000000000000000000000000011776301350011245 5ustar davical-1.1.1/locale/fr/0000755000000000000000000000000011776301350011654 5ustar davical-1.1.1/locale/fr/LC_MESSAGES/0000755000000000000000000000000011776301350013441 5ustar davical-1.1.1/locale/fr/LC_MESSAGES/davical.mo0000644000000000000000000012270311776301350015406 0ustar t 9#######$!2$T$m$$$$$[$ L%V(;)-O)-}))))))))*#* 2*@*2D*Gw*J* + +H:+C+3+0+,, @,N, _,j,z,,(,,,--#-;-O-@a- ---- -. .&.V9.(....".!/:/Y/j////////;0B0b0{09000H0?1U1p1 1=11+1126A2>x22 2 222 33#323 D3O3b33333#334404IA4D4 4 4 4%45 25 ?52K5~555&5:5@576<6 R6V`6;6>6=27p7+7.777B7@A888 888288 9 9 $9.9=79u99"99+99 99: :%:*:!E:g: l:v: y:::(:2:$:& ;G;([;%;;; ; ;<<)<=<D< M<W< o<{< <<<< <<<(<T=Z=_= n= {===%= =====- >9>@>R>b>y>>>>> >?'? 9?0Z?[?\?D@K@T@Y@4`@.@1@(@AA aAkAA AAA AA3A+BKBaBhB!zB"BB&BBCC,6CGcC8C C CC D"D 2D=DXD#hDDDD,D3D'E .E9E JEXEnE!EEEEEF0FDFU]FPFGG1GcKGG G GG5G,H(CHlHKHHH+HI&IFIdI{I2I,I4I0J0HJJyJJ"JJJ2HK9{KK.KSL%UL){LGL-LGMGcM@M M0 N1>N'pN!N(NNN#O;8O-tO+OOYQR~SDT LTVT [TiToTT TT TT TTTT'U.U!IUkUUU UU U UUU VV#V@VVVmVV-WJW'PWxW WW WWWW,WX1X#JX#nX@X8X YO)Y;yYKYNZ~PZ@ZL[+][*[ [[[[[ \N\i\ ^^^-^=^*Z^^6^!^&^ _"7_Z_:z_v_,`cAd0d1eKehexeee&eeeeeFee?fWff9glLg+g%gD hPhohh hh!hh' i)4i^ifii3iiiWi :jFj5^j*j jjjjh k-vkk k&k)k"l"5lXl!rllll*llm*mL;m&mmmDm3n MnUXnn&nn oQobo:{oHoLoPLpp$pp$p#qAqZqzqqqq q q-q(r)=G8D+S/ ʃك .R%Zx&ӄ)1<n9v(ͅ#3TN2ֆ "6Jj1 և>M,z#܈%&%;4a65͉#"'kJx%/#U/y )7M aEn+* _,-ڍ"*0O-U294D%^jɏ"`;d)ʐ;U"2x)[Ց61]h^ƒC%&iVB%*P.l +ڔ[?b=v@Nٚ (5; NXv } #؛ +%+Q/i9Ӝ )H]u0 Ɲ#ם-)!BdH U.]Ο 6 C>Q<4͠J>M2[K]g]Ţ#[j+8 /Ob`B)`D >jR%wlCO v&VND'%jB+L F8g=eHPZ-|4w!E`@qqk#H0Jy$0J(=,gop3QvG*ZM  5b;UpQa<M3u}iG_d2:9@6Ka8yc~#W+$]"hxAsSuYm}WTs*-K /]\ zLI2,n_U\^or &S.7r~9!F;knO4Y ?VP15|l m{fA<[{1T')(b[e /?:XRECXd. ^chN"xi6f>7ttIz%F %T%T*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can't find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A DAViCal principal collection may only contain collectionsA collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All events of user "%s" were deleted and replaced by those from file %sAll of the principal's calendars and events will be unrecoverably deleted.All privilegesAll requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApplication DB UserApply ChangesApply DB PatchesAttachmentBinding deletedBindings to other collectionsBindings to this CollectionBindings to this Principal's CollectionsBody contains no XML data!Bound AsBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCalendar TimezoneCan only add tickets for existing collection paths which you ownCategoriesChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedCollections may not be both CalDAV calendars and CardDAV addressbooks at the same timeConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the BindingConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm Deletion of the TicketConfirm PasswordConfirm the new password.Could not retrieveCreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Collection.Creating new Principal record.Creating new ticket granting privileges to this PrincipalCurrent DAViCal version DAV PathDAV::resourcetype may only be set to a new value, it may not be removed.DAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDAViCal only allows BIND requests for collections at present.DKIM signature missingDKIM signature validation failed(DNS ERROR)DKIM signature validation failed(KEY Parse ERROR)DKIM signature validation failed(KEY Validation ERROR)DKIM signature validation failed(Signature verification ERROR)Database ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDate StyleDefault PrivilegesDefault relationships added.DeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleted a grant from this PrincipalDeleting Binding:Deleting Collection:Deleting Principal:Deleting Ticket:Deliver scheduling invitations from an organiser to this scheduling inboxDeliver scheduling replies from an attendee to this scheduling inboxDependenciesDependencyDescriptionDestination collection does not existDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?DomainEMailEMail OKERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.Error writing calendar properties to database.EuropeanEuropean (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.ExpiresExternal CalendarsExternal UrlFailFailed to write collection.Feeds are only supported for calendars at present.For access to theForbiddenFree/BusyFull NameFullnameGET requests on collections are only supported for calendars.GNU gettext supportGO!Go to the DAViCal Feature RequestsGrantGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryImport calendars and Synchronise LDAP.Inactive PrincipalsIncorrect content type for addressbook: Incorrect content type for calendar: Invalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?Items in CollectionJoinedLanguageLast usedList External CalendarsList GroupsList ResourcesList UsersLoad From FileLocaleLocationLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalMost of DAViCal will work but upgrading to PHP 5.2 or later is strongly recommended.NameNew CollectionNew PasswordNew PrincipalNoNo calendar contentNo collection found at that location.No summaryNo.No. of CollectionsNo. of PrincipalsNo. of ResourcesNot overwriting existing destination resourceOpaqueOrganizer MissingOverride a LockPDO PostgreSQL driversPHP DateTime classPHP LDAP module availablePHP Magic Quotes GPC offPHP Magic Quotes runtime offPHP PDO module availablePHP calendar extension availablePHP curl supportPHP iconv supportPHP not using Apache Filter modePHP5 curl support is required for external bindsPUT on a collection is only allowed for text/calendar content against a calendar collectionPUT on a collection is only allowed for text/vcard content against an addressbook collectionPassedPasswordPathPersonPlease confirm deletion of access ticket - see belowPlease confirm deletion of binding - see belowPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrincipal deletedPrivilegesPrivileges granted to All UsersPrivileges to allow delivery of scheduling messagesPrivileges to delegate scheduling decisionsProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead ACLs for a resource or collectionRead Access ControlsRead Current User's AccessRead Free/Busy InformationRead the content of a resource or collectionRead the details of the current user's access control to this resource.Read the free/busy information for a calendar collectionRead/WriteReferencesRemoveRemove a lockRemove dangling external calendarsReport BugReport a bug in the systemRequest FeatureRequest body is not valid XML data!ResourceResource Calendar PrincipalsResource Not Found.Resource has changed on server - not deletedResources may not be changed to / from collections.RevokeSRV RecordSchedule DeliverSchedule SendSchedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: DeliveryScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busyScheduling: SendingSend free/busy enquiriesSend scheduling invitations as an organiser from the owner of this scheduling outbox.Send scheduling replies as an attendee from the owner of this scheduling outbox.Set free/busy privilegesSet read privilegesSet read+write privilegesSet the path to store your ics e.g. 'calendar' will be referenced as /caldav.php/username/calendar/SetupSetup DAViCalShow help onSite StatisticsSite Statistics require the database to be available!Some properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Specific PrivilegesStatusStatus: %d, Message: %s, User: %d, Path: %sSubmitSuhosin "server.strip" disabledSync LDAP Groups with DAViCalSync LDAP with DAViCalTargetThat destination name contains invalid characters.That resource is not present on this server.The BIND Request MUST identify an existing resource.The BIND Request-URI MUST identify a collection.The BIND method is not allowed at that location.The CalDAV:schedule-calendar-transp property may only be set on calendars.The DAViCal Home PageThe access ticket will be deleted.The addressbook-query report must be run against an addressbook collectionThe application failed to understand that request.The application program does not understand that request.The binding will be deleted.The calendar path contains illegal characters.The calendar-query report must be run against a calendar or a scheduling collectionThe collection name may not be blank.The destination collection does not existThe displayname may only be set on collections, principals or bindings.The email address really should not be blank.The file "%s" is not UTF-8 encoded, please check error for more detailsThe file is not UTF-8 encoded, please check the error for more details.The full name for this person, group or other type of principal.The full name must not be blank.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The principal "%s" does not existThe style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.The username must not be blank, and may not contain a slashThere was an error reading from the database.There was an error writing to the database.This operation does the following:
  • check valid groups in LDAP directory
  • check groups in DAViCal
then
  • if a group is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in DAViCal
This operation does the following:
  • check valid users in LDAP directory
  • check users in DAViCal
then
  • if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • if a user is present in LDAP but not in DAViCal create the user in DAViCal
  • if a user in present in LDAP and DAViCal then update information in DAViCal
This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.This process will import each file in a directory named "username.ics" and create a user and calendar for each file to import.This server only supports the text/calendar format for freebusy URLsTicket IDTimeTo CollectionTo IDToggle all privilegesToolsTransparentURLUS FormatUnauthenticated UserUnited States of America (m/d/y)UpdateUpdatedUpdating Collection record.Updating Member of this Group PrincipalUpdating Principal record.Updating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWant: %s, Currently: %sWarning: there are no active admin users! You should fix this before logging out. Consider using the $c->do_not_sync_from_ldap configuration setting.When the user's e-mail account was validated.WriteWrite ACLs for a resource or collectionWrite Access ControlsWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You may not PUT to a collection URLYou must log in to use this system.Your configuration produced PHP errors which should be correctedcalendar-timezone property is only valid for a calendar.directory %s is not readabledrivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.phpdrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforget me notfrom principaliSchedule Domainsinvalid requestpath to store your icsunauthenticatedyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: French (http://www.transifex.net/projects/p/davical/language/fr/) Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1) %F %T%T*** Langue par défaut ****** Inconnu ***- ajout de %s au groupe : %s- ajout de l'utilisateur %s au groupe : %s- création du groupe : %s- création d'enregistrement pour l'utilisateurs : %s- désactivation des groupes : %s- désactivation des utilisateurs : %s- rien à faire sur %s- suppression de %s du groupe : %s- mise à jour des groupes : %s- mise à jour des enregistrements de l'utilisateur : %sAttention : tous les événements de ce chemin seront supprimés avant l'insertion de tous ceux du fichier ics

Aide

Pour obtenir de l'aide, vous devez commencer par aller voir sur le site DAViCal Home Page (en anglais) ou sur le Wiki DAViCal (presque complètement traduit en français).

Si vous n'y trouvez pas ce que vous cherchez, prenez contact avec nous en anglais par IRC sur le canal #davical du serveur irc.oftc.net, ou envoyez une question en anglais sur DAViCal Users mailing list.

Les archives peuvent également vous être utiles.

Veuillez vous connecter

Pour accéder à %s vous devez vous connecter avec le nom d'utilisateur et le mot de passe qui vous ont été fournis.

Si vous voulez demander un accès, envoyez un courriel à %s.

Un compte collection DAViCal ne peut contenir que des collectionsUne collection existe déjà à cet emplacement.Une ressource existe déjà à cette destination.Version de la librairie AWL Ticket d'accèsTicket d'accès suppriméActionActifAjout d'un nouveau membre à ce groupeAdministrateurAdministrationAdministrateurTousToutes les données de la collection seront effacées définitivement.Tous les événements de l'utilisateur "%s" ont été supprimés et remplacés par ceux du fichier %sTous les agendas et les évènements de l'utilisateur seront effacées définitivement.Tous les PrivilègesToutes les modifications demandées ont été effectuéesAutoriser les requêtes Libre/Occupé envoyées au propriétaire de cette boîte de réception planificationMise à jour d'enregistrement de principal.Mise à jour accorde par ce principalLes utilisateurs anonymes ne peuvent accéder qu'aux agendas publicsUtilisateur de BDD ApplicationAppliquer les modificationsAppliquer la rustine à la basePièce jointeLiaison suppriméeLiaison vers d'autres collectionsLiaison vers cette CollectionLiaisons vers ces Collections du compteLe corps ne contient aucune donnée XML !Lié àAfficher tous les utilisateursOccupéL'agenda "%s" a été chargé à partir du fichier.Liste des comptesFuseau horaireNe peut ajouter des tickets que sur un chemin de collection existant que vous possédezCatégoriesChanger le mot de passeCliquer pour afficher les détails de cet utilisateurCliquer pour afficher le détail du compteCollectionDroits de la collectionId. de la collectionCollection suppriméeLes collections ne peuvent pas être des agendas CalDAV et des carnets d'adresses CardDAV en même tempsConfigurer les clients d'agendas pour DAViCalConfigurer DAViCalConfirmerConfirmer la suppression de la liaisonConfirmer la suppression de la collectionConfirmer la suppression du compteConfirmer la suppression du ticketConfirmer le mot de passeConfirmer le nouveau mot de passeNe peut téléchargerCréerCréer une collectionCréer des collections ou des évènementsCréer une nouvelle collectionCréer un nouveau compteCréer un compteCréer un nouveau compte (c-à-d un utilisateur, une ressource ou un groupe)Créer une ressource ou une collectionCréer une nouvelle collection.Création d'un nouveau compte.Création d'un nouveau ticket accordant des privilèges à ce compteVersion DAViCal courante Chemin DAVDAV::resourcetype ne peut qu'être positionné à une nouvelle valeur, pas supprimé.Serveur CalDAV DAViCalVersion du schéma de la base DAViCal Page d'accueil DAViCalWiki DAViCalA l'heure actuelle DAViCal ne permet que les requêtes BIND pour les collections.signature DKIM manquanteLa validation de la signature DKIM a échoué (erreur DNS)La validation de la signature DKIM a échoué (erreur d'analyse de clé)La validation de la signature DKIM a échoué (erreur de validation de clé)validation de la signature DKIM échouée (erreur de vérification de signature)Erreur de base de donnéesNom d'hôte pour la base de donnéesNom de la base de donnéesPropriétaire de la base de donnéesMot de passe de la base de donnéesPort de base de donnéesUtilisateur de base de donnéesErreur de base de donnéesFormat des datesFormat des datesPrivilèges par défautRelations par défaut ajoutées.SupprimerSupprimer des collections ou des évènementsSupprimer ce compteSupprimer une ressource ou une collectionUn accès donné par ce compte a été suppriméSuppression des liaisons:Suppression de la collection :Suppression du compte :Suppression du Ticket:Envoyer des invitations (programmées par un organisateur à cette boîte de réception planification)Envoyer des réponses aux invitations (d'un participant à cette boîte de réception planification)DépendancesDépendanceDescriptioncollection de destination n'existe pasRépertoire sur le serveurNom à afficherNom à afficherL'utilisateur est-il autorisé à avoir ce rôle ?DomaineCourrielCourriel vérifiéERREUR : Le nom complet ne peut être vide.ERREUR : Le nouveau mot de passe doit être identique au mot de passe confirmé.ERREUR: Il y a eu une erreur lors de l'écriture dans la base de données des informations pour les rôles !ModifierModifier l'enregistrement de cet utilisateurAdresse de courrielIndiquez un nom d'utilisateur, si vous le connaissez et cliquez ici pour recevoir un mot de passe temporaire.Indiquez votre nom d'utilisateur et votre mot de passe puis cliquez ici pour vous connecterErreur NoGroupFound avec le filtre >%s<, attributs >%s< , dn >%s<Erreur NoUserFound avec le filtre >%s<, attributs >%s<, dn >%s<Erreur lors de l'interrogation de la base de données.Il s'est produit une erreur lors de l'écriture des données.Il s'est produit une erreur lors de l'écriture des données.Européen (jj/mm/aa)Européen (jj/mm/aa)La ressource existante ne correspond pas à l'entête (HTTP) 'If-Match' - pas accepté.La ressource existante correspond à l'entête (HTTP) 'if-None-Match' - pas accepté.ExpiresAgendas externesURL externeÉchecÉchec de l'écriture de la collection.A l'heure actuelle, les flux ne sont pris en charge que pour les agendas.Pour accéder àInterditLibre/OccupéNom completNom completLes demandes GET sur les collections ne sont prises en charge que pour les agendas.support de GNU gettextENTRER !Aller aux demandes de fonctionnalités DAViCalAccorderAccord de nouveaux privilèges par ce compteGroupeMembres du groupeAdhésions au groupeListe des groupesA des membresAideAide sur l'écran actuelAu secours ! J'ai oublié mon mot de passe !AccueilAccueilID.Format ISO (AAAA-MM-JJ)Format ISO (AAAA-MM-JJ)IdSi vous avez oublié votre mot de passe alorsSi vous souhaitez avoir accès, veuillez envoyer un courrielImporter tous les fichiers .ics d'un répertoireImporter les agendas et synchroniser l'annuaire LDAP.Comptes inactifsType de contenu incorrect pour le carnet d'adresses:Type de contenu incorrect pour l'agenda:Nom d'utilisateur ou mot de passe incorrects.Nom d'utilisateur ou mot de passe incorrects.Est membre deEst un agendaEst un carnet d'adressesUtilisateur actif ?Nb d'articles dans la CollectionInscritLangueDernier utiliséListe des Agendas ExternesListe des GroupesListe des ressourcesListe des utilisateursCharger d'un fichierLangueEmplacementVeuillez vous connecterSe déconnectez de DAViCalDéconnexionMembre supprimé de ce groupeLa plupart des fonctions DAViCal fonctionneront, mais une mise à jour vers PHP 5.2 ou ultérieure est fortement recommandé.NomNouvelle collectionNouveau mot de passeNouveau CompteNoPas de contenu dans cet agendaPas de collection trouvée à cet endroit.Aucun résuméNo.Nb. de collectionsNb. de comptesNb. de ressourcesN'écrase pas la ressource destination existanteOpaqueIl manque un organisateurPasser outre un verrouPilote PDO pour PostgreSQLClasse PHP DateTimeModule PHP LDAP disponiblePHP Magic Quotes GPC désactivéPHP Magic Quotes Runtime désactivéModule PDO PHP disponibleExtension d'agenda PHP disponibleSupport de PHP curlsupport PHP iconvPHP n'utilise pas le mode Apache FilterLe support de PHP5 curl est requis pour les liaisons externesMise à jour d'une collection agenda autorisée uniquement pour un contenu text/calendarMise à jour d'une collection carnet d'adresses autorisée uniquement pour un contenu text/vcardPasséMot de passeCheminPersonneConfirmer la suppression du ticket d'accès - voir ci-dessousConfirmer la suppression de la liaison - voir ci-dessousVeuillez confirmer la suppression de la collection - voir ci-dessousVeuillez confirmer la suppression du compteVeuillez noter l'heure et informer l'administrateur de votre système informatique.CompteCollections de comptesAccès accordés par le compteId compteType de compteCompte suppriméPrivilègesPrivilèges accordés à tous les utilisateursPrivilèges de gestion standard des invitations (inviter, accepter, libre/occupé)Privilèges de gestion des invitations par délégation (inviter, accepter, libre/occupé)Cette propriété est en lecture-seulePublicLisible par tousREPORT ne contient pas de données XML !REPORT ne contient pas de données XML valides !LectureLire les droits d'accès pour une ressource ou collectionLire les contrôles d'accèsLire les droits de l'utilisateur courantLire les informations Libre/OccupéLire le contenu de la ressource ou de la collectionLire les détails du contrôle d'accès de l'utilisateur courant à cette ressource.Lire les informations Libre/Occupé pour un agendaLecture/ÉcritureRéférencesSupprimerSupprimer un verrouRetirer les agendas externes liésSignaler une erreurSignaler une erreur du logicielDemander une améliorationLe corps de la requête n'est pas du XML valide !RessourceListe des RessourcesRessource introuvable.La ressource a été modifiée sur le serveur - non suppriméeLes ressources ne devraient pas être modifiées en/à partir de collections.RetirerEnregistrement srvPlanif: InvitationsPlanif: DélégationTransparence de planificationPlanification: Envoyer une réponsePlanification: Envoyer une invitationPlanification: EnvoiPlanification: Requête Libre/OccupéPlanification: Envoyer une réponse par délégationPlanification: Envoyer une invitation par délégationPlanification: Envoyer Libre/Occupé par délégationPlanification: Délégation d'envoiEnvoyer une requête Libre/OccupéEnvoyer des invitations en tant qu'organisateur depuis cette boîte d’envoi planification (délégation).Envoyer des réponses aux invitations en tant que participant depuis cette boîte d’envoi planification (délégation)Attribuer le privilège Libre/OccupéDéfinir des privilèges de lectureDéfinir des privilèges de lecture + écriturePositionnez le chemin d'accès à l'agenda, par exemple 'calendar' pour y accéder par le chemin /caldav.php/username/calendar/ConfigurationConfiguration DAViCalAfficher l'aide surStatistiquesLes statistiques du site requièrent l'accès à la base de données!Des propriétés n'ont pu être modifiées.Des propriétés n'ont pu être établies.La ressource source n'existe pasLes collections spéciales ne peuvent pas contenir un agenda ou une autre collection spéciale.Privilèges spécifiquesStatutStatut: %d, Message: %s, User: %d, Chemin: %sValiderSuhosin "server.strip" désactivéSynchroniser les groupes LDAP avec DAViCalSynchroniser LDAP avec DAViCalCibleCe chemin contient des caractères interdits.Cette ressource n'est pas présente sur ce serveurLa requête BIND DOIT identifier une ressource existante.La requête-URI BIND DOIT identifier une collection.La méthode de connexion (BIND) n'est pas autorisée à cet endroit.La propriété CalDAV:schedule-calendar-transp ne peut être positionnée que sur des agendas.Page d'accueil DAViCalLe ticket d'accès sera supprimé.Le rapport de carnet d'adresses doit être demandé sur une collection de type carnet d'adressesL'application n'a pas réussi à comprendre cette rzquête.L'application ne comprend pas la demande.La liaison sera supprimée.Le chemin vers l'agenda contient des caractères interdits.Le rapport d'agenda doit être demandé sur un agenda ou une collection planificationLe nom de la collection ne devrait pas être vide.La collection de destination n'existe pasLe nom à afficher ne peut être défini que pour une Collection, un Compte ou une liaison.L'adresse courriel ne devrait vraiment pas être vide.Le fichier "%s" n'est pas au format UTF-8, merci de regarder les erreurs pour plus de détailLe fichier n'est pas encodé en UTF-8, veuillez vérifier les erreurs pour plus d'information.Le nom complet pour cette personne, groupe ou autre type de compte.Le nom complet ne doit pas être vide.Le nom ou pseudonyme que cet utilisateur emploiera pour se connecter à l'application.Le chemin sur le serveur où sont stockés tous les fichiers .ics.La langue parlée par cette personne.Le compte "%s" n'existe pasLe style de dates utilisé par cette personne.Adresse e-mail de l'utilisateur.Nom complet de l'utilisateur.Mot de passe utilisateur pour se connecter.Le nom de l'utilisateur ne devrait pas être vide et ne devrait pas contenir de slash ('/')Il y a eu une erreur lors de la lecture de la base de données.Il s'est produit une erreur lors de l'écriture des données.Cette action:
  • regarde les groupes valides dans l'annuaire LDAP
  • regarde les groupes dans DAViCal
puis
  • si un groupe est présent dans DAViCal et pas dans l'annuaire LDAP, le positionne inactif dans DAViCal
  • si un groupe est présent dans l'annuaire LDAP et pas dans DAViCal, crée le groupe dans DAViCal
  • si un groupe est présent dans l'annuaire LDAP et dans DAViCal, le met à jour dans DAViCal
Cette action:
  • regarde des comptes utilisateurs valides dans l'annuaire LDAP
  • regarde les comptes utilisateurs dans DAViCal
puis
  • si un compte est présent dans DAViCal et pas dans l'annuaire LDAP, le rend inactif dans DAViCal
  • si un compte est présent dans l'annuaire LDAP mais pas dans DAViCal, le crée dans DAViCal
  • si un compte est présent dans LDAP et dans DAViCal, le met à jour dans DAViCal
Cette page vérifie principalement l'environnement nécessaire pour faire fonctionner Davical correctement. Les suggestions ou correctifs pour lui faire faire des choses plus utiles sont les bienvenus.Cette action va importer chaque fichier dans un répertoire nommé "username.ics" et créer un utilisateur et un agenda pour chaque fichier à importer.Ce serveur ne supporte que le format texte/calendrier pour l'URL Libre/occupéId du ticketTempsPour la CollectionPour l'IDInverser tous les privilègesOutilsTransparentURLFormat USUtilisateur non authentifiéÉtats-Unis d'Amérique (m / d / y)Enregistrer/Mettre à jourMis à jourMise à jour de l'enregistrement collectionMise à jour des membres de ce groupeMise à jour du compte.Mise à jour des droits accordés par ce compteMise à jour le schéma de la base de données de DAViCalMise à jour de la baseListe des comptes utilisateursInformations sur l'utilisateurInformations sur l'utilisateurNom de l'utilisateurRôles de l'utilisateurUtilisateur activéDonnées utilisateur correctement enregistrées.UtilisateurMes informationsConsulter mes données personnellesConsulter les informations de cet utilisateurAller au wiki de DAViCalNécessite: %s , actuellement: %sAttention: il n'y a pas de compte admin actif ! Vous devez corriger ça avant de vous déconnecter. Utilisez éventuellement le paramétrage $c->do_not_sync_from_ldap.Date à laquelle l'adresse courriel de cet utilisateur a été validée.ÉcrirePositionner ACLs d'une ressource ou collectionEcrire des contrôles d'accèsÉcrireÉcrire les méta-donnéesÉcrire du contenuÉcrire les propriétésOuiVous modifiezVous n'êtes pas autorisé à utiliser cette fonction.Vous regardezVous n'avez pas l'autorisation de modifier cet enregistrement.Vous ne pouvez pas mettre à jour vers une URL de collectionVous devez vous connecter pour utiliser ce logiciel.Votre configuration a généré des erreurs PHP qui devrait être corrigéLa propriété fuseau horaire n'est valide que pour un agenda.le répertoire %s n'est pas accessible en lecture.drivers_imap_pam : le paramètre imap_url n'est pas configuré dans /etc/davical/*-conf.phpdrivers_ldap : impossible de démarrer TLS : ldap_start_tlf() a échoué.drivers_ldap : impossible de se connecter à l'hôte %1$s sur le port %2$s avec bindDN %3$s.drivers_ldap : impossible pour LDAP d'utiliser le protocole version 3, TLS n'est pas géré.drivers_ldap : Impossible de se lier à LDAP, veuillez vérifier votre bindDN et passDN de votre configuration ou si votre serveur LDAP est accessible.drivers_ldap : impossible de se connecter à l'annuaire LDAP sur le port %s de l'hôte %s.drivers_ldap : la fonction ldap_connect n'est pas définie, vérifiez que vous avez l'extension php_ldap.drivers_pwauth_pam : fichier %s introuvabledrivers_squid_pam : incapable de trouver le fichier %s.Ne pas m'oublierdepuis le compteDomaines IScheduleRequête invalidele chemin où stocker votre icsnon authentifiéVous devez vous connecter avec le nom d'utilisateur et le mot de passe qui vous ont été fournis.davical-1.1.1/locale/es_MX/0000755000000000000000000000000011776301350012260 5ustar davical-1.1.1/locale/es_MX/LC_MESSAGES/0000755000000000000000000000000011776301350014045 5ustar davical-1.1.1/locale/es_MX/LC_MESSAGES/davical.mo0000644000000000000000000011334411776301350016013 0ustar  ,!!!!!!! "!""D"]"w""""[" <#F&;'-?'-m'''''')' (( "(0(24(Jg(( (H(C+)3o)0)) )) **"*@*(\****#***@* /+:+J+h+ ++ ++V+(,F,Z,b,",!,,,,-$-+-=-W-m--;---.9'.a.z.H.... /=/Y/+p/1/6/>0D0 S0 a0o0~0 0000 00001!1#A1e1w111I1D1 @2 M2 X2%d22 2 22222&2:$3@_333 3V3; 4>\4=44+4.5M5V5Bg5@555526G6 Y6 c6 m6w6=666"66+6+7 17?7Q7 b7n7s7!77 77 777(728$D8&i88(8%889 09 =9K9]9r999 9 99 9999 99:( :T6::: : :::%: :;;;+;-<;j;q;;;;;;;<[&<<<<<4<.<1=(4=A]= === === = >)>?>F>!X>"z>>&>>>>,?GA?8? ?? ? ??@#@<@E@b@,v@3@@@ @@A!/AQAfAAAAAAUBPXBBBBB B CC5!C,WC(CCKCD-D+4D`DgDDD2D,D4E0:E0kEJEE"EJ F9kFF.FSF%EG)kGGG-GG H@SH H0H1H'I(@IiII#I;I-I+(JTJKhMDN SN]N bNpNvNN NN NN NNNN' O5O!POrOOO OO O OOOPP*PGP]PtPP-#QQQ'WQQ QQ QQQQ,QR1R#QR#uR@R8RSO0S;SKSNT~WT@TLU+dU*U UUUUNUNVWXX$X8X#SXwX(XX"XX Y3Y,RYmY*Y]C]&^$6^[^s^^^^4^^^ ^_5_TD__,_N_J+`@v`<`*`a!0aRaXaiaa+a aaa0a*bEb;ab bb,b,b c(cCcTc_ic0ccd d&9d#`d dd"dddd e'eBe[e=neee'e;fLf hfLsff%ffg?+gkg4~g;gEgG5h}hhhh"hi'*iRiliiiiii i*j9jLjcjyjPjOj -k :k Fk"Skvkkk5kkk0lK2lS~llllm mY{m?m;n#QnBunEnnoJoLaooo o9op %p /p=pMpHTppp/p p,p%q+q>qSqiqxq~q&q qqq qqr' r61r4hr(rr+r1s/:s/js sssss tt t (t6tFtVt kt utttt.tstWu^uouuuu8u uuuvv2)v\vbvsvvv(v;v&wAwjSwwwwwIw>0xDox0xAx 'y1yLyhyyyy y*y!yyz.z3BzvzC{zzzz,{VD{D{ {{{|"|@|;Z||%||0|= }J}R}h}}}#}%}}$}~#5~!Y~{~&~d~`!~( N4+.ހWSl0s!́1."8Q<8ǂWX$xs9K;f\6#6TZ@gDX,7ʆ='@+h#7؇M+^2g5F 2@GW"]  'č '1+#]/1""7M`t ʏ#?E;*D oƑۑߑ- 2)1\.=HDPc=_dR|I4S~6ҕ6 @ N\{YU1Fs^k-Rn}LvN4 "fl+H5Fvu2 ?T,D{Q_ u+*c`|- !z;' G %(z]'<W;MHZ~,8i]#E1@WoAwN\^/e @:J[sMZQOTE)O=/XI UdVd B50i3P pl!Jmx# {pC7hDo_<S.2t[wrK9qP6=%Lg&b$aBac7Y)Kf~Ig(.9t>AjC\&b4r|j0Sx3?RY*}m8>h$ eqk"GyX`V:ny6%F %T%T*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can't find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A DAViCal principal collection may only contain collectionsA collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All of the principal's calendars and events will be unrecoverably deleted.All privilegesAll requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApplication DB UserApply ChangesApply DB PatchesAttachmentBinding deletedBindings to other collectionsBindings to this CollectionBindings to this Principal's CollectionsBound AsBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCalendar TimezoneCan only add tickets for existing collection paths which you ownCategoriesChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedCollections may not be both CalDAV calendars and CardDAV addressbooks at the same timeConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the BindingConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm Deletion of the TicketConfirm PasswordConfirm the new password.Could not retrieveCreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Collection.Creating new Principal record.Creating new ticket granting privileges to this PrincipalCurrent DAViCal version DAV PathDAV::resourcetype may only be set to a new value, it may not be removed.DAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDAViCal only allows BIND requests for collections at present.DKIM signature missingDKIM signature validation failed(DNS ERROR)DKIM signature validation failed(KEY Parse ERROR)DKIM signature validation failed(KEY Validation ERROR)DKIM signature validation failed(Signature verification ERROR)Database ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDate StyleDefault PrivilegesDeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleted a grant from this PrincipalDeleting Binding:Deleting Collection:Deleting Principal:Deleting Ticket:Deliver scheduling invitations from an organiser to this scheduling inboxDeliver scheduling replies from an attendee to this scheduling inboxDependenciesDependencyDescriptionDestination collection does not existDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?EMailEMail OKERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.Error writing calendar properties to database.EuropeanEuropean (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.ExpiresFailFailed to write collection.Feeds are only supported for calendars at present.For access to theForbiddenFree/BusyFull NameFullnameGET requests on collections are only supported for calendars.GNU gettext supportGO!Go to the DAViCal Feature RequestsGrantGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryImport calendars and Synchronise LDAP.Inactive PrincipalsIncorrect content type for addressbook: Incorrect content type for calendar: Invalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?Items in CollectionJoinedLanguageLast usedList GroupsList ResourcesList UsersLoad From FileLocaleLocationLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalMost of DAViCal will work but upgrading to PHP 5.2 or later is strongly recommended.NameNew CollectionNew PasswordNew PrincipalNoNo calendar contentNo collection found at that location.No summaryNo.No. of CollectionsNo. of PrincipalsNo. of ResourcesNot overwriting existing destination resourceOpaqueOverride a LockPDO PostgreSQL driversPHP DateTime classPHP LDAP module availablePHP Magic Quotes GPC offPHP Magic Quotes runtime offPHP PDO module availablePHP iconv supportPUT on a collection is only allowed for text/calendar content against a calendar collectionPassedPasswordPathPersonPlease confirm deletion of access ticket - see belowPlease confirm deletion of binding - see belowPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrincipal deletedPrivilegesPrivileges granted to All UsersProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead ACLs for a resource or collectionRead Access ControlsRead Current User's AccessRead Free/Busy InformationRead the content of a resource or collectionRead the details of the current user's access control to this resource.Read the free/busy information for a calendar collectionRead/WriteRemoveRemove a lockReport BugReport a bug in the systemRequest FeatureRequest body is not valid XML data!ResourceResource Calendar PrincipalsResource Not Found.Resource has changed on server - not deletedResources may not be changed to / from collections.RevokeSchedule DeliverSchedule SendSchedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: DeliveryScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busyScheduling: SendingSend free/busy enquiriesSend scheduling invitations as an organiser from the owner of this scheduling outbox.Send scheduling replies as an attendee from the owner of this scheduling outbox.Set free/busy privilegesSet read privilegesSet read+write privilegesSetupSetup DAViCalShow help onSite StatisticsSite Statistics require the database to be available!Some properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Specific PrivilegesStatusStatus: %d, Message: %s, User: %d, Path: %sSubmitSuhosin "server.strip" disabledSync LDAP with DAViCalTargetThat destination name contains invalid characters.That resource is not present on this server.The BIND Request MUST identify an existing resource.The BIND Request-URI MUST identify a collection.The BIND method is not allowed at that location.The CalDAV:schedule-calendar-transp property may only be set on calendars.The DAViCal Home PageThe access ticket will be deleted.The addressbook-query report must be run against an addressbook collectionThe application program does not understand that request.The binding will be deleted.The calendar path contains illegal characters.The calendar-query report must be run against a calendar or a scheduling collectionThe collection name may not be blank.The destination collection does not existThe displayname may only be set on collections, principals or bindings.The email address really should not be blank.The file is not UTF-8 encoded, please check the error for more details.The full name for this person, group or other type of principal.The full name must not be blank.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.The username must not be blank, and may not contain a slashThere was an error reading from the database.There was an error writing to the database.This operation does the following:
  • check valid groups in LDAP directory
  • check groups in DAViCal
then
  • if a group is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in DAViCal
This operation does the following:
  • check valid users in LDAP directory
  • check users in DAViCal
then
  • if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • if a user is present in LDAP but not in DAViCal create the user in DAViCal
  • if a user in present in LDAP and DAViCal then update information in DAViCal
This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.This server only supports the text/calendar format for freebusy URLsTicket IDTimeTo CollectionTo IDToggle all privilegesToolsTransparentURLUS FormatUnauthenticated UserUnited States of America (m/d/y)UpdateUpdatedUpdating Collection record.Updating Member of this Group PrincipalUpdating Principal record.Updating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWant: %s, Currently: %sWarning: there are no active admin users! You should fix this before logging out. Consider using the $c->do_not_sync_from_ldap configuration setting.When the user's e-mail account was validated.WriteWrite ACLs for a resource or collectionWrite Access ControlsWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You may not PUT to a collection URLYou must log in to use this system.Your configuration produced PHP errors which should be correctedcalendar-timezone property is only valid for a calendar.directory %s is not readabledrivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.phpdrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforget me notfrom principalpath to store your icsunauthenticatedyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Spanish (Mexico) (http://www.transifex.net/projects/p/davical/language/es_MX/) Language: es_MX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) %F %T%T*** Localidad Estándar ****** Desconocido ***- agregando %s al grupo %s- agregando usuarios %s al grupo %s- creando los grupos: %s- creando el registro para usuarios: %s- groupos %s desactivados- desactivando a los usuarios: %s- ningún cambio para: %s- eliminando a %s del grupo: %s- actualizando los grupos: %s- actualizando los registros de usuario: %sADVERTENCIA: todos los eventos en este repositorio serán eliminados antes de insertar el archivo ics

Ayuda

Visita la Página Principal de DAViCal para ayuda inicial, o consultael Wiki de DAViCal.

Si no encuentras la respuesta a tus dudas, visítanos en IRC enel canal #davical en irc.oftc.net, o envía tus preguntas a la lista de correo de Usuarios de DAViCal.

El archivo de la lista de correotambien te será útil.

Por Favor Entra Identifícate

Debes para entrar a %s debes identificarte con tu nombre de usuario y tu clave de acceso.

Notifica a %s si deseas solicitar acceso.Una colección principal de DAViCal solo puede contener coleccionesUna colección ya existe en ese lugar.Un recurso ya existe en ese destino.Biblioteca AWL versiónBoletos de AccesoBoleto de acceso eliminadoAcciónActivoAgregando un miembro nuevo a este Principal de GrupoAdminAdministraciónAdministradorTodosTodos los datos de esta colección serán eliminados.Todos los calendarios y eventos de este principal serán eliminados permanentemente.Todos los privilegiosTodos los cambios solicitados fueron hechos.Permite solicitudes libre/ocupado para el dueño de este buzón de itinerario.Un usuario "Administrador" tiene todos derechos al Sistema DAViCal entero.Los usuarios anónimos no tienen permitido modificar calendariosLos usuarios anónimos solo pueden ver calendarios públicosUsuario de Base de Datos de la AplicaciónEfectúa CambiosAplica Parches a la Base de DatosAnexoEnlace eliminadoEnlaces a otras coleccionesEnlaces a esta colleciónEnlaces a las Colleciones de este PrincipalEnlazado conVer a todos los usuariosOcupadoEl calendario "%s" fue cargado desde un archivo.Principales del CalendarioHuso Horario del CalendarioSolo puedes agregar boletos para tus colecciones existentesCategoríasCambia la Clave de AccesoClick para desplegar los detalles de usuarioClick para editar los detalles del principalColecciónSubvenciones de ColecciónID de ColecciónColección eliminadaLas colecciones no pueden ser calendarios CalDAV y agendas de teléfono CardDAV al mismo tiempoConfigurando Clientes de Calendario para DAViCalConfigurando DAViCalConfirmaConfirma Eliminación del EnlaceConfirma Eliminación de la CollaciónConfirma Eliminación del PrincipalConfirma Eliminación del BoletoConfirma Clave de AccesoConfirma la clave de acceso nueva.No lo pudo sacarCrearCrear una ColecciónCrear Eventos/ColeccionesCrear una Colección NuevaCrear un Principal NuevoCrear un PrincipalCrear a un principal nuevo (eg. un usuario, recurso, o grupo)Crear un recurso o colecciónCreando una Colección nueva.Creando un registro de Principal nuevo.Creando un boleto para otorgar privilegios a este PrincipalVersión actual de DAViCal Camino DAVDAV::resourcetype solo puede tener un valor nuevo, y no puede ser eliminado.Servidor DAViCal CalDAVEsquema de Datos de DAViCal versión Página Principal de DAViCalWiki de DAViCalDAViCal solo permite solicitudes BIND a collecciones por ahora.Firma DKIM perdidaLa validación de la firma DKIM falló(ERROR de DNS)Validación de firma DKIM falló (ERROR al interpretar KEY)La validación de la firma DKIM falló(ERROR de validación de LLAVE)La validación de la firma DKIM falló(ERROR de verificación de firma)Error de la base de datosServidor de Base de DatosNombre de la Base de DatosPropietario de la Base de DatosClave de Acceso a la Base de DatosPuerto de la Base de DatosNombre de Usuario para la Base de DatosError en la base de datosEstilo de Formato de FechaFormato de FechaPrivilegios AutomáticosEliminarEliminar Eventos/ColeccionesEliminar al PrincipalEliminar un recurso o colecciónEliminar una subvención de este PrincipalEliminando Enlace:Eliminando Colección:Eliminando Principal:Eliminando Boleto:Enviar invitaciones de itinerario de un organizador a este buzón de itinerariosEnviar respuestas de itinerario de un participante a este buzón de itinerariosDependenciasDependenciaDescripciónLa colleción de destino no existeDirectorio en el servidorDesplegar NombreNombre de Despliegue¿El usuario tiene derechos a desempeñar este papel?EMailEMail correctoERROR: El nombre completo no puede estar vacío.ERROR: La clave de acceso debe coincidir con la clave de acceso confirmada.ERROR: ¡Un error de base de datos ocurrió al escribir la información de papeles!EditarEditar este registro de usuarioDirección de EmailProporcione un nombre de usuario, si lo sabe, y haga click aquí, para enviarle una clave de acceso temporal.Proporcione su nombre de usuario y clave de accesso, depues haga click aquí para entrar.Error NoGroupFound con el filtro >%s<, atributos >%s< , dn >%s<Error NoUserFound con filtro >%s<, atributos >%s< , dn >%s<Error consultando la base de datos.Error al escribir los detalles del calendario en la base de datos.Error al escribir las propiedades del calendario en la base de datos.EuropeoEuropeo (d/m/y)El recurso existente no coincide con el encabezado "If-Match" - rechazado.El recurso existente coincide con el encabezado "If-None-Match" - rechazado.ExpiraFallaFallo al escribir la colección.Alimentación solo se suporta para calendarios por ahora.Para acceso alProhibidoLibre/OcupadoNombre completoNombreLas solicitudes GET en colecciones solo son suportadas para calendarios.Soporte para GNU gettext¡IR!Ir a las Solicitudes de Prestaciones de DAViCalSubvenciónConceder nuevos privilegios a este PrincipalGrupoMiembros del GrupoMembresías de GrupoPrincipales del GrupoTiene MiembrosAyudaAyuda con la pantalla actual¡Ayuda! ¡Olvidé mi clave de acceso!PrincipioPágina PrincipalIDFormato ISOFormato ISO (YYYY-MM-DD)IDSi olvidó su clave de acceso, entoncesSi usted quiere solicitar acceso, por favor contacte aImportar todos los archivos .ics desde un directorioImportar calendarios y Sincronizar LDAP.Principales InactivosTipo incorrecto para lista de direcciones: Typo de contenido incorrecto para el calendario: Nombre de usuario o clave de acceso inválidos.Nombre de usuario o clave de acceso inválidos.Es miembro deEs un CalendarioEs una Lista de Direcciones¿Está activado este usuario?Artículos en ColecciónJuntoLenguajeÚltimo usoListar GruposListar RecursosListar UsuariosCargar Desde ArchivoLocalidadLocalizaciónIdentifíquese Por FavorSalir de DAViCalSalidaMiembro eliminado de este Grupo de PrincipalesLa mayoría de las funciones de DAViCal funcionarán, pero es muy recomendable actualizar a PHP 5.2 o mas reciente.NombreColección NuevaNueva Clave de AccesoPrincipal NuevoNoCalendario vacíoNo se encontró ninguna colección en esa localización.Sin resumenNo.No. de ColeccionesNo. de PrincipalesNo. de RecursosNo sobreescribir recursos existentes en el destinoOpacoAnular un SeguroDrivers PDO para PostgreSQLClase DateTime de PHPMódulo LDAP PHP disponibleComillas Mágicas GPC de PHP deactivadasComillas Mágicas GPC de PHP deactivadas durante ejecuciónMódulo PHP PDO disponibleSoporte PHP iconvPUT solo se permite para una colección si el contenido es text/calendar para una colección de calendarioAceptadoClave de AccesoCaminoPersonaPor favor confirme la eliminación del billete de acceso - vea en seguidaPor favor confirme la eliminación del enlace - vea en seguidaPor favor confirme la eliminación de la colección - vea en seguidaPor favor confirme la eliminación del principalPor favor anote la hora y avísele a su administrador de sistema.PrincipalCollecciones del PrincipalSubvenciones para PrincipalID del PrincipalTipo del PrincipalPrincipal eliminadoPrivilegiosPrivilegios otorgados a Todos los UsuariosEsta propiedad es solo de lecturaPúblicoLectura Pública¡El cuerpo del REPORTE no contiene datos XML!¡El cuerpo del REPORTE tiene datos XML inválidos!LeerLeer Listas de Control de Acceso (ACL) para un recurso o colecciónLeer Controles de AccesoLeer Acceso del Usuario ActualLeer Información Libre/OcupadoLeer el contenido de un recurso o colecciónLeer los detalles de control de acceso para el usuario actaul respecto a este recurso.Leer la información libre/ocupado para una colección de calendarioLeer/EscribirRemoverRemover un seguroReportar un problemaReportar un problema en el sistemaSolicitar una Prestación¡El cuerpo de la solicitud no contiene datos XML válidos!RecursoRecursos de Principales de CalendarioRecurso No Encontrado.El Recurso cambió en el servidor - no eliminadoRecursos no pueden ser cambiadoes desde / hacias colecciones.RevocarEntrega de ItinerarioEnvío de ItinerarioTransparencia de ItinerarioItinerario: Entregar una RespuestaItinerario: Entregar una InvitaciónItinerario: EntregasItinerario: Búsqueda libre/ocupadoItinerario: ResponderItinerario: Enviar una InvitaciónItinerario: Enviar libre/ocupadoItinerario: EnviandoEnviar verificaciones de libre/ocupadoEnviar invitaciones de itinerario como el organizador desde el dueño de este buzón de itinerario.Enviando respuestas como participante desde el dueño de este buzón de salida para itinerarios.Activar privilegios libre/ocupadoActivar privilegios de lecturaActivar privilegios de lectura+escrituraConfiguraciónConfigurar DAViCalMostrar ayuda de Estadísticas del Sitio¡Las Estadísticas del Sitio requieren que la base de datos esté disponible!No fue posible cambiar algunas propiedades.No fue posible configurar algunas propiedades.El recurso fuente no existe.Las colecciones especiales no pueden contener un calendario u otra colección especial.Privilegios EspecíficosEstadoEstado: %d, Mensaje: %s, Usuario: %d, Camino: %sEnviarSuhosin "server.strip" deactivadoSincronizar LDAP y DAViCalDestinoEl nombre de destino tiene caracteres inválidos.El recurso no está presente en este servidor.La Solicitud BIND DEBE identificar un recurso existente.El URI de la Solicitud BIND DEBE identificar una colección.No está permitido el método BIND en esa localización.La propiedad CalDAV:schedule-calendar-transp solo puede ser configurada en calendarios.La Página Principal de DAViCalEl boleto de acceso será eliminado.El reporte de solicitud-lista-de-direcciones debe ejecutarse con respecto a una colección de lista de direcciones.El programa de aplicación no comprendión esa solicitud.El enlace será eliminado.La trayectoria del calendario contiene caracteres ilegales.El reporte calendar-query debe ejecutarse contra un calendario o una colecciónde itinerarioEl nombre de la colección no puede dejarse en blanco.La colección de destino no existe.El nombre de despliegue puede asignarse solo en colecciones, principales, o enlaces.La dirección de correo electrónico no deberá estar en blanco.Ël archivo no está codificado en UTF-8, por favor verifica el mensaje de error para mayores detalles.El nombre completo de esta persona, grupo, u otro tipo de principal.El nombre completo no puede estar en blanco.El nombre con el que este usuario accederá el sistema.La trayectoria en el servidor donce están los archivos .ics.El lenguaje predilecto de esta persona.El estilo de fechas usado por esta persona.El correo electrónico del usuario.El nombre completo del usuario.La clave de acceso del usuario para acceder al sistema.El nombre de usuario no puede estar en blanco, y no debe contener diagonales.Ocurrió un error al leer la base de datos.Ocurrió un error al escribir en la base de datos.Esta operación hace lo sigiente:

  • verificar los grupos en el directorio LDAP
  • checar los grupos en DAViCal
luego
  • si un grupo existe en DAViCal mas no en LDAP, asignarlo como inactivo en DAViCal
  • si un grupo está presente en LDAP pero no ed DAViCal, crear el grupo en DAViCal
  • si un grupo está presente en ambos LDAP y DAViCal, actualizar la información en DAViCal
Esta operación hace lo siguiente:
  • verificar que los usuarios son válidos en el directorio LDAP
  • checar los usuarios en DAViCal
luego
  • si un usuario está presente en DAViCal pero no en LDAP, assignarlo como inactivo en DAViCal
  • si un usuario está presente en LDAP mas no en DAViCal, crear al usuario en DAViCal
  • si un usuario está presente en LDAP y en DAViCal, actualizar la información en DAViCal
Esta página valida el ambiente operativo necesario para que DAViCal funcione correctamente. Sugestiones o parches para hacerla mas útil o efectiva serán graciosamente recibidas.Este servidor solo soporta el formato text/calendar para URLs freebusyID del BoletoTiempoA la ColleciónAl IDIntercambiar todos los privilegiosHerramientasTransparenteURLFormato EEUUUsuario no AutentificadoEstados Unidos de Norteamérica (m/d/y)ActualizarActualizadoActualizando el registro de Colección.Actualizando a un Miembro de este Grupo PrincipalActualizando el registro Principal.Actualizando las subvenciones de este PrincipalActualizar el esquema de base de datos de DAViCalActualizar la Base de DatosPrincipales Usuarios de CalendarioDetalles del UsuarioFunciones del UsuarioNombre del UsuarioPapeles del UsuarioEl Usuario es activoRegistro del usuario escrito.Nombre de UsuarioVer Mis DetallesVer mi registro principal propioVer este registro de usuarioVisitar el Wiki de DAViCalQuiere: %s, Actualmente: %sPrecaución: ¡No hay usuarios administrativos activos! Debe reparar esto antes de salirdel sistema. Considere utilizar el parámetro $c->do_not_sync_from_ldap de configuración.Cuando la dirección de correo electrónico del usuario fue validada.EscribirEscribir ACLs para un recurso o colecciónEscribir los Controles de AccesoEscribir DatosEscribir Meta-datosEscribir contenidoEscribir propiedadesSíUd. está editandoUd. no está autorizado a usar esta función.Usted veUd. no tiene permiso para modificar este registro.Ud. no puede ejecutar PUT en un URL de colecciónUd. debe identificarse para usar este sistema.Su configuración produjo errors PHP que deben ser corregidoscalendar-timezone es una propiedad válida solamente para un calendario.el directorio %s no es legibledrivers_imap_pam : imap_url parámetro no configurado en /etc/davical/*-conf.phpdrivers_ldap : No pudo arrancar TLS: ldap_start_tls() fallódrivers_ldap : Falló la atadura entre el sistema %1$s en el puerto %2$s con atadura DN de %3$sdrivers_ldap : Falló en establecer que LDAP utilice la versión 3 del protocol, TLS no es soportadadrivers_ldap : Incapaz de atar a LDAP - verifique su configuración de bindDN y passDN, y que su servidor LDAP sea accesibledrivers_ldap : Incapaz de conectar a LDAP en el puerto %s del servidor %sdrivers_ldap : la función ldap_connect no fue definida; cheque su módulo php_ldapdrivers_pwauth_pam : Incapz de encontrar al archivo %sdrivers_squid_pam : Incapaz de encontrar el archivo %sno me olvidesdel principaltrayectoria para almacenar icsDesautenticadodeberá identificarse con el nombre de usuario y clave de acceso que le fueron otorgados.davical-1.1.1/locale/es_ES/0000755000000000000000000000000011776301350012243 5ustar davical-1.1.1/locale/es_ES/LC_MESSAGES/0000755000000000000000000000000011776301350014030 5ustar davical-1.1.1/locale/es_ES/LC_MESSAGES/davical.mo0000644000000000000000000012141711776301350015776 0ustar  A####$!$;$[$!r$$$$$$%[0% %(;S)-)-))**%*,*)3*]*c* r**2*G*J*J+ Y+Hz+C+3,0;,l, ,, ,,,,(,-8-A-R-#W-{--@- ---. ;.F. X.f.Vy.(.. //"5/!X/z/////// 0 050;F0000901-1H61111 1=1 2+#21O262>22 3 3"313 C3Q3c3r3 3333333#454G4\4p4I4D4 5 5 (5%45Z5 r5 525555&5:5@66w6|6 6V6;6>37=r77+7.7$8-8B>8@888 8882 9>9 P9 Z9 d9n9=w999"99+9": (:6:H: Y:e:j:!:: :: :::(:2;$;;&`;;(;%;; < '< 4<B<T<i<}<< << << <<<< <==(=TE=== = ===%= >>>(>:>-K>y>>>>>>>>? 5?V?g? y?0?[?\'@@@@@4@.@1A(6AA_A AAA AAA B B3+B+_BBBB!B"BB&C+C@C[C,vCGC8C $D /D:D AD"OD rD}DD#DDDD,E33EgE nEyE EEE!EEFF6FUFpFFUFPFDG]GqGcGG G HH5 H,VH(HHKHI,I+3I_IfIIII2I,I4"J0WJ0JJJK"KJ=K2K9KK.LSAL%L)LGL--MG[MGM@M ,N0MN1~N'N!N(N#O>O#TO;xO-O+OPQ"S~SDGT TT TTTT TT TT TU"U*U'FUnU!UUUU UV V V&V5VJVSVcVVVVV-\WW'WW WW WWX X,XHX1XX#X#X@X8YLYOiY;YKYNAZ~Z@[LP[+[*[ [\\#\3\0J\-{\\N\]^^)^^^#_>_(X__"__ __,`lE`*`cOd%d$dej mjxjjj_j0kOk dk!nk'k$k!kkl7lJlPlellll<lm!m'?m=gmmmJmn4,nanxn4nn4n;oEBoGooopp?p_p'zppppp q"q+qHq ^q$qqqqq[qXSr r r r"rrss5/sesmsss0sHsTsQt"Xt{thtUt?Nu;u#uBuE1vwvvJvLv'w.w CwOw Uw6vww w wwwLw8x Qx/]xx+xxxxxyyy&6y]ydyvy yyyy#yDy4 z,?zlz1z1z+z+{ ={K{\{ z{{{{ {{ {{ ||.|F|L|e|v|||t|}})};}K} N}.o} }}}}}-}~~4~G~c~y~&~>~~-D[%m9hq6 €KʀAGX0Dс !;Rcu#I=">aj:~BBG*`$,L݄I*t.ۅ%;2n)v9B4 <Id ~&(Ƈ8$@&e1&Ոoxl% FƊՊN+c.Wދ6M.T"#ь1&'8N>/ƍXO$lc,("K8fd6#;O_>ni]CǑ, 786p$̒+#63VQ+ܓ2v;~1חGx Θ՘  ! %2'I q |*%&ٙ.4/dɚܚ%7'HpǛEΜ*ל.BUjn)} .0*E??!Şd<LLP֟'Hɠd2w1 ܡ "6>7uRbFSD^O'k]": &(a_-.2l4jLQ{ [ >o`qYRWAM7;D6Wm,ZT pu` =~Z2xN/S^s+ .r;f-HQx#E*znbM$VPz,{Tn1pa?C7i @XR] O9AsiX*q}8)9<yYBU[C&N05~hBr61 e_# >dU IG3%:'3l!v <=J/\hKef!HyFkJt0}K)g4@(c5m|+GuP\v?doEwI8tg|$w%VjLc"%F %T%T*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can't find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A DAViCal principal collection may only contain collectionsA collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All events of user "%s" were deleted and replaced by those from file %sAll of the principal's calendars and events will be unrecoverably deleted.All privilegesAll requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApplication DB UserApply ChangesApply DB PatchesAttachmentBinding deletedBindings to other collectionsBindings to this CollectionBindings to this Principal's CollectionsBody contains no XML data!Bound AsBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCalendar TimezoneCan only add tickets for existing collection paths which you ownCategoriesChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedCollections may not be both CalDAV calendars and CardDAV addressbooks at the same timeConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the BindingConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm Deletion of the TicketConfirm PasswordConfirm the new password.Could not retrieveCreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Collection.Creating new Principal record.Creating new ticket granting privileges to this PrincipalCurrent DAViCal version DAV PathDAV::resourcetype may only be set to a new value, it may not be removed.DAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDAViCal only allows BIND requests for collections at present.DKIM signature missingDKIM signature validation failed(DNS ERROR)DKIM signature validation failed(KEY Parse ERROR)DKIM signature validation failed(KEY Validation ERROR)DKIM signature validation failed(Signature verification ERROR)Database ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDate StyleDefault PrivilegesDefault relationships added.DeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleted a grant from this PrincipalDeleting Binding:Deleting Collection:Deleting Principal:Deleting Ticket:Deliver scheduling invitations from an organiser to this scheduling inboxDeliver scheduling replies from an attendee to this scheduling inboxDependenciesDependencyDescriptionDestination collection does not existDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?DomainEMailEMail OKERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.Error writing calendar properties to database.EuropeanEuropean (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.ExpiresExternal CalendarsExternal UrlFailFailed to write collection.Feeds are only supported for calendars at present.For access to theForbiddenFree/BusyFull NameFullnameGET requests on collections are only supported for calendars.GNU gettext supportGO!Go to the DAViCal Feature RequestsGrantGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryImport calendars and Synchronise LDAP.Inactive PrincipalsIncorrect content type for addressbook: Incorrect content type for calendar: Invalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?Items in CollectionJoinedLanguageLast usedList External CalendarsList GroupsList ResourcesList UsersLoad From FileLocaleLocationLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalMost of DAViCal will work but upgrading to PHP 5.2 or later is strongly recommended.NameNew CollectionNew PasswordNew PrincipalNoNo calendar contentNo collection found at that location.No summaryNo.No. of CollectionsNo. of PrincipalsNo. of ResourcesNot overwriting existing destination resourceOpaqueOrganizer MissingOverride a LockPDO PostgreSQL driversPHP DateTime classPHP LDAP module availablePHP Magic Quotes GPC offPHP Magic Quotes runtime offPHP PDO module availablePHP calendar extension availablePHP curl supportPHP iconv supportPHP not using Apache Filter modePHP5 curl support is required for external bindsPUT on a collection is only allowed for text/calendar content against a calendar collectionPUT on a collection is only allowed for text/vcard content against an addressbook collectionPassedPasswordPathPersonPlease confirm deletion of access ticket - see belowPlease confirm deletion of binding - see belowPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrincipal deletedPrivilegesPrivileges granted to All UsersPrivileges to allow delivery of scheduling messagesPrivileges to delegate scheduling decisionsProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead ACLs for a resource or collectionRead Access ControlsRead Current User's AccessRead Free/Busy InformationRead the content of a resource or collectionRead the details of the current user's access control to this resource.Read the free/busy information for a calendar collectionRead/WriteReferencesRemoveRemove a lockRemove dangling external calendarsReport BugReport a bug in the systemRequest FeatureRequest body is not valid XML data!ResourceResource Calendar PrincipalsResource Not Found.Resource has changed on server - not deletedResources may not be changed to / from collections.RevokeSRV RecordSchedule DeliverSchedule SendSchedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: DeliveryScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busyScheduling: SendingSend free/busy enquiriesSend scheduling invitations as an organiser from the owner of this scheduling outbox.Send scheduling replies as an attendee from the owner of this scheduling outbox.Set free/busy privilegesSet read privilegesSet read+write privilegesSet the path to store your ics e.g. 'calendar' will be referenced as /caldav.php/username/calendar/SetupSetup DAViCalShow help onSite StatisticsSite Statistics require the database to be available!Some properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Specific PrivilegesStatusStatus: %d, Message: %s, User: %d, Path: %sSubmitSuhosin "server.strip" disabledSync LDAP Groups with DAViCalSync LDAP with DAViCalTargetThat destination name contains invalid characters.That resource is not present on this server.The BIND Request MUST identify an existing resource.The BIND Request-URI MUST identify a collection.The BIND method is not allowed at that location.The CalDAV:schedule-calendar-transp property may only be set on calendars.The DAViCal Home PageThe access ticket will be deleted.The addressbook-query report must be run against an addressbook collectionThe application failed to understand that request.The application program does not understand that request.The binding will be deleted.The calendar path contains illegal characters.The calendar-query report must be run against a calendar or a scheduling collectionThe collection name may not be blank.The destination collection does not existThe displayname may only be set on collections, principals or bindings.The email address really should not be blank.The file "%s" is not UTF-8 encoded, please check error for more detailsThe file is not UTF-8 encoded, please check the error for more details.The full name for this person, group or other type of principal.The full name must not be blank.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The principal "%s" does not existThe style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.The username must not be blank, and may not contain a slashThere was an error reading from the database.There was an error writing to the database.This operation does the following:
  • check valid groups in LDAP directory
  • check groups in DAViCal
then
  • if a group is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in DAViCal
This operation does the following:
  • check valid users in LDAP directory
  • check users in DAViCal
then
  • if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • if a user is present in LDAP but not in DAViCal create the user in DAViCal
  • if a user in present in LDAP and DAViCal then update information in DAViCal
This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.This process will import each file in a directory named "username.ics" and create a user and calendar for each file to import.This server only supports the text/calendar format for freebusy URLsTicket IDTimeTo CollectionTo IDToggle all privilegesToolsTransparentURLUS FormatUnauthenticated UserUnited States of America (m/d/y)UpdateUpdatedUpdating Collection record.Updating Member of this Group PrincipalUpdating Principal record.Updating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWant: %s, Currently: %sWarning: there are no active admin users! You should fix this before logging out. Consider using the $c->do_not_sync_from_ldap configuration setting.When the user's e-mail account was validated.WriteWrite ACLs for a resource or collectionWrite Access ControlsWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You may not PUT to a collection URLYou must log in to use this system.Your configuration produced PHP errors which should be correctedcalendar-timezone property is only valid for a calendar.directory %s is not readabledrivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.phpdrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforget me notfrom principaliSchedule Domainsinvalid requestpath to store your icsrecipient must be organizer or attendee of eventsender must be organizer or attendee of eventunauthenticatedyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Spanish (Spain) (http://www.transifex.net/projects/p/davical/language/es_ES/) Language: es_ES MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) %F %T%T*** Configuración regional estándar ****** Desconocido ***- agregando %s al grupo %s- agregando usuarios %s al grupo %s- creando los grupos: %s- creando el registro para usuarios: %s- grupos %s desactivados- desactivando a los usuarios: %s- ningún cambio para: %s- eliminando a %s del grupo: %s- actualizando los grupos: %s- actualizando los registros de usuario: %sADVERTENCIA: todos los eventos en este contenedor serán eliminados antes de insertar el archivo ics

Ayuda

Visita la Página Principal de DAViCal para ayuda inicial, o consultael Wiki de DAViCal.

Si no encuentras la respuesta a tus dudas, visítanos en IRC enel canal #davical en irc.oftc.net, o envía tus preguntas a la lista de correo de Usuarios de DAViCal.

El archivo de la lista de correotambien te será útil.

Por favor, autentíquese

Para acceder a %s debe identificarse con su nombre de usuario y su clave de acceso.

Escriba a %s si desea solicitar acceso.Una colección de un Principal de DAViCal solo puede contener otras coleccionesYa existe una colección en esa ruta.Ya existe un recurso en ese destino.Versión de la biblioteca AWLTickets de accesoTicket de acceso eliminadoAcciónActivoAgregando un nuevo miembro a este grupoAdminAdministraciónAdministradorTodosTodos los datos de esta colección serán eliminados permanentemente.Todos los eventos del usuario "%s" fueron eliminados y reemplazados por los contenidos en el fichero %sTodos los calendarios y eventos de este Principal serán eliminados permanentemente.Todos los privilegiosTodos los cambios solicitados fueron aplicados.Permitir consultas libre/ocupado sobre el dueño de este buzón de planificaciónUn usuario "Administrador" tiene todos los permisos en DAViCal.Los usuarios anónimos no tienen permiso para modificar calendariosLos usuarios anónimos solo pueden ver calendarios públicosUsuario de la base de datosAplicar cambiosAplicar cambios a la base de datosAdjuntoEnlace eliminadoEnlaces a otras coleccionesEnlaces a esta colecciónEnlaces a las colecciones de este Principal¡El cuerpo no contiene datos XML!Enlazado comoVer todos los usuariosOcupadoEl calendario "%s" fue cargado desde un fichero.Principals del calendarioZona horaria del calendarioSolo puede agregar tickets en conexiones existentes que le pertenezcanCategoríasCambiar la contraseñaHaga click para ver los detalles del usuarioHaga click para ver los detalles del PrincipalColecciónPermisos sobre la colecciónID de la colecciónColección eliminadaLas colecciones no pueden ser calendarios CalDAV y agendas de teléfono CardDAV al mismo tiempoConfigurando clientes de calendario para DAViCalConfigurando DAViCalConfirmarConfirmar eliminación del enlaceConfirmar eliminación de la colecciónConfirmar eliminación del PrincipalConfirmar eliminación del ticketConfirmar la contraseñaConfirmar la nueva contraseñaNo se pudo obtenerCrearCrear una colecciónCrear eventos/coleccionesCrear una colección nuevaCrear un Principal nuevoCrear un PrincipalCrear un Principal nuevo (i.e. un usuario, recurso, o grupo)Crear un recurso o colecciónCreando una colección nueva.Creando un registro nuevo de Principal.Creando un ticket nuevo para dar privilegios a este PrincipalVersión actual de DAViCalRuta DAVDAV::resourcetype sólo puede tener un nuevo valor, no puede ser eliminadoServidor CalDAV DAViCalVersión del esquema de la base de datos de DAViCal Página web de DAViCalWiki de DAViCalDAViCal solo permite BINDs a collecciones por ahora.Falta la firma DKIMLa validación de la firma DKIM falló(ERROR de DNS)Validación de firma DKIM falló (ERROR al interpretar KEY)La validación de la firma DKIM falló(ERROR de validación de LLAVE)La validación de la firma DKIM falló(ERROR de verificación de firma)Error en la base de datosServidor de base de datosNombre de la base de datosPropietario de la base de datosContraseña de la base de datosPuerto de la base de datosNombre de usuario para la base de datosError en la base de datosEstilo del formato de fechaFormato de fechaPrivilegios por defectoRelaciones por defecto añadidasEliminarEliminar eventos/coleccionesEliminar el PrincipalEliminar un recurso o colecciónPrilegio eliminado de este PrincipalEliminando enlace:Eliminando colección:Eliminando Principal:Eliminando ticket:Permitir al organizador de un evento enviar una invitación a este buzón de planificaciónPermitir a un asistente a un evento enviar una respuesta a este buzón de planificaciónDependenciasDependenciaDescripciónLa colección de destino no existeDirectorio en el servidorNombre mostradoNombre mostrado¿El usuario tiene permiso para desempeñar este rol?DominioEmailEmail correctoERROR: El nombre completo no puede estar vacío.ERROR: La nueva contraseña debe coincidir con el campo de confirmaciónERROR: Hubo un error en la base de datos al escribir la información sobre los rolesEditarEditar el registro de este usuarioDirección de emailProporcione un nombre de usuario, si lo sabe, y haga click aquí para enviarle una contraseña temporal.Proporcione su nombre de usuario y contraseña, depues haga click aquí para acceder.Error NoGroupFound con el filtro >%s<, atributos >%s< , dn >%s<Error NoUserFound con filtro >%s<, atributos >%s< , dn >%s<Error consultando la base de datos.Error al escribir los detalles del calendario en la base de datos.Error al escribir las propiedades del calendario en la base de datos.EuropeoEuropeo (d/m/y)El recurso existente no coincide con el encabezado "If-Match" - rechazado.El recurso existente coincide con el encabezado "If-None-Match" - rechazado.ExpiraCalendarios externosURL externaFalloFallo al escribir la colección.Los 'feeds' sólo se permiten en calendarios por ahoraPara acceso alProhibidoLibre/OcupadoNombre completoNombreLas solicitudes GET en colecciones solo están disponibles para calendarios.Soporte para GNU gettext¡Adelante!Ir a las peticiones de funcionalidad de DAViCalPermisoAñadiendo nuevos permisos a este PrincipalGrupoMiembros del grupoMembresías de grupoPrincipals del grupoTiene miembrosAyudaAyuda con la pantalla actual¡Ayuda! ¡He olvidado mi contraseña!InicioPágina principalIDFormato ISOFormato ISO (YYYY-MM-DD)IDSi olvidó su contraseña, entoncesSi usted quiere solicitar acceso, por favor escriba a la dirección Importar todos los ficheros .ics desde un directorioImportar calendarios y sincronizar con LDAP.Principals inactivosTipo incorrecto para una libreta de direcciones: Tipo de contenido incorrecto para un calendario: Nombre de usuario o contraseña inválidos.Nombre de usuario o contraseña inválidos.Es miembro deEs un calendarioEs una libreta de direcciones¿Está habilitado este usuario?Elementos en la colecciónUnidoIdiomaÚltimo usoListar calendarios externosListar gruposListar recursosListar usuariosCargar desde ficheroConfiguración regionalLugarPor favor, autentíqueseSalir de DAViCalSalirMiembro eliminado de este grupoLa mayoría de las funciones de DAViCal funcionarán, pero es muy recomendable actualizar a PHP 5.2 o más reciente.NombreNueva colecciónNueva contraseñaNuevo PrincipalNoEl calendario no tiene contenidoNo se encontró ninguna colección en esa rutaSin resumenNúm.Núm. de coleccionesNúm. de PrincipalsNúm. de recursosNo se sobreescribió el recurso ya existente.OpacoFalta el organizadorIgnorar un bloqueoDrivers PDO para PostgreSQLClase DateTime de PHPMódulo LDAP PHP disponible"Magic quotes GPC" de PHP desactivadas"Magic quotes GPC" de PHP desactivadas en tiempo de ejecuciónMódulo PHP PDO disponibleExtensión de calendarios para PHP disponibleSoporte de cURL en PHPSoporte PHP iconvPHP sin usar el modo filtro de ApacheEl soporte cURL para PHP5 se necesita para binds externosEl método PUT con contenido de tipo text/calendar sólo se permite en una colección de tipo calendarioEl método PUT con contenido de tipo text/vcard sólo se permite en una colección de tipo libreta de direccionesAceptadoContraseñaRutaPersonaPor favor confirme la eliminación del ticket de acceso - véase más abajoPor favor confirme la eliminación del enlace - véase más abajoPor favor confirme la eliminación de la colección - véase más abajoPor favor confirme la eliminación del PrincipalPor favor anote la hora y coméntelo a su administrador del sistema.Principal'Colecciones del PrincipalPermisos del PrincipalID del PrincipalTipo de PrincipalPrincipal eliminadoPermisosPermisos dados a todos los usuariosPermisos para permitir el envío de mensajes de planificación de eventosPermisos para delegar decisiones de planificación de eventosEsta propiedad es de sólo lecturaPúblicoDe lectura pública¡El cuerpo de la operación REPORT no contiene datos XML!¡El cuerpo de la operación REPORT contiene datos XML inválidos!LecturaLeer ACLs (listas de control de acceso) de un recurso o colecciónLeer controles de accesoLeer permisos de acceso del usuario actualConsultar información libre/ocupadoLeer el contenido de un recurso o colecciónLeer los detalles de control de acceso para el usuario actual a este recursoConsultar la información libre/ocupado para una colección de calendarioLectura/escrituraApunta aEliminarEliminar un bloqueoEliminar calendarios externos que van y vienenInformar de un falloInformar de un problema en el sistemaSolicitar una funcionalidad¡El cuerpo de la petición no contiene datos XML válidos!RecursoPrincipals de tipo recurso con calendarioRecurso no encontrado.El recurso fue modificado en el servidor - no se eliminóLos recursos no pueden ser convertidos a colecciones (y viceversa)RevocarRegistro SVREntrega de planificacionesEnvío de planificacionesTransparencia de planificacionesPlanificación: entregar una respuestaPlanificación: entregar una invitaciónPlanificación: entregaPlanificación: consultar disponibilidad (libre/ocupado)Planificación: enviar una respuestaPlanificación: enviar una invitaciónPlanificación: enviar información libre/ocupadoPlanificación: envíoEnviar comprobaciones de libre/ocupadoEnvío de invitaciones de planificación como organizador por parte del dueño de este buzón de planificaciónEnvío de respuestas a propuestas de planificación como asistente por parte del dueño de este buzón de planificaciónActivar permisos libre/ocupadoActivar permisos de lecturaActivar permisos de lectura+escrituraIndique la ruta en la que se almacenarán sus ics. Por ejemplo, 'calendario' se traducirá en '/caldav.php/usuario/calendario/'ConfiguraciónConfigurar DAViCalMostrar ayuda sobreEstadísticas del sitio¡Las estadísticas del sitio necesitan que la base de datos esté disponible!No fue posible cambiar algunas propiedades.No fue posible configurar algunas propiedades.El recurso de origen no existe.Las colecciones especiales no pueden contener un calendario u otra colección especial.Privilegios concretos.EstadoEstado: %d, Mensaje: %s, Usuario: %d, Ruta: %sEnviarSuhosin "server.strip" desactivadoSincronizar grupos LDAP con DAViCalSincronizar LDAP en DAViCalDestinoEl nombre de destino tiene caracteres inválidos.El recurso no existe en este servidor.La solicitud BIND DEBE identificar un recurso existente.El URI de la solicitud BIND DEBE identificar a una colección.No está permitido el método BIND en esa ruta.La propiedad CalDAV:schedule-calendar-transp sólo puede ser configurada en calendarios.Página principal de DAViCalEl ticket de acceso será eliminado.La solicitud addressbook-query debe ejecutarse contra una colección de tipo libreta de direccionesLa aplicación no pudo entender la peticiónLa aplicación no entendió su peticiónEl enlace será eliminado.La ruta al calendario contiene caracteres no permitidos.La petición calendar-query debe ejecutarse contra un calendario o una colección de planificación.El nombre de la colección no puede dejarse en blanco.La colección de destino no existe.El nombre mostrado puede asignarse sólo en colecciones, Principals, o enlaces.La dirección de correo electrónico no debería estar vacía.El fichero "%s" no está codificado en UTF-8, por favor compruebe el log de errores para conocer más detallesEl fichero no está codificado en UTF-8, por favor compruebe el log de errores para conocer más detallesEl nombre completo de esta persona, grupo, u otro tipo de PrincipalEl nombre completo no puede estar en blanco.El nombre con el que este usuario accederá el sistema.La ruta en el servidor donde están los ficheros .ics.El idioma preferido de esta persona.El Principal %s no existeEl formato de fecha usado por esta persona.El correo electrónico del usuario.El nombre completo del usuario.La contraseña del usuario para acceder al sistema.El nombre de usuario no puede estar vacío, y no debe contener barras inclinadas.Ocurrió un error al leer la base de datos.Ocurrió un error al escribir en la base de datos.Esta operación hace lo siguiente:

  • comprobar los grupos válidos en LDAP
  • comprobar los grupos en DAViCal
, tras esto:
  • si un grupo está en DAViCal pero no en LDAP, marcarlo como inactivo
  • si un grupo está en LDAP pero no en DAViCal, crearlo en DAViCal
  • si está en ambos, actualizar la información en DAViCal
Esta operación hace lo siguiente:
  • comprobar los usuarios válidos en LDAP
  • comprobar los usuarios en DAViCal
, tras esto:
  • si un usuario está en DAViCal pero no en LDAP, marcarlo como inactivo
  • si un usuario está en LDAP pero no en DAViCal, crearlo en DAViCal
  • si está en ambos, actualizar la información en DAViCal
Esta página comprueba si el entorno es el necesario para que DAViCal funcione correctamente. Las sugerencias y los parches para hacerla más útil son bienvenidos.Este proceso importará de un directorio cada fichero "usuario.ics", creando un usuario con el nombre indicado y un calendario, uno por cada fichero encontrado.Este servidor sólo soporta el formato text/calendar para URLs freebusyID del ticketTiempoA la colecciónAl IDInvertir todos los permisosHerramientasTransparenteURLFormato EEUUUsuario no autenticadoEstados Unidos de Norteamérica (m/d/y)ActualizarActualizadoActualizando el registro de la colección.Actualizando un miembro de este grupoActualizando el registro del PrincipalActualizando los permisos desde este PrincipalActualizar el esquema de la base de datos de DAViCalActualizar la base de datosPrincipals de tipo usuarioDetalles del usuarioFunciones sobre usuariosNombre del usuarioRoles del usuarioEl usuario está activoRegistro del usuario guardado.Nombre de usuarioVer mis detallesVer el registro de mi propio Principal'Ver el registro de este usuarioVisitar el Wiki de DAViCalQuiere: %s, Actualmente: %sPrecaución: ¡No hay usuarios con privilegios de administración activos! Debe reparar esto antes de salir. Plantéese utilizar el parámetro $c->do_not_sync_from_ldap en la configuración.Cuando la dirección de correo electrónico del usuario fue validada.EscribirEscribir ACLs para un recurso o colecciónEscribir controles de accesoEscribir datosEscribir meta-datosEscribir contenidoEscribir propiedadesSíEstá editandoNo está autorizado a usar esta función.Está viendoNo tiene permiso para modificar este registro.No puede usar PUT sobre la URL de una colecciónDebe autenticarse para utilizar el sistemaSu configuración produjo errores de PHP que deberían ser corregidosLa propiedad calendar-timezone sólo es válida en calendarios.no se puede leer el directorio %sdrivers_imap_pam : el parámetro imap_url parámetro no está configurado en /etc/davical/*-conf.phpdrivers_ldap : no se pudo usar TLS: ldap_start_tls() fallódrivers_ldap : falló el bind en el host %1$s por el puerto %2$s con DN %3$sdrivers_ldap : no se pudo usar LDAP versión 3, el uso de TLS no está soportadodrivers_ldap : no se pudo hacer bind en LDAP - compruebe la configuración de los parámetros bindDN y passDN, y asegúrese de que su servidor LDAP es accesible.drivers_ldap : no se pudo conectar a LDAP por el puerto %s en el host %sdrivers_ldap : la función ldap_connect no existe; compruebe que tiene instalado el módulo php_ldapdrivers_pwauth_pam : no se encontró el fichero %sdrivers_squid_pam : no se encontró el fichero %srecuérdamedel PrincipalDominios para iSchedulepetición inválidaruta para almacenar sus icsel receptor debe ser organizador o asistente al eventoel remitente debe ser organizador o asistente al eventono autenticadodeberá autenticarse con el nombre de usuario y contraseña que se le comunicaron.davical-1.1.1/locale/it/0000755000000000000000000000000011776301350011661 5ustar davical-1.1.1/locale/it/LC_MESSAGES/0000755000000000000000000000000011776301350013446 5ustar davical-1.1.1/locale/it/LC_MESSAGES/davical.mo0000644000000000000000000001144211776301350015410 0ustar B,Y<[ 3 16Tg"o 2DJS;i+     ! : ? W (Z 2 $    - 4 = G U \ a n r {      #  s! c    2 @Oe1n$ 4AI3^ D,=4r"7 *A"l"  ) 1=CL\ m y 9%70B ')1.@,%&;4>2 8 ?9-+#($<5 !" 3=*/6:AWARNING: all events in this path will be deleted before inserting allof the ics file

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

ActionAdminAllAll requested changes were made.Anonymous users are not allowed to modify calendarsBrowse all usersBusyClick to display user detailsCollection deletedConfirmConfirm Deletion of the CollectionConfirm the new password.CreateDAViCal CalDAV ServerDatabase ErrorDatabase errorDate StyleDeleteDirectory on the serverDoes the user have the right to perform this role?EMailEMail OKEdit this user recordEnter your username and password then click here to log in.Error querying database.Error writing calendar details to database.European (d/m/y)ForbiddenFull NameGO!HelpHelp! I've forgotten my password!HomeISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryInvalid user name or password.Invalid username or password.Is this user active?JoinedLanguageLast usedLog On PleaseLogoutNameNew PasswordNo.PasswordReadReport BugSubmitUpdateUpdatedUser DetailsUser NameUser RolesUser is activeWriteYou must log in to use this system.forget me notpath to store your icsProject-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: LANGUAGE Language: it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) ATTENZIONE: tutti gli eventi in questo path saranno cancellati dall'inserimento del file ics

Log On

Per accedere a %s devi autenticarti con le credenziali username e password che ti sono state assegnate.

Se desideri ottenere un accesso, invia una richiesta e-mail a %s.

AzioneAmministratoreTuttiTutte le modifiche richieste sono state apportate.Gli utenti anonimi non sono autorizzati a modificare i calendariVedi tutti gli utentiOccupatoFare clic per visualizzare i dettagli dell'utenteArchivio cancellatoConfermaConferma cancellazione archivioConferma la nuova password.CreaDAViCal CalDAV ServerErrore databaseErrore databaseFormato dataEliminaDirectory sul serverL'utente ha i privilegi per ricoprire questo ruolo?E-mail:E-mail OKModifica questo record utenteInserire nome utente e password quindi clicca su log in per accedereErrore durante l'interrogazione al database.Errore durante la scrittura dettagli calendario nel database.Europeo (d/m/y)NegatoNome visualizzatoVAI!AiutoAiuto! Ho dimenticato la password!HomeFormato ISO (YYYY-MM-DD)IdSe hai dimenticato la passwordSe si desidera richiedere un accesso, inviare un'e-mailImporta tutti i file .ics di una directoryNome utente o password non valida.Nome utente o password non valida.Questo utente è attivo?AggiuntoLinguaUltimo accessoAutenticazione richiestaEsciNomeNuova passwordNo.PasswordLetturaSegnala BugInviaAggiornaUltima modificaDettaglio utenteNome utenteRuoli utenteL'utente è attivoScritturaÈ necessario autenticarsi per utilizzare questo sistema.Mantieni aperta la connessionepercorso dove memorizzare il file icsdavical-1.1.1/locale/nb_NO/0000755000000000000000000000000011776301350012240 5ustar davical-1.1.1/locale/nb_NO/LC_MESSAGES/0000755000000000000000000000000011776301350014025 5ustar davical-1.1.1/locale/nb_NO/LC_MESSAGES/davical.mo0000644000000000000000000011213611776301350015771 0ustar < 3\(#)#/#2#I#Y#s##!####$4$K$[h$ $';(-(-(#)8)G)])d))k))) ))2)G)J7** *H*C*3?+0s++ ++ +++,(,,U,p,y,,#,,,@, -%-5-S- s-~- --V-(.1.E.M."m.!.....//(/B/X/m/;~////90L0e0Hn0000 0=1D1+[11161>1/2 >2 L2Z2i2 {2222 222223)3#I3m3333I3D4 H4 U4 `4%l44 4 42444&5:,5@g555 5V5;(6>d6=66+6.&7U7^7Bo7@777 88 82<8o8 8 8 88=888"8!9+'9S9 Y9g9y9 999!99 99 99 :(:29:$l:&::(:%:;:; X; e;s;;;;; ;; ;; ;<<< %<3<F<(M<Tv<<< < <<<%= 7=B=F=Y=k=-|======>>;> T>u> >[>\?a?h?q?v?4}?.?1?(@A<@ ~@@@ @@@ @@3A+f ifwff#fff=f g 'g5g%Ngtg|g ggGg*gh4h o<o*p,Jp6wp ppDpDqTq]q pq|q!q:qqq q r r:rTrhr prr+rrrr r r ss(sGs LsWs Zses}ss#s%s'st$t!Dt ft t ttttt uu u u Ih}q  $ 1+<!h!Lŀ)+0\a$+-6-R0E E+.q'ȃ,P"cF*Q<hA"5 )@%j#Ά"<(Z/IuJ S_ cov   ʌ &=(S!|ƍՍ  %0BYr"Dg&m  Əԏ 3 )04+e&-8P8=NǑWnNL?+* 6'k.B1J=G bTZXA?B2!x<HcVxfm6MZP9D~y3)/( |FL:vA:2#"3UqscaqOr8`^v i;|gdziL_{_~>0l/n<N*(,$gt4@Y6 u''{@5)1V,oXO]U9 }II y\Ep z[8%-n+pae[?> +l0bh&JWNY\CGe^W!.H%S K& C`;Df#PRu4t=$E5Tj}KrSkRQM m7-oFdQsj"hw*7]w%F %T%T*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can't find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A DAViCal principal collection may only contain collectionsA collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All events of user "%s" were deleted and replaced by those from file %sAll of the principal's calendars and events will be unrecoverably deleted.All privilegesAll requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApplication DB UserApply ChangesApply DB PatchesAttachmentBinding deletedBindings to other collectionsBindings to this CollectionBindings to this Principal's CollectionsBody contains no XML data!Bound AsBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCalendar TimezoneCan only add tickets for existing collection paths which you ownCategoriesChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedCollections may not be both CalDAV calendars and CardDAV addressbooks at the same timeConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the BindingConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm Deletion of the TicketConfirm PasswordConfirm the new password.Could not retrieveCreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Collection.Creating new Principal record.Creating new ticket granting privileges to this PrincipalCurrent DAViCal version DAV PathDAV::resourcetype may only be set to a new value, it may not be removed.DAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDAViCal only allows BIND requests for collections at present.DKIM signature missingDKIM signature validation failed(DNS ERROR)DKIM signature validation failed(KEY Parse ERROR)DKIM signature validation failed(KEY Validation ERROR)DKIM signature validation failed(Signature verification ERROR)Database ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDate StyleDefault PrivilegesDefault relationships added.DeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleted a grant from this PrincipalDeleting Binding:Deleting Collection:Deleting Principal:Deleting Ticket:Deliver scheduling invitations from an organiser to this scheduling inboxDeliver scheduling replies from an attendee to this scheduling inboxDependenciesDependencyDescriptionDestination collection does not existDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?EMailEMail OKERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.Error writing calendar properties to database.EuropeanEuropean (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.ExpiresExternal CalendarsExternal UrlFailFailed to write collection.Feeds are only supported for calendars at present.For access to theForbiddenFree/BusyFull NameFullnameGET requests on collections are only supported for calendars.GNU gettext supportGO!Go to the DAViCal Feature RequestsGrantGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryImport calendars and Synchronise LDAP.Inactive PrincipalsIncorrect content type for addressbook: Incorrect content type for calendar: Invalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?Items in CollectionJoinedLanguageLast usedList External CalendarsList GroupsList ResourcesList UsersLoad From FileLocaleLocationLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalMost of DAViCal will work but upgrading to PHP 5.2 or later is strongly recommended.NameNew CollectionNew PasswordNew PrincipalNoNo calendar contentNo collection found at that location.No summaryNo.No. of CollectionsNo. of PrincipalsNo. of ResourcesNot overwriting existing destination resourceOpaqueOverride a LockPDO PostgreSQL driversPHP DateTime classPHP LDAP module availablePHP Magic Quotes GPC offPHP Magic Quotes runtime offPHP PDO module availablePHP calendar extension availablePHP iconv supportPHP not using Apache Filter modePUT on a collection is only allowed for text/calendar content against a calendar collectionPUT on a collection is only allowed for text/vcard content against an addressbook collectionPassedPasswordPathPersonPlease confirm deletion of access ticket - see belowPlease confirm deletion of binding - see belowPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrincipal deletedPrivilegesPrivileges granted to All UsersPrivileges to allow delivery of scheduling messagesPrivileges to delegate scheduling decisionsProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead ACLs for a resource or collectionRead Access ControlsRead Current User's AccessRead Free/Busy InformationRead the content of a resource or collectionRead the details of the current user's access control to this resource.Read the free/busy information for a calendar collectionRead/WriteReferencesRemoveRemove a lockRemove dangling external calendarsReport BugReport a bug in the systemRequest FeatureRequest body is not valid XML data!ResourceResource Calendar PrincipalsResource Not Found.Resource has changed on server - not deletedResources may not be changed to / from collections.RevokeSchedule DeliverSchedule SendSchedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: DeliveryScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busyScheduling: SendingSend free/busy enquiriesSend scheduling invitations as an organiser from the owner of this scheduling outbox.Send scheduling replies as an attendee from the owner of this scheduling outbox.Set free/busy privilegesSet read privilegesSet read+write privilegesSet the path to store your ics e.g. 'calendar' will be referenced as /caldav.php/username/calendar/SetupSetup DAViCalShow help onSite StatisticsSite Statistics require the database to be available!Some properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Specific PrivilegesStatusStatus: %d, Message: %s, User: %d, Path: %sSubmitSuhosin "server.strip" disabledSync LDAP Groups with DAViCalSync LDAP with DAViCalTargetThat destination name contains invalid characters.That resource is not present on this server.The BIND Request MUST identify an existing resource.The BIND Request-URI MUST identify a collection.The BIND method is not allowed at that location.The CalDAV:schedule-calendar-transp property may only be set on calendars.The DAViCal Home PageThe access ticket will be deleted.The addressbook-query report must be run against an addressbook collectionThe application failed to understand that request.The application program does not understand that request.The binding will be deleted.The calendar path contains illegal characters.The calendar-query report must be run against a calendar or a scheduling collectionThe collection name may not be blank.The destination collection does not existThe displayname may only be set on collections, principals or bindings.The email address really should not be blank.The file "%s" is not UTF-8 encoded, please check error for more detailsThe file is not UTF-8 encoded, please check the error for more details.The full name for this person, group or other type of principal.The full name must not be blank.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The principal "%s" does not existThe style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.The username must not be blank, and may not contain a slashThere was an error reading from the database.There was an error writing to the database.This operation does the following:
  • check valid groups in LDAP directory
  • check groups in DAViCal
then
  • if a group is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in DAViCal
This operation does the following:
  • check valid users in LDAP directory
  • check users in DAViCal
then
  • if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • if a user is present in LDAP but not in DAViCal create the user in DAViCal
  • if a user in present in LDAP and DAViCal then update information in DAViCal
This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.This process will import each file in a directory named "username.ics" and create a user and calendar for each file to import.This server only supports the text/calendar format for freebusy URLsTicket IDTimeTo CollectionTo IDToggle all privilegesToolsTransparentURLUS FormatUnauthenticated UserUnited States of America (m/d/y)UpdateUpdatedUpdating Collection record.Updating Member of this Group PrincipalUpdating Principal record.Updating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWant: %s, Currently: %sWarning: there are no active admin users! You should fix this before logging out. Consider using the $c->do_not_sync_from_ldap configuration setting.When the user's e-mail account was validated.WriteWrite ACLs for a resource or collectionWrite Access ControlsWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You may not PUT to a collection URLYou must log in to use this system.Your configuration produced PHP errors which should be correctedcalendar-timezone property is only valid for a calendar.directory %s is not readabledrivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.phpdrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforget me notfrom principalpath to store your icsunauthenticatedyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/davical/language/nb_NO/) Language: nb_NO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) %F %T%T*** Forvalgt nasjonalitet ****** Ukjent ***- legger til %s i gruppe : %s- legger til brukerne %s i gruppe : %s- oppretter grupper : %s- oppretter post for brukere : %s- deaktiverer grupper : %s- deaktiverer brukere : %s- ingen endring på : %s- fjerner %s fra gruppe : %s- oppdaterer grupper : %s- oppdaterer brukerdata : %sADVARSEL: alle hendelser i denne banen vil bli slettet ved innsetting av ics-filen

Hjelp

For oppstartshjelp bør du besøke DAViCal-hjemmesiden eller ta en titt på DAViCal wikien.

Kan du ikke finne svaret der, kom innom vår IRC-kanal #davicalirc.oftc.net-nettverket, eller send spørsmålet til DAViCal epostlisten for brukere.

Epostlistearkivene kan også være nyttige.

Logg deg inn

For tilgang til %s skal du oppgi brukernavnet og passordet du fikk

Vil du be om tilgang, kontakt %s.

En DAViCal kontosamling kan bare inneholde samlingerEn samling finnes allerede derEn ressurs finnes allerede der AWL bibliotekversjon AdgangstilgangerAdgangstilgang slettetAksjonAktivLegger nytt medlem til denne gruppekontoenAdminAdministrasjonAdministratorAlleAlle data til samlingen vil ugjenopprettelig bli slettetAlle hendelser tilhørende "%s" ble slettet og erstattet med de fra filen %sAlle kontoens kalendre og hendelser vil ugjenopprettelig bli slettetAlle privilegierAlle forespurte endringer ble utførtTillat ledig/opptatt-forespørsler rettet til eieren av denne innboksenEn "Administrator" bruker har fulle rettigheter til hele DAViCal-systemetAnonyme brukere har ikke tillatelse til endring av kalendreAnonyme brukere har kun tilgang til offentlige kalendreApplikasjonens DB-brukerUtfør endringerUtfør DB-endringerVedleggForbindelse slettetForbindelse til andre samlingerForbindelser til denne samlingenForbindelse til denne kontoens samlingerMeldingskroppen inneholder ingen XML-data!Forbundet somBla gjennom alle brukereOpptattKalenderen "%s" ble lastet fra fil.KalenderkontoerKalender tidssoneKan bare legge til tilgang til eksisterende samlinger du eierKategorierEndre passordKlikk for brukerdetaljerKlikk for redigering av kontodetaljerSamlingSamlingsrettigheterSamlings-IDSamling slettetSamlinger kan ikke være både CalDAV og CardDAV adressebøker samtidigKonfigurerer kalender-klienter for DAViCalKonfigurerer DAViCalBekreftBekreft sletting av forbindelsenBekreft sletting av samlingenBekreft sletting av kontoenBekreft sletting av tilgangenBekreft passordetBekreft nytt passordKunne ikke henteOpprettOpprett samlingOpprett hendelser/samlingerLag ny samlingLag ny kontoLag kontoLag ny konto (ny bruker, ressurs eller gruppe)Lag en ressurs eller samlingOppretter ny samlingOppretter ny kontopostOppretter ny tilgang med privilegier til denne kontoGjeldende DAViCal versjonDAV baneDAV::ressurstype kan bare settes til ny verdi, kan ikke slettesDAViCal CalDAV ServerDAViCal DB Schema-versjon DAViCal hjemmesideDAViCal WikiDAViCal tillater bare BIND-forespørsler for gjeldende samlingerDKIM-signatur manglerDKIM signatursjekk feilet(DNS ERROR)DKIM signatursjekk feilet(KEY Parse ERROR)DKIM signatursjekk feilet(KEY Validation ERROR)DKIM signatursjekk feilet(Signature verification ERROR)DatabasefeilDatabase HostDatabase NavnDatabase EierDatabase PassordDatabase PortDatabase BrukernavnDatabasefeilDatoformat DatoformatForvalgte privilegierLa til forvalgte relasjoner.SlettSlett hendelser/samlingerSlett kontoSlett en ressurs eller samlingSlettet en rettighet til denne kontoenSletter forbindelse:Sletter samling:Sletter konto:Sletter tilgangLevér invitasjoner fra en organisator til denne innboksenLevér svar fra en deltaker til denne innboksenAvhengigheterAvhengighetBeskrivelseSamlingen finnes ikkeMappe på tjenerenVisningsnavnVisningsnavnHar brukeren rettigheter til denne rollen?EpostEpost OKFEIL: Det fulle navnet kan ikke være tomtFEIL: Det nye passordet må stemme med det bekreftede passordetFEIL: Det var en databasefeil under skriving av rolleinformasjonRedigérRedigér denne brukerens postEpostadresseOppgi brukernavnet, om du vet det, og klikk her for tilsending av midlertidig passord Oppgi brukernavn og passord og klikk her for å logge innError NoGroupFound with filter >%s<, attributes >%s< , dn >%s<Feil NoUserFound with filter >%s<, attributes >%s< , dn >%s<Feil under spørring i databaseFeil under skriving av detaljer til databaseFeil under skriving av kalenderegenskaper til databaseEuropeiskEuropeisk (d/m/y)Eksisterende ressurs passer ikke "If-Match" header - ikke akseptert.Eksisterende ressurs passer "If-None-Match" header - ikke akseptert,UtløperEksterne kalendereEkstern URLFeilMislykkes med skriving av samlingKanalabonnement støttes kun av kalendere for øyeblikket.For adgang tilForbudtLedig/OpptattFullt navnFullt navnGET-forespørsler på samlinger støttes bare for kalendreGNU gettext supportUtfør!Gå til DAViCal Feature RequestsOpprettOppretter nye privilegier fra denne kontoenGruppeGruppemedlemmerGruppemedlemskapGruppekontoerHar medlemmerHjelpHjelp til gjeldende sideHjelp! Jeg har glemt passordetHomeHjemmesideIDISO FormatISO Format (YYYY-MM-DD)IdHvis du har glemt passordetHvis du vil ha tilgang, send epost Importer alle .ics filer fra en mappeImportér kalendre og synkronisér LDAPInaktive kontoerUriktig innholdstype for adressebok:Uriktig innholdstype for kalenderUgyldig brukernavn eller passordUgyldig brukernavn eller passordEr medlem avEr en kalenderEr en adressebokEr denne brukeren aktiv?Objekter i samlingenTilknyttetSpråkSist bruktList opp eksterne kalendereListe grupperListe ressurserListe brukereLast fra filLocalePlasseringLogg innLogg ut fra DAViCalLogg utMedlem slettet fra denne gruppekontoDe fleste funksjoner av DAViCal vil fungere, men å oppgradere til PHP 5.2 eller nyere er anbefalt på det sterkeste.NavnNy samlingNytt passordNy kontoNeiIkke noe kalenderinnholdIngen samling funnet på den lokasjonenIngen oppsummeringNr.Antall samlingerAntall kontoerAntall ressurserSkriver ikke over eksisterende ressursOpaqueBryt en låsPDO PostgreSQL driverePHP DateTime classPHP LDAP modul tilgjengeligPHP Magic Quotes GPC offPHP Magic Quotes runtime offPHP PDO modul tilgjengeligPHP kalenderutvidelse er tilgjengelig.Støtte for PHP iconvPHP er ikke satt til å bruke Apache Filter-modus.PUT på en samling er bare tillatt for tekst-/kalenderinnhold i en kalendersamlingEn PUT-forespørsel er kun tillatt for tekst-/vcard-innhold i en adresseboksamling.GodkjentPassordBanePersonBekreft sletting av adgangstilgang - se underBekreft sletting av forbindelse - se underBekreft sletting av samling - se underBekreft sletting av kontoenNotér klokkeslett og meld fra til systemets administratorKontoKontosamlingerKontorettigheterKonto-IDKontotypeKonto slettetRettigheterRettigheter tildelt til alle brukerePrivilegier til å tillate møteplanmeldingsvarslerPrivilegier til å delegere møteplanavgjørelserEgenskapen er kun leseOffentligOffentlig lesbarREPORT body inneholder ingen XML-data!REPORT body er ikke gyldig XML-data!LesLes tilgangslister for en ressurs eller samlingLes tilgangskontrollLes gjeldende brukers adgangLes Ledig/Opptatt informasjonLes innholdet til en ressurs eller samlingLes detaljer om gjeldende brukers adgangskontroll til denne ressursenLes Ledig/Opptatt informasjon for en kalendersamlingLes/SkrivReferanserFjernFjern en låsFjern haltende eksterne kalendereRapportér feilRapportér feil i systemetBe om funksjonalitetRequest body er ikke gyldig XML-data!RessursRessurskalender-kontoerRessurs ikke funnetRessurs er endret på tjener - ikke slettetRessurser kan ikke endres fra/til samlingerGjenopprettHendelse LevérHendelse SendHendelse gjennomsiktighetHendelse: Gi et svarHendlese: Levér en invitasjonHendelse: LeveringHendelse: Finn Ledig/OpptattHendelse: Send et svarHendelse: Send en invitasjonHendelse: Send Ledig/OpptattHendelse: SenderSend Ledig/Opptatt forespørselSend hendelsesinvitasjon som organisator fra eieren av denne utboksenSend invitasjonssvar som deltaker fra eieren av denne utboksenSett Ledig/Opptatt rettigheterSett leserettigheterSett lese+skriverettigheterAngi en sti for lagring av ics. For eksempel ‹kalender› vil bli referert som /caldav.php/brukernavn/kalender/OppsettSett opp DAViCalVis hjelp omStatistikkStatistikk krever en tilgjengelig database!Noen egenskaper kunne ikke endresNoen egenskaper kunne ikke settesRessurskilde finnes ikkeSpesielle samlinger kan ikke inneholde kalendre eller andre spesialsamlingerSpesifikke privilegierStatusStatus: %d, Message: %s, User: %d, Path: %sSendSuhosin "server.strip" disabledSynkroniser LDAP grupper med DAViCalSynk LDAP med DAViCalMålMålets navn inneholder ugyldige karaktererRessursen er ikke tilstede på denne tjenerenBIND Request MÅ identifisere en eksisterende ressurs.BIND Request-URI MÅ identifisere en samling.BIND metoden er ikke tillatt på den lokasjonen.CalDAV:schedule-calendar-transp egenskap kan bare settes på kalendreDAViCal HjemmesideAdgangstilgangen vil bli slettetAdressebok-forespørselsrapport må kjøres mot en adressebok-samlingProgrammet kunne ikke forstå den anmodningen.Programmet forstår ikke forespørselenForbindelsen vil bli slettetKalenderbanen inneholder ulovlige karaktererKalender forespørselsrapport må kjøres mot en kalender eller hendelsessamlingSamlingens navn kan ikke være tomMålsamlingen eksisterer ikkeVisningsnavn kan bare settes på samlinger, kontoer eller forbindelserEpostadressen bør absolutt ikke være tomFilen "%s" er ikke inkodet i UTF-8 encoded. Kontroller feilen for flere detaljer.Filen er ikke UTF-8 encoded, sjekk feilen for flere detaljerDet fulle navn for denne personen, gruppen eller annen type kontoDet fulle navn kan ikke være tomtNavnet denne brukeren skal logge inn på systemet medBanen på tjeneren hvor dine ics-filer erForetrukket språk for denne personenKontoen "%s" finnes ikke.Datoformat brukt for denne personenBrukerens epostadresseBrukerens fulle navnBrukerens passord for å logge innBrukernavnet kan ikke være tomt og kan ikke inneholde slashEn feil oppsto ved lesing fra databasen.Det oppsto en feil under skriving til databasenDenne operasjonen gjør følgende:
  • sjekker gyldige grupper i LDAP katalogen
  • sjekker grupper i DAViCal
deretter
  • hvis en gruppe finnes i DAViCal men ikke i LDAP setter som inaktiv i DAViCal
  • hvis en gruppe finnnes i LDAP men ikke i DAViCal oppretter en gruppe i DAViCal
  • hvis en gruppe finnes i LDAP og DAViCal oppdaterer informasjonen i DAViCal
Denne operasjonen gjør følgende:
  • sjekker gyldige gruppe i LDAP katalogen
  • sjekker brukere i DAViCal
deretter
  • hvis en bruker finnes i DAViCal men ikke i LDAP setter denne sim inaktiv i DAViCal
  • hvis en bruker finnes i LDAP men ikke i DAViCal oppretter brukeren i DAViCal
  • hvis brukeren finnes i LDAP og DAViCal oppdaterer informasjonen i DAViCal
Denne siden sjekker miljøet nødvendig for at DAViCal skal virke korrekt. Forslag eller patsjer for å gjøre det enda bedre vil mottas med takk.Prosesen vil hente inn hver fil i mappen med navnet "brukernavn.ics" og opprette en bruker og kalender for hver bruker og kalender som hentes inn.Denne tjeneren støtter bare text/calendar-formatet for freebusy-adresser.Tilgangs-IDTidTil samlingTil IDForny alle privilegierVerktøyGjennomsiktigURLUS FormatIkke-autentisert brukerUnited States of America (m/d/y)OppdaterOppdatertOppdaterer post samlingOppdaterer medlem av denne gruppekontoOppdaterer post kontoOppdaterer rettigheter for denne kontoenOppgrader DAViCal database schemaOppgrader databaseBruker kalenderkontoBrukerdetaljerBrukerfunksjonerBrukers navnBrukerrollerBruker er aktivBrukers post skrevetBrukernavnVis mine detaljerVis min egen kontopostVis denne brukerens postBesøk DAViCal WikiØnsket: %s, Nåværende: %sAdvarsel: det finnes ingen administratorbrukere! Du bør rette feilen før du logger ut. Foreslår bruk av $c->do_not_sync_from_ldap konfigurasjonsinstillingen.Da brukerens epost ble kontrollertSkrivSkriv ACL for en ressurs eller samlingSkriv adgangskontrollerSkriv dataSkriv metadataSkriv innholdSkriv egenskaperJaDu redigererDu er ikke autorisert til å bruke denne funksjonenDu ser påDu har ikke tillatelse til å endre denne postenDu kan ikke utføre PUT til en samlings URLDu må logge inn for å bruke systemetKonfigurasjonen lagde PHP feil som må retteskalender-tidssone egenskap er kun gyldig for en kalendermappen %s er ikke lesbardrivers_imap_pam : imap_url parameter ikke konfigurert i /etc/davical/*-conf.phpdrivers_ldap : Kunne ikke starte TLS: ldap_start_tls() feiletdrivers_ldap : Feilet å binde til vert %1$s på port %2$s with bindDN of %3$sdrivers_ldap : Feilet å sette LDAP til å bruke protokoll version 3, TLS ikke støttetdrivers_ldap : Ute av stand til å binde til LDAP - sjekk din konfigurasjon for bindDN og passDN, og at din LDAP server kan nåsdrivers_ldap : Ute av stand til kommunikasjon med LDAP med port %s på vert %sdrivers_ldap : function ldap_connect ikke definert, sjekk din php_ldap moduldrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforglem meg eifra kontobane for å lagre din icsIkke-autentisertlogg på med brukernavnet og passordet du fikk utstedtdavical-1.1.1/locale/nl/0000755000000000000000000000000011776301350011656 5ustar davical-1.1.1/locale/nl/LC_MESSAGES/0000755000000000000000000000000011776301350013443 5ustar davical-1.1.1/locale/nl/LC_MESSAGES/davical.mo0000644000000000000000000011623111776301350015407 0ustar < 3\(#)#/#2#I#Y#s##!####$4$K$[h$ $';(-(-(#)8)G)])d))k))) ))2)G)J7** *H*C*3?+0s++ ++ +++,(,,U,p,y,,#,,,@, -%-5-S- s-~- --V-(.1.E.M."m.!.....//(/B/X/m/;~////90L0e0Hn0000 0=1D1+[11161>1/2 >2 L2Z2i2 {2222 222223)3#I3m3333I3D4 H4 U4 `4%l44 4 42444&5:,5@g555 5V5;(6>d6=66+6.&7U7^7Bo7@777 88 82<8o8 8 8 88=888"8!9+'9S9 Y9g9y9 999!99 99 99 :(:29:$l:&::(:%:;:; X; e;s;;;;; ;; ;; ;<<< %<3<F<(M<Tv<<< < <<<%= 7=B=F=Y=k=-|======>>;> T>u> >[>\?a?h?q?v?4}?.?1?(@A<@ ~@@@ @@@ @@3A+b- c,9cfcycccc1ccc cc@cX@dNdd+dK&e>re1e>e"f=fSfhfpf!ff1ffg$g@g'Fgngg?g gg+g) h JhThrhhQh)hi)i*2i)]i*i'iiij,j1jDjbj|jjEjjk*kBEkkkek l#lYll/l5l:mBUm m m mmmmm nn /nooo o!p(p 9p Fp6Spp p+pSp=qYq`q vqiqGqS4rRr%r9s@;s|ssLsLs 0t;t LtXt`t<}ttt ttt?u@uZu#^u u1uu uuu uv v&%vLvRvZv ]vivv(v+v'v(w+w%Dw"jw'w'w w wwx!x 4x>xCxSx nx {xxxxxxxx(xe#yyyyyyy%yyzz*z=z*Lz wzzzzzzz{!-{O{'g{_{_{O| X|c|g|Fo|A|@|19}Mk} }} } } ~~ /~*<~1g~4~~~~$ .N'S{0 +J<] (׀*C%Y->݁ &?Zx"ς! -J^\{Z؃#3%W%} ,9KZ<o33!Q6/׆$߆&+J.O(~76߇2YI(Q߈$1*V#,K҉5TUs0ɊSTND.A8Y#7֌ "/1RI8΍<DP. Ó ɓՓ ٓ$ & 0;'Ow/!ޔ,1DSdxҕ4'!6GXg}0ʗ062JK}Bɘ Q+=}J]dIN3/./2TDk.B1J=G bTZXA?B2!x<HcVxfm6MZP9D~y3)/( |FL:vA:2#"3UqscaqOr8`^v i;|gdziL_{_~>0l/n<N*(,$gt4@Y6 u''{@5)1V,oXO]U9 }II y\Ep z[8%-n+pae[?> +l0bh&JWNY\CGe^W!.H%S K& C`;Df#PRu4t=$E5Tj}KrSkRQM m7-oFdQsj"hw*7]w%F %T%T*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can't find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A DAViCal principal collection may only contain collectionsA collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All events of user "%s" were deleted and replaced by those from file %sAll of the principal's calendars and events will be unrecoverably deleted.All privilegesAll requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApplication DB UserApply ChangesApply DB PatchesAttachmentBinding deletedBindings to other collectionsBindings to this CollectionBindings to this Principal's CollectionsBody contains no XML data!Bound AsBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCalendar TimezoneCan only add tickets for existing collection paths which you ownCategoriesChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedCollections may not be both CalDAV calendars and CardDAV addressbooks at the same timeConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the BindingConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm Deletion of the TicketConfirm PasswordConfirm the new password.Could not retrieveCreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Collection.Creating new Principal record.Creating new ticket granting privileges to this PrincipalCurrent DAViCal version DAV PathDAV::resourcetype may only be set to a new value, it may not be removed.DAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDAViCal only allows BIND requests for collections at present.DKIM signature missingDKIM signature validation failed(DNS ERROR)DKIM signature validation failed(KEY Parse ERROR)DKIM signature validation failed(KEY Validation ERROR)DKIM signature validation failed(Signature verification ERROR)Database ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDate StyleDefault PrivilegesDefault relationships added.DeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleted a grant from this PrincipalDeleting Binding:Deleting Collection:Deleting Principal:Deleting Ticket:Deliver scheduling invitations from an organiser to this scheduling inboxDeliver scheduling replies from an attendee to this scheduling inboxDependenciesDependencyDescriptionDestination collection does not existDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?EMailEMail OKERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.Error writing calendar properties to database.EuropeanEuropean (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.ExpiresExternal CalendarsExternal UrlFailFailed to write collection.Feeds are only supported for calendars at present.For access to theForbiddenFree/BusyFull NameFullnameGET requests on collections are only supported for calendars.GNU gettext supportGO!Go to the DAViCal Feature RequestsGrantGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryImport calendars and Synchronise LDAP.Inactive PrincipalsIncorrect content type for addressbook: Incorrect content type for calendar: Invalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?Items in CollectionJoinedLanguageLast usedList External CalendarsList GroupsList ResourcesList UsersLoad From FileLocaleLocationLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalMost of DAViCal will work but upgrading to PHP 5.2 or later is strongly recommended.NameNew CollectionNew PasswordNew PrincipalNoNo calendar contentNo collection found at that location.No summaryNo.No. of CollectionsNo. of PrincipalsNo. of ResourcesNot overwriting existing destination resourceOpaqueOverride a LockPDO PostgreSQL driversPHP DateTime classPHP LDAP module availablePHP Magic Quotes GPC offPHP Magic Quotes runtime offPHP PDO module availablePHP calendar extension availablePHP iconv supportPHP not using Apache Filter modePUT on a collection is only allowed for text/calendar content against a calendar collectionPUT on a collection is only allowed for text/vcard content against an addressbook collectionPassedPasswordPathPersonPlease confirm deletion of access ticket - see belowPlease confirm deletion of binding - see belowPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrincipal deletedPrivilegesPrivileges granted to All UsersPrivileges to allow delivery of scheduling messagesPrivileges to delegate scheduling decisionsProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead ACLs for a resource or collectionRead Access ControlsRead Current User's AccessRead Free/Busy InformationRead the content of a resource or collectionRead the details of the current user's access control to this resource.Read the free/busy information for a calendar collectionRead/WriteReferencesRemoveRemove a lockRemove dangling external calendarsReport BugReport a bug in the systemRequest FeatureRequest body is not valid XML data!ResourceResource Calendar PrincipalsResource Not Found.Resource has changed on server - not deletedResources may not be changed to / from collections.RevokeSchedule DeliverSchedule SendSchedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: DeliveryScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busyScheduling: SendingSend free/busy enquiriesSend scheduling invitations as an organiser from the owner of this scheduling outbox.Send scheduling replies as an attendee from the owner of this scheduling outbox.Set free/busy privilegesSet read privilegesSet read+write privilegesSet the path to store your ics e.g. 'calendar' will be referenced as /caldav.php/username/calendar/SetupSetup DAViCalShow help onSite StatisticsSite Statistics require the database to be available!Some properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Specific PrivilegesStatusStatus: %d, Message: %s, User: %d, Path: %sSubmitSuhosin "server.strip" disabledSync LDAP Groups with DAViCalSync LDAP with DAViCalTargetThat destination name contains invalid characters.That resource is not present on this server.The BIND Request MUST identify an existing resource.The BIND Request-URI MUST identify a collection.The BIND method is not allowed at that location.The CalDAV:schedule-calendar-transp property may only be set on calendars.The DAViCal Home PageThe access ticket will be deleted.The addressbook-query report must be run against an addressbook collectionThe application failed to understand that request.The application program does not understand that request.The binding will be deleted.The calendar path contains illegal characters.The calendar-query report must be run against a calendar or a scheduling collectionThe collection name may not be blank.The destination collection does not existThe displayname may only be set on collections, principals or bindings.The email address really should not be blank.The file "%s" is not UTF-8 encoded, please check error for more detailsThe file is not UTF-8 encoded, please check the error for more details.The full name for this person, group or other type of principal.The full name must not be blank.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The principal "%s" does not existThe style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.The username must not be blank, and may not contain a slashThere was an error reading from the database.There was an error writing to the database.This operation does the following:
  • check valid groups in LDAP directory
  • check groups in DAViCal
then
  • if a group is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in DAViCal
This operation does the following:
  • check valid users in LDAP directory
  • check users in DAViCal
then
  • if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • if a user is present in LDAP but not in DAViCal create the user in DAViCal
  • if a user in present in LDAP and DAViCal then update information in DAViCal
This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.This process will import each file in a directory named "username.ics" and create a user and calendar for each file to import.This server only supports the text/calendar format for freebusy URLsTicket IDTimeTo CollectionTo IDToggle all privilegesToolsTransparentURLUS FormatUnauthenticated UserUnited States of America (m/d/y)UpdateUpdatedUpdating Collection record.Updating Member of this Group PrincipalUpdating Principal record.Updating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWant: %s, Currently: %sWarning: there are no active admin users! You should fix this before logging out. Consider using the $c->do_not_sync_from_ldap configuration setting.When the user's e-mail account was validated.WriteWrite ACLs for a resource or collectionWrite Access ControlsWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You may not PUT to a collection URLYou must log in to use this system.Your configuration produced PHP errors which should be correctedcalendar-timezone property is only valid for a calendar.directory %s is not readabledrivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.phpdrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforget me notfrom principalpath to store your icsunauthenticatedyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Dutch (http://www.transifex.net/projects/p/davical/language/nl/) Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) %F%T%T*** Standaard Landinstellingen ****** Onbekend ***- toevoegen van %s aan groep: %s- toevoegen van gebruikers %s aan groep: %s- aanmaken van groepen: %s- aanmaken van gebruikers: %s- groepen: %s uitschakelen- gebruikers: %s uitschakelen- ongewijzigd: %s- verwijderen van %s uit de groep: %s- bijwerken van groepen: %s- wijzigen van gebruikers: %sOPGELET: Alle afspraken in deze map zullen verwijderd worden vooraleer het ics-bestand wordt ingevoegd

Help

Voor de eerste hulp kunt u terecht op deDAViCal Home Page of neem een kijkje op de DAViCal Wiki .

Als u daar de antwoorden niet kan vinden, bezoek ons op IRC in het #davical kanaal op irc.oftc.net , of stuur een vraag aan de DAViCal Gebruikers mailing list.

Demailing list archieven kunnen ook nuttig zijn.

Meld u alstublieft aan

Om toegang te krijgen tot de %s moet u zich aanmelden met de gebruikersnaam en het wachtwoord dat u heeft gekregen.

Om toegang aan te vragen, dient u %s te contacteren.

Een DAViCal principaalcollectie kan alleen collecties bevattenEr bestaat reeds een collectie op die locatieEr bestaat reeds een bron op die bestemming.AWL Library versieToegang TicketsToegang ticket verwijderdActieActiefEen nieuw lid toevoegen aan deze Groep PrincipaalBeheerBeheerBeheerderAlleAlle gegevens van de collectie worden onherroepelijk verwijderd.Alle afspraken van gebruiker "%s" werden verwijderd en vervangen door die van bestand %sAlle agenda's en afspraken van de Principaal worden onherroepelijk verwijderd.Alle bevoegdhedenDe gevraagde wijzigingen werden doorgevoerdLaat Vrij/Bezet-queries gericht aan de eigenaar van deze planning inbox toeEen "Beheerder" heeft alle bevoegdheden in een DAViCal SysteemAnonieme gebruikers kunnen geen agenda's bewerkenAnonieme gebruikers hebben enkel toegang tot openbare agenda's'Application DB' gebruikerWijzigingen toepassenDB patches toepassenBijlageAssociatie verwijderdAssociaties met andere collectiesAssociaties met deze CollectieAssociaties met de Collecties van deze PrincipaalBody bevat geen XML data!Geassocieerd alsBlader door alle gebruikersBezetAgenda "%s" werd ingeladen van bestand.Agenda PrincipalenTijdzone van AgendaKan enkel tickets toevoegen voor uw reeds bestaande, collectiesCategorieënWijzig wachtwoordKlik om de gebruikersgegevens weer te gevenKlik om de Principaalgegevens te bewerkenCollectieToekenningen van de CollectieID van de CollectieCollectie verwijderdCollecties kunnen niet terzelfdertijd CalDAV agenda's en CardDAV adresboeken zijnAgenda applicaties instellen voor DAViCalDAViCal instellenBevestigBevestig het verwijderen van de AssociatieBevestig het verwijderen van de CollectieBevestig het verwijderen van de PrincipaalBevestig het verwijderen van het TicketBevestig het wachtwoordBevestig het nieuwe wachtwoord.Kon gegevens niet ophalenMaakMaak Collectie aanMaak Afspraken/Collecties aanMaak nieuwe Collectie aanMaak nieuwe Principaal aanMaak Principaal aanMaak nieuwe Principaal aan (d.i. een nieuwe gebruiker, bron of groep)Maak een Bron of Collectie aanNieuwe Collectie aanmakenNieuwe Principaal aanmakenNieuw Ticket aanmaken dat bevoegdheden toekent aan deze PrincipaalHuidige DAViCal versieDAV PadDAV::resourcetype mag alleen worden ingesteld op een nieuwe waarde en kan het niet worden verwijderd.DAViCal CalDAV ServerDAViCal DB schema versieDAViCal websiteDAViCal wikiDAViCal staat op heden enkel BIND requests toe voor collectiesDKIM handtekening ontbreektDKIM handtekening validatie mislukt (DNS ERROR)DKIM handtekening validatie mislukt (KEY Parse ERROR)DKIM handtekening validatie mislukt (KEY Validation ERROR)DKIM handtekening validatie mislukt (Signature verification ERROR)Database FoutDatabase HostDatabase NaamDatabase EigenaarDatabase WachtwoordDatabase PoortDatabase GebruikersnaamDatabase foutOpmaakstijl datumOpmaak datumStandaard BevoegdhedenStandaard relaties toegevoegd.VerwijderVerwijder Afspraken/CollectiesVerwijder PrincipaalVerwijder een Bron of CollectieDeze Principaal werd een toekenning ontnomenVerwijderen Associatie:Verwijderen Collectie:Verwijderen Principaal:Verwijderen Ticket:Bezorg uitnodigingen van een organisator aan deze planning inboxBezorg bevestigingen van een genodigde aan deze planning inboxAfhankelijkhedenAfhankelijkheidBeschrijvingBestemmingscollectie bestaat nietMap op de serverWeergavenaamWeergavenaamHeeft de gebruiker het recht om deze rol uit te voerenE-mailE-mail OKFOUT: De volledige naam mag niet leeg zijn.FOUT: Het nieuwe wachtwoord is niet exact hetzelfde als het bevestigingswachtwoord.FOUT: Database fout bij het schrijven van de rolleninformatieWijzigWijzig deze gebruikerE-mailadresVoer een gebruikersnaam in als je die weet en klik hier om een tijdelijk wachtwoord te krijgen via e-mailVoer je gebruikersnaam en wachtwoord in en klik hier om U aan te meldenFout NoGroupFound met filter > %s <, attributen > %s <, dn > %s <Fout NoUserFound met filter > %s <, attributen > %s <, dn > %s <Fout bij het bevragen van de databaseFout bij het schrijven van agendadetails naar de databaseFout bij het schrijven van agenda-eigenschappen naar de databaseEuropeesEuropees (d/m/y)Bestaande bron stemt niet overeen met "If-Match" header - niet geaccepteerd.Bestaande bron stemt overeen met "If-None-Match" header - niet geaccepteerd.VerstrijktExterne Agenda'sExterne UrlMisluktCollectie schrijven mislukt.Feeds worden alleen ondersteund voor agenda's op dit moment.Voor toegang tot deVerbodenVrij/BezetVolledige NaamVolledige NaamGET requests op collecties worden enkel ondersteund op agenda'sGNU gettext ondersteuningGa!Ga naar de DAViCal feature requestsToekenningNieuwe bevoegdheden toekennen van deze PrincipaalGroepGroepsledenGroep-lidmaatschappenGroep-PrincipalenHeeft ledenHulpHelp op het huidige schermHelp, ik ben mijn wachtwoord vergeten!ThuisWebsiteIDISO formaatISO formaat (YYYY-MM-DD)IdIndien u uw wachtwoord vergeten bent danIndien u toegang wilt aanvragen, e-mail danImporteer alle ics-bestanden in een mapImporteer agenda's en synchroniseer LDAPNiet-actieve PrincipalenOnjuist 'content type' voor adresboekOnjuist 'content type' voor agendaVerkeerde gebruikersnaam of wachtwoord.Verkeerde gebruikersnaam of wachtwoord.Is lid vanIs een AgendaIs een AdresboekIs deze gebruiker actief?Items in CollectieGekoppeldTaalLaatst gebruiktLijst met Externe Agenda'sToon groepenToon bronnenToon gebruikersInladen van bestandLandinstellingenPlaatsMeld U aan, alstublieftAfmelden uit DAViCalAfmeldenLid verwijderd van deze groep-PrincipaalHet grootste deel van DAViCal zal werken, maar upgraden naar PHP 5.2 of hoger wordt sterk aanbevolen.NaamNieuwe CollectieNieuw WachtwoordNieuwe PrincipaalNeeGeen agenda-inhoudGeen collectie gevonden op die plaatsGeen samenvattingAantalAantal CollectiesAantal PrincipalenAantal bronnenBestaande doelbron wordt niet overschrevenTransparantieNegeer een LockPDO PostgreSQL driversPHP DateTime classPHP LDAP module beschikbaarPHP Magic Quotes GPC uitPHP Magic Quotes Runtime uitPHP PDO module beschikbaar PHP calendar extensie beschikbaarPHP iconv ondersteuningPHP gebruikt geen 'Apache Filter'-modusPUT in een collectie is enkel toegestaan voor het type text/calendar tegen een agenda collectiePUT naar een collectie is enkel toegestaan indien het een text/vcard betreft naar een adresboekGeslaagdWachtwoordPadPersoonBevestig a.u.b. het verwijderen van het toegangsticket - zie hieronderBevestig a.u.b. het verwijderen van de associatie - zie hieronderBevestig a.u.b. het verwijderen van de collectie - zie hieronderBevestig a.u.b. het verwijderen van de PrincipaalNoteer a.u.b. het tijdstip en breng de beheerder van Uw systeem op de hoogte.PrincipaalPrincipaal collectiesToekenningen aan deze PrincipaalPrincipaal IDPrincipaal TypePrincipaal verwijderdBevoegdhedenBevoegdheden aan alle Gebruikers toegekendBevoegdheden tot verzenden van planning-berichtenBevoegdheden tot delegeren van planning-beslissingenEigenschap is alleen-lezenOpenbaarOpenbaar voor iedereenREPORT-body bevat geen XML gegevens!REPORT-body bevat ongeldige XMLLeesBevraag ACLs voor een bron of collectieBevraag ToegangscontroleBevraag de bevoegdheden van de huidige gebruikerBevraag de Vrij/Bezet-informatieBevraag de inhoud van een bron of collectieBevraag de toegangsmogelijkheden van de huidige gebruiker m.b.t. deze bronBevraag de Vrij/Bezet informatie m.b.t. een collectie/agendaLees/SchrijfReferentiesVerwijderVerwijder een beveiligingVerwijder achtergelaten externe agenda'sRapporteer softwarefoutRapporteer een softwarefout in het systeemVraag een feature aanRequest body is geen geldige XML dataBronBron Agenda PrincipalenBron niet gevondenBron gewijzigd op de server - niet verwijderdBronnen kunnen niet omgezet worden in Collecties en vice versaHerroepenLevering van de planningVerzending van de planningTransparantie van de planningPlanning: Lever een antwoord afPlanning: Lever een uitnodiging afPlanning: BezorgingPlanning: Bevraag Vrij/BezetPlanning: Verzend een antwoordPlanning: Verzend een uitnodigingPlanning: Verzend Vrij/BezetPlanning: VerzendenVerzend Vrij/Bezet-rondvraagVerzend planning-informatie als een organisator vanwege de eigenaar van deze planning-outboxVerzend planning-antwoorden als een genodigde vanwege de eigenaar van deze planning-outbox'Vrij/Bezet'-bevoegdheden instellen'Alleen-lezen'-bevoegdheden instellen'Lees+Schrijf'-bevoegdheden instellenConfigureer het pad waar uw ics zal worden bewaard, bijvoorbeeld 'kalender' zal worden verwezen als /caldav.php/gebruikersnaam/kalender/ConfigurerenDAViCal instellenToon hulp overWebsite statistiekenWebsite statistieken vereisen dat de database beschikbaar isSommige eigenschappen konden niet gewijzigd worden.Sommige eigenschappen konden niet ingesteld worden.Oorspronkelijke bron bestaat nietBijzondere collecties kunnen geen Agenda of andere bijzondere collectie bevatten.Specifieke bevoegdhedenStatusStatus: %d, Bericht: %s, Gebruiker: %d, Pad: %sVerzendSuhosin "server.strip" uitgeschakeldSynchroniseer LDAP groepen met DAViCalSynchroniseer LDAP met DAViCalDoelDe naam van dat doel bevat ongeldige karaktersDie bron is niet aanwezig op deze serverDe 'BIND request' MOET een bestaande bron identificerenDe 'BIND request-URI' MOET een collectie identificerenDe 'BIND method' is niet toegestaan op die locatieDe 'CalDAV:schedule-calendar-transp'-eigenschap kan enkel toegepast worden op een agenda.De DAViCal websiteHet toegangsticket zal verwijderd wordenHet 'addressbook-query' rapport moet uitgevoerd worden in een collectie/adresboekDe toepassing kent dat verzoek niet.Deze applicatie begrijpt dat verzoek niet.De associatie zal verwijderd wordenHet agenda-pad bevat niet-toegestane tekens.Het 'calendar-query' rapport moet uitgevoerd worden in een collectie/agendaDe naam van de collectie kan niet leeg gelaten wordenDe doel-collectie bestaat nietDe weergavenaam kan enkel bij collecties, principalen of associaties ingesteld wordenHet emailadres kan echt niet leeg gelaten wordenHet bestand "%s" is niet UTF-8 ge-encodeerd. Ga de foutmelding na voor meer detailsHet bestand is niet UTF-8 ge-encodeerd, bekijk aub de foutmelding voor meer details.De volledige naam voor deze persoon, groep of ander soort prinicpaalDe volledige naam kan niet leeg gelaten wordenDe naam waarmee deze gebruiker zich op het systeem kan aanmelden.De map op de server waar uw ics-bestanden zich bevinden.De voorkeurstaal van deze gebruikerDe principaal "%s" bestaat nietDe datumweergave die gebruikt wordt voor deze gebruikerHet e-mailadres van de gebruikerDe volledige naam van de gebruikerHet wachtwoord waarmee de gebruiker zich aanmeldtDe gebruikersnaam kan niet leeg gelaten worden en kan geen slash bevattenEr is een fout opgetreden bij het lezen uit de database.Er is een fout opgetreden bij het schrijven naar de databaseDeze actie doet het volgende:
  • controleer op geldige groepen in de LDAP-directory
  • controleer op groepen in DAViCal
dan
  • als er een groep aanwezig is in DAViCal maar niet in LDAP: als inactief markeren in DAViCal
  • als er een groep bestaat in LDAP, maar niet in DAViCal: de groep in DAViCal aanmaken
  • als een groep in LDAP en DAViCal bestaat: de informatie in DAViCal bijwerken
Deze actie doet het volgende:
  • controleer op geldige gebruikers in de LDAP-directory
  • controleer op gebruikers in DAViCal
dan
  • als een gebruiker aanwezig is in DAViCal maar niet in LDAP: markeer hem als inactief in DAViCal
  • als een gebruiker aanwezig is in LDAP, maar niet in DAViCal: de gebruiker in DAViCal aanmaken
  • als een gebruiker aanwezig is in LDAP en DAViCal: de informatie in DAViCal bijwerken
Deze pagina controleert in de eerste plaats de omgeving die nodig is om DAViCal correct te laten werken. Suggesties of patches om het meer nuttige dingen te laten doen zullen dankbaar worden ontvangen.Deze procedure zal elk bestand van het type "gebruikersnaam.ics" in een bepaalde map importeren en een gebruikersnaam en kalender voor elk te importeren bestand aanmaken.Deze server ondersteunt alleen het 'text/calendar'-formaat voor Vrij/Bezet-URL'sTicket IDTijdNaar CollectieNaar IDVink alle bevoegdheden aan/afExtraTransparantURLUS FormaatNiet-geverifieerde gebruikerVerenigde Staten van Amerika (m/d/y)BijwerkenBijgewerktCollectie bijwerkenLid van deze Groep Principaal bijwerkenPrincipaal bijwerkenBijwerken van toekenningen door deze PrincipaalDAViCal database schema bijwerkenDatabase bijwerkenPrincipalen van de Agenda van deze GebruikerGebruikersgegevensGebruikersfunctiesGebruikersnaamGebruikersrollenGebruiker is actiefGebruiker weggeschreven.GebruikersnaamBekijk mijn gegevensBekijk mijn eigen PrincipaalBekijk deze gebruikerBezoek de DAViCal wikiWilt: %s, Nu: %sOpgelet: er zijn geen actieve admin gebruikers! U moet dit oplossen vóór u zich afmeldt. Overweeg het gebruik van de '$c->do_not_sync_from_ldap' configuratie-instelling.Nadat het e-mailadres van de gebruiker bevestigd is.SchrijfSchrijf ACLs voor een bron of collectieSchrijf BevoegdhedenSchrijf GegevensSchrijf MetadataSchrijf inhoudSchrijf eigenschappenJaU bent aan het bijwerkenU bent niet bevoegd om deze functie te gebruikenU bent aan het bekijkenU bent niet bevoegd om deze record bij te werkenU kan 'PUT' niet toepassen op de URL van een collectieU moet zich aanmelden om dit systeem te gebruiken.Uw configuratie heeft PHP fouten weergegeven die gecorrigeerd moeten wordenDe 'calendar-timezone'-eigenschap is enkel geldig voor een agenda.Map %s kan niet worden gelezendrivers_imap_pam : 'imap_url'-parameter niet ingesteld in /etc/davical/*-conf.phpdrivers_ldap : Kan TLS niet starten: ldap_start_tls() misluktdrivers_ldap : Binden met host %1$s via poort %2$s met bindDN %3$s misluktdrivers_ldap : LDAP instellen om protocol versie 3 te gebruiken mislukt, TLS niet ondersteunddrivers_ldap : Kan niet binden met LDAP - kijk de configuratie (bindDN en passDN) na en zorg ervoor dat de LDAP server bereikbaar isdrivers_ldap : Kan geen verbinding maken met LDAP met poort %s op host %sdrivers_ldap : functie ldap_connect niet ingesteld, kijk Uw php_ldap module nadrivers_pwauth_pam : Kan bestand %s niet vindendrivers_squid_pam : Kan bestand %s niet vindenAangemeld blijvenvan Principaalmap waar Uw ics-bestanden zullen worden bewaardniet geverifieerdU moet zich aanmelden met de gebruikersnaam en het wachtwoord die U zijn toegewezen.davical-1.1.1/locale/es_AR/0000755000000000000000000000000011776301350012236 5ustar davical-1.1.1/locale/es_AR/LC_MESSAGES/0000755000000000000000000000000011776301350014023 5ustar davical-1.1.1/locale/es_AR/LC_MESSAGES/davical.mo0000644000000000000000000001176511776301350015775 0ustar ?Y pq.5<BS[u |2@'8 JTZ_d|2   ,3 8EIAR  0' (0 Y t # +    ! , ; P -f , # N v4 s {      2 &:PW$ ";A>""  &4;N QR^?&E0l1+,"H k v!4.F%uY !3*'.968:)?4/ -&"021<# = 7%$,>+(5;

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

ActionActiveAdminBrowse all usersConfirmConfirm the new password.CreateDate StyleDeleteDoes the user have the right to perform this role?EMailEMail OKERROR: There was a database error writing the roles information!Edit this user recordEuropean (d/m/y)For access to theFull NameGroupHelpHomeISO Format (YYYY-MM-DD)IdIf you would like to request access, please e-mailInvalid user name or password.Invalid username or password.Is this user active?JoinedLanguageLast usedLog On PleaseLogoutNameNew PasswordNo.PasswordPlease note the time and advise the administrator of your system.PublicReport BugReport a bug in the systemResourceShow help onThe name this user can log into the system with.The preferred language for this person.The style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.There was an error writing to the database.United States of America (m/d/y)UpdateUpdatedUser DetailsUser NameUser RolesUser is activeUser record written.View this user recordWhen the user's e-mail account was validated.You are not authorised to use this function.You must log in to use this system.you should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: LANGUAGE Language: es_AR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1)

Por favor, iniciar sesión

Para acceder al %s debe conectarse con el nombre de usuario y contraseña que le han sido asignado.

Si desea solicitar el acceso, por favor, e-mail %s.

AcciónActivoAdministradorMostrar todos los usuariosConfirmarConfirmar la nueva contraseña.CrearFormato de FechaBorrar¿El usuario tiene permiso para efectuar este rol?Correo ElectrónicoCorreo Electrónico correctoERROR: Hubo un error en la base de datos al grabar la información de los roles!Mostrar el registro de éste usuarioFormato Europeo (d/m/y)Para acceder aNombre CompletoGrupoAyudaPágina principalFormato ISO (YYYY-MM-DD)NoSi desea obtener acceso por favor envíe un correo electrónico aUsuario o contraseña incorrectos.Usuario o contraseña incorrectos.¿Éste usuario está activo?IncorporadoIdiomaUtilizado por última vezConectarse por favorDesconectarseNombreNueva ConstraseñaNoConstraseñaPor favor, tome nota de la fecha y hora y contacte a su administrador de sistemas.PúblicoReportar ErrorReportar un error en el sistemaRecursoMostrar ayuda sobreEl nombre con el cual éste usuario puede conectase al sistema.El idioma preferido por ésta persona.El estilo de fechas utilizado por ésta persona.La dirección de correo electrónico del usuario.El nombre completo del usuario.La contraseña del usuario para conectarse.Hubo un error al grabar en la base de datos.Estados Unidos de América (m/d/y)ActualizarActualizadoDatos del UsuarioNombre del UsuarioRoles del UsuarioEl usuario está activoRegistro del usuario grabado.Mostrar éste registro de usuarioCuando fue validada la cuenta de correo del usuario.No está autorizado a utilizar ésta función.Debe conectarte para usar el sistema.Para conectarse debe utilizar el nombre de usuario y contraseña que le ha sido asignado.davical-1.1.1/locale/et/0000755000000000000000000000000011776301350011655 5ustar davical-1.1.1/locale/et/LC_MESSAGES/0000755000000000000000000000000011776301350013442 5ustar davical-1.1.1/locale/et/LC_MESSAGES/davical.mo0000644000000000000000000000073411776301350015406 0ustar $,89Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Estonian (http://www.transifex.net/projects/p/davical/language/et/) Language: et MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) davical-1.1.1/locale/ru/0000755000000000000000000000000011776301350011673 5ustar davical-1.1.1/locale/ru/LC_MESSAGES/0000755000000000000000000000000011776301350013460 5ustar davical-1.1.1/locale/ru/LC_MESSAGES/davical.mo0000644000000000000000000004615511776301350015433 0ustar 3 :!Qs[T--?m 2JZ i30 "2Pl}#  V2"! ):T[m;9=wH $1+H1t6> + 9GV hv 5I Z g r%~  &: D IVW;+./^gx    ! ! + . 9 Q (T 2}     !! .!:! I!T!c! j!x!!!! ! !!!!!4!."1="(o" " """ """# ## # '#2#M#V#j# p# ~##%#)#-# $':$(b$$$#$;$+% H%R%W%]% a%k% %%%%%%&&+&4&D&a& x&& &&&&,&&1'#4' X'f'v'N''))*)C)* m*@*$*0*)%+$O+=t++=,P!-)r-------".;.V.i]._.'/%C/ki//Y0%w0,0030+1:D1 19111N1'I2q22!2z273R32i3:3:324#E4.i44!4!4!4! 5k/555/516O366 68665607 P7*]7=7C7H 8PS8"8 8 888 99"59X9n9909!959:$;:$`:::::;:"#;F;f; ;!;;;3;#<><O<Q<.+=PZ=G= =>>!&>H>4d>>>>>> > > ? *?5?8?v;xYc&g$=zeK -.btVNiU:Bhmr{[Q W5?#<0!O2D}F4q3'|A +*S" 8d`\(uapME7LHkI%TPwZj,l~)/n_oJyX^1G69sC@f*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All of the principal's calendars and events will be unrecoverably deleted.All privilegesAll requested changes were made.Anonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApplication DB UserApply ChangesApply DB PatchesBinding deletedBindings to other collectionsBindings to this CollectionBrowse all usersBusyCalendar "%s" was loaded from file.Calendar TimezoneChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection IDCollection deletedCollections may not be both CalDAV calendars and CardDAV addressbooks at the same timeConfiguring DAViCalConfirmConfirm Deletion of the BindingConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm Deletion of the TicketConfirm PasswordConfirm the new password.CreateCreate CollectionCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Collection.Creating new Principal record.Creating new ticket granting privileges to this PrincipalCurrent DAViCal version DAV PathDAV::resourcetype may only be set to a new value, it may not be removed.DAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDKIM signature missingDKIM signature validation failed(DNS ERROR)DKIM signature validation failed(KEY Parse ERROR)DKIM signature validation failed(KEY Validation ERROR)DKIM signature validation failed(Signature verification ERROR)Database ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDefault PrivilegesDeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleting Binding:Deleting Collection:Deleting Principal:Deleting Ticket:DependenciesDependencyDescriptionDestination collection does not existDirectory on the serverDisplay NameDisplaynameDomainEMailERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.EditEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error querying database.Error writing calendar details to database.Error writing calendar properties to database.EuropeanEuropean (d/m/y)ExpiresExternal CalendarsExternal UrlFailed to write collection.For access to theForbiddenFree/BusyFull NameFullnameHelpHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailInvalid user name or password.Invalid username or password.Is a CalendarIs an AddressbookLanguageList External CalendarsList GroupsList ResourcesList UsersLoad From FileLocaleLog On PleaseLog out of DAViCalLogoutNameNew CollectionNew PasswordNew PrincipalNoPassedPasswordPathPlease confirm deletion of access ticket - see belowPlease confirm deletion of binding - see belowPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPrincipalPrincipal IDPrincipal TypePrincipal deletedPrivilegesPrivileges granted to All UsersPublicReadRead/WriteRemoveRemove a lockReport BugReport a bug in the systemResourceResource Not Found.SetupSetup DAViCalShow help onSite StatisticsThe collection name may not be blank.The destination collection does not existThe email address really should not be blank.The full name must not be blank.The preferred language for this person.The style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.The username must not be blank, and may not contain a slashThere was an error writing to the database.Ticket IDTimeToolsURLUS FormatUnauthenticated UserUnited States of America (m/d/y)UpdateUpdatedUpdating Collection record.Updating Principal record.Upgrade DAViCal database schemaUser FunctionsUser record written.UsernameView My DetailsView my own principal recordVisit the DAViCal WikiWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You must log in to use this system.forget me notinvalid requestunauthenticatedyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Russian (http://www.transifex.net/projects/p/davical/language/ru/) Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2) *** По умолчанию ****** Неизвестно ***- добавляю %s в группу : %s- добавляю пользователя %s в группу : %s- создаю группу : %s- создаю запись для пользователя : %s- отключаю группу : %s- отключаю пользователя : %s- удаляю %s из группы : %s- обновляю группу : %s- обновляю запись пользователя : %sВнимание: все события по этому пути будут удалены перед загрузкой файла

Авторизация

Для доступа к %s вы должны войти со своими логином и паролем

Для получения доступа пишите по адресу %s.

Коллекция по данному адресу уже существует.Ресурс уже существует.Версия AWLКлючи доступаКлюч удаленДействиеВключенАдминистраторАдминистрированиеАдминистраторВсёВсе данные будут удалены без возможности восстановления.Все календари и события будут безвозвратно удалены.Все привилегииИзменения выполненыАнонимным пользователям не разрешается править календариАнонимные пользователи имеют доступ только к общедоступным календарямПользователь БДПрименить измененияПрименить обновления БДСвязь удаленаСвязи с другими коллекциямиСвязи с этой коллекциейПросмотреть всех пользователейЗанятКалендарь "%s" загружен из файла.Часовой поясИзменить парольНажмите чтобы увидеть данные пользователяРедактировать данныеКоллекцияID коллекцииКоллекция удаленаКоллекция не может быть календарем и адресной книгой одновременноНастройки DAViCalПодтвердитьПодтвердите удаление связиПодтвердите удаление коллекцииПодтвердите удаление владельцаПодтвердите удаление ключаПодтвердите парольПодтвердите новый парольСоздатьСоздать коллекциюСоздать коллекциюСоздать владельцаСоздать владельцаСоздать нового владельца (пользователя, ресурс или группу)Создать ресурс или коллекциюСоздание новой коллекции.Создание нового владельца.Создание ключа доступа для этого владельцаВерсия DAViCalПуть DAVDAV::resourcetype не может быть удален.DAViCal CalDAV СерверВерсия схемы базы данных DAViCalСтраница проектаDAViCal WikiОтсутствует подпись DKIMОшибка проверки подписи DKIM (DNS ERROR)Ошибка проверки подписи DKIM (KEY Parse ERROR)Ошибка проверки подписи DKIM (KEY Validation ERROR)Ошибка проверки подписи DKIM (SIgnature verification ERROR)Ошибка базы данныхХост БДИмя БДВладелец БДПароль БДПорт БДПользователь БДОшибка базы данныхФормат датыПо умолчаниюУдалитьУдалить события/коллекцииУдалить владельцаУдалить ресурс или коллекциюУдаление связи:Удаление коллекции:Удаление владельца:Удаление ключа:ЗависимостиЗависимостьКомментарийЦелевая коллекция не существуетКаталог на сервереОтображаемое имяОтображаемое имяДоменЭлектронная почтаОшибка: имя не может быть пустым.Ошибка: пароли не совпадают.РедактироватьАдрес EmailВведите имя пользователя и нажмите здесь, чтобы получить временный пароль.Введите имя пользователя и пароль для входа.Ошибка при запросе к базеОшибка при записи сведений календаря в базуОшибка записи свойств календаря в базуЕвропаЕвропа (d/m/y)ИстекаетВнешние календариВнешняя ссылкаОшибка сохранения коллекцииДля доступа кЗапрещеноСвободно/занятоИмяИмяПомощьВспомнить пароль!ДомойДомойIDISOISO (YYYY-MM-DD)IdЕсли вы не помните свой парольЕсли вы хотите получить доступ, пожалуйста, пошлите электронное письмоНеверное имя пользователя или пароль.Неверное имя пользователя или пароль.КалендарьАдресная книгаЯзыкСписок внешних календарейГруппыРесурсыПользователиЗагрузить из файлаЯзыкПожалуйста, войдитеВыйти из системыОтключитьсяИмяНовая коллекцияНовый парольНовый владелецНетУспшноПарольПутьПодтвердите удаление ключа доступа - см. нижеПодтвердите удаление связи - см. нижеПодтвердите удаление коллекции - см. нижеПодтвердите удаление владельцаВладелецID владельцаТип владельцаВладелец удаленПривилегииПривилегии для всех пользователейПубличныйЧтениеЧтение/ЗаписьУдалитьСнять блокировкуСообщить об ошибкеСообщить об ошибке в системеРесурсРесурс не найден.ПараметрыПараметры DAViCalПоказывать помощь вСтатистикаИмя коллекции не может быть пустым.Целевая коллекция не существуетАдрес Email не может быть пустым.Имя не может быть пустымПредпочитаемый языкФормат датыEmail адресПолное имяПароль для входаИмя пользователя не может быть пустым и содержать слешПроизошла ошибка при записи в базу данных.ID ключаВремяРесурс не найден.URLСШАНе авторизованный пользовательСША (m/d/y)ОбновитьОбновленоОбновление коллекцииОбновление владельцаОбновление структуры БДУправление пользователямиНе авторизованный пользовательИмя пользователяМои данныеПосмотреть мою учетную записьОткрыть DAViCal WikiСохранить ДанныеСохранить МетаданныеСохранить содержаниеСохранить свойствоДаВы редактируетеВы не авторизованы для использоования этой функции.Вы просматриваетеУ вас нет прав, чтобы изменить эту записьВы должны войти в систему, чтобы использовать ее.запомнить менянеправильный запросне авторизованвы должны войти под тем именем польззователя и паролем, который был вам выслан.davical-1.1.1/locale/sv/0000755000000000000000000000000011776301350011675 5ustar davical-1.1.1/locale/sv/LC_MESSAGES/0000755000000000000000000000000011776301350013462 5ustar davical-1.1.1/locale/sv/LC_MESSAGES/davical.mo0000644000000000000000000004130311776301350015423 0ustar %| !3Md[-)2 L3m0< \g y"+;<x   #$H ]i  2&@D ZVh;=9+R~B@ % /9B"F+i  ! ),D(G2p$   2GN W am | ( % 3-7el|1A  /< KVls!" %@PY,v3! + G `   , ( !K1!+}!!,!!9!.-"G\"0"1"'#(/#X#s###+## # # $$'$!C$e$$$ $$ $ $$$% %%:%P%-g%%% %%%,%&#&<&;Y&K&N&~0'@'L'*=( h(v(N(s($P*u**!*_*.+'+ ,%,,+,X,g,v,={,&,;,;-X-q-z---&-!--- .". 4.>.^.|.... .:. //&/ 8/ E/ P/[/ p/|///(// // 0 02%0X0 _04i0A00 0e1Qn1=1142O2@j2@22 3 3313573*m3333 3 333'3$4 (42454Q4#T4/x4*4'4'4 #515A5R5n5u5|5 555555'5 6 66+6%C6i6,m666 6626B7D7J7Y7k7t7 }7777&7%7 8$8*68#a888888,8/9E9Y9t99999 ::&:$7:(\::U:8:2;*9;d;2u;0;Q;<+<-h<*< <<<'=2>=q= y== = =%=,=!=>1>I>[> o>}>>> >>> >?++?W?%]? ?? ?5??2?!@;>@Kz@N@~A@ALA*"B MB [BF|Bm-aiDcSg1N" 0EAM [ b] $k^Z{5svGw>T9<hnz@KX+J.6_L}p|73`UuWo QO=d(Iq'CB;H2Py4l)R!je%V#tf8Y:~&x*r?/, \F- creating record for users : %s- deactivating users : %s- nothing done on : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A collection already exists at that location.ActionActiveAdding new member to this Group PrincipalAdminAdministrationAllAll collection data will be unrecoverably deleted.All requested changes were made.Anonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsBrowse all usersBusyCalendar PrincipalsCalendar TimezoneChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedConfirmConfirm Deletion of the CollectionConfirm the new password.CreateCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)DAV PathDAViCal CalDAV ServerDAViCal HomepageDAViCal WikiDatabase ErrorDatabase errorDate Format StyleDate StyleDefault PrivilegesDeleteDelete Events/CollectionsDeleted a grant from this PrincipalDeleting Collection:DescriptionDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?EMailEMail OKERROR: The full name may not be blank.ERROR: There was a database error writing the roles information!Edit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.European (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.For access to theForbiddenFull NameFullnameGO!Go to the DAViCal Feature RequestsGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryInvalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?JoinedLanguageLast usedList GroupsList ResourcesList UsersLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalNameNew CollectionNew PasswordNo calendar contentNo collection found at that location.No.Not overwriting existing destination resourceOpaqueOverride a LockPasswordPathPlease confirm deletion of collection - see belowPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrivilegesProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead Access ControlsRead Current User's AccessRead Free/Busy InformationReport BugReport a bug in the systemRequest FeatureResourceResource Calendar PrincipalsResource has changed on server - not deletedResources may not be changed to / from collections.Schedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busySetupSetup DAViCalShow help onSome properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Status: %d, Message: %s, User: %d, Path: %sSubmitThat resource is not present on this server.The DAViCal Home PageThe application program does not understand that request.The calendar path contains illegal characters.The file is not UTF-8 encoded, please check the error for more details.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.There was an error writing to the database.To IDTransparentUnited States of America (m/d/y)UpdateUpdatedUpdating Member of this Group PrincipalUpdating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWhen the user's e-mail account was validated.WriteWrite Access ControlsWrite DataWrite MetadataYou are editingYou are not authorised to use this function.You are viewingYou must log in to use this system.directory %s is not readabledrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_squid_pam : Unable to find %s fileforget me notpath to store your icsyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: LANGUAGE Language: sv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) - skapar poster för användare : %s- inaktiverar användare : %s- inget utfört på : %s- uppdaterar användarposter : %sVarning: alla händelser i denna sökväg kommer att raderas innan ics-filen läggs till

Var god logga in

För att få tillgång till %s behöver du logga in med det användarnamn och lösenord som tilldelats dig.

För att begära ett konto, skicka e-post till %s.

En samling finns redan på denna plats.AktivitetAktivLägger till my medlem till detta gruppkontoAdministratörAdministrationAllaAll data för samlingen kommer att raderas oåterkallerligen.Alla begärda ändringar har utförts.Anonyma användare har inte rättighet att ändra kalendrarAnonyma användare har bara åtkomst till publika kalendrarSe över alla användareUpptagenKalenderkontonKalender-tidszonÄndra lösenordKlicka för att visa användardetaljerKlicka flr att visa kontodetaljerSamlingSamlingens rättigheterSamlingens IDSamlingen raderadBekräftaBekräfta radering av samlingenBekräfta det nya lösenordetSkapaSkapa händelse/samlingSkapa ny samlingSkapa nytt kontoSkapa kontoSkapa nytt konto (dvs nya användare, resursd, eller gruppDAV-sökvägDAViCal CalDAV ServerDAViCal StartsidaDAViCal WikiDatabasfelDatabasfelStil på datumformatDatumformatStandardrättigheterRaderaRadera händelser/samlingarRaderade en rättighet från detta kontoRaderar samling:BeskrivningServerns katalogVisningsnamnVisningsnamnHar användaren rättighet att utföra denna roll?E-postE-post OKFEL: Det fullständiga namnet kan inte lämnas tomt.FEL: Ett databasfel uppstod när rollinformationen skulle sparas!Ändra denna användarpostE-postadressMata in ett användarnamn, om du känner till det, för att erhålla e-post med ett engångslösenordMata in ditt användarnamn och lösenord och klicka sedan här för att logga in.Feltyp NoUserFound med filter >%s<, attribut >%s< och dn >%s<Fel vid databasförfrågan.Fel vid sparande av kalenderdetaljer till databasen.Europeisk (dd/mm/åååå)Befintlig resurs matchar inte "If-Match"-header - ej accepterad.Befintlig resurs matchar "If-None-Match"-header - ej accepterad.För tillgång tillFörbjudenFullständigt namnFullständigt namnKÖR!Gå till DAViCal lista över funktionsförbättringarTillåter ny privilegier från detta kontoGruppGruppmedlemmarGruppmedlemskapGruppkontonHar medlemmarHjälpHjälp för aktuellt fönsterHjällp! Jag har glömt mitt lösenord!HemStartsidaIDISO Format (ÅÅÅÅ-MM-DD)IdOm du har glömt ditt lösenord såOm du vill begära åtkomst, skicka e-post tillImportera alla .ics-filer från en katalogOgiltigt användarnamn eller lösenord.Ogiltigt användarnamn eller lösenord.Är medlem avÄr en kalenderÄr en adressbokÄr denna användare aktiv?InlagdSpråkSenast användLista grupperLista resurserLista användareVar god logga inLogga ur DAViCalLogga urMedlem borttagen från detta gruppkontoNamnNy samlingNytt lösenordInget kalenderinnehållIngen samling funnen på denna plats.Nr.Skriver ej över befintlig resursdestinationEj transparentBryt upp ett låsLösenordSökvägVänligen bekräfta radering av samling - se nedanVänligen notera tidpunkten och konsultera systemadministratören.KontoKontosamlingarKontorättigheterKonto-IDKontotypRättigheterEgenskapen är enbart läsbarPublikPublikt läsbarREPORT Body innehåller inga XML-data!REPORT Body är inte giltig XML-data!LäsInställningar för läsrättigheterLäs in nuvarande användares rättigheterLäs in tillgänglighetsinformationRapportera felRapportera fel i systemetBegär funktionsförbättringResursResurskalender-kontoResurs har ändrats på servern - ej raderadResurs kan inte ändras till / från samlingar.BokningstransparensBokning: leverera ett svarBokning: leverera en inbjudanBokning: hämta tillgänglighetBokning: skicka ett svarBokning: sicka en inbjudanBokning: skicka tillgänglighetKonfigureraKonfigurera DAViCalVisa hjälp förVissa egenskaper kunde inte ändras.Vissa egenskaper kunde inte ställas in.Källresursen existerar inte.Speciella samlingar får inte innehålla en kalender eller en annan speciell samling.Status: %d, Meddelande: %s, Användare: %d, Sökväg: %sSkickaDenna resulrs finns inte på denna server.DAViCals hemsidaAnvändarprogrammet förstår inte denna begäran.Kalendersökvägen inehåller otillåtna tecken.Filen är inte teckenkodad i UTF-8, var god kontrollera felet för fler detaljer.Name mit dem sich dieser Benutzer beim System anmelden kann.sökvägen på servern där dina .ics ligger.Det föredragna språket för dena person.Datumformatet för denna person.Användarens e-postadress.Användarens fulla namn.Användarens lösenord för inloggning.Det uppstöd ett fel vid skrivning till databasen.Till IDTransparensU.S.A. (m/d/y)UppdateraUppdateradUppdaterar medlem fr detta gruppkontoUppdaterar rättigheter givna av detta kontoUppgradera DAViCals databasschemaUppgradera databasAnvändarkalenderkontonAnvändardetaljerAnvändarfunktionerAnvändarnamnAnvändarrollerAnvändaren är aktivAnvändarpost skriven.AnvändarnamnVisa mina detaljerVisa min egen kontopostVisa denna användares kontopostGå till DAViCals WikiNär användarens e-postadress validerades.SparaInställningar för skrivrättigheterSpara dataSpara metadataDu editerarDu har inte rättigheter att använda denna funktion.Du inspekterarDu måste logga in för att använda detta system.mappen %s är inte åtkomligdrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_squid_pam : Unable to find %s fileKom ihåg migsökväg för att spara din .icsdu behöver logga in med det användarnamn och lösenord du erhållit.davical-1.1.1/locale/hu/0000755000000000000000000000000011776301350011661 5ustar davical-1.1.1/locale/hu/LC_MESSAGES/0000755000000000000000000000000011776301350013446 5ustar davical-1.1.1/locale/hu/LC_MESSAGES/davical.mo0000644000000000000000000001471711776301350015420 0ustar SqL-  1B`h 2@< VR ;  + * ; M W [ a !f    ( 2  # A V ] f p ~  %   A  " ) 4 O ,X 3 , 9 .- 0\ ' (   #+3 _   -,#F jNxs; -'E mz% 5LSh< /Jd u   * &5&\    ! ?X h s >5),0V<  $< \ hs4(10Z2CSD /@F MR4H*J9,#E-5PAQ+ $.&7B6 =3NI)<'!"(:? O0G%218K >L;

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A collection already exists at that location.ActionActiveAdminAll requested changes were made.Browse all usersClick to display user detailsConfirmConfirm the new password.CreateDatabase ErrorDatabase errorDate StyleDeleteDoes the user have the right to perform this role?EMailEMail OKERROR: There was a database error writing the roles information!Edit this user recordEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error querying database.Error writing calendar details to database.European (d/m/y)For access to theFull NameGO!GroupHelpHelp! I've forgotten my password!HomeISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailInvalid user name or password.Invalid username or password.Is this user active?JoinedLanguageLast usedLog On PleaseLogoutNameNew PasswordNo collection found at that location.No.PasswordPlease note the time and advise the administrator of your system.Property is read-onlyPublicReport BugReport a bug in the systemResourceResource has changed on server - not deletedResources may not be changed to / from collections.Show help onSome properties were not able to be changed.The application program does not understand that request.The calendar path contains illegal characters.The name this user can log into the system with.The preferred language for this person.The style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.There was an error writing to the database.United States of America (m/d/y)UpdateUpdatedUser DetailsUser NameUser RolesUser is activeUser record written.View this user recordWhen the user's e-mail account was validated.You are not authorised to use this function.You must log in to use this system.forget me notyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: LANGUAGE Language: hu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1)

Lépjen be

'%s' - hozzáféréshez lépjen befelhasználónevével és jelszavával

Ha hozzáférést szeretne kapni, írjon ide: %s

Már létezik ilyen gyűjteményAkcióAktívAdminisztrátorMinden változás mentveFelhasználók listájaFelhasználó adatainak megjelenítéseEllenőrzésÚj jelszó ellenőrzéseÚj létrehozásaAdatbázis-hibaAdatbázis-hibaDátumformátumTörlésVan jogosultsága a felhasználónak?E-mailE-mail OKHIBA: Adatbázis-hiba történt a szerepek írásakorFelhasználó szerkesztéseÍrja be a felhasználónevet. Egy e-mailt fog kapni egy új ideiglenes jelszóval.Írja be a felhasználónevét és jelszavát a belépéshezAdatbázis-hiba lekérdezéskor.Adatbázis-hiba a naptár elemeinek írásakor.Európai (nap/hónap/év)HozzáféréshezTeljes névMehet!CsoportSegítségElfelejtettem a jelszavamat!KezdőlapISO-formátum (ÉÉÉÉ-HH-NN)AzonosítóHa elfelejtette jelszavát, Ha hozzáférést szeretne kapni, írjon: Hibás felhasználónév vagy jelszó.Hibás felhasználónév vagy jelszó.Aktív felhasználó?CsatlakozottNyelvUtoljára használvaLépjen be.KilépésNévÚj jelszóEzen a helyen nincs gyűjtemény.SzámJelszóJegyezze fel az időpontot és értesítse az adminisztrátort!Csak olvashatóNyilvánosHibajelentésRendszerhiba bejelentéseErőforrásAz erőforrás a szerveren módosítva - törlés elutasítva.Erőforrások nem cserélhetők fel gyűjteményekkelSúgó erről: Néhány tulajdonság nem módosítható.Az alkalmazás nem tudja értelmezni a kérést.A naptár elérési útja érvénytelen karaktert tartalmaz.FelhasználónévPreferált nyelvDátumformátumE-mail címTeljes névJelszóAdatbázis-hiba történt íráskor.Egyesült Államok (HH/NN/ÉÉ)FrissítésFrissítveFelhasználó adataiFelhasználónévFelhasználó szerepeiA felhasználó aktívFelhasználó adatai tárolva.Felhasználó adataiMikor lett ellenőrizve a felhasználó e-mail-címeNincs jogosultsága ehhez a művelethez.Be kell jelentkeznie a rendszer használatához.Emlékezzen rámLépjen be felhasználónevével és jelszavával.davical-1.1.1/locale/pt_BR/0000755000000000000000000000000011776301350012253 5ustar davical-1.1.1/locale/pt_BR/LC_MESSAGES/0000755000000000000000000000000011776301350014040 5ustar davical-1.1.1/locale/pt_BR/LC_MESSAGES/davical.mo0000644000000000000000000012112311776301350016000 0ustar  A####$!$;$[$!r$$$$$$%[0% %(;S)-)-))**%*,*)3*]*c* r**2*G*J*J+ Y+Hz+C+3,0;,l, ,, ,,,,(,-8-A-R-#W-{--@- ---. ;.F. X.f.Vy.(.. //"5/!X/z/////// 0 050;F0000901-1H61111 1=1 2+#21O262>22 3 3"313 C3Q3c3r3 3333333#454G4\4p4I4D4 5 5 (5%45Z5 r5 525555&5:5@66w6|6 6V6;6>37=r77+7.7$8-8B>8@888 8882 9>9 P9 Z9 d9n9=w999"99+9": (:6:H: Y:e:j:!:: :: :::(:2;$;;&`;;(;%;; < '< 4<B<T<i<}<< << << <<<< <==(=TE=== = ===%= >>>(>:>-K>y>>>>>>>>? 5?V?g? y?0?[?\'@@@@@4@.@1A(6AA_A AAA AAA B B3+B+_BBBB!B"BB&C+C@C[C,vCGC8C $D /D:D AD"OD rD}DD#DDDD,E33EgE nEyE EEE!EEFF6FUFpFFUFPFDG]GqGcGG G HH5 H,VH(HHKHI,I+3I_IfIIII2I,I4"J0WJ0JJJK"KJ=K2K9KK.LSAL%L)LGL--MG[MGM@M ,N0MN1~N'N!N(N#O>O#TO;xO-O+OPQ"S~SDGT TT TTTT TT TT TU"U*U'FUnU!UUUU UV V V&V5VJVSVcVVVVV-\WW'WW WW WWX X,XHX1XX#X#X@X8YLYOiY;YKYNAZ~Z@[LP[+[*[ [\\#\3\0J\-{\\N\]^^^^^, _8_-P_~_____( `f2`V`c=d%e!vvw w&w,wAGwwww wwJwx,x60xgx9pxxxxx xxyy0y8yHy KyWypy$sy8y0y)z,z,@z/mz%z%z zz{{5{ H{ S{]{t{ {{{{ { {{|"|''|nO||| ||||&} 8}C}I}[}m},}}}}}}} ~*~"I~l~"~~~5~: oFl#*08B?9:,@$ eo  Ё,݁@ 5K$)%8P#m*ID K Vck'ل2) 1R3k3Ӆ ۅ " Bc$x!ن%i7k% 3*Sv~+JA00 Rb|3##'3,-`;?ʋ/ Z:"Xό8(9a4o.Z"K:d3SC*09[5$ː. !<^+yJ+*G2BP   * 6C GR"l &-˘)2#5V#Й "9Wh#z՚1+ě ):NR1g7.2>LRޝQFOJiKOO<<;ɠ ';R?q;TbFSD^O'k]": &(a_-.2l4jLQ{ [ >o`qYRWAM7;D6Wm,ZT pu` =~Z2xN/S^s+ .r;f-HQx#E*znbM$VPz,{Tn1pa?C7i @XR] O9AsiX*q}8)9<yYBU[C&N05~hBr61 e_# >dU IG3%:'3l!v <=J/\hKef!HyFkJt0}K)g4@(c5m|+GuP\v?doEwI8tg|$w%VjLc"%F %T%T*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can't find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A DAViCal principal collection may only contain collectionsA collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All events of user "%s" were deleted and replaced by those from file %sAll of the principal's calendars and events will be unrecoverably deleted.All privilegesAll requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApplication DB UserApply ChangesApply DB PatchesAttachmentBinding deletedBindings to other collectionsBindings to this CollectionBindings to this Principal's CollectionsBody contains no XML data!Bound AsBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCalendar TimezoneCan only add tickets for existing collection paths which you ownCategoriesChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedCollections may not be both CalDAV calendars and CardDAV addressbooks at the same timeConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the BindingConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm Deletion of the TicketConfirm PasswordConfirm the new password.Could not retrieveCreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Collection.Creating new Principal record.Creating new ticket granting privileges to this PrincipalCurrent DAViCal version DAV PathDAV::resourcetype may only be set to a new value, it may not be removed.DAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDAViCal only allows BIND requests for collections at present.DKIM signature missingDKIM signature validation failed(DNS ERROR)DKIM signature validation failed(KEY Parse ERROR)DKIM signature validation failed(KEY Validation ERROR)DKIM signature validation failed(Signature verification ERROR)Database ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDate StyleDefault PrivilegesDefault relationships added.DeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleted a grant from this PrincipalDeleting Binding:Deleting Collection:Deleting Principal:Deleting Ticket:Deliver scheduling invitations from an organiser to this scheduling inboxDeliver scheduling replies from an attendee to this scheduling inboxDependenciesDependencyDescriptionDestination collection does not existDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?DomainEMailEMail OKERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.Error writing calendar properties to database.EuropeanEuropean (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.ExpiresExternal CalendarsExternal UrlFailFailed to write collection.Feeds are only supported for calendars at present.For access to theForbiddenFree/BusyFull NameFullnameGET requests on collections are only supported for calendars.GNU gettext supportGO!Go to the DAViCal Feature RequestsGrantGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryImport calendars and Synchronise LDAP.Inactive PrincipalsIncorrect content type for addressbook: Incorrect content type for calendar: Invalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?Items in CollectionJoinedLanguageLast usedList External CalendarsList GroupsList ResourcesList UsersLoad From FileLocaleLocationLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalMost of DAViCal will work but upgrading to PHP 5.2 or later is strongly recommended.NameNew CollectionNew PasswordNew PrincipalNoNo calendar contentNo collection found at that location.No summaryNo.No. of CollectionsNo. of PrincipalsNo. of ResourcesNot overwriting existing destination resourceOpaqueOrganizer MissingOverride a LockPDO PostgreSQL driversPHP DateTime classPHP LDAP module availablePHP Magic Quotes GPC offPHP Magic Quotes runtime offPHP PDO module availablePHP calendar extension availablePHP curl supportPHP iconv supportPHP not using Apache Filter modePHP5 curl support is required for external bindsPUT on a collection is only allowed for text/calendar content against a calendar collectionPUT on a collection is only allowed for text/vcard content against an addressbook collectionPassedPasswordPathPersonPlease confirm deletion of access ticket - see belowPlease confirm deletion of binding - see belowPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrincipal deletedPrivilegesPrivileges granted to All UsersPrivileges to allow delivery of scheduling messagesPrivileges to delegate scheduling decisionsProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead ACLs for a resource or collectionRead Access ControlsRead Current User's AccessRead Free/Busy InformationRead the content of a resource or collectionRead the details of the current user's access control to this resource.Read the free/busy information for a calendar collectionRead/WriteReferencesRemoveRemove a lockRemove dangling external calendarsReport BugReport a bug in the systemRequest FeatureRequest body is not valid XML data!ResourceResource Calendar PrincipalsResource Not Found.Resource has changed on server - not deletedResources may not be changed to / from collections.RevokeSRV RecordSchedule DeliverSchedule SendSchedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: DeliveryScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busyScheduling: SendingSend free/busy enquiriesSend scheduling invitations as an organiser from the owner of this scheduling outbox.Send scheduling replies as an attendee from the owner of this scheduling outbox.Set free/busy privilegesSet read privilegesSet read+write privilegesSet the path to store your ics e.g. 'calendar' will be referenced as /caldav.php/username/calendar/SetupSetup DAViCalShow help onSite StatisticsSite Statistics require the database to be available!Some properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Specific PrivilegesStatusStatus: %d, Message: %s, User: %d, Path: %sSubmitSuhosin "server.strip" disabledSync LDAP Groups with DAViCalSync LDAP with DAViCalTargetThat destination name contains invalid characters.That resource is not present on this server.The BIND Request MUST identify an existing resource.The BIND Request-URI MUST identify a collection.The BIND method is not allowed at that location.The CalDAV:schedule-calendar-transp property may only be set on calendars.The DAViCal Home PageThe access ticket will be deleted.The addressbook-query report must be run against an addressbook collectionThe application failed to understand that request.The application program does not understand that request.The binding will be deleted.The calendar path contains illegal characters.The calendar-query report must be run against a calendar or a scheduling collectionThe collection name may not be blank.The destination collection does not existThe displayname may only be set on collections, principals or bindings.The email address really should not be blank.The file "%s" is not UTF-8 encoded, please check error for more detailsThe file is not UTF-8 encoded, please check the error for more details.The full name for this person, group or other type of principal.The full name must not be blank.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The principal "%s" does not existThe style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.The username must not be blank, and may not contain a slashThere was an error reading from the database.There was an error writing to the database.This operation does the following:
  • check valid groups in LDAP directory
  • check groups in DAViCal
then
  • if a group is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in DAViCal
This operation does the following:
  • check valid users in LDAP directory
  • check users in DAViCal
then
  • if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • if a user is present in LDAP but not in DAViCal create the user in DAViCal
  • if a user in present in LDAP and DAViCal then update information in DAViCal
This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.This process will import each file in a directory named "username.ics" and create a user and calendar for each file to import.This server only supports the text/calendar format for freebusy URLsTicket IDTimeTo CollectionTo IDToggle all privilegesToolsTransparentURLUS FormatUnauthenticated UserUnited States of America (m/d/y)UpdateUpdatedUpdating Collection record.Updating Member of this Group PrincipalUpdating Principal record.Updating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWant: %s, Currently: %sWarning: there are no active admin users! You should fix this before logging out. Consider using the $c->do_not_sync_from_ldap configuration setting.When the user's e-mail account was validated.WriteWrite ACLs for a resource or collectionWrite Access ControlsWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You may not PUT to a collection URLYou must log in to use this system.Your configuration produced PHP errors which should be correctedcalendar-timezone property is only valid for a calendar.directory %s is not readabledrivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.phpdrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforget me notfrom principaliSchedule Domainsinvalid requestpath to store your icsrecipient must be organizer or attendee of eventsender must be organizer or attendee of eventunauthenticatedyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Portuguese (Brazil) (http://www.transifex.net/projects/p/davical/language/pt_BR/) Language: pt_BR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1) %F %T%T*** *** Localidade padrão*** *** Unknown- Adicionar %s ao grupo: %s- Adicionando %s para grupo de usuários: %s- Criando os grupos: %s- Criação de registro para os usuários: %s- Desativando os grupos: %s- Desativando os usuários: %s- Nada foi feito em: %s- Removendo %s do grupo: %s- Atualizando os grupos: %s- Atualizando o registro do usuário: %sATENÇÃO: todos os eventos neste caminho serão removidos antes de inserir o arquivo allof ics

Ajuda

Para obter ajuda inicial você deve visitar a Página Inicial do projeto DAViCal ou dar uma olhada no Wiki do DAViCal .

Se você não consegue encontrar as respostas lá, visite-nos no IRC canal #davical em irc.oftc.net , ou envie uma pergunta para a Lista de discussão dos usuários do DAViCal .

Os arquivos dapodem ser muito úteis.

Por favor, Registre-se no sistema

Para o acesso ao %s você deve registrar-se com o nome de usuário e senha que foram emitidos para você.

Se você gostaria de solicitar o acesso, envie um e-mail para %s.

Uma coleção principal do DAViCal só pode conter coleçõesA coleção já existe naquele local.Um recurso já existe no destino.Versão da Biblioteca AWLOs bilhetes de acessoTicket de acesso excluídoAçãoAtivoAdicionando novo membro a este grupo principalAdminAdministraçãoAdministradorTodosTodo conjunto de dados serão apagados de forma irrecuperável.Todos os eventos do usuário "%s" foram removidos e substituídos pelos do arquivo %sTodos os calendários do diretor e eventos serão apagados de forma irrecuperável.Todos os privilégiosTodas as alterações solicitadas foram realizadas.Permitir verificações livre / ocupado destinadas ao proprietário deste agendamentoUm usuário "Administrador" tem todos os direitos para o Sistema DAViCalOs usuários anônimos não têm permissão para modificar calendáriosUsuários anônimos podem acessar apenas calendários públicosAplicação do usuário DBAplicar AlteraçõesAplicar Patches DBAnexoVínculo excluídoLigações para outras coleçõesLigações para esta coleçãoLigações para este Coleção do principalO Corpo não contém dados XML!Ligado comoNavegue por todos os usuáriosOcupadoCalendário "%s" foi carregado a partir de arquivos.Administradores do calendárioFuso horário do calendárioSó é possível adicionar tickets para os caminhos de coleção existentes e que você possuiCategoriasAlterar senhaClique para exibir detalhes do usuárioClique para editar os detalhes principaisColeçãoPermissões da coleçãoID da coleçãoColeção excluídaColeções não podem ser ambos os calendários CalDAV e addressbooks CardDAV ao mesmo tempoConfigurando os clientes de Calendário para DAViCalConfigurando DAViCalConfirmarConfirmar a exclusão da vinculaçãoConfirmar a exclusão da ColeçãoConfirmar a exclusão do principalConfirmar a exclusão do TicketConfirme sua senhaConfirme a nova senha.Não foi possível recuperarCriarCriar ColeçãoCriar Eventos / ColeçõesCriar Nova ColeçãoCriar novo principalCriar PrincipalCriar um novo principal (ou seja um novo usuário de recursos, ou grupo)Criar um recurso ou coleçãoCriação de nova coleção.Criação de registro principal novo.Criação de novo bilhete concedendo privilégios a este principalDAViCal versão atualCaminho DAVDAV:: resourcetype só pode ser definido como um valor novo, não pode ser removido.Servidor DAViCal CalDAVVersão de esquema DAViCal DBHomepage DAViCalDAViCal WikiDAViCal só permite solicitações BIND para coleções no neste momento.Assinatura DKIM faltandovalidação da assinatura DKIM falhou (erro de DNS)validação da assinatura DKIM falhou (ERROR Parse KEY)validação da assinatura DKIM falhou (Erro de validação KEY)validação da assinatura DKIM falhou (erro de verificação de assinatura)Erro de banco de dadosHost do banco de dadosNome do banco de dadosProprietário de banco de dadosSenha do banco de dadosPorta do Banco de dadosNome de usuário do banco de dadosErro de banco de dadosFormato do estilo da DataEstilo da dataPrivilégios padrãoRelacionamentos padrão adicionados.ExcluirExcluir Eventos / ColeçõesExcluir principalExcluir um recurso ou coleçãoExcluída uma permissão a partir deste PrincipalExcluindo Vinculação:Exclusão de Coleção:Excluindo Principal:Exclusão de Ticket:Entregar convites agendados de um organizador para esta caixa de entrada de agendamentoEntregar respostas de agendamento de um participante a esta caixa de entrada de agendamentoDependênciasDependênciaDescriçãoColeção de destino não existeDiretório no servidorNome para ExibiçãoDisplaynameO usuário tem o direito de desempenhar este papel?DomínioEMailEMail OKERRO: O nome completo não pode estar em branco.ERRO: A nova senha deve corresponder à senha confirmada.ERRO: Houve um erro de banco de dados ao gravar as informações de regras!EditarEditar registro de usuárioEndereço de e-mailDigite um nome de usuário, se você conhecer, e clique aqui, para ser enviada por e-mail uma senha temporária.Digite seu nome de usuário e senha, clique aqui para entrarErro NoGroupFound com filtro >%s<, atributos >%s<; dn >%s<Erro NoUserFound com filtro >%s<, atributos >%s<, dn >%s<Erro consultando banco de dados.Erro ao escrever detalhes do calendário para o banco de dados.Erro ao gravar as propriedades do calendário para o banco de dados.EuropeuEuropeu (d / m / y)Recurso existente não corresponde ao cabeçalho "If-Match" - não aceito.Recurso existente no cabeçalho "If-None-Match" - não aceito.ExpiraCalendários externosUrl externaFalhaFalha ao gravar coleção.Inserções são suportadas apenas para calendários no presente.Para o acesso aoProibidoLivre / OcupadoNome CompletoFullnameSolicitações GET em coleções são suportados apenas para calendários.Suporte ao GNU gettextIR!Ir para as requisições de funcionalidades do DAViCalConcederConcessão de novos privilégios a partir deste principalGrupoMembros do GrupoParticipações no grupoPrincipais do grupoTem membrosAjudaAjuda na tela atualAjuda! Esqueci minha senha!InícioPágina InicialIDFormato ISOFormato ISO (AAAA-MM-DD)idSe você esqueceu sua senha, então,Se você gostaria de solicitar o acesso, envie um e-mailImportar todos os arquivos. Ics de um diretórioImportar calendários e sincronizar LDAP.Principais inativosTipo de conteúdo incorreto para endereços:Tipo de conteúdo incorreto para o calendário:Nome de usuário ou senha inválidos.Nome de usuário ou senha inválidos.É Membro deÉ um CalendárioÉ um AddressbookEste usuário está ativo?Itens na coleçãoCadastradoLinguagemUsado pela última vezLista de Calendários ExternosListar gruposListar recursosListar usuáriosCarregar a partir do arquivoLocalidadeLocalizaçãoPor favor, Identifique-seSair do DAViCalSairMembro excluídos deste Grupo principalA maior parte do DAViCal funcionará, mas a atualização para PHP 5.2 ou posterior é fortemente recomendado.NomeNova coleçãoNova SenhaNovo principalNãoNenhum conteúdo de calendárioNenhuma coleção encontrada no local.Sem resumoNão.No. de ColeçõesNo. de PrincipaisNo. de RecursosNão substituir recurso de destino existenteOpacoOrganizador faltandoSubstituir um bloqueioDrivers de PDO do PostgreSQLClasse PHP DateTimeMódulo PHP LDAP disponívelPHP Magic Quotes GPC desligadoPHP Magic Quotes runtime desligadoMódulo do PHP PDO disponívelExtensão PHP calendar disponívelSuporte a PHP curlSuporte a PHP iconvO PHP não está usando o modo de filtragem do ApacheSuporte do curl PHP5 é requerido para ligações externasColocar em uma coleção só é permitido para texto / conteúdo do calendário em uma coleção de calendárioPUT em uma coleção só é permitido para conteúdos do tipo texto/vcard contra uma coleção de endereçosPassouSenhaCaminhoPessoaPor favor, confirme a exclusão do bilhete de acesso - veja abaixoPor favor, confirme a exclusão de vínculo - veja abaixoPor favor, confirme a exclusão de coleção - veja abaixoPor favor, confirme a exclusão do principalPor favor, verifique o tempo e avise o administrador do sistema.PrincipalColeções principaisPermissões principaisID principaisTipo principaisPrincipais excluídosPrivilégiosPrivilégios concedidos a todos os usuáriosPrivilégios para permitir a entrega de mensagens de agendamentoPrivilégios para delegar as decisões de agendamentoPropriedade é somente leituraPúblicoPublicamente legívelCorpo REPORT não contém dados XML!Corpo REPORT não é um dado XML válido!LerLer ACLs para um recurso ou coleçãoLer Controles de AcessoLer acesso do usuário atualLer informação de Livre / OcupadoLer o conteúdo de um recurso ou coleçãoLer os detalhes de controle de acesso deste recurso para o usuário atualLer as informações livre/ocupado para uma coleção de calendárioLer/GravarReferênciasRemoverRemover um bloqueioRemover calendários externos pendentesRelatório de FalhasRelatar uma falha no sistemaSolicitar uma funcionalidadeCorpo da requisição não é um dado XML válido!RecursoRecurso de Calendário PrincipalRecurso não encontrado.O recurso foi alterado no servidor - não excluídaRecursos não podem ser mudados para/de coleções.RevogarRegistro SRVEntregar agendaEnviar agendaTransparência da agendaAgendamento: Entregar uma RespostaAgendamento: Entregar um ConviteAgendamento: EntregaAgendamento: Consultar livre/ocupadoAgendamento: Enviar respostaAgendamento: Enviar um conviteAgendamento: Enviar livre/ocupadoAgendamento: EnviandoEnviar solicitação de livre/ocupadoEnviar convites de agendamento como um organizador do proprietário desta caixa de saída de agendamento.Enviar respostas de agendamento como um participante do proprietário desta caixa de saída de agendamento.Definir privilégios de Livre/OcupadoDefinir privilégios de leituraDefinir privilégios de leitura+gravaçãoDefinir o caminho para armazenar seu ics, por exemplo 'calendar' será referenciado como caldav.php/username/calendar/ConfiguraçãoConfigurar DAViCalMostrar ajuda sobreEstatísticas do siteEstatísticas do site requerem o banco de dados para estarem disponíveis!Algumas propriedades não puderam ser alteradas.Algumas propriedades não puderam ser definidas.Recursos de origem não existem.Coleções especiais não podem conter um calendário ou outra coleção especial.Privilégios específicosEstadoEstado: %d, Mensagem: %s, Usuário: %d, Caminho: %sSubmeterSuhosin "server.strip" desabilitadoSincronizar Grupos LDAP com DAViCalSincronizar o LDAP com DAViCalAlvoEsse nome de destino contém caracteres inválidos.Esse recurso não está presente no servidor.A requisição BIND "deve identificar um recurso existente.A requisição BIND Request-URI deve identificar uma coleção.O método BIND não é permitido naquele local.O CalDAV: a propriedade schedule-calendar-transp pode ser definida apenas em calendários.A Home Page do DAViCalO bilhete de acesso será apagado.O relatório de endereços de consulta deve ser executado em uma coleção de endereçosO aplicativo não conseguiu entender esta requisição .O programa da aplicação não entende esta requisição.O vínculo será apagado.O caminho do calendário contém caracteres ilegais.O relatório do calendário de consulta deve ser executado em um calendário ou em uma coleção de calendárioO nome da coleção não pode ficar em branco.A coleção de destino não existeO displayname só pode ser definido em coleções, diretores ou ligações.O endereço de e-mail realmente não deve ficar em branco.O arquivo "%s" não está codificado em UTF-8, por favor verifique o log de erros para mais detalhesO arquivo não é codificado UTF-8, por favor, verifique o erro para mais detalhes.O nome completo para essa pessoa, grupo ou outro tipo de principal.O nome completo não deve ficar em branco.O nome com que este usuário poderá se logar no sistema.O caminho no servidor onde seus arquivos .ics estão.O idioma preferido para essa pessoa.O principal "%s" não existeO estilo de datas utilizadas para essa pessoa.O endereço de email do usuário.Nome completo do usuário.A senha do usuário para entrada no sistemaO nome de usuário não deve ficar em branco, e não pode conter uma barraHouve um erro de leitura do banco de dados.Houve um erro ao gravar no banco de dados.Esta operação faz o seguinte:
  • verifica grupos válidos no diretório LDAP
  • verifica os grupos no DAViCal
então
  • se um grupo está presente no DAViCal, mas não está presente no LDAP, o mesmo será ajustado como inativo no DAViCal
  • se um grupo está presente no LDAP, mas não está no DAViCal, o mesmo será criado no DAViCal
  • se um grupo está presente no LDAP e no DAViCal, então, suas informações serão atualizadas no DAViCal
Esta operação faz o seguinte:
  • verifica os usuários válidos no diretório LDAP
  • verifica usuários no DAViCal
,então,
  • se um usuário está presente no DAViCal, mas não está presente no LDAP, o mesmo será colocado como inativo no DAViCal
  • se um usuário está presente no LDAP, mas não está presente no DAViCal, o mesmo será criado no DAViCal
  • se um usuário estiver presente no LDAP e presente no DAViCal, então suas informações serão atualizadas no DAViCal
Esta página primeiramente verifica o ambiente necessário para o DAViCal funcionar corretamente. Sugestões ou correções para novas funcionalidades serão gratamente recebidas.Este processo irá importar cada arquivo em um diretório chamado "username.ics" e criar um usuário e um calendário para cada arquivo a ser importado.Este servidor só suporta o formato de texto/calendário para URLs livre/ocupadoID do TicketHoraPara ColeçãoPara o IDAlternar todos os privilégiosFerramentasTransparenteURLFormato USUsuário não autenticadoEstados Unidos da América (m/d/y)AtualizarAtualizadoAtualizando os registros da Coleção.Atualizando Membro para este Gerente de GrupoAtualizando registro de Gerente de Grupo.Atualizando permissões para este Gerente de GrupoAtualização do esquema do banco de dados do DAViCalAtualização do Banco de dadosGerente de calendário de usuáriosDetalhes do UsuárioFunções do UsuárioNome de usuárioFunções de usuárioO Usuário está ativoRegistro de usuário gravado.Nome de UsuárioVer Meus DetalhesVer meu próprio registro principalVer este registro de usuárioVisite o Wiki do DAViCalDeve ser: %s, Atualmente: %sAtenção: não há usuários administradores ativos! Você deve corrigir isso antes de sair. Considere usar a configuração $c->do_not_sync_from_ldap.Quando a conta de email do usuário foi validada.GravarGravar as ACLs para um recurso ou coleçãoGravar Controles de AcessoGravar DadosGravar MetadadosGravar conteúdoGravar propriedadesSimVocê está editandoVocê não está autorizado a usar esta função.Você está visualizandoVocê não tem permissão para modificar este registro.Você não pode postar em uma URL de coleçãoVocê deve fazer login para utilizar este sistema.Sua configuração possui erros de PHP que devem ser corrigidoa propriedade de fuso horário de calendário, só é válida para um calendário.diretório %s não é legíveldrivers_imap_pam: parâmetro imap_url não configurado em /etc/davical/*-conf.phpdrivers_ldap: Não foi possível iniciar TLS: ldap_start_tls () falhoudrivers_ldap: Falha ao conectar ao host %1$s na porta %2$s com binddn %3$sdrivers_ldap: Falha ao tentar acessar a base LDAP utilizando a versão 3 do protocolo, TLS não suportadodrivers_ldap: Não é possível conectar à base LDAP - verifique a configuração dos parâmetros bindDN e passDN, e se o seu servidor LDAP pode ser alcançadodrivers_ldap: Não é possível conectar-se à base LDAP na porta %s no host %sdrivers_ldap: função ldap_connect não definida, verifique o módulo php_ldapdrivers_pwauth_pam: Não é possível encontrar o arquivo %sdrivers_squid_pam: Não é possível encontrar o arquivo %snão esquecer de mimdo principalDomínios iSchedulerequisição inválidacaminho para armazenar seu icsdestinatário precisa ser organizador ou participante do eventoremetente precisa ser organizador ou participante do eventonão autenticadovocê deve fazer logon com o nome de usuário e senha que foram emitidos para você.davical-1.1.1/locale/ja/0000755000000000000000000000000011776301350011637 5ustar davical-1.1.1/locale/ja/LC_MESSAGES/0000755000000000000000000000000011776301350013424 5ustar davical-1.1.1/locale/ja/LC_MESSAGES/davical.mo0000644000000000000000000006150211776301350015370 0ustar o,! %<[Y-r) 2J2 }HC3+0_ #, LW iw("!%?FXr; )BKa|   #:^sID  # .: R _2k&:@ P U k Vy ; = !J!+c!!!B!@!-" ?" I" S"]"f""j"+"" """ ""#!#># C#M# P#[#s#(v#2#$## $*$ H$ U$c$u$$$ $ $$ $$$ $$%(%1%6% E%R%U%%i%%-%%%%%%%1&(8&Aa& &&& &&& ' '#'*'!<'"^''&'''','G%(8m( ( ( (((((,)3H)|) )))!)) *$*C*^*Uw*P*+7+K+e+ k+ y+,+(++K+H,\,+c,,,,,9,.-GB-0-1-'-(.>.Y.#o.+... . . .//'!/I/!d//// // / /00%0.0>0[0q0-00'00 01 1"13171,G1t1#11;1K2NM2~2@3L\3*3 333N4lW4)55' 6$56sZ66?7)898EI8 88 88T8r9By9o9],:H:T:(;$8; ];Cj;!;;;6<<?<|<<<*<=<&===*D=*o====!=.='*>'R>!z>^>0>-,?Z? z??%?? ???@2@E@^@.e@!@0@9@!AAAZaAZA B $B1B'8B `B jBNtBB B/BbC`gCC!CCD~D]EBzEiE'F7F[OFXFGG-G=GDG KG%UG?{G GG!GH"H ;H'EH0mH HHH HHH-HZIFkI'I9I9JNJdJ}J3J JJJJKK!0K RK_K"~KKKKKLL 3L*=LHhLL3L L'L"M>MNMUMQ\M6MEM+N$>NcN|NN*NN*N OO9-OEgO OEOP0P!PP9rPTPNQ PQ]QvQ*QQQ'QTQrTRRRR,S/ES5uS/S2S8T0GTrxTrT$^U!U!UU"UU9V9JV$VoVW)W=0WnW9uWWTWEX\XNX@=Y~Y0Y3YY9ZHXZZ$ZZZZ[ [K[$g[?[C[*\-;\i\|\\\$\-\ ]]6:]'q]]H] ]K^Q^p^^^^^ ^B^ (_T2_A_L_]`t``Tala:Xbbb$bZb#k$pm,4 d`JtX6x 7 lb|j>({N0=@;CY<K~r^/i]eOw 2au5U"AF?R}HZ- V*P\[ 8:MoQSLB&%9Tsf .hc)qn13 !G+zyvIWD E' _g- creating record for users : %s- deactivating users : %s- nothing done on : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A collection already exists at that location.ActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All of the principal's calendars and events will be unrecoverably deleted.All requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApply ChangesBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCalendar TimezoneChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm PasswordConfirm the new password.CreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Principal record.Current DAViCal version DAV PathDAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDatabase ErrorDatabase errorDate Format StyleDate StyleDefault PrivilegesDeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleted a grant from this PrincipalDeleting Collection:Deleting Principal:Deliver scheduling invitations from an organiser to this scheduling inboxDeliver scheduling replies from an attendee to this scheduling inboxDependenciesDependencyDescriptionDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?EMailEMail OKERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.EuropeanEuropean (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.For access to theForbiddenFree/BusyFull NameFullnameGO!Go to the DAViCal Feature RequestsGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryInactive PrincipalsInvalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?JoinedLanguageLast usedList GroupsList ResourcesList UsersLoad From FileLocaleLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalNameNew CollectionNew PasswordNoNo calendar contentNo collection found at that location.No.Not overwriting existing destination resourceOpaqueOverride a LockPHP PDO module availablePasswordPathPersonPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrincipal deletedPrivilegesProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead ACLs for a resource or collectionRead Access ControlsRead Current User's AccessRead Free/Busy InformationRead the content of a resource or collectionRead the details of the current user's access control to this resource.Read the free/busy information for a calendar collectionRead/WriteRemove a lockReport BugReport a bug in the systemRequest FeatureResourceResource Calendar PrincipalsResource has changed on server - not deletedResources may not be changed to / from collections.Schedule DeliverSchedule SendSchedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busySend free/busy enquiriesSend scheduling invitations as an organiser from the owner of this scheduling outbox.Send scheduling replies as an attendee from the owner of this scheduling outbox.Set free/busy privilegesSet read privilegesSet read+write privilegesSetupSetup DAViCalShow help onSome properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Specific PrivilegesStatusStatus: %d, Message: %s, User: %d, Path: %sSubmitThat resource is not present on this server.The DAViCal Home PageThe application program does not understand that request.The calendar path contains illegal characters.The file is not UTF-8 encoded, please check the error for more details.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.There was an error writing to the database.To IDToggle all privilegesTransparentUS FormatUnited States of America (m/d/y)UpdateUpdatedUpdating Member of this Group PrincipalUpdating Principal record.Updating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWhen the user's e-mail account was validated.WriteWrite ACLs for a resource or collectionWrite Access ControlsWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou must log in to use this system.directory %s is not readabledrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_squid_pam : Unable to find %s fileforget me notfrom principalpath to store your icsyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: LANGUAGE Language: ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0 - ユーザーの情報を作成中: %s- ユーザーを解除中: %s- 変更は行われていません: %s- ユーザー情報を更新中: %s警告:このパス内の全てのイベントは、icsファイルの挿入の前に削除されます。

ログオンして下さい

%sにアクセスするには、あなたに対して発行されたユーザー名およびパスワードでログオンして下さい。

アクセスをリクエストしたい場合は、%sにメールを送ってください。

すでにその場所にコレクションが存在します。アクションアクティブこのグループプリンシパルに新規メンバーを追加中管理者管理管理者全て全てのコレクションデータが回復不能な方法で削除されます。そのプリンシパルの全てのカレンダーとイベントが回復不能な方法で削除されます。全てのリクエストされた変更が実行されました。このスケジュール受信箱のオーナーに対する予定の有無の問い合わせを許可する。"管理者"ユーザーは、DAViCalシステム全体への完全な権限を持ちます。匿名ユーザーはカレンダーの修正を許されていません匿名ユーザーは公開カレンダーにのみアクセスを許されます。変更を適用全てのユーザーを閲覧する予定ありカレンダー"%s"がファイルからロードされました。カレンダープリンシパルカレンダー時間帯パスワードを変更するクリックしてユーザーの詳細を表示するクリックしてプリンシパルの詳細を編集するコレクションコレクション許可コレクションIDコレクションが削除されましたDAViCal用にカレンダークライアントを設定するDAViCalを設定する確認そのコレクションの削除を確認そのプリンシパルの削除を確認パスワードの確認新規パスワードの確認作成コレクションを作成するイベント/コレクションを作成する新規コレクションを作成する新規プリンシパルを作成するプリンシパルを作成する新規プリンシパル (新規のユーザー、資源、又はグループ) を作成する資源またはコレクションを作成する新規のプリンシパル記録を作成中現在のDAViCalバージョンDAVパスDAViCal CalDAV ServerがDAViCal DBスキーマバージョンDAViCal HomepageDAViCal Wikiデータベースエラーデータベースエラー日付形式スタイル日付スタイルデフォルトの権限削除イベント/コレクションを削除するプリンシパルを削除する資源またはコレクションを削除するこのプリンシパルから許可を削除しましたコレクションを削除中:プリンシパルを削除中:主催者からのスケジュール招待をこのスケジュール受信箱に届ける出席者からのスケジュール返信をこのスケジュール受信箱に届ける依存関係依存関係説明サーバーー上のディレクトリ表示名表示名このユーザーはこのロールを行う権限を持っていますか?EmailEmail OKエラー: 氏名は空欄にできません。エラー: 新規パスワードは確認パスワードと一致しなければなりません。エラー:ロール情報の書き込み中にデータベースエラーが起きました。編集このユーザー情報を編集Emailアドレス知っている場合はユーザー名を入力し、ここをクリックしてください。暫定パスワードがメールで送信されます。あなたのユーザー名とパスワードを入力してから、ここをクリックしてログインして下さい。NoUserFoundエラーがフィルター>%s<, attributes >%s< , dn >%s<で発生しました。データベースのクエリでエラーが発生しました。カレンダー詳細情報のデータベースへの書き込み中にエラーが発生しました。ヨーロッパヨーロッパ (d/m/y)既存の資源が"If-Match"ヘッダと一致しません - 受け付けられません。既存の資源が"If-Match"ヘッダと一致します - 受け付けられません。アクセスするには禁止された予定の有無氏名氏名実行!DAViCal機能リクエストに行くこのプリンシパルからの新規の権限を許可するグループグループメンバーグループメンバーシップグループプリンシパル所属するメンバーヘルプ現在の画面についてのヘルプ助けて!パスワードを忘れました!ホームホームページIDISO形式ISO形式 (YYYY-MM-DD)Idあなたのパスワードを忘れた場合アクセス権をリクエストしたい場合はここへメールしてください:ディレクトリの全ての.icsファイルをインポートする非アクティブのプリンシパルユーザー名またはパスワードが無効です。ユーザー名またはパスワードが無効です。メンバー所属先カレンダーであるアドレス帳であるこれはアクティブなユーザーですか?参加日言語最終更新日グループのリスト資源のリストユーザーのリストファイルからロードするロケールログオンして下さい。DAViCalからログアウトするログアウトこのグループプリンシパルからメンバーを削除しました名称新規コレクション新規パスワードいいえカレンダーの内容がありませんその場所にはコレクションが見つかりませんでした。No.既存の宛先資源に上書きしていません不透明ロックをオーバーライドするPHP PDOモジュール利用可能パスワードパス人物コレクションの削除を確認して下さい - 以下を見て下さい。プリンシパルの削除を確認して下さい。時刻を記載してシステム管理者に報告して下さい。プリンシパルプリンシパルコレクションプリンシパル許可プリンシパルIDプリンシパルタイププリンシパルが削除されました権限その特性は読み取り専用です。公開公的に読み取り可能レポートの本文にXMLデータがありません!レポートの本文は有効なXMLデータではありません!読み取り資源またはコレクションのアクセス制御を読み取る読み取りアクセス制御現在のユーザーアクセスを読み取る予定有無情報を読み取る資源またはコレクションの内容を読み取るこの資源への現在のユーザーのアクセス制御の詳細を読み取るカレンダーコレクションのための予定有無情報を読み取る読み書きロックを解除するバグの報告このシステムのバグを報告する機能をリクエストする資源資源カレンダープリンシパル資源はサーバー上で既に変更されています - 削除されません。資源はコレクションに変更することもコレクションから変更することもできません。スケジュール配達スケジュール送信スケジュールの透明性スケジューリング: 返信を届けるスケジューリング: 招待状を届けるスケジューリング: 予定の有無を尋ねるスケジューリング: 返信を送信するスケジューリング: 招待状を送信するスケジューリング: 予定の有無を送信する予定の有無の問い合わせを送信するこのスケジュール送信箱のオーナーから、主催者としてスケジュール招待を送信するこのスケジュール送信箱のオーナーから、出席者としてスケジュール返信を送信する予定有無の権限を設定する読み取り権限を設定する読み書き権限を設定するセットアップDaViCalをセットアップするヘルプの表示いくつかの特性は変更できませんでした。いくつかの特性は設定できませんでした。元の資源が存在しません。特殊なコレクションは、カレンダーまたは他の特殊なコレクションを含めません。特定の権限状態状態: %d, メッセージ: %s, ユーザー: %d, パス: %s送信その資源はこのサーバー上にありません。DAViCal Home Pageアプリケーションはそのリクエストを理解できませんでした。カレンダーパスに不正な文字が使用されています。そのファイル%sはUTF-8でエンコードされていません。さらなる詳細についてはそのエラーを確認して下さい。このユーザーがこのシステムへのログイン時に使う名前。あなたの.icsファイルがあるサーバー上のパス。この人が好む言語。この人が利用する日付のスタイル。そのユーザーの電子メールアドレス。そのユーザーの氏名。そのユーザーのログイン時のパスワード。データベースへの書き込み中にエラーがありました。宛先IDすべての権限をトグルする透明アメリカ形式アメリカ合衆国 (m/d/y)更新更新済みこのグループプリンシパルのメンバーをアップデート中プリンシパル記録を更新中このプリンシパルによる許可をアップデート中DAViCalデータベーススキーマをアップグレードするデータベースのアップグレードユーザーカレンダープリンシパルユーザー詳細ユーザー機能ユーザー名ユーザーのロールユーザーはアクティブですユーザー記録を書き込みました。ユーザー名自分の詳細を閲覧する自分自身のプリンシパル記録を閲覧するこのユーザー記録を閲覧するDAViCal Wikiに行くそのユーザーのメールアカウントが認証された日時。書き込む資源またはコレクションのための書き込みアクセス制御書き込みアクセス制御データを書き込むメタデータを書き込む内容を書き込む属性を書き込むはい編集中あなたはこの機能の利用を許可されていません。閲覧中このシステムを利用するにはログインしなくてはなりません。ディレクトリ%sは読み取り可能ではありません。drivers_ldap : TLSを開始できませんでした : ldap_start_tls()faileddrivers_ldap : ホスト%1$sにポート%2$s、bindDN%3$sでバインドに失敗しましたdrivers_ldap : LDAPをプロトコルバージョン3で使用に失敗しました、TLSはサポートされていませんdrivers_ldap : LDAPにバインドできません - bindDNとpassDNの設定を確認し、LDAPサーバーに到達可能であること確認して下さい。drivers_ldap : ホスト%2$sのポート%1$sでLDAPに接続できませんでしたdrivers_ldap : 関数ldap_connectが定義できませんでした、php_ldap moduleを確認して下さいdrivers_squid_pam : ファイル%sが見つかりません私を忘れないでプリンシパルからあなたのicsを保管するパスあなたに発行したユーザー名とパスワードでログオンして下さい。davical-1.1.1/locale/es_VE/0000755000000000000000000000000011776301350012246 5ustar davical-1.1.1/locale/es_VE/LC_MESSAGES/0000755000000000000000000000000011776301350014033 5ustar davical-1.1.1/locale/es_VE/LC_MESSAGES/davical.mo0000644000000000000000000001125611776301350016000 0ustar Kte`ax!.Ecz[-4);ek z  #   . 9 A R l              2 = A T e w          ,   = K b r & @ R $l  %   6'Px}- +9>Td{-   2Nbhy  ! 1=CXk   , 8IhE/$2+A:&%. CG?, 50D=J1I )B4* (<;"#39!6K >H 'F7@8-*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics fileAWL Library version Access TicketsAccess ticket deletedActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll privilegesApply ChangesApply DB PatchesAttachmentBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCategoriesChange PasswordCollectionConfirmConfirm PasswordConfirm the new password.Could not retrieveCreateCreate CollectionCreate Events/CollectionsCreate New CollectionDAV PathLanguageLocationLog out of DAViCalLogoutNameNew CollectionNew PasswordNo calendar contentNo summaryNo.No. of CollectionsNo. of ResourcesPHP iconv supportPasswordPathPersonPublicly ReadableReadRead/WriteRemoveReport BugUsernameWriteYesYou are editingYou are not authorised to use this function.You are viewingdirectory %s is not readableforget me notpath to store your icsunauthenticatedProject-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Spanish (Venezuela) (http://www.transifex.net/projects/p/davical/language/es_VE/) Language: es_VE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) ** Locales por defecto **** Desconocido **Agregando %s al grupo: %s- agregando usuarios %s al grupo: %s- creando grupos: %s- creando registros para usuarios: %s- desactivar grupos: %s- desactivando usuarios: %s- Nada que hacer en: %s- removiendo %s del grupo: %s- actualizando grupos: %s- actualizando registros de usuario: %sVersión de la librería AWLTicket de accesoTicket de acceso borradoAcciónActivoAgregando un nuevo miembro al grupo principalAdministrador del SistemaAdministraciónAdministradorTodoTodos los privilegiosAplicar cambiosAplicar parche a la BDAdjuntoExaminar todos los usuariosOcupadoCalendario "%s" fue cargado desde un archivo.Calendario principalCategoríasCambiar passwordColecciónConfirmarConfirmar contraseñaConfirmar nueva contraseñaNo se peude obtenerCrearCraer colecciónCrear Evento/ColecciónCrear nueva colecciónRuta DAVIdiomasUbicaciónDesconectarse de DAViCalDeconectarNombreNueva colecciónNuevo passwordNo hay contenido en el calendarioSin resumenNúm.Núm. de coleccionesNñum. de recursosPHP iconv soportadoContraseñaRutaPersonaPúblicamente legibleLeerLeer/escribirRemoverReportar un errorNombre de usuarioEscrituraSíEstás editandoNo estás autorizado para usar esta funciónEstás viendo...El directorio %s no es legibleMantender la sesión activaruta para almacenar tu icsNo autenticadodavical-1.1.1/locale/pl/0000755000000000000000000000000011776301350011660 5ustar davical-1.1.1/locale/pl/LC_MESSAGES/0000755000000000000000000000000011776301350013445 5ustar davical-1.1.1/locale/pl/LC_MESSAGES/davical.mo0000644000000000000000000003506611776301350015417 0ustar < )Cc!z[8 -[- "2&Y hHC30J { #  $ 6D(W"3Len    )8 JUh2o:@-2 HVV;+.7HP b l v  !  (2G$z   % .8 AObin }% , L,Y9.0' (Hq#+  # + 8 B M \ q  -   , !1!#P!@t!!;!+"*:" e"Ns""$$$$$$"$%(*%S%!h%%%%)%i%*h&)'H*-p***(*** + + +,+:5+p+0+R+F ,FQ,M,, ,%-*- 2-S- m- w-*--- ----. 3.>.].o....... //(/C/ [/h/{/////// 0 $000F0.L0{00*0L011 51gA1L11!2 82C2V2]2 u2 22 22222 222 33'3 *353F3I34g3'3'3&34#444N4c4j4q4 444 44 4 44#45 55%5 E5O5^5x5*5565%536;Q66-666 7(7D7I7 M7 Y7d7s7777$7788?8 C8+M8 y8.88A89M.93|9299A9>BN.hrv<q %,n4b$7lF]\|Hs[9:8-? ={;AC@ Txi yaP+zc"!g#mXVwjU`1}KEDO~(Jo5SZ/ d_)^kGI6*YL0 tRMQfu'&2ep3W%F %T%T*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can't find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All privilegesAll requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApply ChangesAttachmentBrowse all usersBusyCalendar "%s" was loaded from file.Calendar TimezoneCategoriesChange PasswordClick to display user detailsCollectionCollection GrantsCollection IDCollection deletedConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the CollectionConfirm PasswordConfirm the new password.CreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreating new Collection.Current DAViCal version DAV PathDAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDatabase ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDate StyleDefault PrivilegesDeleteDoes the user have the right to perform this role?EMailEMail OKERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error querying database.Error writing calendar details to database.EuropeanEuropean (d/m/y)ExpiresFor access to theForbiddenFree/BusyFull NameFullnameGO!GroupGroup MembersGroup MembershipsHas MembersHelpHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryInvalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?JoinedLanguageLast usedLocationLog On PleaseLog out of DAViCalLogoutNameNew CollectionNew PasswordNoNo collection found at that location.No.No. of CollectionsPasswordProperty is read-onlyPublicReport BugReport a bug in the systemResourceResource has changed on server - not deletedShow help onSome properties were not able to be changed.The application program does not understand that request.The calendar path contains illegal characters.The name this user can log into the system with.The preferred language for this person.The style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.There was an error writing to the database.TimeURLUnited States of America (m/d/y)UpdateUpdatedUser DetailsUser NameUser RolesUser is activeUser record written.View this user recordWant: %s, Currently: %sWhen the user's e-mail account was validated.YesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You must log in to use this system.Your configuration produced PHP errors which should be correcteddirectory %s is not readabledrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforget me notyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Polish (http://www.transifex.net/projects/p/davical/language/pl/) Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2) %F %T%T*** Domyślne ustawienia lokalne ****** Nieznane ***Dodaj %s do grupy: %sDodaj Użytkownika %s do grupy: %s- tworzenie grup: %s- tworzenie rekordów użytkowników: %s- wyłącz grupy: %s- wyłączenie użytkowników: %snic nie wykonano na: %s- usuwanie %s z grupy: %s- aktualizacja grup: %s- aktualizacja rekordów użytkownika: %sOSTRZEŻENIE: wszystkie zdarzenia z tej ścieżki zostaną usunięte przed wstawieniem plików ICS

Pomoc

Aby uzyskać pomoc, odwiedź DAViCal Home Page lub przeczytaj DAViCal Wiki.

Jeżeli nie znalazłeś odpowiedzi, odwiedź nas na IRCu na kanale #davical na stronie irc.oftc.net, lub wyślij zapytanie na DAViCal lista dyskusyjna Użytkowników.

Pomocną może też się okazać archiwum listy dyskusyjnej .

Zaloguj się

Aby uzyskać dostęp do %s powinieneś zalogować się swoją nazwą użytkownika i hasłem.

Jeśli chcesz uzyskać dostęp, wyślij e-mail do %s.

Zbiór już istnieje w tej lokalizacji.Zasób już istnieje w lokalizacji docelowej.Wersja biblioteki AWL Możliwość dostępuMożliwość dostępu została usuniętaAkcjaAktywnyAdministratorAdministracjaAdministratorWszystkoWszystkie dane kolekcji zostaną nieodwracalnie usunięte.Wszystkie uprawnieniaWszystkie zażądane zmiany zostały wprowadzoneZezwól na pytania free/busy skierowane do właściciela tej skrzynki harmonogramuUżytkownik "Administrator" ma pełne prawa do całego systemu DAViCalUżytkownicy anonimowi nie mają pozwolenia na modyfikację kalendarzyUżytkownicy anonimowi mogą uzyskać dostęp tylko do publicznych kalendarzyZatwierdź zmianyZałącznikPrzeglądaj wszystkich użytkownikówZajętyKalendarz @%s@ władowny z plikuStrefa czasowa kalendarzaKategorieZmień hasłoKliknij aby wyświetlić dane użytkownikaKolekcjaPrawa kolekcjiID kolekcjiKolekcja została usuniętaKonfiguracja klientów kalendarza dla DAViCalKonfiguracja DAViCalPotwierdźPotwierdź usunięcie kolekcjiPotwierdź hasłoPotwierdź nowe hasłoUtwórzUtwórz kolekcjęUtwórz zdarzenia/kolekcjeUtwórz nową kolekcjęTworzenie nowej kolejcjiAtkualna wersja DAViCalŚcieżka DAVDAViCal CalDAV ServerWersja schematu DB DAViCalStrona główna DAViCalDAViCal WikiBłąd bazy danychHost bazy danychNazwa bazy danychWłaściciel bazy danychHasło bazy danychPort bazy danychNazwa użytkownika bazy danychBłąd bazy danychStyl formatowania datyFormat datyDomyślne uprawnieniaUsuńCzy użytkownik ma prawo wykonywać tę rolę?E-mailE-mail zweryfikowanoERROR: Podane hasła nie pasują do siebieBłąd: Wystąpił błąd bazy danych podczas zapisywania informacji o roli.EdytujZmień dane tego użytkownika Adres EmailWpisz nazwę użytkownika (jeśli ją znasz) i naciśnij tutaj aby otrzymać emailem tymczasowe hasło.Wpisz nazwę użytkownika oraz hasło i naciśnij tutaj aby się zalogować.Błąd odpytywania bazy danych.Błąd zapisu kalendarza do bazy.EuropejskiEuropejski (d/m/r)WygasaAby uzyskać dostęp doZabronioneFree/BusyImię i nazwiskoPełna nazwaUruchom!GrupaCzłonkowie grupyCzłonkostwo grupyMa członkówPomocPomocy! Zapomniałem hasła!PoczątekStrona głównaIDFormat ICSISO (RRRR-MM-DD)IdJeśli zapomniałeś hasła, Jeśli chcesz poprosić o dostęp, wyślij e-mail doImportuj wszystkie pliki ICS z kataloguBłędna nazwa użytkownika lub hasło.Błędna nazwa użytkownika lub hasłoJest członkiemJest kalendarzemJest książką adresowąAktywny użytkownik?DodanoJęzykOstatnio używanyLokalizacjaProszę się zalogowaćWyloguj z DAViCalWyloguj sięNazwaNowa kolekcjaNowe hasłoNieNie znaleziono zbioru w lokalizacjiNrNr. kolekcjiHasłoWłaściwość tylko do odczytuPublicznyZgłoś błądZgłoś błąd w systemieZasóbZasób zmieniony na serwerze - nie usuwam.Pokaż pomoc na tematNiektóre właściwości nie mogły zostać zmienione.Aplikacja nie rozumie tego żądania.Ścieżka kalendarza zawiera nieakceptowalne znaki.Nazwa, którą ten użytkownik może użyć do zalogowania.Preferowany język.Format daty używany przez tego użytkownika.Adres e-mail użytkownika.Imię i nazwisko użytkownika.Hasło logowania.Wystąpił błąd zapisu do bazy danych.CzasURLUSA (m/d/r)AktualizujZaktualizowanoDane użytkownikaNazwa użytkownikaRole użytkownikaUżytkownik aktywnyDane użytkownika zostały zapisane.Zobacz dane tego użytkownikaPotrzebuje: %s, Aktualnie: %sKiedy potwierdzono adres e-mailTakEdytujeszNie masz uprawnień aby użyć tej funkcji.PrzeglądaszNie posiadasz uprawnień do edycji tych danychMusisz się zalogować.Twoja konfiguracja powoduje błędy PHP, które należy poprawićKatalog %s nie jest do odczytudrivers_ldap: Nie można uruchomić TLS: ldap_start_tls() spowodowało błąddrivers_pwauth_pam: Nie można odnaleźć pliku %s drivers_squid_pam: Nie można odnaleźć pliku %s zapamiętaj mniepowinieneś zalogować się swoją nazwą użytkownika i hasłem.davical-1.1.1/locale/pt_PT/0000755000000000000000000000000011776301350012273 5ustar davical-1.1.1/locale/pt_PT/LC_MESSAGES/0000755000000000000000000000000011776301350014060 5ustar davical-1.1.1/locale/pt_PT/LC_MESSAGES/davical.mo0000644000000000000000000012057111776301350016026 0ustar  A####$!$;$[$!r$$$$$$%[0% %(;S)-)-))**%*,*)3*]*c* r**2*G*J*J+ Y+Hz+C+3,0;,l, ,, ,,,,(,-8-A-R-#W-{--@- ---. ;.F. X.f.Vy.(.. //"5/!X/z/////// 0 050;F0000901-1H61111 1=1 2+#21O262>22 3 3"313 C3Q3c3r3 3333333#454G4\4p4I4D4 5 5 (5%45Z5 r5 525555&5:5@66w6|6 6V6;6>37=r77+7.7$8-8B>8@888 8882 9>9 P9 Z9 d9n9=w999"99+9": (:6:H: Y:e:j:!:: :: :::(:2;$;;&`;;(;%;; < '< 4<B<T<i<}<< << << <<<< <==(=TE=== = ===%= >>>(>:>-K>y>>>>>>>>? 5?V?g? y?0?[?\'@@@@@4@.@1A(6AA_A AAA AAA B B3+B+_BBBB!B"BB&C+C@C[C,vCGC8C $D /D:D AD"OD rD}DD#DDDD,E33EgE nEyE EEE!EEFF6FUFpFFUFPFDG]GqGcGG G HH5 H,VH(HHKHI,I+3I_IfIIII2I,I4"J0WJ0JJJK"KJ=K2K9KK.LSAL%L)LGL--MG[MGM@M ,N0MN1~N'N!N(N#O>O#TO;xO-O+OPQ"S~SDGT TT TTTT TT TT TU"U*U'FUnU!UUUU UV V V&V5VJVSVcVVVVV-\WW'WW WW WWX X,XHX1XX#X#X@X8YLYOiY;YKYNAZ~Z@[LP[+[*[ [\\#\3\0J\-{\\N\]^^+^^ _-)_W_.m__ ___ `*%`\P``c?d.d$de.e@eYeae3he ee ee>eW fOeff/fCfR?g6gBg* h7h Jhkhqhhh*hh ii7i6?iviiGi ij&j+8j djojjj`j3kBk Yk#ck$k#k kkll2l8lIlclyllCllm"m??mm mSmm-n=nQnCann0n;n>+oHjooooop)p#@pdpzppp*pppq!q,@qmqqqqKqWr gr ur r#rrrr2r!s*s0s09sBjsIss!s tn3tFt=t:'u"bu=uAuv vKvKhvvv vvv8w:wIw Rw `w nwC|www0w x6xIxOx`xvx xxx$xxxx xyy&y.Ey2ty(yy9y1z)Qz){z zzzzz{{ {.{ K{Y{i{}{{ {{{{){p|x|}| ||||/| | }}$}8}2J}}}}}}}}}7~M~+l~~~,~>~V-[B;B<~.C .8Ql| 3E7)a-*΂&$<!\+~IE : GT\+l,ք$ 03H7| ȅ܅ )H2[/ʆ.P=R%''O ЈۈG0`0‰T6P5W&%3 0>8o95Tm!a2$;`4{b/#CPg;meb?ȏ*<3Cp$ِ*#!E%dO(ڑ-1ϓPOҖ "/5 GQ m y " ՗ %,#?5c/ɘ' !9Lbz$=3ߚ+Het+Û 06,,cGC؜!Y>?U؝Z.F\`87.AWk|B>ޠJ.bFSD^O'k]": &(a_-.2l4jLQ{ [ >o`qYRWAM7;D6Wm,ZT pu` =~Z2xN/S^s+ .r;f-HQx#E*znbM$VPz,{Tn1pa?C7i @XR] O9AsiX*q}8)9<yYBU[C&N05~hBr61 e_# >dU IG3%:'3l!v <=J/\hKef!HyFkJt0}K)g4@(c5m|+GuP\v?doEwI8tg|$w%VjLc"%F %T%T*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can't find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A DAViCal principal collection may only contain collectionsA collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All events of user "%s" were deleted and replaced by those from file %sAll of the principal's calendars and events will be unrecoverably deleted.All privilegesAll requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApplication DB UserApply ChangesApply DB PatchesAttachmentBinding deletedBindings to other collectionsBindings to this CollectionBindings to this Principal's CollectionsBody contains no XML data!Bound AsBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCalendar TimezoneCan only add tickets for existing collection paths which you ownCategoriesChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedCollections may not be both CalDAV calendars and CardDAV addressbooks at the same timeConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the BindingConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm Deletion of the TicketConfirm PasswordConfirm the new password.Could not retrieveCreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Collection.Creating new Principal record.Creating new ticket granting privileges to this PrincipalCurrent DAViCal version DAV PathDAV::resourcetype may only be set to a new value, it may not be removed.DAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDAViCal only allows BIND requests for collections at present.DKIM signature missingDKIM signature validation failed(DNS ERROR)DKIM signature validation failed(KEY Parse ERROR)DKIM signature validation failed(KEY Validation ERROR)DKIM signature validation failed(Signature verification ERROR)Database ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDate StyleDefault PrivilegesDefault relationships added.DeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleted a grant from this PrincipalDeleting Binding:Deleting Collection:Deleting Principal:Deleting Ticket:Deliver scheduling invitations from an organiser to this scheduling inboxDeliver scheduling replies from an attendee to this scheduling inboxDependenciesDependencyDescriptionDestination collection does not existDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?DomainEMailEMail OKERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.Error writing calendar properties to database.EuropeanEuropean (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.ExpiresExternal CalendarsExternal UrlFailFailed to write collection.Feeds are only supported for calendars at present.For access to theForbiddenFree/BusyFull NameFullnameGET requests on collections are only supported for calendars.GNU gettext supportGO!Go to the DAViCal Feature RequestsGrantGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryImport calendars and Synchronise LDAP.Inactive PrincipalsIncorrect content type for addressbook: Incorrect content type for calendar: Invalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?Items in CollectionJoinedLanguageLast usedList External CalendarsList GroupsList ResourcesList UsersLoad From FileLocaleLocationLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalMost of DAViCal will work but upgrading to PHP 5.2 or later is strongly recommended.NameNew CollectionNew PasswordNew PrincipalNoNo calendar contentNo collection found at that location.No summaryNo.No. of CollectionsNo. of PrincipalsNo. of ResourcesNot overwriting existing destination resourceOpaqueOrganizer MissingOverride a LockPDO PostgreSQL driversPHP DateTime classPHP LDAP module availablePHP Magic Quotes GPC offPHP Magic Quotes runtime offPHP PDO module availablePHP calendar extension availablePHP curl supportPHP iconv supportPHP not using Apache Filter modePHP5 curl support is required for external bindsPUT on a collection is only allowed for text/calendar content against a calendar collectionPUT on a collection is only allowed for text/vcard content against an addressbook collectionPassedPasswordPathPersonPlease confirm deletion of access ticket - see belowPlease confirm deletion of binding - see belowPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrincipal deletedPrivilegesPrivileges granted to All UsersPrivileges to allow delivery of scheduling messagesPrivileges to delegate scheduling decisionsProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead ACLs for a resource or collectionRead Access ControlsRead Current User's AccessRead Free/Busy InformationRead the content of a resource or collectionRead the details of the current user's access control to this resource.Read the free/busy information for a calendar collectionRead/WriteReferencesRemoveRemove a lockRemove dangling external calendarsReport BugReport a bug in the systemRequest FeatureRequest body is not valid XML data!ResourceResource Calendar PrincipalsResource Not Found.Resource has changed on server - not deletedResources may not be changed to / from collections.RevokeSRV RecordSchedule DeliverSchedule SendSchedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: DeliveryScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busyScheduling: SendingSend free/busy enquiriesSend scheduling invitations as an organiser from the owner of this scheduling outbox.Send scheduling replies as an attendee from the owner of this scheduling outbox.Set free/busy privilegesSet read privilegesSet read+write privilegesSet the path to store your ics e.g. 'calendar' will be referenced as /caldav.php/username/calendar/SetupSetup DAViCalShow help onSite StatisticsSite Statistics require the database to be available!Some properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Specific PrivilegesStatusStatus: %d, Message: %s, User: %d, Path: %sSubmitSuhosin "server.strip" disabledSync LDAP Groups with DAViCalSync LDAP with DAViCalTargetThat destination name contains invalid characters.That resource is not present on this server.The BIND Request MUST identify an existing resource.The BIND Request-URI MUST identify a collection.The BIND method is not allowed at that location.The CalDAV:schedule-calendar-transp property may only be set on calendars.The DAViCal Home PageThe access ticket will be deleted.The addressbook-query report must be run against an addressbook collectionThe application failed to understand that request.The application program does not understand that request.The binding will be deleted.The calendar path contains illegal characters.The calendar-query report must be run against a calendar or a scheduling collectionThe collection name may not be blank.The destination collection does not existThe displayname may only be set on collections, principals or bindings.The email address really should not be blank.The file "%s" is not UTF-8 encoded, please check error for more detailsThe file is not UTF-8 encoded, please check the error for more details.The full name for this person, group or other type of principal.The full name must not be blank.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The principal "%s" does not existThe style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.The username must not be blank, and may not contain a slashThere was an error reading from the database.There was an error writing to the database.This operation does the following:
  • check valid groups in LDAP directory
  • check groups in DAViCal
then
  • if a group is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in DAViCal
This operation does the following:
  • check valid users in LDAP directory
  • check users in DAViCal
then
  • if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • if a user is present in LDAP but not in DAViCal create the user in DAViCal
  • if a user in present in LDAP and DAViCal then update information in DAViCal
This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.This process will import each file in a directory named "username.ics" and create a user and calendar for each file to import.This server only supports the text/calendar format for freebusy URLsTicket IDTimeTo CollectionTo IDToggle all privilegesToolsTransparentURLUS FormatUnauthenticated UserUnited States of America (m/d/y)UpdateUpdatedUpdating Collection record.Updating Member of this Group PrincipalUpdating Principal record.Updating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWant: %s, Currently: %sWarning: there are no active admin users! You should fix this before logging out. Consider using the $c->do_not_sync_from_ldap configuration setting.When the user's e-mail account was validated.WriteWrite ACLs for a resource or collectionWrite Access ControlsWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You may not PUT to a collection URLYou must log in to use this system.Your configuration produced PHP errors which should be correctedcalendar-timezone property is only valid for a calendar.directory %s is not readabledrivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.phpdrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforget me notfrom principaliSchedule Domainsinvalid requestpath to store your icsrecipient must be organizer or attendee of eventsender must be organizer or attendee of eventunauthenticatedyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/davical/language/pt_PT/) Language: pt_PT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) %F %T%T*** Definições Regionais predefinidas ****** Desconhecido ***- a acrescentar %s ao grupo : %s- a acrescentar utilizadores %s ao grupo : %s- a criar grupos : %s- a criar um registo para os utilizadores : %s- a desactivar grupos : %s- a desactivar utilizadores : %s- nada feito em : %s- a remover %s do grupo : %s- a actualizar grupos : %s- a actualizar registos de utilizador : %sAVISO: todos os eventos neste caminho serão apagados antes de inserir o ficheiro ics

Ajuda

Para ajuda inicial visite a Home Page do DAViCal ou veja o Wiki DAViCal.

Se não encontrar aí as respostas, visite o canal #davical do IRC no servidor irc.oftc.net, ou envie uma questão para Lista de correio dos Utilizadores DAViCal.

os arquivos da lista de correio também podem ser úteis.

Entre por favor

Para aceder ao %s deve entrar com o nome de utilizador e password que lhe foram atribuídos.

Se necessitar de pedir acesso, envie um e-mail para %s.

Uma colecção principal do DAViCal só pode conter colecçõesJá existe uma colecção nessa localização.Já existe um recurso nesse destino.Versão da biblioteca AWL Tickets de acessoTicket de acesso apagadoAcçãoActivoA acrescentar um novo membro a este Grupo PrincipalAdministradorAdministraçãoAdministradorTodosTodos os dados da colecção serão irremediavelmente apagadosTodos os eventos do utilizador "%s" foram apagados e substituídos pelos do ficheiro %sTodos os calendários e eventos do principal serão irremediavelmente apagados.Todos os privilégiosTodas as alterações pedidas foram efectuadas.Permitir verificação de disponibilidade do dono deste calendárioUm utilizador "Administrador" tem todas as permissões para todo o sistema DAViCalUtilizadores anónimos não podem alterar calendáriosUtilizadores anónimos têm acesso apenas a calendários públicosUtilizador da Base de Dados da aplicaçãoEfectuar MudançasAplicar patches da Base de DadosAnexoLigação apagadaLigações a outras colecçõesLigações a esta colecçãoLigações às colecções deste PrincipalO corpo não contém dados XML!Ligado ComoPercorrer todos os utilizadoresOcupadoO calendário "%s" foi carregado a partir do ficheiro.Principais do calendárioFuso horário do calendárioSó é permitido acrescentar tickets a uma colecção da qual seja donoCategoriasAlterar PasswordClique para ver detalhes de utilizadorClique para editar os detalhes do principalColecçãoPermissões da colecçãoID da colecçãoColecção apagadaAs colecções não podem ser calendários CalDAV e livros de endereços CardDAV simultaneamenteA configurar clientes de calendário para o DAViCalA configurar o DAViCalConfirmarConfirmar eliminação da ligaçãoConfirmar eliminação da colecçãoConfirmar eliminação do PrincipalConfirmar eliminação do ticketConfirmar PasswordConfirmar a nova passwordNão pude recuperarCriarCriar colecçãoCriar Eventos/ColecçõesCriar nova colecçãoCriar novo PrincipalCriar principalCriar um novo principal (i.e. um novo utilizador, recurso ou grupo)Criar um recurso ou colecçãoCriar uma nova colecção.Criar um novo registo de principalA criar novo ticket para atribuir privilégios a este principalVersão DAViCal actual Caminho DAVDAV::resourcetype só pode ser definido para um novo valor, não pode ser removido.Servidor CalDAV DAViCalVersão do Schema da Base de Dados do DAViCalHomepage do DAViCalWiki do DAViCalO DAViCal actualmente apenas permite pedidos BIND para colecções.Assinatura DKIM em faltaValidação da assinatura DKIM falhou (ERRO DNS)Validação da assinatura DKIM falhou (ERRO análise CHAVE)Validação da assinatura DKIM falhou (ERRO validação CHAVE)Validação da assinatura DKIM falhou (ERRO verificação de assinatura)Erro de Base de DadosServidor de Base de DadosNome da Base de DadosDono da Base de DadosPassword da Base de DadosPorto da Base de DadosNome de utilizador da Base de DadosErro da Base de DadosEstilo de formato de dataEstilo de dataPrivilégios predefinidosAcrescentados relacionamentos predefinidosEliminarEliminar eventos/colecçõesEliminar principalEliminar recurso ou colecçãoFoi eliminada uma permissão deste principalA eliminar ligação:A eliminar colecção:A eliminar principal:A eliminar ticket:Entregar os convites de um organizador a esta caixa de entrada de reuniõesEntregar as respostas a convites dos participantes a esta caixa de entrada de reuniõesDependênciasDependênciaDescriçãoA colecção de destino não existeDirectório no servidorNome a apresentarNome a apresentarO utilizador tem o direito de executar este papel?DomínioEmailEmail OKERRO: O nome completo não pode ficar em branco.ERRO: A nova password tem que corresponder à password confirmada.ERRO: Houve um erro de base de dados ao escrever informação de papéis!EditarEditar este registo de utilizadorEndereço de emailIndique um nome de utilizador, se o souber, e clique aqui, para que lhe seja enviada uma password temporária.Indique o seu nome de utilizador e password e clique aqui para entrar.Erro NoGroupFound com o filtro >%s<, atributos >%s< , dn >%s<Erro NoUserFound com filtro >%s<, atributos >%s< , dn >%s<Erro ao consultar a base de dados.Erro ao escrever os detalhes do calendário na base de dados.Erro ao escrever os detalhes do calendário para a base de dados.EuropeuEuropeu(d/m/a)Recurso existente não corresponde com cabeçalho "If-Match" - não aceite.Recurso existente corresponde com cabeçalho "If-None-Match" - não aceite.ExpiraCalendários ExternosUrl ExternoFalhaFalhou a escrever colecção.Feeds só são suportadas actualmente para calendários.Para acesso aoProibidoLivre/OcupadoNome CompletoNome completoPedidos GET a colecções são suportados apenas para calendários.Suporte GNU gettextOK!Ir para os Pedidos de Funcionalidades do DAViCalAtribuirA atribuir novos privilégios a partir deste PrincipalGrupoMembros do grupoAssociação a gruposPrincipais do grupoTem membrosAjudaAjuda para este écranAjuda! Esqueci-me da minha password!EntradaPágina de EntradaIDFormato ISOFormato ISO (AAAA-MM-DD)IdSe se esqueceu da sua password, entãoSe quiser obter acesso, por favor envie e-mailImportar todos os ficheiros .ics de um directórioImportar calendários e sincronizar LDAPPrincipais inactivosTipo de conteúdo incorrecto para o livro de endereços: Tipo de conteúdo incorrecto para o calendário: Nome de utilizador ou password inválido.Nome de utilizador ou password inválido.É membro deÉ um calendárioÉ um livro de endereçosEste utilizador está activo?Items na colecçãoAgregadoIdiomaÚltimo usadoListar Calendários ExternosListar GruposListar recursosListar utilizadoresCarregar do ficheiroDefinições regionaisLocalizaçãoPor favor entrarSair do DAViCalSairMembro eliminado deste Principal de GrupoA maior parte do DAViCal irá funcionar mas é fortemente recomendado actualizar para o PHP 5.2 ou mais recente.NomeNova colecçãoNova passwordNovo principalNãoSem conteúdo de calendárioColecção não encontrada nessa localização.Sem sumárioNúm.Núm. de colecçõesNúm. de PrincipaisNúm. de recursosNão vai sobrescrever recurso de destino existenteOpacoFalta OrganizadorUltrapassar um LockDrivers PDO PostgreSQLClasse de PHP DateTimeMódulo LDAP de PHP disponívelMagic Quotes do PHP desligadoMagic Quotes do PHP desligado em ambiente de execuçãoMódulo PDO do PHP disponívelExtensão PHP para calendários disponívelSuporte curl do PHPSuporte iconv do PHPO PHP não está a usar o modo Apache FilterO suporte curl do PHP5 é necessário para ligações externasPUT de conteúdo text/calendar apenas é permitido numa colecção do tipo calendárioPUT de conteúdo text/vcard apenas é permitido numa colecção do tipo livro de endereçosPassouPasswordCaminhoPessoaConfirme por favor a eliminação do ticket de acesso - ver abaixoConfirme por favor a eliminação da ligação - ver abaixoConfirme por favor a eliminação da colecção - ver abaixoConfirme por favor a eliminação do principalPor favor tome nota da hora e avise o administrador do seu sistema.PrincipalColecções do PrincipalAtribuições do PrincipalID do PrincipalTipo de PrincipalPrincipal eliminadoPrivilégiosPrivilégios atribuídos para Todos os utilizadoresPrivilégios para permitir a entrega de mensagens de calendarizaçãoPrivilégios para delegar decisões de calendarizaçãoA propriedade é só de leituraPúblicoLegível publicamenteO corpo do RELATÓRIO não contém dados XML!O corpo do RELATÓRIO não é XML válido!LerLer ACLs para um recurso ou colecçãoLer controlos de acessoLer acesso do utilizador actualLer informação de livre/ocupadoLer o conteúdo de um recurso ou colecçãoLer os detalhes do controlo de acesso do utilizador actual a este recursoLer informação de livre/ocupado para uma colecção de calendáriosLer/EscreverReferênciasRemoverRemover um lockRemover calendários externos com problemasRelatar um bugRelatar um bug no sistemaPedir FuncionalidadeCorpo do pedido não tem dados XML válidos!RecursoPrincipais do recurso de calendárioRecurso não encontradoRecurso foi alterado no servidor - não foi apagadoOs recursos não podem ser alterados entre colecções.RevogarRegisto SRVEntrega de horárioHorário enviadoTransparência do horárioHorários: Entregar uma respostaHorários: Entregar um conviteHorários: EntregaHorários: Verificar informação de livre/ocupadoHorários: Enviar uma respostaHorários: Enviar um conviteHorários: Enviar informação de livre/ocupadoHorários: A enviarEnviar consultas de informação livre/ocupadoEnviar convites de horários como organizador, sendo dono desta caixa de saída.Enviar respostas de horários como participante, sendo dono desta caixa de saída.Definir privilégios de livre/ocupadoDefinir privilégios de leituraDefinir privilégios de leitura+escritaDefinir o caminho para guardar o seu ficheiro ics - e.g. 'calendar' será referido como /caldav.php/nome_de_utilizador/calendar/ConfigurarConfigurar DAViCalMostrar ajuda sobreEstatísticas do siteAs estatísticas do site exigem que a base de dados esteja disponível!Algumas propriedades não puderam ser alteradas.Algumas propriedades não puderam ser definidas.Recurso de origem não existe.Colecções especiais não podem conter um calendário ou outra colecção especial.Privilégios específicosEstadoEstado: %d, Mensagem: %s, Utilizador: %d, Caminho: %sSubmeter"server.strip" do suhosin desabilitadoSincronizar Grupos LDAP com o DAViCalSincronizar LDAP com o DAViCalDestinoEsse nome de destino contém caracteres inválidos.Esse recurso não está presente neste servidor.O pedido BIND, TEM QUE identificar um recurso existente.O URI do pedido BIND, TEM QUE identificar uma colecção.O método BIND não é permitido nessa localização.A propriedade CalDAV:schedule-calendar-transp só pode ser definida em calendários.A Home page do DAViCalO ticket de acesso será apagado.O relatório addressbook-query tem que ser executado sobre uma colecção de livros de endereçosA aplicação não conseguiu entender esse pedido.O programa não entende esse pedido.A ligação será apagada.O caminho do calendário contém caracteres ilegais.O relatório calendar-query tem que ser executado sobre uma colecção de calendário ou horáriosO nome da colecção não pode ficar em branco.A colecção de destino não existeO nome a mostrar só pode ser definido em colecções, principais ou ligações.O endereço de email não devia, de facto, ficar em branco.O ficheiro "%s" não está codificado como UTF-8, por favor verifique a mensagem de erro para mais promenoresO ficheiro não está codificado em UTF-8, por favor verifique a mensagem de erro para mais detalhes.O nome completo desta pessoa, grupo ou outro tipo de principal.O nome completo não pode ficar em branco.O nome que este utilizador pode usar para entrar no sistema.O caminho no servidor onde estão guardados os seus ficheiros .ics.O idioma preferido para esta pessoa.O principal "%s" não existeO estilo de datas em uso para esta pessoa.O endereço de email do utilizador.O nome completo do utilizador.A password do utilizador para entrar.O nome de utilizador não pode ficar em branco e não pode conter uma barra "/"Ocorreu um erro ao ler da Base de Dados.Ocorreu um erro ao escrever na Base de Dados.Esta operação faz o seguinte:
  • verifica grupos válidos no directório LDAP
  • verifica grupos no DAViCal
então
  • se um grupo existe no DAViCal mas não no LDAP, marca-o como inactivo no DAViCal
  • se um grupo está presente no LDAP mas não no DAViCal, cria o grupo no DAViCal
  • se um grupo existir no LDAP e no DAViCal, actualiza a informação no DAViCal
Esta operação faz o seguinte:
  • verifica utilizadores válidos no directório LDAP
  • verifica utilizadores no DAViCal
então
  • se um utilizador existe no DAViCal mas não no LDAP, marca-o como inactivo no DAViCal
  • se um utilizador está presente no LDAP mas não no DAViCal, cria o utilizador no DAViCal
  • se um utilizador existir no LDAP e no DAViCal, actualiza a informação no DAViCal
Esta página verifica o ambiente de execução necessário para que o DAViCal trabalhe correctamente. Sugestões ou correcções para que faça coisas mais úteis serão recebidos com gratidão.Este processo irá importar cada ficheiro chamado "nome_de_utilizador.ics" ecriar um utilizador e calendário para cada ficheiro.Este servidor suporta apenas o formato text/calendar para URLs de livre/ocupadoID de ticketTempoPara a colecçãoPara o IDMudar todos os privilégiosFerramentasTransparenteURLFormato EUAUtilizador não autenticadoEstados Unidos da América (m/d/a)ActualizarActualizadoA actualizar o registo da colecção.A actualizar membro deste Principal de grupoA actualizar o registo de principalA actualizar permissões de acordo com este principalActualizar o schema da Base de Dados do DAViCalActualizar Base de DadosPrincipais do calendário de utilizadorDetalhes de utilizadorFunções de utilizadorNome de utilizadorPapéis de utilizadorUtilizador está activoRegisto de utilizador escrito.Nome de utilizadorVer os meus detalhesVer o meu próprio registo principalVer o registo deste utilizadorVisitar a Wiki do DAViCalDesejado: %s, Actualmente: %sAviso: não há utilizadores administradores activos! Deve corrigir isto antes de sair. Considere usar a definição de configuração $c->do_not_sync_from_ldap.Quando a conta de email do utilizador foi validada.EscreverEscrever ACLs para um recurso ou colecçãoEscrever controlos de acessoEscrever dadosEscrever metadadosEscrever conteúdoEscrever propriedadesSimEstá a editarNão está autorizado a usar esta função.Está a verNão tem permissão para modificar este registo.Não pode executar um pedido PUT num URL de colecçãoTem que entrar para poder usar este sistema.A sua configuração criou alguns erros de PHP que devem ser corrigidosa propriedade calendar-timezone só é válida para um calendário.o directório %s não é legíveldrivers_imap_pam: o parâmetro imap_url não está configurado em /etc/davical/*-conf.phpdrivers_ldap : Impossível inicial TLS: falhou ldap_start_tls()drivers_ldap : Falhou a ligação ao servidor %1$s no porto %2$s com o bindDN de %3$sdrivers_ldap : Falhou a definição do protocolo versão 3 para o LDAP, TLS não suportadodrivers_ldap : Não foi possível ligar ao LDAP - verifique a sua configuração de bindDN e passDN, e que o seu servidor LDAP está acessíveldrivers_ldap : Impossível ligar ao LDAP com o porto %s no servidor %sdrivers_ldap : a função ldap_connect não está definida, verifique o seu módulo php_ldapdrivers_pwauth_pam : Impossível encontrar o ficheiro %sdrivers_squid_pam : Impossível encontrar o ficheiro %slembrar este logina partir do principalDomínios iSchedulepedido inválidocaminho para guardar o seu icsO destinatário deve ser o organizador ou estar presente no eventoO remetente deve ser o organizador ou estar presente no eventonão autenticadodeve entrar com o nome de utilizador e password que lhe foram atribuídas.davical-1.1.1/locale/de/0000755000000000000000000000000011776301350011635 5ustar davical-1.1.1/locale/de/LC_MESSAGES/0000755000000000000000000000000011776301350013422 5ustar davical-1.1.1/locale/de/LC_MESSAGES/davical.mo0000644000000000000000000011624711776301350015375 0ustar $ -,""""##+#K#!b######$[ $ |$';C(-(-(((()))#)M)S) b)p)2t)G)J):* I*Hj*C*3*0++\+ p+~+ ++++(+ ,(,1,B,#G,k,,@, ,,, - +-6- H-V-Vi-(---."%.!H.j......../%/;6/r///9/00H&0o000 0=00+11?16q1>11 1 22!2 32A2S2b2 t2222222#3%373L3`3Iq3D3 4 4 4%$4J4 b4 o42{444&4:4@5`5e5 {5V5;5>6=[66+6.6 77B'7@j777 77727'8 98 C8 M8W8=`888"88+8 9 9919 B9N9S9!n99 99 999(929$$:&I:p:(:%::: ; ;+;=;R;f;m; v;; ;; ;;;; ;;;(<T.<<< < <<<%< <<<=#=-4=b=i=y====== >-> ?>[`>>>>>4>. ?1cYQcIc c3dM5d9d<dJdEeaeveee!ee+e f=fLf `f mfffCf fg&g1@grg{g ggJg/h3h Ih"Uh!xh$h hhhi &i0iCi`ixiiNi&ij6jMSjjjUjk$/kTk gk;tkk3k9k>2lFqlll lll mm.m >m KmXm!gmmmm m8mn0nBnWnSgnPn o o *o7oTo oo {o3oo o4o/p=1p opzpp{pR q=sq[q r:-rAhr rrJrOs jsts ss%s4ss tt-t At?Mttt*tt7t'u.u@uVuiuxu~u u uuu uuu,uC#v9gv-vv/v/w%Dw%jwwwwwww xx'xAxRxfxxxxxxxx5x\y^y cyqyyy!y#yyyy z z25zhzzzzzz!z%z{"6{Y{)r{c{ | |||=!|?_|>|3|L} _}i}}}}}})}?~+W~!~ ~~%~/~,K%`".D4R b oy 0ŀ =7>u  Ёށ%'B+a%',ۂ&NDS 1?Uk,}42߄Q2 1 ʅ#Յ("B(G3p;74UM"B݇5 4V-W׈0/)`YET*REҊ,=E<($9!H%j-@:;:vu{SGԒ & +8? V `l pz& ˓ؓ/'.@%o͔ݔ   <I(]ו7q 4"2IL>[ 84ݗ7LJH(X Tb]_uCV\.- #1MH^AqD; bFn0$Tk(t#6-?9NYM>V:J7[WH| !gJ+K8xmjIX#  <U (@<s]|R3)uLShBc\b *_f5E"v+y1=il23]/516XOs;{7W_0!. }gCooU Gx9P%It'eKzpASir`'=q&D,)B4v:-4V,h2^GrML O`kYa"&$ucRF?C8{H/edZZnp*[wQ.T@%jyz~Ef}wamQ  ~\lPN>d ^%F %T%T*** Default Locale ****** Unknown ***- adding %s to group : %s- adding users %s to group : %s- creating groups : %s- creating record for users : %s- deactivate groups : %s- deactivating users : %s- nothing done on : %s- removing %s from group : %s- updating groups : %s- updating user records : %sWARNING: all events in this path will be deleted before inserting allof the ics file

Help

For initial help you should visit the DAViCal Home Page or take a look at the DAViCal Wiki.

If you can't find the answers there, visit us on IRC in the #davical channel on irc.oftc.net, or send a question to the DAViCal Users mailing list.

The mailing list archives can be helpful too.

Log On Please

For access to the %s you should log on withthe username and password that have been issued to you.

If you would like to request access, please e-mail %s.

A DAViCal principal collection may only contain collectionsA collection already exists at that location.A resource already exists at the destination.AWL Library version Access TicketsAccess ticket deletedActionActiveAdding new member to this Group PrincipalAdminAdministrationAdministratorAllAll collection data will be unrecoverably deleted.All events of user "%s" were deleted and replaced by those from file %sAll of the principal's calendars and events will be unrecoverably deleted.All privilegesAll requested changes were made.Allow free/busy enquiries targeted at the owner of this scheduling inboxAn "Administrator" user has full rights to the whole DAViCal SystemAnonymous users are not allowed to modify calendarsAnonymous users may only access public calendarsApplication DB UserApply ChangesApply DB PatchesAttachmentBinding deletedBindings to other collectionsBindings to this CollectionBindings to this Principal's CollectionsBody contains no XML data!Bound AsBrowse all usersBusyCalendar "%s" was loaded from file.Calendar PrincipalsCalendar TimezoneCan only add tickets for existing collection paths which you ownCategoriesChange PasswordClick to display user detailsClick to edit principal detailsCollectionCollection GrantsCollection IDCollection deletedCollections may not be both CalDAV calendars and CardDAV addressbooks at the same timeConfiguring Calendar Clients for DAViCalConfiguring DAViCalConfirmConfirm Deletion of the BindingConfirm Deletion of the CollectionConfirm Deletion of the PrincipalConfirm Deletion of the TicketConfirm PasswordConfirm the new password.Could not retrieveCreateCreate CollectionCreate Events/CollectionsCreate New CollectionCreate New PrincipalCreate PrincipalCreate a new principal (i.e. a new user, resource or group)Create a resource or collectionCreating new Collection.Creating new Principal record.Creating new ticket granting privileges to this PrincipalCurrent DAViCal version DAV PathDAV::resourcetype may only be set to a new value, it may not be removed.DAViCal CalDAV ServerDAViCal DB Schema version DAViCal HomepageDAViCal WikiDAViCal only allows BIND requests for collections at present.DKIM signature missingDKIM signature validation failed(DNS ERROR)DKIM signature validation failed(KEY Parse ERROR)DKIM signature validation failed(KEY Validation ERROR)DKIM signature validation failed(Signature verification ERROR)Database ErrorDatabase HostDatabase NameDatabase OwnerDatabase PasswordDatabase PortDatabase UsernameDatabase errorDate Format StyleDate StyleDefault PrivilegesDefault relationships added.DeleteDelete Events/CollectionsDelete PrincipalDelete a resource or collectionDeleted a grant from this PrincipalDeleting Binding:Deleting Collection:Deleting Principal:Deleting Ticket:Deliver scheduling invitations from an organiser to this scheduling inboxDeliver scheduling replies from an attendee to this scheduling inboxDependenciesDependencyDescriptionDestination collection does not existDirectory on the serverDisplay NameDisplaynameDoes the user have the right to perform this role?EMailEMail OKERROR: The full name may not be blank.ERROR: The new password must match the confirmed password.ERROR: There was a database error writing the roles information!EditEdit this user recordEmail AddressEnter a username, if you know it, and click here, to be e-mailed a temporary password.Enter your username and password then click here to log in.Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<Error querying database.Error writing calendar details to database.Error writing calendar properties to database.EuropeanEuropean (d/m/y)Existing resource does not match "If-Match" header - not accepted.Existing resource matches "If-None-Match" header - not accepted.ExpiresExternal CalendarsExternal UrlFailFailed to write collection.Feeds are only supported for calendars at present.For access to theForbiddenFree/BusyFull NameFullnameGET requests on collections are only supported for calendars.GNU gettext supportGO!Go to the DAViCal Feature RequestsGrantGranting new privileges from this PrincipalGroupGroup MembersGroup MembershipsGroup PrincipalsHas MembersHelpHelp on the current screenHelp! I've forgotten my password!HomeHome PageIDISO FormatISO Format (YYYY-MM-DD)IdIf you have forgotten your password thenIf you would like to request access, please e-mailImport all .ics files of a directoryImport calendars and Synchronise LDAP.Inactive PrincipalsIncorrect content type for addressbook: Incorrect content type for calendar: Invalid user name or password.Invalid username or password.Is Member ofIs a CalendarIs an AddressbookIs this user active?Items in CollectionJoinedLanguageLast usedList External CalendarsList GroupsList ResourcesList UsersLoad From FileLocaleLocationLog On PleaseLog out of DAViCalLogoutMember deleted from this Group PrincipalMost of DAViCal will work but upgrading to PHP 5.2 or later is strongly recommended.NameNew CollectionNew PasswordNew PrincipalNoNo calendar contentNo collection found at that location.No summaryNo.No. of CollectionsNo. of PrincipalsNo. of ResourcesNot overwriting existing destination resourceOpaqueOverride a LockPDO PostgreSQL driversPHP DateTime classPHP LDAP module availablePHP Magic Quotes GPC offPHP Magic Quotes runtime offPHP PDO module availablePHP calendar extension availablePHP iconv supportPHP not using Apache Filter modePUT on a collection is only allowed for text/calendar content against a calendar collectionPassedPasswordPathPersonPlease confirm deletion of access ticket - see belowPlease confirm deletion of binding - see belowPlease confirm deletion of collection - see belowPlease confirm deletion of the principalPlease note the time and advise the administrator of your system.PrincipalPrincipal CollectionsPrincipal GrantsPrincipal IDPrincipal TypePrincipal deletedPrivilegesPrivileges granted to All UsersPrivileges to allow delivery of scheduling messagesPrivileges to delegate scheduling decisionsProperty is read-onlyPublicPublicly ReadableREPORT body contains no XML data!REPORT body is not valid XML data!ReadRead ACLs for a resource or collectionRead Access ControlsRead Current User's AccessRead Free/Busy InformationRead the content of a resource or collectionRead the details of the current user's access control to this resource.Read the free/busy information for a calendar collectionRead/WriteReferencesRemoveRemove a lockReport BugReport a bug in the systemRequest FeatureRequest body is not valid XML data!ResourceResource Calendar PrincipalsResource Not Found.Resource has changed on server - not deletedResources may not be changed to / from collections.RevokeSchedule DeliverSchedule SendSchedule TransparencyScheduling: Deliver a ReplyScheduling: Deliver an InvitationScheduling: DeliveryScheduling: Query free/busyScheduling: Send a ReplyScheduling: Send an InvitationScheduling: Send free/busyScheduling: SendingSend free/busy enquiriesSend scheduling invitations as an organiser from the owner of this scheduling outbox.Send scheduling replies as an attendee from the owner of this scheduling outbox.Set free/busy privilegesSet read privilegesSet read+write privilegesSetupSetup DAViCalShow help onSite StatisticsSite Statistics require the database to be available!Some properties were not able to be changed.Some properties were not able to be set.Source resource does not exist.Special collections may not contain a calendar or other special collection.Specific PrivilegesStatusStatus: %d, Message: %s, User: %d, Path: %sSubmitSuhosin "server.strip" disabledSync LDAP Groups with DAViCalSync LDAP with DAViCalTargetThat destination name contains invalid characters.That resource is not present on this server.The BIND Request MUST identify an existing resource.The BIND Request-URI MUST identify a collection.The BIND method is not allowed at that location.The CalDAV:schedule-calendar-transp property may only be set on calendars.The DAViCal Home PageThe access ticket will be deleted.The addressbook-query report must be run against an addressbook collectionThe application failed to understand that request.The application program does not understand that request.The binding will be deleted.The calendar path contains illegal characters.The calendar-query report must be run against a calendar or a scheduling collectionThe collection name may not be blank.The destination collection does not existThe displayname may only be set on collections, principals or bindings.The email address really should not be blank.The file "%s" is not UTF-8 encoded, please check error for more detailsThe file is not UTF-8 encoded, please check the error for more details.The full name for this person, group or other type of principal.The full name must not be blank.The name this user can log into the system with.The path on the server where your .ics files are.The preferred language for this person.The principal "%s" does not existThe style of dates used for this person.The user's e-mail address.The user's full name.The user's password for logging in.The username must not be blank, and may not contain a slashThere was an error reading from the database.There was an error writing to the database.This operation does the following:
  • check valid groups in LDAP directory
  • check groups in DAViCal
then
  • if a group is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in DAViCal
This operation does the following:
  • check valid users in LDAP directory
  • check users in DAViCal
then
  • if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • if a user is present in LDAP but not in DAViCal create the user in DAViCal
  • if a user in present in LDAP and DAViCal then update information in DAViCal
This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.This process will import each file in a directory named "username.ics" and create a user and calendar for each file to import.This server only supports the text/calendar format for freebusy URLsTicket IDTimeTo CollectionTo IDToggle all privilegesToolsTransparentURLUS FormatUnauthenticated UserUnited States of America (m/d/y)UpdateUpdatedUpdating Collection record.Updating Member of this Group PrincipalUpdating Principal record.Updating grants by this PrincipalUpgrade DAViCal database schemaUpgrade DatabaseUser Calendar PrincipalsUser DetailsUser FunctionsUser NameUser RolesUser is activeUser record written.UsernameView My DetailsView my own principal recordView this user recordVisit the DAViCal WikiWant: %s, Currently: %sWarning: there are no active admin users! You should fix this before logging out. Consider using the $c->do_not_sync_from_ldap configuration setting.When the user's e-mail account was validated.WriteWrite ACLs for a resource or collectionWrite Access ControlsWrite DataWrite MetadataWrite contentWrite propertiesYesYou are editingYou are not authorised to use this function.You are viewingYou do not have permission to modify this record.You may not PUT to a collection URLYou must log in to use this system.Your configuration produced PHP errors which should be correctedcalendar-timezone property is only valid for a calendar.directory %s is not readabledrivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.phpdrivers_ldap : Could not start TLS: ldap_start_tls() faileddrivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$sdrivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supporteddrivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachabledrivers_ldap : Unable to connect to LDAP with port %s on host %sdrivers_ldap : function ldap_connect not defined, check your php_ldap moduledrivers_pwauth_pam : Unable to find %s filedrivers_squid_pam : Unable to find %s fileforget me notfrom principalpath to store your icsunauthenticatedyou should log on with the username and password that have been issued to you.Project-Id-Version: DAViCal Report-Msgid-Bugs-To: POT-Creation-Date: 2012-07-09 00:53+1200 PO-Revision-Date: 2012-05-28 09:26+0000 Last-Translator: Andrew McMillan Language-Team: German (http://www.transifex.net/projects/p/davical/language/de/) Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) %F %T%T*** Standard-Locale ****** unbekannt ***- füge %s der Gruppe %s hinzu- füge Benutzer %s der Gruppe %s hinzu- erstelle Gruppen: %s- erstelle Eintrag für Benutzer: %s- deaktiviere Gruppen: %s- deaktiviere Benutzer: %s- nichts verändert an: %s- entferne %s aus der Gruppe %s- aktualisiere Gruppen: %s- aktualisiere Benutzereinträge: %sWARNUNG: Vor dem Einfügen der ICS-Kalenderdatei werden alle Termine in diesem Pfad gelöscht

Hilfe

Besuchen Sie die DAViCal-Homepage oder schauen Sie in das DAViCal-Wiki um Hilfe zu erhalten.

Falls Sie dort nicht die gesuchten Informationen finden, können Sie uns über IRC im Channel #davical auf irc.oftc.net besuchen oder Ihre Frage an die DAViCal-Users-Mailingliste schicken.

Das Archiv der Mailingliste könnte ebenfalls interessant sein.

Bitte anmelden

Um auf %s zuzugreifen, müssen Sie sich mit demBenutzernamen und dem Passwort anmelden, die ihnen zugeteilt wurden.

Um einen Zugang zu beantragen, schreiben Sie eine E-Mail an %s.

Eine DAViCal-Prinzipalen-Sammlung darf nur andere Sammlungen enthaltenAn diesem Ort ist bereits eine Sammlung vorhanden.Die Ressource existiert bereits am Ziel.Version der AWL-BibliothekZugriffsanfragenZugriffsanfrage gelöschtAktionAktivFüge neues Mitglied zu diesem Gruppenprinzipalen hinzuAdminAdministrationAdministratorAlleSämtliche Daten der Sammlung werden unwiderruflich gelöscht.All Ereignisse des Benutzers "%s" wurden gelöscht und durch die aus der Datei %s ersetztAlle Kalender und Termine des Prinzipals werden unwiderruflich gelöscht.Alle RechteAlle gewünschten Änderungen wurden durchgeführt.Erlaube Frei-/Beschäftigt-Anfragen an den Besitzer dieser Termineingangsbox Ein "Administrator" besitzt alle Rechte im DAViCal-SystemNicht angemeldete Benutzer dürfen keine Kalender verändernNicht angemeldete Benutzer können nur auf öffentliche Kalender zugreifenAnwendungsdatenbankbenutzerÄnderungen anwendenDatenbankkorrekturen anwendenAnhangZuordnung gelöschtZuordnungen zu anderen SammlungenZuordnungen zu dieser SammlungZuordnungen zur Sammlung dieses PrinzipalenDer Hauptteil enthält kein XML!Zugeordnet alsZeige alle BenutzerbeschäftigtKalender "%s" wurde hochgeladen.KalenderprinzipalenZeitzone des KalendersEs können nur Tickets für Ihre eigenen Sammlungen erstellt werdenKategorienPasswort ändernKlicken, um Benutzerdetails anzuzeigenKlicken, um Details des Prinzipalen zu bearbeitenSammlungBerechtigungen für SammlungSammlungs-IDSammlung gelöschtSammlungen können nicht gleichzeitig CalDAV-Kalender und -Adressbuch seinKonfiguration von Kalender-Clients für DAViCalDAViCal-KonfigurationBestätigenLöschen der Zuordnung bestätigenLöschen der Sammlung bestätigenLöschen des Prinzipalen bestätigenLöschen des Tickets bestätigenPasswort bestätigenNeues Passwort bestätigenAufruf fehlgeschlagenErstellenSammlung erstellenTermine/Sammlungen erstellenNeue Sammlung erstellenNeuen Prinzipalen erstellenPrinzipalen anlegenEinen neuen Prinzipalen (z.B. neuen Benutzer, Ressource oder Gruppe) erstellenNeue Ressource oder Sammlung erstellenErstelle neue Sammlung.Erstelle neuen Prinizipalen.Generiere ein neues Ticket, um diesem Prinzipalen Berechtigungen zu verleihenaktuelle DAViCal-VersionDAV-PfadDAV::resourcetype darf nur auf einen neuen Wert gesetzt, nicht aber gelöscht werden.DAViCal-CalDAV-ServerVersion des DAViCal-DatenbankschemasDAViCal-StartseiteDAViCal-WikiDAViCal erlaubt momentan nur BIND-Anfragen für Sammlungen.DKIM-Signatur fehltDKIM-Signaturvalidierung fehlgeschlagen (DNS ERROR)DKIM-Signaturvalidierung fehlgeschlagen (KEY Parse ERROR)DKIM-Signaturvalidierung fehlgeschlagen (KEY Validation ERROR)DKIM-Signaturvalidierung fehlgeschlagen (Signature verification ERROR)DatenbankfehlerDatenbankserverDatenbanknameDatenbankbesitzerDatenbankpasswortDatenbankportDatenbankbenutzernameDatenbankfehlerDatumsformatDatumsformatStandardrechteStandardbeziehungen hinzugefügt.LöschenTermine/Sammlungen löschenPrinzipalen löschenRessource oder Sammlung löschenEine Berechtigung von diesem Principalen wurde gelöschtLösche Zuordnung:Lösche Sammlung:Lösche Prinzipalen:Lösche Ticket:Auslieferung von Termineinladungen von einem Organisator an diese TermineingangsboxAuslieferung von Terminantworten von einem Teilnehmer an diese TermineingangsboxAbhängigkeitenAbhängigkeitBeschreibungZielsammlung existiert nichtVerzeichnis auf dem ServerAnzeigenameAnzeigenameHat der Benutzer die Berechtigung für diese Rolle?E-MailE-Mail OKFEHLER: Der vollständige Name darf nicht leer sein.FEHLER: Die Passwörter stimmen nicht überein.FEHLER: Datenbankfehler beim Speichern der Rolleninformation!BearbeitenBenutzereintrag bearbeitenE-Mail-AdresseGeben Sie Ihren Benutzernamen ein (falls bekannt) und klicken Sie hier, um ein temporäres Passwort per E-Mail zu erhalten.Geben Sie Benutzernamen und Passwort ein und klicken Sie hier, um sich anzumelden.Fehler NoGroupFound mit Filter >%s<, Attribute >%s< , dn >%s<Der Fehler NoUserFound ist mit dem Filter >%s<, den Attributen >%s< und dn >%s< aufgetretenFehler bei der DatenbankabfrageFehler beim Schreiben der Kalenderdetails in die DatenbankFehler beim Schreiben der Kalendereigenschaften in die Datenbank.EuropäischEuropäisch (tt.mm.jjjj)Bestehende Ressource passt nicht zum "If-Match"-Header - nicht akzeptiert.Bestehende Ressource passt nicht zum "If-None-Match"-Header - nicht akzeptiert.Läuft abExterne KalenderExterne URLFehlgeschlagenSpeichern der Sammlung fehlgeschlagenFeeds werden zurzeit nur für Kalender unterstützt.Für den Zugriff aufNicht erlaubtVerfügbarkeitVollständiger NameAnzeigenameGET-Anfragen an Sammlungen sind nur für Kalender unterstützt."GNU-gettext"-UnterstützungLOGINGehe zur Wunschliste für DAViCal-FeaturesZugriffberechtigungErteile neues, von diesem Prinzipalen ausgehendes RechtGruppeGruppenmitgliederGruppenmitgliedschaftGruppenprinzipalenHat MitgliederHilfeHilfe zur aktuellen SeiteIch habe mein Passwort vergessenStartseiteHomepageIDISO-FormatISO-Format (jjjj-mm-tt)IdWenn Sie Ihr Passwort vergessen haben, dann Um einen Zugang zu beantragen, schreiben Sie bitte eine E-Mail an: Alle ICS-Kalenderdateien eines Verzeichnisses importierenKalender importieren und LDAP synchronisiereninaktive PrinzipalenInhalt ist für ein Adressbuch nicht geeignet: Inhalt ist für einen Kalender nicht geeignet: Benutzername oder Passwort ungültig.Benutzername oder Passwort ungültig.Ist Mitglied vonIst ein KalenderIst ein AdressbuchIst dieser Benutzer aktiv?Einträge in dieser SammlungZusammengefügtSpracheZuletzt verwendetExterne Kalender anzeigenGruppen anzeigenRessourcen anzeigenBenutzer anzeigenDatei hochladenSpracheOrtBitte melden Sie sich anVon DAViCal abmeldenAbmeldenMitglied wurde von diesem Gruppenprinzipalen entferntDAViCal wird größtenteils funktionieren, aber PHP 5.2 oder neuer wird dringend empfohlen. NameNeue SammlungNeues PasswortNeuer PrinzipalNeinKeine Kalendereinträge vorhandenKeine Sammlung an dem Ort gefunden.Keine ZusammenfassungNr.Anzahl an SammlungenAnzahl an PrinzipalenAnzahl an RessourcenBestehende Zielressource wird nicht überschriebenNicht transparentSperre übersschreibenPDO-PostgreSQL-TreiberPHP-DateTime-KlassePHP-LDAP-Modul verfügbarPHP: magic_quotes_gpc deaktiviertPHP: magic_quotes_runtime deaktiviertPHP-PDO-Modul vorhandenPHP Kalendererweiterung verfügbarPHP-iconv-UnterstützungPHP benutzt nicht den Apache Filter-ModusPUT-Anfrage an eine Collection ist nur mit text/calendar-Inhalt an eine Kalender-Collection erlaubtErfolgreichPasswortPfadPersonBitte bestätigen Sie die Löschung des Tickets - siehe untenBitte bestätigen Sie die Löschung der Zuordnung - siehe untenBitte bestätigen Sie die Löschung der Sammlung - siehe untenBitte bestätigen Sie die Löschung des PrinzipalenNotieren Sie bitte die Zeit und benachrichtigen Sie den Systemadministrator.PrinzipalSammlungen des PrinzipalenBerechtigungen des PrinzipalenID des PrinzipalenTyp des PrinzipalenPrinzipal gelöschtBerechtigungenBerechtigungen für alle Benutzer gesetztRechte um die Zustellung von Scheduling-Nachrichten zu erlaubenRechte um Scheduling-Anfragen zu delegierenEigenschaft ist schreibgeschütztÖffentlichFür alle lesbarREPORT-Body enthält keine XML-Daten!REPORT-Body enthält keine gültigen XML-Daten!LesenACLs für eine Ressource oder Sammlung lesenZugriffsrechte lesenZugriff des aktuellen Benutzers lesenVerfügbarkeitsinformationen lesenDen Inhalt einer Ressource oder Sammlung lesenLesen der Details der Zugriffsberechtigungen des aktuellen BenutzersLesen der Verfügbarkeitsinformation eines KalendersLesen/SchreibenVerlinkungenEntfernenSperre entfernenFehler meldenEinen Systemfehler meldenFeature beantragenAnfrage-Body enthält keine gültigen XML-Daten!RessourceRessource Kalender PrinzipalenResource nicht gefundenRessource hat sich auf dem Server geändert - nicht gelöschtRessourcen können nicht in/aus Sammlungen umgewandelt werden.WiderrufenTerminzustellungTermin sendenTerminplantransparenzTerminverarbeitung: Antwort zustellenTerminverarbeitung: Einladung zustellenTerminverarbeitung: ZustellungTerminverarbeitung: Verfügbarkeit abfragenTerminverarbeitung: Antwort versendenTerminverarbeitung: Einladung versendenTerminverarbeitung: Verfügbarkeit versendenTerminverarbeitung: Senden...Verfügbarkeitsanfrage sendenEinladungen als Organisator vom Besitzer dieser Terminausgangsbox verschicken.Einladungsantworten als Teilnehmer vom Besitzer dieser Terminausgangsbox versenden.Verfügbarkeitsrechte setzenLeserechte setzenSchreib-/Leserechte setzenKonfigurationDAViCal konfigurierenZeige Hilfe zum ThemaSeitenstatistikenSeitenstatistik erfordert DatenbankanbindungEinige Eigenschaften konnten nicht geändert werden.Einige Eigenschaften konnten nicht gesetzt werden.Quellressource existiert nicht.Spezialsammlungen dürfen keine Kalender oder andere Spezialsammlungen enthalten.SonderrechteStatusStatus: %d, Nachricht: %s, Benutzer: %d, Pfad: %sAbschickenSuhosin: "server.strip" deaktiviertLDAP-Gruppen mit DAViCal synchronisierenSynchronisiere LDAP mit DAViCalZielDer Zielname enthält ungültige ZeichenDiese Ressource ist auf dem Server nicht vorhanden.Die BIND-Anfrage MUSS eine bestehende Ressource bezeichnen.Die URI der BIND-Anfrage MUSS eine Sammlung bezeichnen.Die BIND-Methode ist an dieser Stelle nicht erlaubt.Das Attribut "CalDAV:schedule-calendar-transp" darf nur bei Kalendern gesetzt werden.Die DAViCal-StartseiteDas Zugriffsticket wird gelöscht.addressbook-query darf nur bei einem Adressbuch ausgeführt werdenDie Anwendungen konnte die Anfrage nicht verarbeiten.Das Anwendungsprogramm versteht diese Anfrage nicht.Die Zuordnung wird gelöscht.Der Kalenderpfad enthält ungültige Zeichen.calendar-query darf nur bei einem Kalender oder einer Terminsammlung ausgeführt werdenDer Name für die Sammlung darf nicht leer sein.Die angeforderte Sammlung existiert nichtDer Anzeigenname darf nur für Sammlungen, Prinzipale oder Verknüpfungen gesetzt werden.Das Feld für die E-Mail-Adresse sollte auf keinen Fall leer bleiben.Die Datei "%s" ist nicht UTF-8-kodiert; weitere Details stehen in der Fehlermeldung.Die Datei ist nicht in UTF-8-kodiert, bitte Fehler überprüfen für mehr Details.Der vollständige Name dieser Person, Gruppe oder anderer Prinzipale.Der vollständige Name darf nicht leer sein.Name, mit dem sich dieser Benutzer beim System anmelden kann.Verzeichnis auf dem Server, in dem Ihre .ics-Dateien liegen.Die bevorzugte Sprache dieses Benutzers.Der Prinzipale "%s" existiert nicht.Das Datumsformat, das von diesem Benutzer verwendet wird.Die E-Mail-Adresse des Benutzers.Der vollständige Name des Benutzers.Passwort, mit dem der Benutzer sich anmeldet.Der Benutzername darf nicht leer sein und keinen Slash enthaltenEs ist ein Fehler beim Lesen von der Datenbank aufgetretenBeim Schreiben in die Datenbank ist ein Fehler aufgetreten.Diese Funktion erledigt die folgenden Aufgaben:
  • überprüfen der gültigen Gruppen im LDAP-Verzeichnis
  • überprüfen der Gruppen in DAViCal
danach
  • falls eine Gruppe in DAViCal vorhanden ist, nicht aber im LDAP, diese in DAViCal als inaktiv markieren
  • falls eine Gruppe im LDAP vorhanden ist, nicht aber in DAViCal, diese in DAViCal anlegen
  • falls eine Gruppe im LDAP und DAViCal vorhanden ist, die Informationen in DAViCal aktualisieren
Diese Funktion erledigt die folgenden Aufgaben:
  • überprüfen der gültigen Benutzer im LDAP-Verzeichnis
  • überprüfen der Benutzer in DAViCal
danach
  • falls ein Benutzer in DAViCal vorhanden ist, nicht aber im LDAP, diesen in DAViCal als inaktiv markieren
  • falls ein Benutzer im LDAP vorhanden ist, nicht aber in DAViCal, diesen in DAViCal anlegen
  • falls ein Benutzer im LDAP und DAViCal vorhanden ist, die Informationen in DAViCal aktualisieren
Diese Seite überprüft in erster Linie die Umgebung, die für DAViCal für korrektes Fuktionieren benötigt wird. Vorschläge oder Korrekturen, um diese Seite noch sinnvoller zu gestalten werden dankbar angenommen.Dieser Prozess wird jede Datei eines Verzeichnis in der Form "Benutzer.ics" importieren und die entsprechenden Benutzer anlegen.Der Server unterstützt nur das text/calendar-Format für FreeBusy-URLsTicket-IDZeitZur SammlungZur IDAlle Rechte umschaltenWerkzeugeTransparentURLUS-FormatNicht eingeloggter BenutzerVereinigte Staaten von Amerika (m/t/j)AktualisierenAktualisiertAktualisiere Sammlungseintrag.Aktualisiere Mitglied dieses GruppenprinzipalenPrinizipal aktualisiert!Berechtigungen dieses Prinzipalen aktualisiertDAViCal-Datenbankschema aktualisierenDatenbank aktualisierenPrinzipal des BenutzerkalendersBenutzerdetailsBenutzerfunktionenBenutzernameBenutzerrollenBenutzer aktiviertBenutzereintrag gespeichertBenutzernameMeine EinstellungenMeinen eigenen Prinzipaleintrag anzeigenDiesen Benutzereintrag anzeigenDAViCal-Wiki besuchenErwartet: %s, erhalten: %sWarnung: Es sind keine aktiven Admin-Benutzer. Sie sollten dies vor dem Abmelden beheben. Ziehen sie die Option $c->do_not_sync_from_ldap in Erwägung.Sobald das E-Mail-Konto des Benutzers bestätigt wurde.SchreibenSchreiben der ACLs für eine Ressource oder SammlungZugriffsrechte setzenDaten speichernMetadaten speichernSchreibe InhaltSchreibe EigenschaftenJaSie bearbeitenSieh haben keine Berechtigung, um diese Funktion auszuführen.Sie sehenSie haben keine Berechtigung, diesen Eintrag zu ändern.PUT-Anfrage auf eine Sammlungs-URL ist nicht erlaubtSie müssen angemeldet sein um dieses System zu nutzen.Ihre Konfiguration hat PHP-Fehler verursacht. Dies sollte korrigiert werden.Die Eigenschaft "calendar-timezone" ist nur für einen Kalender gültig.Verzeichnis %s kann nicht gelesen werdendrivers_imap_pam: imap_url-Parameter wurde nicht in /etc/davical/*-conf.php konfiguriertdrivers_ldap: TLS konnte nicht gestartet werden: ldap_start_tls() ist fehlgeschlagendrivers_ldap: Verbindung (bind) zu Host %1$s auf Port %2$s mit bindDN %3$s ist fehlgeschlagendrivers_ldap: LDAP Protokoll-Version 3 konnte nicht gesetzt werden, TLS wird nicht unterstütztdrivers_ldap: Verbindung (bind) zu LDAP fehlgeschlagen - bitte überprüfen, ob bindDN und passDN richtig konfiguriert sind, und ob der LDAP Server erreichbar istdrivers_ldap: LDAP-Verbindung zu Port %s auf Host %s fehlgeschlagendrivers_ldap: Funktion ldap_connect nicht definiert, bitte php_ldap Modul überprüfendrivers_pwauth_pam: Kann Datei %s nicht findendrivers_squid_pam: Kann Datei %s nicht findenangemeldet bleibenvon PrinzipalSpeicherort für .ics-DateiNicht angemeldetMelden Sie sich mit dem Ihnen zugeteilten Benutzernamen und Passwort an.davical-1.1.1/po/0000755000000000000000000000000011776303362010431 5ustar davical-1.1.1/po/ja.values0000644000000000000000000000005611633117640012237 0ustar VALUES( 'ja', 'Japanese', '日本語' ); davical-1.1.1/po/pofilelist.txt0000644000000000000000000000033711633117640013341 0ustar ../awl/inc/classBrowser.php ../awl/inc/classEditor.php ../awl/inc/DataEntry.php ../awl/inc/iCalendar.php ../awl/inc/PgQuery.php ../awl/inc/Session.php ../awl/inc/User.php ../awl/inc/vCalendar.php ../awl/inc/vComponent.php davical-1.1.1/po/it.po0000644000000000000000000006462211767336605011425 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "" msgid "*** Default Locale ***" msgstr "" msgid "*** Unknown ***" msgstr "" #, php-format msgid "- adding %s to group : %s" msgstr "" #, php-format msgid "- adding users %s to group : %s" msgstr "" #, php-format msgid "- creating groups : %s" msgstr "" #, php-format msgid "- creating record for users : %s" msgstr "" #, php-format msgid "- deactivate groups : %s" msgstr "" #, php-format msgid "- deactivating users : %s" msgstr "" #, php-format msgid "- nothing done on : %s" msgstr "" #, php-format msgid "- removing %s from group : %s" msgstr "" #, php-format msgid "- updating groups : %s" msgstr "" #, php-format msgid "- updating user records : %s" msgstr "" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "ATTENZIONE: tutti gli eventi in questo path saranno cancellati dall'inserimento del file ics" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Log On

Per accedere a %s devi autenticarti con le credenziali username e password che ti sono state assegnate.

Se desideri ottenere un accesso, invia una richiesta e-mail a %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "" msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "" msgid "AWL Library version " msgstr "" msgid "Access Tickets" msgstr "" msgid "Access ticket deleted" msgstr "" msgid "Action" msgstr "Azione" msgid "Active" msgstr "" msgid "Adding new member to this Group Principal" msgstr "" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Amministratore" msgid "Administration" msgstr "" msgid "Administrator" msgstr "" msgid "All" msgstr "Tutti" msgid "All collection data will be unrecoverably deleted." msgstr "" #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "" msgid "All privileges" msgstr "" msgid "All requested changes were made." msgstr "Tutte le modifiche richieste sono state apportate." msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "" msgid "Anonymous users are not allowed to modify calendars" msgstr "Gli utenti anonimi non sono autorizzati a modificare i calendari" msgid "Anonymous users may only access public calendars" msgstr "" msgid "Append" msgstr "" msgid "Application DB User" msgstr "" msgid "Apply Changes" msgstr "" msgid "Apply DB Patches" msgstr "" msgid "Attachment" msgstr "" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "" msgid "Bindings to other collections" msgstr "" msgid "Bindings to this Collection" msgstr "" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "Vedi tutti gli utenti" msgid "Busy" msgstr "Occupato" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "" msgid "Calendar Principals" msgstr "" msgid "Calendar Timezone" msgstr "" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "" msgid "Change Password" msgstr "" msgid "Click to display user details" msgstr "Fare clic per visualizzare i dettagli dell'utente" msgid "Click to edit principal details" msgstr "" msgid "Collection" msgstr "" msgid "Collection Grants" msgstr "" msgid "Collection ID" msgstr "" msgid "Collection deleted" msgstr "Archivio cancellato" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "" msgid "Configuring Calendar Clients for DAViCal" msgstr "" msgid "Configuring DAViCal" msgstr "" msgid "Confirm" msgstr "Conferma" msgid "Confirm Deletion of the Binding" msgstr "" msgid "Confirm Deletion of the Collection" msgstr "Conferma cancellazione archivio" msgid "Confirm Deletion of the Principal" msgstr "" msgid "Confirm Deletion of the Ticket" msgstr "" msgid "Confirm Password" msgstr "" msgid "Confirm the new password." msgstr "Conferma la nuova password." msgid "Could not retrieve" msgstr "" msgid "Create" msgstr "Crea" msgid "Create Collection" msgstr "" msgid "Create Events/Collections" msgstr "" msgid "Create New Collection" msgstr "" msgid "Create New Principal" msgstr "" msgid "Create Principal" msgstr "" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "" msgid "Create a resource or collection" msgstr "" msgid "Creating new Collection." msgstr "" msgid "Creating new Principal record." msgstr "" msgid "Creating new ticket granting privileges to this Principal" msgstr "" msgid "Current DAViCal version " msgstr "" msgid "DAV Path" msgstr "" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "" msgid "DAViCal CalDAV Server" msgstr "DAViCal CalDAV Server" msgid "DAViCal DB Schema version " msgstr "" msgid "DAViCal Homepage" msgstr "" msgid "DAViCal Wiki" msgstr "" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "" msgid "Database Error" msgstr "Errore database" msgid "Database Host" msgstr "" msgid "Database Name" msgstr "" msgid "Database Owner" msgstr "" msgid "Database Password" msgstr "" msgid "Database Port" msgstr "" msgid "Database Username" msgstr "" msgid "Database error" msgstr "Errore database" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "" msgid "Date Style" msgstr "Formato data" msgid "Default Privileges" msgstr "" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "Elimina" msgid "Delete Events/Collections" msgstr "" msgid "Delete Principal" msgstr "" msgid "Delete a resource or collection" msgstr "" msgid "Deleted a grant from this Principal" msgstr "" msgid "Deleting Binding:" msgstr "" msgid "Deleting Collection:" msgstr "" msgid "Deleting Principal:" msgstr "" msgid "Deleting Ticket:" msgstr "" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "" msgid "Dependencies" msgstr "" msgid "Dependency" msgstr "" msgid "Description" msgstr "" msgid "Destination collection does not exist" msgstr "" msgid "Directory on the server" msgstr "Directory sul server" msgid "Display Name" msgstr "" msgid "Displayname" msgstr "" msgid "Does the user have the right to perform this role?" msgstr "L'utente ha i privilegi per ricoprire questo ruolo?" msgid "Domain" msgstr "" msgid "EMail" msgstr "E-mail:" msgid "EMail OK" msgstr "E-mail OK" msgid "ERROR: The full name may not be blank." msgstr "" msgid "ERROR: The new password must match the confirmed password." msgstr "" msgid "ERROR: There was a database error writing the roles information!" msgstr "" msgid "Edit" msgstr "" msgid "Edit this user record" msgstr "Modifica questo record utente" msgid "Email Address" msgstr "" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "" msgid "Enter your username and password then click here to log in." msgstr "Inserire nome utente e password quindi clicca su log in per accedere" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" msgid "Error querying database." msgstr "Errore durante l'interrogazione al database." msgid "Error writing calendar details to database." msgstr "Errore durante la scrittura dettagli calendario nel database." msgid "Error writing calendar properties to database." msgstr "" msgid "European" msgstr "" msgid "European (d/m/y)" msgstr "Europeo (d/m/y)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "" msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "" msgid "Expires" msgstr "" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "" msgid "Forbidden" msgstr "Negato" msgid "Free/Busy" msgstr "" msgid "Full Name" msgstr "Nome visualizzato" msgid "Fullname" msgstr "" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "VAI!" msgid "Go to the DAViCal Feature Requests" msgstr "" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "" #. Translators: in the sense of a group of people msgid "Group" msgstr "" msgid "Group Members" msgstr "" msgid "Group Memberships" msgstr "" msgid "Group Principals" msgstr "" msgid "Has Members" msgstr "" msgid "Help" msgstr "Aiuto" msgid "Help on the current screen" msgstr "" msgid "Help! I've forgotten my password!" msgstr "Aiuto! Ho dimenticato la password!" msgid "Home" msgstr "Home" msgid "Home " msgstr "" msgid "Home Page" msgstr "" msgid "ID" msgstr "" msgid "ISO Format" msgstr "" msgid "ISO Format (YYYY-MM-DD)" msgstr "Formato ISO (YYYY-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "Se hai dimenticato la password" msgid "If you would like to request access, please e-mail" msgstr "Se si desidera richiedere un accesso, inviare un'e-mail" msgid "Import all .ics files of a directory" msgstr "Importa tutti i file .ics di una directory" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "Nome utente o password non valida." msgid "Invalid username or password." msgstr "Nome utente o password non valida." msgid "Is Member of" msgstr "" msgid "Is a Calendar" msgstr "" msgid "Is an Addressbook" msgstr "" msgid "Is this user active?" msgstr "Questo utente è attivo?" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "Aggiunto" msgid "Language" msgstr "Lingua" msgid "Last used" msgstr "Ultimo accesso" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "" msgid "List Resources" msgstr "" msgid "List Users" msgstr "" msgid "Load From File" msgstr "" msgid "Locale" msgstr "" msgid "Location" msgstr "" msgid "Log On Please" msgstr "Autenticazione richiesta" msgid "Log out of DAViCal" msgstr "" msgid "Logout" msgstr "Esci" msgid "Member deleted from this Group Principal" msgstr "" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "Nome" msgid "New Collection" msgstr "" msgid "New Password" msgstr "Nuova password" msgid "New Principal" msgstr "" #. Translators: not 'Yes' msgid "No" msgstr "" msgid "No calendar content" msgstr "" msgid "No collection found at that location." msgstr "" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "" #. Translators: short for 'Number' msgid "No." msgstr "No." msgid "No. of Collections" msgstr "" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "" msgid "Not overwriting existing destination resource" msgstr "" msgid "Opaque" msgstr "" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "" msgid "Password" msgstr "Password" msgid "Path" msgstr "" msgid "Person" msgstr "" msgid "Please confirm deletion of access ticket - see below" msgstr "" msgid "Please confirm deletion of binding - see below" msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" msgid "Please confirm deletion of the principal" msgstr "" msgid "Please note the time and advise the administrator of your system." msgstr "" msgid "Principal" msgstr "" msgid "Principal Collections" msgstr "" msgid "Principal Grants" msgstr "" msgid "Principal ID" msgstr "" msgid "Principal Type" msgstr "" msgid "Principal deleted" msgstr "" msgid "Privileges" msgstr "" msgid "Privileges granted to All Users" msgstr "" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "" #. Translators: in the sense of being available to all users msgid "Public" msgstr "" msgid "Publicly Readable" msgstr "" msgid "REPORT body contains no XML data!" msgstr "" msgid "REPORT body is not valid XML data!" msgstr "" msgid "Read" msgstr "Lettura" msgid "Read ACLs for a resource or collection" msgstr "" msgid "Read Access Controls" msgstr "" msgid "Read Current User's Access" msgstr "" msgid "Read Free/Busy Information" msgstr "" msgid "Read the content of a resource or collection" msgstr "" msgid "" "Read the details of the current user's access control to this resource." msgstr "" msgid "Read the free/busy information for a calendar collection" msgstr "" msgid "Read/Write" msgstr "" msgid "References" msgstr "" msgid "Remove" msgstr "" msgid "Remove a lock" msgstr "" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "Segnala Bug" msgid "Report a bug in the system" msgstr "" msgid "Request Feature" msgstr "" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "" msgid "Resource Calendar Principals" msgstr "" msgid "Resource Not Found." msgstr "" msgid "Resource has changed on server - not deleted" msgstr "" msgid "Resources may not be changed to / from collections." msgstr "" msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "" msgid "Schedule Send" msgstr "" msgid "Schedule Transparency" msgstr "" msgid "Scheduling: Deliver a Reply" msgstr "" msgid "Scheduling: Deliver an Invitation" msgstr "" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "" msgid "Scheduling: Send a Reply" msgstr "" msgid "Scheduling: Send an Invitation" msgstr "" msgid "Scheduling: Send free/busy" msgstr "" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "" msgid "Set free/busy privileges" msgstr "" msgid "Set read privileges" msgstr "" msgid "Set read+write privileges" msgstr "" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "" msgid "Setup DAViCal" msgstr "" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "" msgid "Site Statistics" msgstr "" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "" msgid "Some properties were not able to be set." msgstr "" msgid "Source resource does not exist." msgstr "" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "" msgid "Specific Privileges" msgstr "" msgid "Status" msgstr "" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "" msgid "Submit" msgstr "Invia" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "" msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "" msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "" msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "" msgid "The destination collection does not exist" msgstr "" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "" msgid "The name this user can log into the system with." msgstr "" msgid "The path on the server where your .ics files are." msgstr "" msgid "The preferred language for this person." msgstr "" #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "" msgid "The user's e-mail address." msgstr "" msgid "The user's full name." msgstr "" msgid "The user's password for logging in." msgstr "" msgid "The username must not be blank, and may not contain a slash" msgstr "" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "" msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "" msgid "Time" msgstr "" msgid "To Collection" msgstr "" msgid "To ID" msgstr "" msgid "Toggle all privileges" msgstr "" msgid "Tools" msgstr "" msgid "Transparent" msgstr "" msgid "URL" msgstr "" msgid "US Format" msgstr "" msgid "Unauthenticated User" msgstr "" msgid "United States of America (m/d/y)" msgstr "" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Aggiorna" msgid "Updated" msgstr "Ultima modifica" msgid "Updating Collection record." msgstr "" msgid "Updating Member of this Group Principal" msgstr "" msgid "Updating Principal record." msgstr "" msgid "Updating grants by this Principal" msgstr "" msgid "Upgrade DAViCal database schema" msgstr "" msgid "Upgrade Database" msgstr "" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "" msgid "User Details" msgstr "Dettaglio utente" msgid "User Functions" msgstr "" msgid "User Name" msgstr "Nome utente" msgid "User Roles" msgstr "Ruoli utente" msgid "User is active" msgstr "L'utente è attivo" msgid "User record written." msgstr "" msgid "Username" msgstr "" msgid "View My Details" msgstr "" msgid "View my own principal record" msgstr "" msgid "View this user record" msgstr "" msgid "Visit the DAViCal Wiki" msgstr "" #, php-format msgid "Want: %s, Currently: %s" msgstr "" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "" msgid "Write" msgstr "Scrittura" msgid "Write ACLs for a resource or collection" msgstr "" msgid "Write Access Controls" msgstr "" msgid "Write Data" msgstr "" msgid "Write Metadata" msgstr "" msgid "Write content" msgstr "" msgid "Write properties" msgstr "" msgid "Yes" msgstr "" msgid "You are editing" msgstr "" msgid "You are not authorised to use this function." msgstr "" msgid "You are viewing" msgstr "" msgid "You do not have permission to modify this record." msgstr "" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "È necessario autenticarsi per utilizzare questo sistema." msgid "Your configuration produced PHP errors which should be corrected" msgstr "" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "Mantieni aperta la connessione" msgid "from principal" msgstr "" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "percorso dove memorizzare il file ics" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "" davical-1.1.1/po/es_AR.values0000644000000000000000000000010411633117640012630 0ustar VALUES( 'es_AR', 'Spanish (Argentina)', 'Español (Argentina)' ); davical-1.1.1/po/et.values0000644000000000000000000000005211633117640012251 0ustar VALUES( 'et', 'Estonian', 'Eesti' ); davical-1.1.1/po/es_VE.po0000644000000000000000000006427011767336605012011 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # e1th0r , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Spanish (Venezuela) (http://www.transifex.net/projects/p/davical/language/es_VE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_VE\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "" msgid "*** Default Locale ***" msgstr "** Locales por defecto **" msgid "*** Unknown ***" msgstr "** Desconocido **" #, php-format msgid "- adding %s to group : %s" msgstr "Agregando %s al grupo: %s" #, php-format msgid "- adding users %s to group : %s" msgstr "- agregando usuarios %s al grupo: %s" #, php-format msgid "- creating groups : %s" msgstr "- creando grupos: %s" #, php-format msgid "- creating record for users : %s" msgstr "- creando registros para usuarios: %s" #, php-format msgid "- deactivate groups : %s" msgstr "- desactivar grupos: %s" #, php-format msgid "- deactivating users : %s" msgstr "- desactivando usuarios: %s" #, php-format msgid "- nothing done on : %s" msgstr "- Nada que hacer en: %s" #, php-format msgid "- removing %s from group : %s" msgstr "- removiendo %s del grupo: %s" #, php-format msgid "- updating groups : %s" msgstr "- actualizando grupos: %s" #, php-format msgid "- updating user records : %s" msgstr "- actualizando registros de usuario: %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "" msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "" msgid "AWL Library version " msgstr "Versión de la librería AWL" msgid "Access Tickets" msgstr "Ticket de acceso" msgid "Access ticket deleted" msgstr "Ticket de acceso borrado" msgid "Action" msgstr "Acción" msgid "Active" msgstr "Activo" msgid "Adding new member to this Group Principal" msgstr "Agregando un nuevo miembro al grupo principal" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Administrador del Sistema" msgid "Administration" msgstr "Administración" msgid "Administrator" msgstr "Administrador" msgid "All" msgstr "Todo" msgid "All collection data will be unrecoverably deleted." msgstr "" #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "" msgid "All privileges" msgstr "Todos los privilegios" msgid "All requested changes were made." msgstr "" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "" msgid "Anonymous users are not allowed to modify calendars" msgstr "" msgid "Anonymous users may only access public calendars" msgstr "" msgid "Append" msgstr "" msgid "Application DB User" msgstr "" msgid "Apply Changes" msgstr "Aplicar cambios" msgid "Apply DB Patches" msgstr "Aplicar parche a la BD" msgid "Attachment" msgstr "Adjunto" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "" msgid "Bindings to other collections" msgstr "" msgid "Bindings to this Collection" msgstr "" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "Examinar todos los usuarios" msgid "Busy" msgstr "Ocupado" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "Calendario \"%s\" fue cargado desde un archivo." msgid "Calendar Principals" msgstr "Calendario principal" msgid "Calendar Timezone" msgstr "" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "Categorías" msgid "Change Password" msgstr "Cambiar password" msgid "Click to display user details" msgstr "" msgid "Click to edit principal details" msgstr "" msgid "Collection" msgstr "Colección" msgid "Collection Grants" msgstr "" msgid "Collection ID" msgstr "" msgid "Collection deleted" msgstr "" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "" msgid "Configuring Calendar Clients for DAViCal" msgstr "" msgid "Configuring DAViCal" msgstr "" msgid "Confirm" msgstr "Confirmar" msgid "Confirm Deletion of the Binding" msgstr "" msgid "Confirm Deletion of the Collection" msgstr "" msgid "Confirm Deletion of the Principal" msgstr "" msgid "Confirm Deletion of the Ticket" msgstr "" msgid "Confirm Password" msgstr "Confirmar contraseña" msgid "Confirm the new password." msgstr "Confirmar nueva contraseña" msgid "Could not retrieve" msgstr "No se peude obtener" msgid "Create" msgstr "Crear" msgid "Create Collection" msgstr "Craer colección" msgid "Create Events/Collections" msgstr "Crear Evento/Colección" msgid "Create New Collection" msgstr "Crear nueva colección" msgid "Create New Principal" msgstr "" msgid "Create Principal" msgstr "" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "" msgid "Create a resource or collection" msgstr "" msgid "Creating new Collection." msgstr "" msgid "Creating new Principal record." msgstr "" msgid "Creating new ticket granting privileges to this Principal" msgstr "" msgid "Current DAViCal version " msgstr "" msgid "DAV Path" msgstr "Ruta DAV" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "" msgid "DAViCal CalDAV Server" msgstr "" msgid "DAViCal DB Schema version " msgstr "" msgid "DAViCal Homepage" msgstr "" msgid "DAViCal Wiki" msgstr "" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "" msgid "Database Error" msgstr "" msgid "Database Host" msgstr "" msgid "Database Name" msgstr "" msgid "Database Owner" msgstr "" msgid "Database Password" msgstr "" msgid "Database Port" msgstr "" msgid "Database Username" msgstr "" msgid "Database error" msgstr "" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "" msgid "Date Style" msgstr "" msgid "Default Privileges" msgstr "" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "" msgid "Delete Events/Collections" msgstr "" msgid "Delete Principal" msgstr "" msgid "Delete a resource or collection" msgstr "" msgid "Deleted a grant from this Principal" msgstr "" msgid "Deleting Binding:" msgstr "" msgid "Deleting Collection:" msgstr "" msgid "Deleting Principal:" msgstr "" msgid "Deleting Ticket:" msgstr "" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "" msgid "Dependencies" msgstr "" msgid "Dependency" msgstr "" msgid "Description" msgstr "" msgid "Destination collection does not exist" msgstr "" msgid "Directory on the server" msgstr "" msgid "Display Name" msgstr "" msgid "Displayname" msgstr "" msgid "Does the user have the right to perform this role?" msgstr "" msgid "Domain" msgstr "" msgid "EMail" msgstr "" msgid "EMail OK" msgstr "" msgid "ERROR: The full name may not be blank." msgstr "" msgid "ERROR: The new password must match the confirmed password." msgstr "" msgid "ERROR: There was a database error writing the roles information!" msgstr "" msgid "Edit" msgstr "" msgid "Edit this user record" msgstr "" msgid "Email Address" msgstr "" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "" msgid "Enter your username and password then click here to log in." msgstr "" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" msgid "Error querying database." msgstr "" msgid "Error writing calendar details to database." msgstr "" msgid "Error writing calendar properties to database." msgstr "" msgid "European" msgstr "" msgid "European (d/m/y)" msgstr "" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "" msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "" msgid "Expires" msgstr "" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "" msgid "Forbidden" msgstr "" msgid "Free/Busy" msgstr "" msgid "Full Name" msgstr "" msgid "Fullname" msgstr "" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "" msgid "Go to the DAViCal Feature Requests" msgstr "" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "" #. Translators: in the sense of a group of people msgid "Group" msgstr "" msgid "Group Members" msgstr "" msgid "Group Memberships" msgstr "" msgid "Group Principals" msgstr "" msgid "Has Members" msgstr "" msgid "Help" msgstr "" msgid "Help on the current screen" msgstr "" msgid "Help! I've forgotten my password!" msgstr "" msgid "Home" msgstr "" msgid "Home " msgstr "" msgid "Home Page" msgstr "" msgid "ID" msgstr "" msgid "ISO Format" msgstr "" msgid "ISO Format (YYYY-MM-DD)" msgstr "" #. Translators: short for 'Identifier' msgid "Id" msgstr "" msgid "If you have forgotten your password then" msgstr "" msgid "If you would like to request access, please e-mail" msgstr "" msgid "Import all .ics files of a directory" msgstr "" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "" msgid "Invalid username or password." msgstr "" msgid "Is Member of" msgstr "" msgid "Is a Calendar" msgstr "" msgid "Is an Addressbook" msgstr "" msgid "Is this user active?" msgstr "" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "" msgid "Language" msgstr "Idiomas" msgid "Last used" msgstr "" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "" msgid "List Resources" msgstr "" msgid "List Users" msgstr "" msgid "Load From File" msgstr "" msgid "Locale" msgstr "" msgid "Location" msgstr "Ubicación" msgid "Log On Please" msgstr "" msgid "Log out of DAViCal" msgstr "Desconectarse de DAViCal" msgid "Logout" msgstr "Deconectar" msgid "Member deleted from this Group Principal" msgstr "" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "Nombre" msgid "New Collection" msgstr "Nueva colección" msgid "New Password" msgstr "Nuevo password" msgid "New Principal" msgstr "" #. Translators: not 'Yes' msgid "No" msgstr "" msgid "No calendar content" msgstr "No hay contenido en el calendario" msgid "No collection found at that location." msgstr "" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "Sin resumen" #. Translators: short for 'Number' msgid "No." msgstr "Núm." msgid "No. of Collections" msgstr "Núm. de colecciones" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "Nñum. de recursos" msgid "Not overwriting existing destination resource" msgstr "" msgid "Opaque" msgstr "" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "PHP iconv soportado" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "" msgid "Password" msgstr "Contraseña" msgid "Path" msgstr "Ruta" msgid "Person" msgstr "Persona" msgid "Please confirm deletion of access ticket - see below" msgstr "" msgid "Please confirm deletion of binding - see below" msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" msgid "Please confirm deletion of the principal" msgstr "" msgid "Please note the time and advise the administrator of your system." msgstr "" msgid "Principal" msgstr "" msgid "Principal Collections" msgstr "" msgid "Principal Grants" msgstr "" msgid "Principal ID" msgstr "" msgid "Principal Type" msgstr "" msgid "Principal deleted" msgstr "" msgid "Privileges" msgstr "" msgid "Privileges granted to All Users" msgstr "" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "" #. Translators: in the sense of being available to all users msgid "Public" msgstr "" msgid "Publicly Readable" msgstr "Públicamente legible" msgid "REPORT body contains no XML data!" msgstr "" msgid "REPORT body is not valid XML data!" msgstr "" msgid "Read" msgstr "Leer" msgid "Read ACLs for a resource or collection" msgstr "" msgid "Read Access Controls" msgstr "" msgid "Read Current User's Access" msgstr "" msgid "Read Free/Busy Information" msgstr "" msgid "Read the content of a resource or collection" msgstr "" msgid "" "Read the details of the current user's access control to this resource." msgstr "" msgid "Read the free/busy information for a calendar collection" msgstr "" msgid "Read/Write" msgstr "Leer/escribir" msgid "References" msgstr "" msgid "Remove" msgstr "Remover" msgid "Remove a lock" msgstr "" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "Reportar un error" msgid "Report a bug in the system" msgstr "" msgid "Request Feature" msgstr "" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "" msgid "Resource Calendar Principals" msgstr "" msgid "Resource Not Found." msgstr "" msgid "Resource has changed on server - not deleted" msgstr "" msgid "Resources may not be changed to / from collections." msgstr "" msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "" msgid "Schedule Send" msgstr "" msgid "Schedule Transparency" msgstr "" msgid "Scheduling: Deliver a Reply" msgstr "" msgid "Scheduling: Deliver an Invitation" msgstr "" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "" msgid "Scheduling: Send a Reply" msgstr "" msgid "Scheduling: Send an Invitation" msgstr "" msgid "Scheduling: Send free/busy" msgstr "" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "" msgid "Set free/busy privileges" msgstr "" msgid "Set read privileges" msgstr "" msgid "Set read+write privileges" msgstr "" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "" msgid "Setup DAViCal" msgstr "" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "" msgid "Site Statistics" msgstr "" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "" msgid "Some properties were not able to be set." msgstr "" msgid "Source resource does not exist." msgstr "" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "" msgid "Specific Privileges" msgstr "" msgid "Status" msgstr "" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "" msgid "Submit" msgstr "" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "" msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "" msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "" msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "" msgid "The destination collection does not exist" msgstr "" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "" msgid "The name this user can log into the system with." msgstr "" msgid "The path on the server where your .ics files are." msgstr "" msgid "The preferred language for this person." msgstr "" #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "" msgid "The user's e-mail address." msgstr "" msgid "The user's full name." msgstr "" msgid "The user's password for logging in." msgstr "" msgid "The username must not be blank, and may not contain a slash" msgstr "" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "" msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "" msgid "Time" msgstr "" msgid "To Collection" msgstr "" msgid "To ID" msgstr "" msgid "Toggle all privileges" msgstr "" msgid "Tools" msgstr "" msgid "Transparent" msgstr "" msgid "URL" msgstr "" msgid "US Format" msgstr "" msgid "Unauthenticated User" msgstr "" msgid "United States of America (m/d/y)" msgstr "" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "" msgid "Updated" msgstr "" msgid "Updating Collection record." msgstr "" msgid "Updating Member of this Group Principal" msgstr "" msgid "Updating Principal record." msgstr "" msgid "Updating grants by this Principal" msgstr "" msgid "Upgrade DAViCal database schema" msgstr "" msgid "Upgrade Database" msgstr "" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "" msgid "User Details" msgstr "" msgid "User Functions" msgstr "" msgid "User Name" msgstr "" msgid "User Roles" msgstr "" msgid "User is active" msgstr "" msgid "User record written." msgstr "" msgid "Username" msgstr "Nombre de usuario" msgid "View My Details" msgstr "" msgid "View my own principal record" msgstr "" msgid "View this user record" msgstr "" msgid "Visit the DAViCal Wiki" msgstr "" #, php-format msgid "Want: %s, Currently: %s" msgstr "" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "" msgid "Write" msgstr "Escritura" msgid "Write ACLs for a resource or collection" msgstr "" msgid "Write Access Controls" msgstr "" msgid "Write Data" msgstr "" msgid "Write Metadata" msgstr "" msgid "Write content" msgstr "" msgid "Write properties" msgstr "" msgid "Yes" msgstr "Sí" msgid "You are editing" msgstr "Estás editando" msgid "You are not authorised to use this function." msgstr "No estás autorizado para usar esta función" msgid "You are viewing" msgstr "Estás viendo..." msgid "You do not have permission to modify this record." msgstr "" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "" msgid "Your configuration produced PHP errors which should be corrected" msgstr "" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "El directorio %s no es legible" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "Mantender la sesión activa" msgid "from principal" msgstr "" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "ruta para almacenar tu ics" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "No autenticado" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "" davical-1.1.1/po/ru.po0000644000000000000000000010274011767336605011431 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. # Yaroslav Petrov , 2012. # Иван Азарёнок <>, 2012. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Russian (http://www.transifex.net/projects/p/davical/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "" msgid "*** Default Locale ***" msgstr "*** По умолчанию ***" msgid "*** Unknown ***" msgstr "*** Неизвестно ***" #, php-format msgid "- adding %s to group : %s" msgstr "- добавляю %s в группу : %s" #, php-format msgid "- adding users %s to group : %s" msgstr "- добавляю пользователя %s в группу : %s" #, php-format msgid "- creating groups : %s" msgstr "- создаю группу : %s" #, php-format msgid "- creating record for users : %s" msgstr "- создаю запись для пользователя : %s" #, php-format msgid "- deactivate groups : %s" msgstr "- отключаю группу : %s" #, php-format msgid "- deactivating users : %s" msgstr "- отключаю пользователя : %s" #, php-format msgid "- nothing done on : %s" msgstr "" #, php-format msgid "- removing %s from group : %s" msgstr "- удаляю %s из группы : %s" #, php-format msgid "- updating groups : %s" msgstr "- обновляю группу : %s" #, php-format msgid "- updating user records : %s" msgstr "- обновляю запись пользователя : %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "Внимание: все события по этому пути будут удалены перед загрузкой файла" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Авторизация

Для доступа к %s вы должны войти со своими логином и паролем

Для получения доступа пишите по адресу %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "Коллекция по данному адресу уже существует." msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "Ресурс уже существует." msgid "AWL Library version " msgstr "Версия AWL" msgid "Access Tickets" msgstr "Ключи доступа" msgid "Access ticket deleted" msgstr "Ключ удален" msgid "Action" msgstr "Действие" msgid "Active" msgstr "Включен" msgid "Adding new member to this Group Principal" msgstr "" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Администратор" msgid "Administration" msgstr "Администрирование" msgid "Administrator" msgstr "Администратор" msgid "All" msgstr "Всё" msgid "All collection data will be unrecoverably deleted." msgstr "Все данные будут удалены без возможности восстановления." #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "Все календари и события будут безвозвратно удалены." msgid "All privileges" msgstr "Все привилегии" msgid "All requested changes were made." msgstr "Изменения выполнены" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "" msgid "Anonymous users are not allowed to modify calendars" msgstr "Анонимным пользователям не разрешается править календари" msgid "Anonymous users may only access public calendars" msgstr "Анонимные пользователи имеют доступ только к общедоступным календарям" msgid "Append" msgstr "" msgid "Application DB User" msgstr "Пользователь БД" msgid "Apply Changes" msgstr "Применить изменения" msgid "Apply DB Patches" msgstr "Применить обновления БД" msgid "Attachment" msgstr "" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "Связь удалена" msgid "Bindings to other collections" msgstr "Связи с другими коллекциями" msgid "Bindings to this Collection" msgstr "Связи с этой коллекцией" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "Просмотреть всех пользователей" msgid "Busy" msgstr "Занят" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "Календарь \"%s\" загружен из файла." msgid "Calendar Principals" msgstr "" msgid "Calendar Timezone" msgstr "Часовой пояс" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "" msgid "Change Password" msgstr "Изменить пароль" msgid "Click to display user details" msgstr "Нажмите чтобы увидеть данные пользователя" msgid "Click to edit principal details" msgstr "Редактировать данные" msgid "Collection" msgstr "Коллекция" msgid "Collection Grants" msgstr "" msgid "Collection ID" msgstr "ID коллекции" msgid "Collection deleted" msgstr "Коллекция удалена" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "Коллекция не может быть календарем и адресной книгой одновременно" msgid "Configuring Calendar Clients for DAViCal" msgstr "" msgid "Configuring DAViCal" msgstr "Настройки DAViCal" msgid "Confirm" msgstr "Подтвердить" msgid "Confirm Deletion of the Binding" msgstr "Подтвердите удаление связи" msgid "Confirm Deletion of the Collection" msgstr "Подтвердите удаление коллекции" msgid "Confirm Deletion of the Principal" msgstr "Подтвердите удаление владельца" msgid "Confirm Deletion of the Ticket" msgstr "Подтвердите удаление ключа" msgid "Confirm Password" msgstr "Подтвердите пароль" msgid "Confirm the new password." msgstr "Подтвердите новый пароль" msgid "Could not retrieve" msgstr "" msgid "Create" msgstr "Создать" msgid "Create Collection" msgstr "Создать коллекцию" msgid "Create Events/Collections" msgstr "" msgid "Create New Collection" msgstr "Создать коллекцию" msgid "Create New Principal" msgstr "Создать владельца" msgid "Create Principal" msgstr "Создать владельца" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Создать нового владельца (пользователя, ресурс или группу)" msgid "Create a resource or collection" msgstr "Создать ресурс или коллекцию" msgid "Creating new Collection." msgstr "Создание новой коллекции." msgid "Creating new Principal record." msgstr "Создание нового владельца." msgid "Creating new ticket granting privileges to this Principal" msgstr "Создание ключа доступа для этого владельца" msgid "Current DAViCal version " msgstr "Версия DAViCal" msgid "DAV Path" msgstr "Путь DAV" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "DAV::resourcetype не может быть удален." msgid "DAViCal CalDAV Server" msgstr "DAViCal CalDAV Сервер" msgid "DAViCal DB Schema version " msgstr "Версия схемы базы данных DAViCal" msgid "DAViCal Homepage" msgstr "Страница проекта" msgid "DAViCal Wiki" msgstr "DAViCal Wiki" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "Отсутствует подпись DKIM" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "Ошибка проверки подписи DKIM (DNS ERROR)" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "Ошибка проверки подписи DKIM (KEY Parse ERROR)" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "Ошибка проверки подписи DKIM (KEY Validation ERROR)" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "Ошибка проверки подписи DKIM (SIgnature verification ERROR)" msgid "Database Error" msgstr "Ошибка базы данных" msgid "Database Host" msgstr "Хост БД" msgid "Database Name" msgstr "Имя БД" msgid "Database Owner" msgstr "Владелец БД" msgid "Database Password" msgstr "Пароль БД" msgid "Database Port" msgstr "Порт БД" msgid "Database Username" msgstr "Пользователь БД" msgid "Database error" msgstr "Ошибка базы данных" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Формат даты" msgid "Date Style" msgstr "" msgid "Default Privileges" msgstr "По умолчанию" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "Удалить" msgid "Delete Events/Collections" msgstr "Удалить события/коллекции" msgid "Delete Principal" msgstr "Удалить владельца" msgid "Delete a resource or collection" msgstr "Удалить ресурс или коллекцию" msgid "Deleted a grant from this Principal" msgstr "" msgid "Deleting Binding:" msgstr "Удаление связи:" msgid "Deleting Collection:" msgstr "Удаление коллекции:" msgid "Deleting Principal:" msgstr "Удаление владельца:" msgid "Deleting Ticket:" msgstr "Удаление ключа:" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "" msgid "Dependencies" msgstr "Зависимости" msgid "Dependency" msgstr "Зависимость" msgid "Description" msgstr "Комментарий" msgid "Destination collection does not exist" msgstr "Целевая коллекция не существует" msgid "Directory on the server" msgstr "Каталог на сервере" msgid "Display Name" msgstr "Отображаемое имя" msgid "Displayname" msgstr "Отображаемое имя" msgid "Does the user have the right to perform this role?" msgstr "" msgid "Domain" msgstr "Домен" msgid "EMail" msgstr "Электронная почта" msgid "EMail OK" msgstr "" msgid "ERROR: The full name may not be blank." msgstr "Ошибка: имя не может быть пустым." msgid "ERROR: The new password must match the confirmed password." msgstr "Ошибка: пароли не совпадают." msgid "ERROR: There was a database error writing the roles information!" msgstr "" msgid "Edit" msgstr "Редактировать" msgid "Edit this user record" msgstr "" msgid "Email Address" msgstr "Адрес Email" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Введите имя пользователя и нажмите здесь, чтобы получить временный пароль." msgid "Enter your username and password then click here to log in." msgstr "Введите имя пользователя и пароль для входа." #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" msgid "Error querying database." msgstr "Ошибка при запросе к базе" msgid "Error writing calendar details to database." msgstr "Ошибка при записи сведений календаря в базу" msgid "Error writing calendar properties to database." msgstr "Ошибка записи свойств календаря в базу" msgid "European" msgstr "Европа" msgid "European (d/m/y)" msgstr "Европа (d/m/y)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "" msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "" msgid "Expires" msgstr "Истекает" msgid "External Calendars" msgstr "Внешние календари" msgid "External Url" msgstr "Внешняя ссылка" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "Ошибка сохранения коллекции" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "Для доступа к" msgid "Forbidden" msgstr "Запрещено" msgid "Free/Busy" msgstr "Свободно/занято" msgid "Full Name" msgstr "Имя" msgid "Fullname" msgstr "Имя" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "" msgid "Go to the DAViCal Feature Requests" msgstr "" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "" #. Translators: in the sense of a group of people msgid "Group" msgstr "" msgid "Group Members" msgstr "" msgid "Group Memberships" msgstr "" msgid "Group Principals" msgstr "" msgid "Has Members" msgstr "" msgid "Help" msgstr "Помощь" msgid "Help on the current screen" msgstr "" msgid "Help! I've forgotten my password!" msgstr "Вспомнить пароль!" msgid "Home" msgstr "Домой" msgid "Home " msgstr "" msgid "Home Page" msgstr "Домой" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "ISO" msgid "ISO Format (YYYY-MM-DD)" msgstr "ISO (YYYY-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "Если вы не помните свой пароль" msgid "If you would like to request access, please e-mail" msgstr "Если вы хотите получить доступ, пожалуйста, пошлите электронное письмо" msgid "Import all .ics files of a directory" msgstr "" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "Неверное имя пользователя или пароль." msgid "Invalid username or password." msgstr "Неверное имя пользователя или пароль." msgid "Is Member of" msgstr "" msgid "Is a Calendar" msgstr "Календарь" msgid "Is an Addressbook" msgstr "Адресная книга" msgid "Is this user active?" msgstr "" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "" msgid "Language" msgstr "Язык" msgid "Last used" msgstr "" msgid "List External Calendars" msgstr "Список внешних календарей" msgid "List Groups" msgstr "Группы" msgid "List Resources" msgstr "Ресурсы" msgid "List Users" msgstr "Пользователи" msgid "Load From File" msgstr "Загрузить из файла" msgid "Locale" msgstr "Язык" msgid "Location" msgstr "" msgid "Log On Please" msgstr "Пожалуйста, войдите" msgid "Log out of DAViCal" msgstr "Выйти из системы" msgid "Logout" msgstr "Отключиться" msgid "Member deleted from this Group Principal" msgstr "" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "Имя" msgid "New Collection" msgstr "Новая коллекция" msgid "New Password" msgstr "Новый пароль" msgid "New Principal" msgstr "Новый владелец" #. Translators: not 'Yes' msgid "No" msgstr "Нет" msgid "No calendar content" msgstr "" msgid "No collection found at that location." msgstr "" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "" #. Translators: short for 'Number' msgid "No." msgstr "" msgid "No. of Collections" msgstr "" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "" msgid "Not overwriting existing destination resource" msgstr "" msgid "Opaque" msgstr "" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "Успшно" msgid "Password" msgstr "Пароль" msgid "Path" msgstr "Путь" msgid "Person" msgstr "" msgid "Please confirm deletion of access ticket - see below" msgstr "Подтвердите удаление ключа доступа - см. ниже" msgid "Please confirm deletion of binding - see below" msgstr "Подтвердите удаление связи - см. ниже" msgid "Please confirm deletion of collection - see below" msgstr "Подтвердите удаление коллекции - см. ниже" msgid "Please confirm deletion of the principal" msgstr "Подтвердите удаление владельца" msgid "Please note the time and advise the administrator of your system." msgstr "" msgid "Principal" msgstr "Владелец" msgid "Principal Collections" msgstr "" msgid "Principal Grants" msgstr "" msgid "Principal ID" msgstr "ID владельца" msgid "Principal Type" msgstr "Тип владельца" msgid "Principal deleted" msgstr "Владелец удален" msgid "Privileges" msgstr "Привилегии" msgid "Privileges granted to All Users" msgstr "Привилегии для всех пользователей" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Публичный" msgid "Publicly Readable" msgstr "" msgid "REPORT body contains no XML data!" msgstr "" msgid "REPORT body is not valid XML data!" msgstr "" msgid "Read" msgstr "Чтение" msgid "Read ACLs for a resource or collection" msgstr "" msgid "Read Access Controls" msgstr "" msgid "Read Current User's Access" msgstr "" msgid "Read Free/Busy Information" msgstr "" msgid "Read the content of a resource or collection" msgstr "" msgid "" "Read the details of the current user's access control to this resource." msgstr "" msgid "Read the free/busy information for a calendar collection" msgstr "" msgid "Read/Write" msgstr "Чтение/Запись" msgid "References" msgstr "" msgid "Remove" msgstr "Удалить" msgid "Remove a lock" msgstr "Снять блокировку" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "Сообщить об ошибке" msgid "Report a bug in the system" msgstr "Сообщить об ошибке в системе" msgid "Request Feature" msgstr "" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Ресурс" msgid "Resource Calendar Principals" msgstr "" msgid "Resource Not Found." msgstr "Ресурс не найден." msgid "Resource has changed on server - not deleted" msgstr "" msgid "Resources may not be changed to / from collections." msgstr "" msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "" msgid "Schedule Send" msgstr "" msgid "Schedule Transparency" msgstr "" msgid "Scheduling: Deliver a Reply" msgstr "" msgid "Scheduling: Deliver an Invitation" msgstr "" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "" msgid "Scheduling: Send a Reply" msgstr "" msgid "Scheduling: Send an Invitation" msgstr "" msgid "Scheduling: Send free/busy" msgstr "" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "" msgid "Set free/busy privileges" msgstr "" msgid "Set read privileges" msgstr "" msgid "Set read+write privileges" msgstr "" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "Параметры" msgid "Setup DAViCal" msgstr "Параметры DAViCal" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Показывать помощь в" msgid "Site Statistics" msgstr "Статистика" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "" msgid "Some properties were not able to be set." msgstr "" msgid "Source resource does not exist." msgstr "" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "" msgid "Specific Privileges" msgstr "" msgid "Status" msgstr "" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "" msgid "Submit" msgstr "" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "" msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "" msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "" msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "Имя коллекции не может быть пустым." msgid "The destination collection does not exist" msgstr "Целевая коллекция не существует" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "Адрес Email не может быть пустым." #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "Имя не может быть пустым" msgid "The name this user can log into the system with." msgstr "" msgid "The path on the server where your .ics files are." msgstr "" msgid "The preferred language for this person." msgstr "Предпочитаемый язык" #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "Формат даты" msgid "The user's e-mail address." msgstr "Email адрес" msgid "The user's full name." msgstr "Полное имя" msgid "The user's password for logging in." msgstr "Пароль для входа" msgid "The username must not be blank, and may not contain a slash" msgstr "Имя пользователя не может быть пустым и содержать слеш" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "Произошла ошибка при записи в базу данных." msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "ID ключа" msgid "Time" msgstr "Время" msgid "To Collection" msgstr "" msgid "To ID" msgstr "" msgid "Toggle all privileges" msgstr "" msgid "Tools" msgstr "Ресурс не найден." msgid "Transparent" msgstr "" msgid "URL" msgstr "URL" msgid "US Format" msgstr "США" msgid "Unauthenticated User" msgstr "Не авторизованный пользователь" msgid "United States of America (m/d/y)" msgstr "США (m/d/y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Обновить" msgid "Updated" msgstr "Обновлено" msgid "Updating Collection record." msgstr "Обновление коллекции" msgid "Updating Member of this Group Principal" msgstr "" msgid "Updating Principal record." msgstr "Обновление владельца" msgid "Updating grants by this Principal" msgstr "" msgid "Upgrade DAViCal database schema" msgstr "Обновление структуры БД" msgid "Upgrade Database" msgstr "" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "" msgid "User Details" msgstr "" msgid "User Functions" msgstr "Управление пользователями" msgid "User Name" msgstr "" msgid "User Roles" msgstr "" msgid "User is active" msgstr "" msgid "User record written." msgstr "Не авторизованный пользователь" msgid "Username" msgstr "Имя пользователя" msgid "View My Details" msgstr "Мои данные" msgid "View my own principal record" msgstr "Посмотреть мою учетную запись" msgid "View this user record" msgstr "" msgid "Visit the DAViCal Wiki" msgstr "Открыть DAViCal Wiki" #, php-format msgid "Want: %s, Currently: %s" msgstr "" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "" msgid "Write" msgstr "" msgid "Write ACLs for a resource or collection" msgstr "" msgid "Write Access Controls" msgstr "" msgid "Write Data" msgstr "Сохранить Данные" msgid "Write Metadata" msgstr "Сохранить Метаданные" msgid "Write content" msgstr "Сохранить содержание" msgid "Write properties" msgstr "Сохранить свойство" msgid "Yes" msgstr "Да" msgid "You are editing" msgstr "Вы редактируете" msgid "You are not authorised to use this function." msgstr "Вы не авторизованы для использоования этой функции." msgid "You are viewing" msgstr "Вы просматриваете" msgid "You do not have permission to modify this record." msgstr "У вас нет прав, чтобы изменить эту запись" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "Вы должны войти в систему, чтобы использовать ее." msgid "Your configuration produced PHP errors which should be corrected" msgstr "" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "запомнить меня" msgid "from principal" msgstr "" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "неправильный запрос" msgid "path to store your ics" msgstr "" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "не авторизован" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "вы должны войти под тем именем польззователя и паролем, который был вам выслан." davical-1.1.1/po/hu.po0000644000000000000000000006561011767336605011423 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "" msgid "*** Default Locale ***" msgstr "" msgid "*** Unknown ***" msgstr "" #, php-format msgid "- adding %s to group : %s" msgstr "" #, php-format msgid "- adding users %s to group : %s" msgstr "" #, php-format msgid "- creating groups : %s" msgstr "" #, php-format msgid "- creating record for users : %s" msgstr "" #, php-format msgid "- deactivate groups : %s" msgstr "" #, php-format msgid "- deactivating users : %s" msgstr "" #, php-format msgid "- nothing done on : %s" msgstr "" #, php-format msgid "- removing %s from group : %s" msgstr "" #, php-format msgid "- updating groups : %s" msgstr "" #, php-format msgid "- updating user records : %s" msgstr "" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Lépjen be

'%s' - hozzáféréshez lépjen befelhasználónevével és jelszavával

Ha hozzáférést szeretne kapni, írjon ide: %s

" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "Már létezik ilyen gyűjtemény" msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "" msgid "AWL Library version " msgstr "" msgid "Access Tickets" msgstr "" msgid "Access ticket deleted" msgstr "" msgid "Action" msgstr "Akció" msgid "Active" msgstr "Aktív" msgid "Adding new member to this Group Principal" msgstr "" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Adminisztrátor" msgid "Administration" msgstr "" msgid "Administrator" msgstr "" msgid "All" msgstr "" msgid "All collection data will be unrecoverably deleted." msgstr "" #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "" msgid "All privileges" msgstr "" msgid "All requested changes were made." msgstr "Minden változás mentve" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "" msgid "Anonymous users are not allowed to modify calendars" msgstr "" msgid "Anonymous users may only access public calendars" msgstr "" msgid "Append" msgstr "" msgid "Application DB User" msgstr "" msgid "Apply Changes" msgstr "" msgid "Apply DB Patches" msgstr "" msgid "Attachment" msgstr "" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "" msgid "Bindings to other collections" msgstr "" msgid "Bindings to this Collection" msgstr "" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "Felhasználók listája" msgid "Busy" msgstr "" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "" msgid "Calendar Principals" msgstr "" msgid "Calendar Timezone" msgstr "" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "" msgid "Change Password" msgstr "" msgid "Click to display user details" msgstr "Felhasználó adatainak megjelenítése" msgid "Click to edit principal details" msgstr "" msgid "Collection" msgstr "" msgid "Collection Grants" msgstr "" msgid "Collection ID" msgstr "" msgid "Collection deleted" msgstr "" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "" msgid "Configuring Calendar Clients for DAViCal" msgstr "" msgid "Configuring DAViCal" msgstr "" msgid "Confirm" msgstr "Ellenőrzés" msgid "Confirm Deletion of the Binding" msgstr "" msgid "Confirm Deletion of the Collection" msgstr "" msgid "Confirm Deletion of the Principal" msgstr "" msgid "Confirm Deletion of the Ticket" msgstr "" msgid "Confirm Password" msgstr "" msgid "Confirm the new password." msgstr "Új jelszó ellenőrzése" msgid "Could not retrieve" msgstr "" msgid "Create" msgstr "Új létrehozása" msgid "Create Collection" msgstr "" msgid "Create Events/Collections" msgstr "" msgid "Create New Collection" msgstr "" msgid "Create New Principal" msgstr "" msgid "Create Principal" msgstr "" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "" msgid "Create a resource or collection" msgstr "" msgid "Creating new Collection." msgstr "" msgid "Creating new Principal record." msgstr "" msgid "Creating new ticket granting privileges to this Principal" msgstr "" msgid "Current DAViCal version " msgstr "" msgid "DAV Path" msgstr "" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "" msgid "DAViCal CalDAV Server" msgstr "" msgid "DAViCal DB Schema version " msgstr "" msgid "DAViCal Homepage" msgstr "" msgid "DAViCal Wiki" msgstr "" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "" msgid "Database Error" msgstr "Adatbázis-hiba" msgid "Database Host" msgstr "" msgid "Database Name" msgstr "" msgid "Database Owner" msgstr "" msgid "Database Password" msgstr "" msgid "Database Port" msgstr "" msgid "Database Username" msgstr "" msgid "Database error" msgstr "Adatbázis-hiba" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "" msgid "Date Style" msgstr "Dátumformátum" msgid "Default Privileges" msgstr "" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "Törlés" msgid "Delete Events/Collections" msgstr "" msgid "Delete Principal" msgstr "" msgid "Delete a resource or collection" msgstr "" msgid "Deleted a grant from this Principal" msgstr "" msgid "Deleting Binding:" msgstr "" msgid "Deleting Collection:" msgstr "" msgid "Deleting Principal:" msgstr "" msgid "Deleting Ticket:" msgstr "" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "" msgid "Dependencies" msgstr "" msgid "Dependency" msgstr "" msgid "Description" msgstr "" msgid "Destination collection does not exist" msgstr "" msgid "Directory on the server" msgstr "" msgid "Display Name" msgstr "" msgid "Displayname" msgstr "" msgid "Does the user have the right to perform this role?" msgstr "Van jogosultsága a felhasználónak?" msgid "Domain" msgstr "" msgid "EMail" msgstr "E-mail" msgid "EMail OK" msgstr "E-mail OK" msgid "ERROR: The full name may not be blank." msgstr "" msgid "ERROR: The new password must match the confirmed password." msgstr "" msgid "ERROR: There was a database error writing the roles information!" msgstr "HIBA: Adatbázis-hiba történt a szerepek írásakor" msgid "Edit" msgstr "" msgid "Edit this user record" msgstr "Felhasználó szerkesztése" msgid "Email Address" msgstr "" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Írja be a felhasználónevet. Egy e-mailt fog kapni egy új ideiglenes jelszóval." msgid "Enter your username and password then click here to log in." msgstr "Írja be a felhasználónevét és jelszavát a belépéshez" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" msgid "Error querying database." msgstr "Adatbázis-hiba lekérdezéskor." msgid "Error writing calendar details to database." msgstr "Adatbázis-hiba a naptár elemeinek írásakor." msgid "Error writing calendar properties to database." msgstr "" msgid "European" msgstr "" msgid "European (d/m/y)" msgstr "Európai (nap/hónap/év)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "" msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "" msgid "Expires" msgstr "" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "Hozzáféréshez" msgid "Forbidden" msgstr "" msgid "Free/Busy" msgstr "" msgid "Full Name" msgstr "Teljes név" msgid "Fullname" msgstr "" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "Mehet!" msgid "Go to the DAViCal Feature Requests" msgstr "" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "" #. Translators: in the sense of a group of people msgid "Group" msgstr "Csoport" msgid "Group Members" msgstr "" msgid "Group Memberships" msgstr "" msgid "Group Principals" msgstr "" msgid "Has Members" msgstr "" msgid "Help" msgstr "Segítség" msgid "Help on the current screen" msgstr "" msgid "Help! I've forgotten my password!" msgstr "Elfelejtettem a jelszavamat!" msgid "Home" msgstr "Kezdőlap" msgid "Home " msgstr "" msgid "Home Page" msgstr "" msgid "ID" msgstr "" msgid "ISO Format" msgstr "" msgid "ISO Format (YYYY-MM-DD)" msgstr "ISO-formátum (ÉÉÉÉ-HH-NN)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Azonosító" msgid "If you have forgotten your password then" msgstr "Ha elfelejtette jelszavát, " msgid "If you would like to request access, please e-mail" msgstr "Ha hozzáférést szeretne kapni, írjon: " msgid "Import all .ics files of a directory" msgstr "" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "Hibás felhasználónév vagy jelszó." msgid "Invalid username or password." msgstr "Hibás felhasználónév vagy jelszó." msgid "Is Member of" msgstr "" msgid "Is a Calendar" msgstr "" msgid "Is an Addressbook" msgstr "" msgid "Is this user active?" msgstr "Aktív felhasználó?" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "Csatlakozott" msgid "Language" msgstr "Nyelv" msgid "Last used" msgstr "Utoljára használva" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "" msgid "List Resources" msgstr "" msgid "List Users" msgstr "" msgid "Load From File" msgstr "" msgid "Locale" msgstr "" msgid "Location" msgstr "" msgid "Log On Please" msgstr "Lépjen be." msgid "Log out of DAViCal" msgstr "" msgid "Logout" msgstr "Kilépés" msgid "Member deleted from this Group Principal" msgstr "" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "Név" msgid "New Collection" msgstr "" msgid "New Password" msgstr "Új jelszó" msgid "New Principal" msgstr "" #. Translators: not 'Yes' msgid "No" msgstr "" msgid "No calendar content" msgstr "" msgid "No collection found at that location." msgstr "Ezen a helyen nincs gyűjtemény." msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "" #. Translators: short for 'Number' msgid "No." msgstr "Szám" msgid "No. of Collections" msgstr "" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "" msgid "Not overwriting existing destination resource" msgstr "" msgid "Opaque" msgstr "" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "" msgid "Password" msgstr "Jelszó" msgid "Path" msgstr "" msgid "Person" msgstr "" msgid "Please confirm deletion of access ticket - see below" msgstr "" msgid "Please confirm deletion of binding - see below" msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" msgid "Please confirm deletion of the principal" msgstr "" msgid "Please note the time and advise the administrator of your system." msgstr "Jegyezze fel az időpontot és értesítse az adminisztrátort!" msgid "Principal" msgstr "" msgid "Principal Collections" msgstr "" msgid "Principal Grants" msgstr "" msgid "Principal ID" msgstr "" msgid "Principal Type" msgstr "" msgid "Principal deleted" msgstr "" msgid "Privileges" msgstr "" msgid "Privileges granted to All Users" msgstr "" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "Csak olvasható" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Nyilvános" msgid "Publicly Readable" msgstr "" msgid "REPORT body contains no XML data!" msgstr "" msgid "REPORT body is not valid XML data!" msgstr "" msgid "Read" msgstr "" msgid "Read ACLs for a resource or collection" msgstr "" msgid "Read Access Controls" msgstr "" msgid "Read Current User's Access" msgstr "" msgid "Read Free/Busy Information" msgstr "" msgid "Read the content of a resource or collection" msgstr "" msgid "" "Read the details of the current user's access control to this resource." msgstr "" msgid "Read the free/busy information for a calendar collection" msgstr "" msgid "Read/Write" msgstr "" msgid "References" msgstr "" msgid "Remove" msgstr "" msgid "Remove a lock" msgstr "" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "Hibajelentés" msgid "Report a bug in the system" msgstr "Rendszerhiba bejelentése" msgid "Request Feature" msgstr "" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Erőforrás" msgid "Resource Calendar Principals" msgstr "" msgid "Resource Not Found." msgstr "" msgid "Resource has changed on server - not deleted" msgstr "Az erőforrás a szerveren módosítva - törlés elutasítva." msgid "Resources may not be changed to / from collections." msgstr "Erőforrások nem cserélhetők fel gyűjteményekkel" msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "" msgid "Schedule Send" msgstr "" msgid "Schedule Transparency" msgstr "" msgid "Scheduling: Deliver a Reply" msgstr "" msgid "Scheduling: Deliver an Invitation" msgstr "" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "" msgid "Scheduling: Send a Reply" msgstr "" msgid "Scheduling: Send an Invitation" msgstr "" msgid "Scheduling: Send free/busy" msgstr "" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "" msgid "Set free/busy privileges" msgstr "" msgid "Set read privileges" msgstr "" msgid "Set read+write privileges" msgstr "" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "" msgid "Setup DAViCal" msgstr "" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Súgó erről: " msgid "Site Statistics" msgstr "" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "Néhány tulajdonság nem módosítható." msgid "Some properties were not able to be set." msgstr "" msgid "Source resource does not exist." msgstr "" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "" msgid "Specific Privileges" msgstr "" msgid "Status" msgstr "" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "" msgid "Submit" msgstr "" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "" msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "Az alkalmazás nem tudja értelmezni a kérést." msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "A naptár elérési útja érvénytelen karaktert tartalmaz." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "" msgid "The destination collection does not exist" msgstr "" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "" msgid "The name this user can log into the system with." msgstr "Felhasználónév" msgid "The path on the server where your .ics files are." msgstr "" msgid "The preferred language for this person." msgstr "Preferált nyelv" #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "Dátumformátum" msgid "The user's e-mail address." msgstr "E-mail cím" msgid "The user's full name." msgstr "Teljes név" msgid "The user's password for logging in." msgstr "Jelszó" msgid "The username must not be blank, and may not contain a slash" msgstr "" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "Adatbázis-hiba történt íráskor." msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "" msgid "Time" msgstr "" msgid "To Collection" msgstr "" msgid "To ID" msgstr "" msgid "Toggle all privileges" msgstr "" msgid "Tools" msgstr "" msgid "Transparent" msgstr "" msgid "URL" msgstr "" msgid "US Format" msgstr "" msgid "Unauthenticated User" msgstr "" msgid "United States of America (m/d/y)" msgstr "Egyesült Államok (HH/NN/ÉÉ)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Frissítés" msgid "Updated" msgstr "Frissítve" msgid "Updating Collection record." msgstr "" msgid "Updating Member of this Group Principal" msgstr "" msgid "Updating Principal record." msgstr "" msgid "Updating grants by this Principal" msgstr "" msgid "Upgrade DAViCal database schema" msgstr "" msgid "Upgrade Database" msgstr "" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "" msgid "User Details" msgstr "Felhasználó adatai" msgid "User Functions" msgstr "" msgid "User Name" msgstr "Felhasználónév" msgid "User Roles" msgstr "Felhasználó szerepei" msgid "User is active" msgstr "A felhasználó aktív" msgid "User record written." msgstr "Felhasználó adatai tárolva." msgid "Username" msgstr "" msgid "View My Details" msgstr "" msgid "View my own principal record" msgstr "" msgid "View this user record" msgstr "Felhasználó adatai" msgid "Visit the DAViCal Wiki" msgstr "" #, php-format msgid "Want: %s, Currently: %s" msgstr "" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "Mikor lett ellenőrizve a felhasználó e-mail-címe" msgid "Write" msgstr "" msgid "Write ACLs for a resource or collection" msgstr "" msgid "Write Access Controls" msgstr "" msgid "Write Data" msgstr "" msgid "Write Metadata" msgstr "" msgid "Write content" msgstr "" msgid "Write properties" msgstr "" msgid "Yes" msgstr "" msgid "You are editing" msgstr "" msgid "You are not authorised to use this function." msgstr "Nincs jogosultsága ehhez a művelethez." msgid "You are viewing" msgstr "" msgid "You do not have permission to modify this record." msgstr "" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "Be kell jelentkeznie a rendszer használatához." msgid "Your configuration produced PHP errors which should be corrected" msgstr "" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "Emlékezzen rám" msgid "from principal" msgstr "" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "Lépjen be felhasználónevével és jelszavával." davical-1.1.1/po/ja.po0000644000000000000000000010766511767336605011410 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "" msgid "*** Default Locale ***" msgstr "" msgid "*** Unknown ***" msgstr "" #, php-format msgid "- adding %s to group : %s" msgstr "" #, php-format msgid "- adding users %s to group : %s" msgstr "" #, php-format msgid "- creating groups : %s" msgstr "" #, php-format msgid "- creating record for users : %s" msgstr "- ユーザーの情報を作成中: %s" #, php-format msgid "- deactivate groups : %s" msgstr "" #, php-format msgid "- deactivating users : %s" msgstr "- ユーザーを解除中: %s" #, php-format msgid "- nothing done on : %s" msgstr "- 変更は行われていません: %s" #, php-format msgid "- removing %s from group : %s" msgstr "" #, php-format msgid "- updating groups : %s" msgstr "" #, php-format msgid "- updating user records : %s" msgstr "- ユーザー情報を更新中: %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "警告:このパス内の全てのイベントは、icsファイルの挿入の前に削除されます。" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

ログオンして下さい

%sにアクセスするには、あなたに対して発行されたユーザー名およびパスワードでログオンして下さい。

アクセスをリクエストしたい場合は、%sにメールを送ってください。

" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "すでにその場所にコレクションが存在します。" msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "" msgid "AWL Library version " msgstr "" msgid "Access Tickets" msgstr "" msgid "Access ticket deleted" msgstr "" msgid "Action" msgstr "アクション" msgid "Active" msgstr "アクティブ" msgid "Adding new member to this Group Principal" msgstr "このグループプリンシパルに新規メンバーを追加中" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "管理者" msgid "Administration" msgstr "管理" msgid "Administrator" msgstr "管理者" msgid "All" msgstr "全て" msgid "All collection data will be unrecoverably deleted." msgstr "全てのコレクションデータが回復不能な方法で削除されます。" #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "そのプリンシパルの全てのカレンダーとイベントが回復不能な方法で削除されます。" msgid "All privileges" msgstr "" msgid "All requested changes were made." msgstr "全てのリクエストされた変更が実行されました。" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "このスケジュール受信箱のオーナーに対する予定の有無の問い合わせを許可する。" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "\"管理者\"ユーザーは、DAViCalシステム全体への完全な権限を持ちます。" msgid "Anonymous users are not allowed to modify calendars" msgstr "匿名ユーザーはカレンダーの修正を許されていません" msgid "Anonymous users may only access public calendars" msgstr "匿名ユーザーは公開カレンダーにのみアクセスを許されます。" msgid "Append" msgstr "" msgid "Application DB User" msgstr "" msgid "Apply Changes" msgstr "変更を適用" msgid "Apply DB Patches" msgstr "" msgid "Attachment" msgstr "" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "" msgid "Bindings to other collections" msgstr "" msgid "Bindings to this Collection" msgstr "" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "全てのユーザーを閲覧する" msgid "Busy" msgstr "予定あり" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "カレンダー\"%s\"がファイルからロードされました。" msgid "Calendar Principals" msgstr "カレンダープリンシパル" msgid "Calendar Timezone" msgstr "カレンダー時間帯" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "" msgid "Change Password" msgstr "パスワードを変更する" msgid "Click to display user details" msgstr "クリックしてユーザーの詳細を表示する" msgid "Click to edit principal details" msgstr "クリックしてプリンシパルの詳細を編集する" msgid "Collection" msgstr "コレクション" msgid "Collection Grants" msgstr "コレクション許可" msgid "Collection ID" msgstr "コレクションID" msgid "Collection deleted" msgstr "コレクションが削除されました" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "" msgid "Configuring Calendar Clients for DAViCal" msgstr "DAViCal用にカレンダークライアントを設定する" msgid "Configuring DAViCal" msgstr "DAViCalを設定する" msgid "Confirm" msgstr "確認" msgid "Confirm Deletion of the Binding" msgstr "" msgid "Confirm Deletion of the Collection" msgstr "そのコレクションの削除を確認" msgid "Confirm Deletion of the Principal" msgstr "そのプリンシパルの削除を確認" msgid "Confirm Deletion of the Ticket" msgstr "" msgid "Confirm Password" msgstr "パスワードの確認" msgid "Confirm the new password." msgstr "新規パスワードの確認" msgid "Could not retrieve" msgstr "" msgid "Create" msgstr "作成" msgid "Create Collection" msgstr "コレクションを作成する" msgid "Create Events/Collections" msgstr "イベント/コレクションを作成する" msgid "Create New Collection" msgstr "新規コレクションを作成する" msgid "Create New Principal" msgstr "新規プリンシパルを作成する" msgid "Create Principal" msgstr "プリンシパルを作成する" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "新規プリンシパル (新規のユーザー、資源、又はグループ) を作成する" msgid "Create a resource or collection" msgstr "資源またはコレクションを作成する" msgid "Creating new Collection." msgstr "" msgid "Creating new Principal record." msgstr "新規のプリンシパル記録を作成中" msgid "Creating new ticket granting privileges to this Principal" msgstr "" msgid "Current DAViCal version " msgstr "現在のDAViCalバージョン" msgid "DAV Path" msgstr "DAVパス" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "" msgid "DAViCal CalDAV Server" msgstr "DAViCal CalDAV Serverが" msgid "DAViCal DB Schema version " msgstr "DAViCal DBスキーマバージョン" msgid "DAViCal Homepage" msgstr "DAViCal Homepage" msgid "DAViCal Wiki" msgstr "DAViCal Wiki" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "" msgid "Database Error" msgstr "データベースエラー" msgid "Database Host" msgstr "" msgid "Database Name" msgstr "" msgid "Database Owner" msgstr "" msgid "Database Password" msgstr "" msgid "Database Port" msgstr "" msgid "Database Username" msgstr "" msgid "Database error" msgstr "データベースエラー" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "日付形式スタイル" msgid "Date Style" msgstr "日付スタイル" msgid "Default Privileges" msgstr "デフォルトの権限" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "削除" msgid "Delete Events/Collections" msgstr "イベント/コレクションを削除する" msgid "Delete Principal" msgstr "プリンシパルを削除する" msgid "Delete a resource or collection" msgstr "資源またはコレクションを削除する" msgid "Deleted a grant from this Principal" msgstr "このプリンシパルから許可を削除しました" msgid "Deleting Binding:" msgstr "" msgid "Deleting Collection:" msgstr "コレクションを削除中:" msgid "Deleting Principal:" msgstr "プリンシパルを削除中:" msgid "Deleting Ticket:" msgstr "" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "主催者からのスケジュール招待をこのスケジュール受信箱に届ける" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "出席者からのスケジュール返信をこのスケジュール受信箱に届ける" msgid "Dependencies" msgstr "依存関係" msgid "Dependency" msgstr "依存関係" msgid "Description" msgstr "説明" msgid "Destination collection does not exist" msgstr "" msgid "Directory on the server" msgstr "サーバーー上のディレクトリ" msgid "Display Name" msgstr "表示名" msgid "Displayname" msgstr "表示名" msgid "Does the user have the right to perform this role?" msgstr "このユーザーはこのロールを行う権限を持っていますか?" msgid "Domain" msgstr "" msgid "EMail" msgstr "Email" msgid "EMail OK" msgstr "Email OK" msgid "ERROR: The full name may not be blank." msgstr "エラー: 氏名は空欄にできません。" msgid "ERROR: The new password must match the confirmed password." msgstr "エラー: 新規パスワードは確認パスワードと一致しなければなりません。" msgid "ERROR: There was a database error writing the roles information!" msgstr "エラー:ロール情報の書き込み中にデータベースエラーが起きました。" msgid "Edit" msgstr "編集" msgid "Edit this user record" msgstr "このユーザー情報を編集" msgid "Email Address" msgstr "Emailアドレス" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "知っている場合はユーザー名を入力し、ここをクリックしてください。暫定パスワードがメールで送信されます。" msgid "Enter your username and password then click here to log in." msgstr "あなたのユーザー名とパスワードを入力してから、ここをクリックしてログインして下さい。" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "NoUserFoundエラーがフィルター>%s<, attributes >%s< , dn >%s<で発生しました。" msgid "Error querying database." msgstr "データベースのクエリでエラーが発生しました。" msgid "Error writing calendar details to database." msgstr "カレンダー詳細情報のデータベースへの書き込み中にエラーが発生しました。" msgid "Error writing calendar properties to database." msgstr "" msgid "European" msgstr "ヨーロッパ" msgid "European (d/m/y)" msgstr "ヨーロッパ (d/m/y)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "既存の資源が\"If-Match\"ヘッダと一致しません - 受け付けられません。" msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "既存の資源が\"If-Match\"ヘッダと一致します - 受け付けられません。" msgid "Expires" msgstr "" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "アクセスするには" msgid "Forbidden" msgstr "禁止された" msgid "Free/Busy" msgstr "予定の有無" msgid "Full Name" msgstr "氏名" msgid "Fullname" msgstr "氏名" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "実行!" msgid "Go to the DAViCal Feature Requests" msgstr "DAViCal機能リクエストに行く" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "このプリンシパルからの新規の権限を許可する" #. Translators: in the sense of a group of people msgid "Group" msgstr "グループ" msgid "Group Members" msgstr "グループメンバー" msgid "Group Memberships" msgstr "グループメンバーシップ" msgid "Group Principals" msgstr "グループプリンシパル" msgid "Has Members" msgstr "所属するメンバー" msgid "Help" msgstr "ヘルプ" msgid "Help on the current screen" msgstr "現在の画面についてのヘルプ" msgid "Help! I've forgotten my password!" msgstr "助けて!パスワードを忘れました!" msgid "Home" msgstr "ホーム" msgid "Home " msgstr "" msgid "Home Page" msgstr "ホームページ" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "ISO形式" msgid "ISO Format (YYYY-MM-DD)" msgstr "ISO形式 (YYYY-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "あなたのパスワードを忘れた場合" msgid "If you would like to request access, please e-mail" msgstr "アクセス権をリクエストしたい場合はここへメールしてください:" msgid "Import all .ics files of a directory" msgstr "ディレクトリの全ての.icsファイルをインポートする" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "非アクティブのプリンシパル" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "ユーザー名またはパスワードが無効です。" msgid "Invalid username or password." msgstr "ユーザー名またはパスワードが無効です。" msgid "Is Member of" msgstr "メンバー所属先" msgid "Is a Calendar" msgstr "カレンダーである" msgid "Is an Addressbook" msgstr "アドレス帳である" msgid "Is this user active?" msgstr "これはアクティブなユーザーですか?" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "参加日" msgid "Language" msgstr "言語" msgid "Last used" msgstr "最終更新日" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "グループのリスト" msgid "List Resources" msgstr "資源のリスト" msgid "List Users" msgstr "ユーザーのリスト" msgid "Load From File" msgstr "ファイルからロードする" msgid "Locale" msgstr "ロケール" msgid "Location" msgstr "" msgid "Log On Please" msgstr "ログオンして下さい。" msgid "Log out of DAViCal" msgstr "DAViCalからログアウトする" msgid "Logout" msgstr "ログアウト" msgid "Member deleted from this Group Principal" msgstr "このグループプリンシパルからメンバーを削除しました" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "名称" msgid "New Collection" msgstr "新規コレクション" msgid "New Password" msgstr "新規パスワード" msgid "New Principal" msgstr "" #. Translators: not 'Yes' msgid "No" msgstr "いいえ" msgid "No calendar content" msgstr "カレンダーの内容がありません" msgid "No collection found at that location." msgstr "その場所にはコレクションが見つかりませんでした。" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "" #. Translators: short for 'Number' msgid "No." msgstr "No." msgid "No. of Collections" msgstr "" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "" msgid "Not overwriting existing destination resource" msgstr "既存の宛先資源に上書きしていません" msgid "Opaque" msgstr "不透明" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "ロックをオーバーライドする" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "PHP PDOモジュール利用可能" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "" msgid "Password" msgstr "パスワード" msgid "Path" msgstr "パス" msgid "Person" msgstr "人物" msgid "Please confirm deletion of access ticket - see below" msgstr "" msgid "Please confirm deletion of binding - see below" msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "コレクションの削除を確認して下さい - 以下を見て下さい。" msgid "Please confirm deletion of the principal" msgstr "プリンシパルの削除を確認して下さい。" msgid "Please note the time and advise the administrator of your system." msgstr "時刻を記載してシステム管理者に報告して下さい。" msgid "Principal" msgstr "プリンシパル" msgid "Principal Collections" msgstr "プリンシパルコレクション" msgid "Principal Grants" msgstr "プリンシパル許可" msgid "Principal ID" msgstr "プリンシパルID" msgid "Principal Type" msgstr "プリンシパルタイプ" msgid "Principal deleted" msgstr "プリンシパルが削除されました" msgid "Privileges" msgstr "権限" msgid "Privileges granted to All Users" msgstr "" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "その特性は読み取り専用です。" #. Translators: in the sense of being available to all users msgid "Public" msgstr "公開" msgid "Publicly Readable" msgstr "公的に読み取り可能" msgid "REPORT body contains no XML data!" msgstr "レポートの本文にXMLデータがありません!" msgid "REPORT body is not valid XML data!" msgstr "レポートの本文は有効なXMLデータではありません!" msgid "Read" msgstr "読み取り" msgid "Read ACLs for a resource or collection" msgstr "資源またはコレクションのアクセス制御を読み取る" msgid "Read Access Controls" msgstr "読み取りアクセス制御" msgid "Read Current User's Access" msgstr "現在のユーザーアクセスを読み取る" msgid "Read Free/Busy Information" msgstr "予定有無情報を読み取る" msgid "Read the content of a resource or collection" msgstr "資源またはコレクションの内容を読み取る" msgid "" "Read the details of the current user's access control to this resource." msgstr "この資源への現在のユーザーのアクセス制御の詳細を読み取る" msgid "Read the free/busy information for a calendar collection" msgstr "カレンダーコレクションのための予定有無情報を読み取る" msgid "Read/Write" msgstr "読み書き" msgid "References" msgstr "" msgid "Remove" msgstr "" msgid "Remove a lock" msgstr "ロックを解除する" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "バグの報告" msgid "Report a bug in the system" msgstr "このシステムのバグを報告する" msgid "Request Feature" msgstr "機能をリクエストする" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "資源" msgid "Resource Calendar Principals" msgstr "資源カレンダープリンシパル" msgid "Resource Not Found." msgstr "" msgid "Resource has changed on server - not deleted" msgstr "資源はサーバー上で既に変更されています - 削除されません。" msgid "Resources may not be changed to / from collections." msgstr "資源はコレクションに変更することもコレクションから変更することもできません。" msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "スケジュール配達" msgid "Schedule Send" msgstr "スケジュール送信" msgid "Schedule Transparency" msgstr "スケジュールの透明性" msgid "Scheduling: Deliver a Reply" msgstr "スケジューリング: 返信を届ける" msgid "Scheduling: Deliver an Invitation" msgstr "スケジューリング: 招待状を届ける" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "スケジューリング: 予定の有無を尋ねる" msgid "Scheduling: Send a Reply" msgstr "スケジューリング: 返信を送信する" msgid "Scheduling: Send an Invitation" msgstr "スケジューリング: 招待状を送信する" msgid "Scheduling: Send free/busy" msgstr "スケジューリング: 予定の有無を送信する" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "予定の有無の問い合わせを送信する" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "このスケジュール送信箱のオーナーから、主催者としてスケジュール招待を送信する" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "このスケジュール送信箱のオーナーから、出席者としてスケジュール返信を送信する" msgid "Set free/busy privileges" msgstr "予定有無の権限を設定する" msgid "Set read privileges" msgstr "読み取り権限を設定する" msgid "Set read+write privileges" msgstr "読み書き権限を設定する" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "セットアップ" msgid "Setup DAViCal" msgstr "DaViCalをセットアップする" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "ヘルプの表示" msgid "Site Statistics" msgstr "" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "いくつかの特性は変更できませんでした。" msgid "Some properties were not able to be set." msgstr "いくつかの特性は設定できませんでした。" msgid "Source resource does not exist." msgstr "元の資源が存在しません。" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "特殊なコレクションは、カレンダーまたは他の特殊なコレクションを含めません。" msgid "Specific Privileges" msgstr "特定の権限" msgid "Status" msgstr "状態" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "状態: %d, メッセージ: %s, ユーザー: %d, パス: %s" msgid "Submit" msgstr "送信" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "その資源はこのサーバー上にありません。" msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "DAViCal Home Page" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "アプリケーションはそのリクエストを理解できませんでした。" msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "カレンダーパスに不正な文字が使用されています。" msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "" msgid "The destination collection does not exist" msgstr "" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "そのファイル%sはUTF-8でエンコードされていません。さらなる詳細についてはそのエラーを確認して下さい。" msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "" msgid "The name this user can log into the system with." msgstr "このユーザーがこのシステムへのログイン時に使う名前。" msgid "The path on the server where your .ics files are." msgstr "あなたの.icsファイルがあるサーバー上のパス。" msgid "The preferred language for this person." msgstr "この人が好む言語。" #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "この人が利用する日付のスタイル。" msgid "The user's e-mail address." msgstr "そのユーザーの電子メールアドレス。" msgid "The user's full name." msgstr "そのユーザーの氏名。" msgid "The user's password for logging in." msgstr "そのユーザーのログイン時のパスワード。" msgid "The username must not be blank, and may not contain a slash" msgstr "" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "データベースへの書き込み中にエラーがありました。" msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "" msgid "Time" msgstr "" msgid "To Collection" msgstr "" msgid "To ID" msgstr "宛先ID" msgid "Toggle all privileges" msgstr "すべての権限をトグルする" msgid "Tools" msgstr "" msgid "Transparent" msgstr "透明" msgid "URL" msgstr "" msgid "US Format" msgstr "アメリカ形式" msgid "Unauthenticated User" msgstr "" msgid "United States of America (m/d/y)" msgstr "アメリカ合衆国 (m/d/y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "更新" msgid "Updated" msgstr "更新済み" msgid "Updating Collection record." msgstr "" msgid "Updating Member of this Group Principal" msgstr "このグループプリンシパルのメンバーをアップデート中" msgid "Updating Principal record." msgstr "プリンシパル記録を更新中" msgid "Updating grants by this Principal" msgstr "このプリンシパルによる許可をアップデート中" msgid "Upgrade DAViCal database schema" msgstr "DAViCalデータベーススキーマをアップグレードする" msgid "Upgrade Database" msgstr "データベースのアップグレード" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "ユーザーカレンダープリンシパル" msgid "User Details" msgstr "ユーザー詳細" msgid "User Functions" msgstr "ユーザー機能" msgid "User Name" msgstr "ユーザー名" msgid "User Roles" msgstr "ユーザーのロール" msgid "User is active" msgstr "ユーザーはアクティブです" msgid "User record written." msgstr "ユーザー記録を書き込みました。" msgid "Username" msgstr "ユーザー名" msgid "View My Details" msgstr "自分の詳細を閲覧する" msgid "View my own principal record" msgstr "自分自身のプリンシパル記録を閲覧する" msgid "View this user record" msgstr "このユーザー記録を閲覧する" msgid "Visit the DAViCal Wiki" msgstr "DAViCal Wikiに行く" #, php-format msgid "Want: %s, Currently: %s" msgstr "" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "そのユーザーのメールアカウントが認証された日時。" msgid "Write" msgstr "書き込む" msgid "Write ACLs for a resource or collection" msgstr "資源またはコレクションのための書き込みアクセス制御" msgid "Write Access Controls" msgstr "書き込みアクセス制御" msgid "Write Data" msgstr "データを書き込む" msgid "Write Metadata" msgstr "メタデータを書き込む" msgid "Write content" msgstr "内容を書き込む" msgid "Write properties" msgstr "属性を書き込む" msgid "Yes" msgstr "はい" msgid "You are editing" msgstr "編集中" msgid "You are not authorised to use this function." msgstr "あなたはこの機能の利用を許可されていません。" msgid "You are viewing" msgstr "閲覧中" msgid "You do not have permission to modify this record." msgstr "" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "このシステムを利用するにはログインしなくてはなりません。" msgid "Your configuration produced PHP errors which should be corrected" msgstr "" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "ディレクトリ%sは読み取り可能ではありません。" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap : TLSを開始できませんでした : ldap_start_tls()failed" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap : ホスト%1$sにポート%2$s、bindDN%3$sでバインドに失敗しました" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap : LDAPをプロトコルバージョン3で使用に失敗しました、TLSはサポートされていません" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap : LDAPにバインドできません - bindDNとpassDNの設定を確認し、LDAPサーバーに到達可能であること確認して下さい。" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap : ホスト%2$sのポート%1$sでLDAPに接続できませんでした" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap : 関数ldap_connectが定義できませんでした、php_ldap moduleを確認して下さい" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam : ファイル%sが見つかりません" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "私を忘れないで" msgid "from principal" msgstr "プリンシパルから" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "あなたのicsを保管するパス" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "あなたに発行したユーザー名とパスワードでログオンして下さい。" davical-1.1.1/po/pl.po0000644000000000000000000007442711767336605011430 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. # , 2011. # , 2011. # spasstl , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Polish (http://www.transifex.net/projects/p/davical/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "%F %T" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "%T" msgid "*** Default Locale ***" msgstr "*** Domyślne ustawienia lokalne ***" msgid "*** Unknown ***" msgstr "*** Nieznane ***" #, php-format msgid "- adding %s to group : %s" msgstr "Dodaj %s do grupy: %s" #, php-format msgid "- adding users %s to group : %s" msgstr "Dodaj Użytkownika %s do grupy: %s" #, php-format msgid "- creating groups : %s" msgstr "- tworzenie grup: %s" #, php-format msgid "- creating record for users : %s" msgstr "- tworzenie rekordów użytkowników: %s" #, php-format msgid "- deactivate groups : %s" msgstr "- wyłącz grupy: %s" #, php-format msgid "- deactivating users : %s" msgstr "- wyłączenie użytkowników: %s" #, php-format msgid "- nothing done on : %s" msgstr "nic nie wykonano na: %s" #, php-format msgid "- removing %s from group : %s" msgstr "- usuwanie %s z grupy: %s" #, php-format msgid "- updating groups : %s" msgstr "- aktualizacja grup: %s" #, php-format msgid "- updating user records : %s" msgstr "- aktualizacja rekordów użytkownika: %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "OSTRZEŻENIE: wszystkie zdarzenia z tej ścieżki zostaną usunięte przed wstawieniem plików ICS" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "

Pomoc

\n

Aby uzyskać pomoc, odwiedź DAViCal Home Page lub przeczytaj DAViCal Wiki.

\n

Jeżeli nie znalazłeś odpowiedzi, odwiedź nas na IRCu na kanale #davical na stronie irc.oftc.net,\nlub wyślij zapytanie na DAViCal lista dyskusyjna Użytkowników.

\n

Pomocną może też się okazać archiwum listy dyskusyjnej .

" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Zaloguj się

Aby uzyskać dostęp do %s powinieneś zalogować się swoją nazwą użytkownika i hasłem.

Jeśli chcesz uzyskać dostęp, wyślij e-mail do %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "Zbiór już istnieje w tej lokalizacji." msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "Zasób już istnieje w lokalizacji docelowej." msgid "AWL Library version " msgstr "Wersja biblioteki AWL " msgid "Access Tickets" msgstr "Możliwość dostępu" msgid "Access ticket deleted" msgstr "Możliwość dostępu została usunięta" msgid "Action" msgstr "Akcja" msgid "Active" msgstr "Aktywny" msgid "Adding new member to this Group Principal" msgstr "" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Administrator" msgid "Administration" msgstr "Administracja" msgid "Administrator" msgstr "Administrator" msgid "All" msgstr "Wszystko" msgid "All collection data will be unrecoverably deleted." msgstr "Wszystkie dane kolekcji zostaną nieodwracalnie usunięte." #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "" msgid "All privileges" msgstr "Wszystkie uprawnienia" msgid "All requested changes were made." msgstr "Wszystkie zażądane zmiany zostały wprowadzone" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "Zezwól na pytania free/busy skierowane do właściciela tej skrzynki harmonogramu" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "Użytkownik \"Administrator\" ma pełne prawa do całego systemu DAViCal" msgid "Anonymous users are not allowed to modify calendars" msgstr "Użytkownicy anonimowi nie mają pozwolenia na modyfikację kalendarzy" msgid "Anonymous users may only access public calendars" msgstr "Użytkownicy anonimowi mogą uzyskać dostęp tylko do publicznych kalendarzy" msgid "Append" msgstr "" msgid "Application DB User" msgstr "" msgid "Apply Changes" msgstr "Zatwierdź zmiany" msgid "Apply DB Patches" msgstr "" msgid "Attachment" msgstr "Załącznik" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "" msgid "Bindings to other collections" msgstr "" msgid "Bindings to this Collection" msgstr "" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "Przeglądaj wszystkich użytkowników" msgid "Busy" msgstr "Zajęty" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "Kalendarz @%s@ władowny z pliku" msgid "Calendar Principals" msgstr "" msgid "Calendar Timezone" msgstr "Strefa czasowa kalendarza" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "Kategorie" msgid "Change Password" msgstr "Zmień hasło" msgid "Click to display user details" msgstr "Kliknij aby wyświetlić dane użytkownika" msgid "Click to edit principal details" msgstr "" msgid "Collection" msgstr "Kolekcja" msgid "Collection Grants" msgstr "Prawa kolekcji" msgid "Collection ID" msgstr "ID kolekcji" msgid "Collection deleted" msgstr "Kolekcja została usunięta" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "" msgid "Configuring Calendar Clients for DAViCal" msgstr "Konfiguracja klientów kalendarza dla DAViCal" msgid "Configuring DAViCal" msgstr "Konfiguracja DAViCal" msgid "Confirm" msgstr "Potwierdź" msgid "Confirm Deletion of the Binding" msgstr "" msgid "Confirm Deletion of the Collection" msgstr "Potwierdź usunięcie kolekcji" msgid "Confirm Deletion of the Principal" msgstr "" msgid "Confirm Deletion of the Ticket" msgstr "" msgid "Confirm Password" msgstr "Potwierdź hasło" msgid "Confirm the new password." msgstr "Potwierdź nowe hasło" msgid "Could not retrieve" msgstr "" msgid "Create" msgstr "Utwórz" msgid "Create Collection" msgstr "Utwórz kolekcję" msgid "Create Events/Collections" msgstr "Utwórz zdarzenia/kolekcje" msgid "Create New Collection" msgstr "Utwórz nową kolekcję" msgid "Create New Principal" msgstr "" msgid "Create Principal" msgstr "" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "" msgid "Create a resource or collection" msgstr "" msgid "Creating new Collection." msgstr "Tworzenie nowej kolejcji" msgid "Creating new Principal record." msgstr "" msgid "Creating new ticket granting privileges to this Principal" msgstr "" msgid "Current DAViCal version " msgstr "Atkualna wersja DAViCal" msgid "DAV Path" msgstr "Ścieżka DAV" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "" msgid "DAViCal CalDAV Server" msgstr "DAViCal CalDAV Server" msgid "DAViCal DB Schema version " msgstr "Wersja schematu DB DAViCal" msgid "DAViCal Homepage" msgstr "Strona główna DAViCal" msgid "DAViCal Wiki" msgstr "DAViCal Wiki" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "" msgid "Database Error" msgstr "Błąd bazy danych" msgid "Database Host" msgstr "Host bazy danych" msgid "Database Name" msgstr "Nazwa bazy danych" msgid "Database Owner" msgstr "Właściciel bazy danych" msgid "Database Password" msgstr "Hasło bazy danych" msgid "Database Port" msgstr "Port bazy danych" msgid "Database Username" msgstr "Nazwa użytkownika bazy danych" msgid "Database error" msgstr "Błąd bazy danych" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Styl formatowania daty" msgid "Date Style" msgstr "Format daty" msgid "Default Privileges" msgstr "Domyślne uprawnienia" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "Usuń" msgid "Delete Events/Collections" msgstr "" msgid "Delete Principal" msgstr "" msgid "Delete a resource or collection" msgstr "" msgid "Deleted a grant from this Principal" msgstr "" msgid "Deleting Binding:" msgstr "" msgid "Deleting Collection:" msgstr "" msgid "Deleting Principal:" msgstr "" msgid "Deleting Ticket:" msgstr "" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "" msgid "Dependencies" msgstr "" msgid "Dependency" msgstr "" msgid "Description" msgstr "" msgid "Destination collection does not exist" msgstr "" msgid "Directory on the server" msgstr "" msgid "Display Name" msgstr "" msgid "Displayname" msgstr "" msgid "Does the user have the right to perform this role?" msgstr "Czy użytkownik ma prawo wykonywać tę rolę?" msgid "Domain" msgstr "" msgid "EMail" msgstr "E-mail" msgid "EMail OK" msgstr "E-mail zweryfikowano" msgid "ERROR: The full name may not be blank." msgstr "" msgid "ERROR: The new password must match the confirmed password." msgstr "ERROR: Podane hasła nie pasują do siebie" msgid "ERROR: There was a database error writing the roles information!" msgstr "Błąd: Wystąpił błąd bazy danych podczas zapisywania informacji o roli." msgid "Edit" msgstr "Edytuj" msgid "Edit this user record" msgstr "Zmień dane tego użytkownika " msgid "Email Address" msgstr "Adres Email" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Wpisz nazwę użytkownika (jeśli ją znasz) i naciśnij tutaj aby otrzymać emailem tymczasowe hasło." msgid "Enter your username and password then click here to log in." msgstr "Wpisz nazwę użytkownika oraz hasło i naciśnij tutaj aby się zalogować." #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" msgid "Error querying database." msgstr "Błąd odpytywania bazy danych." msgid "Error writing calendar details to database." msgstr "Błąd zapisu kalendarza do bazy." msgid "Error writing calendar properties to database." msgstr "" msgid "European" msgstr "Europejski" msgid "European (d/m/y)" msgstr "Europejski (d/m/r)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "" msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "" msgid "Expires" msgstr "Wygasa" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "Aby uzyskać dostęp do" msgid "Forbidden" msgstr "Zabronione" msgid "Free/Busy" msgstr "Free/Busy" msgid "Full Name" msgstr "Imię i nazwisko" msgid "Fullname" msgstr "Pełna nazwa" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "Uruchom!" msgid "Go to the DAViCal Feature Requests" msgstr "" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "" #. Translators: in the sense of a group of people msgid "Group" msgstr "Grupa" msgid "Group Members" msgstr "Członkowie grupy" msgid "Group Memberships" msgstr "Członkostwo grupy" msgid "Group Principals" msgstr "" msgid "Has Members" msgstr "Ma członków" msgid "Help" msgstr "Pomoc" msgid "Help on the current screen" msgstr "" msgid "Help! I've forgotten my password!" msgstr "Pomocy! Zapomniałem hasła!" msgid "Home" msgstr "Początek" msgid "Home " msgstr "" msgid "Home Page" msgstr "Strona główna" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "Format ICS" msgid "ISO Format (YYYY-MM-DD)" msgstr "ISO (RRRR-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "Jeśli zapomniałeś hasła, " msgid "If you would like to request access, please e-mail" msgstr "Jeśli chcesz poprosić o dostęp, wyślij e-mail do" msgid "Import all .ics files of a directory" msgstr "Importuj wszystkie pliki ICS z katalogu" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "Błędna nazwa użytkownika lub hasło." msgid "Invalid username or password." msgstr "Błędna nazwa użytkownika lub hasło" msgid "Is Member of" msgstr "Jest członkiem" msgid "Is a Calendar" msgstr "Jest kalendarzem" msgid "Is an Addressbook" msgstr "Jest książką adresową" msgid "Is this user active?" msgstr "Aktywny użytkownik?" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "Dodano" msgid "Language" msgstr "Język" msgid "Last used" msgstr "Ostatnio używany" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "" msgid "List Resources" msgstr "" msgid "List Users" msgstr "" msgid "Load From File" msgstr "" msgid "Locale" msgstr "" msgid "Location" msgstr "Lokalizacja" msgid "Log On Please" msgstr "Proszę się zalogować" msgid "Log out of DAViCal" msgstr "Wyloguj z DAViCal" msgid "Logout" msgstr "Wyloguj się" msgid "Member deleted from this Group Principal" msgstr "" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "Nazwa" msgid "New Collection" msgstr "Nowa kolekcja" msgid "New Password" msgstr "Nowe hasło" msgid "New Principal" msgstr "" #. Translators: not 'Yes' msgid "No" msgstr "Nie" msgid "No calendar content" msgstr "" msgid "No collection found at that location." msgstr "Nie znaleziono zbioru w lokalizacji" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "" #. Translators: short for 'Number' msgid "No." msgstr "Nr" msgid "No. of Collections" msgstr "Nr. kolekcji" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "" msgid "Not overwriting existing destination resource" msgstr "" msgid "Opaque" msgstr "" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "" msgid "Password" msgstr "Hasło" msgid "Path" msgstr "" msgid "Person" msgstr "" msgid "Please confirm deletion of access ticket - see below" msgstr "" msgid "Please confirm deletion of binding - see below" msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" msgid "Please confirm deletion of the principal" msgstr "" msgid "Please note the time and advise the administrator of your system." msgstr "" msgid "Principal" msgstr "" msgid "Principal Collections" msgstr "" msgid "Principal Grants" msgstr "" msgid "Principal ID" msgstr "" msgid "Principal Type" msgstr "" msgid "Principal deleted" msgstr "" msgid "Privileges" msgstr "" msgid "Privileges granted to All Users" msgstr "" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "Właściwość tylko do odczytu" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Publiczny" msgid "Publicly Readable" msgstr "" msgid "REPORT body contains no XML data!" msgstr "" msgid "REPORT body is not valid XML data!" msgstr "" msgid "Read" msgstr "" msgid "Read ACLs for a resource or collection" msgstr "" msgid "Read Access Controls" msgstr "" msgid "Read Current User's Access" msgstr "" msgid "Read Free/Busy Information" msgstr "" msgid "Read the content of a resource or collection" msgstr "" msgid "" "Read the details of the current user's access control to this resource." msgstr "" msgid "Read the free/busy information for a calendar collection" msgstr "" msgid "Read/Write" msgstr "" msgid "References" msgstr "" msgid "Remove" msgstr "" msgid "Remove a lock" msgstr "" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "Zgłoś błąd" msgid "Report a bug in the system" msgstr "Zgłoś błąd w systemie" msgid "Request Feature" msgstr "" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Zasób" msgid "Resource Calendar Principals" msgstr "" msgid "Resource Not Found." msgstr "" msgid "Resource has changed on server - not deleted" msgstr "Zasób zmieniony na serwerze - nie usuwam." msgid "Resources may not be changed to / from collections." msgstr "" msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "" msgid "Schedule Send" msgstr "" msgid "Schedule Transparency" msgstr "" msgid "Scheduling: Deliver a Reply" msgstr "" msgid "Scheduling: Deliver an Invitation" msgstr "" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "" msgid "Scheduling: Send a Reply" msgstr "" msgid "Scheduling: Send an Invitation" msgstr "" msgid "Scheduling: Send free/busy" msgstr "" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "" msgid "Set free/busy privileges" msgstr "" msgid "Set read privileges" msgstr "" msgid "Set read+write privileges" msgstr "" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "" msgid "Setup DAViCal" msgstr "" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Pokaż pomoc na temat" msgid "Site Statistics" msgstr "" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "Niektóre właściwości nie mogły zostać zmienione." msgid "Some properties were not able to be set." msgstr "" msgid "Source resource does not exist." msgstr "" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "" msgid "Specific Privileges" msgstr "" msgid "Status" msgstr "" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "" msgid "Submit" msgstr "" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "" msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "Aplikacja nie rozumie tego żądania." msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "Ścieżka kalendarza zawiera nieakceptowalne znaki." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "" msgid "The destination collection does not exist" msgstr "" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "" msgid "The name this user can log into the system with." msgstr "Nazwa, którą ten użytkownik może użyć do zalogowania." msgid "The path on the server where your .ics files are." msgstr "" msgid "The preferred language for this person." msgstr "Preferowany język." #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "Format daty używany przez tego użytkownika." msgid "The user's e-mail address." msgstr "Adres e-mail użytkownika." msgid "The user's full name." msgstr "Imię i nazwisko użytkownika." msgid "The user's password for logging in." msgstr "Hasło logowania." msgid "The username must not be blank, and may not contain a slash" msgstr "" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "Wystąpił błąd zapisu do bazy danych." msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "" msgid "Time" msgstr "Czas" msgid "To Collection" msgstr "" msgid "To ID" msgstr "" msgid "Toggle all privileges" msgstr "" msgid "Tools" msgstr "" msgid "Transparent" msgstr "" msgid "URL" msgstr "URL" msgid "US Format" msgstr "" msgid "Unauthenticated User" msgstr "" msgid "United States of America (m/d/y)" msgstr "USA (m/d/r)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Aktualizuj" msgid "Updated" msgstr "Zaktualizowano" msgid "Updating Collection record." msgstr "" msgid "Updating Member of this Group Principal" msgstr "" msgid "Updating Principal record." msgstr "" msgid "Updating grants by this Principal" msgstr "" msgid "Upgrade DAViCal database schema" msgstr "" msgid "Upgrade Database" msgstr "" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "" msgid "User Details" msgstr "Dane użytkownika" msgid "User Functions" msgstr "" msgid "User Name" msgstr "Nazwa użytkownika" msgid "User Roles" msgstr "Role użytkownika" msgid "User is active" msgstr "Użytkownik aktywny" msgid "User record written." msgstr "Dane użytkownika zostały zapisane." msgid "Username" msgstr "" msgid "View My Details" msgstr "" msgid "View my own principal record" msgstr "" msgid "View this user record" msgstr "Zobacz dane tego użytkownika" msgid "Visit the DAViCal Wiki" msgstr "" #, php-format msgid "Want: %s, Currently: %s" msgstr "Potrzebuje: %s, Aktualnie: %s" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "Kiedy potwierdzono adres e-mail" msgid "Write" msgstr "" msgid "Write ACLs for a resource or collection" msgstr "" msgid "Write Access Controls" msgstr "" msgid "Write Data" msgstr "" msgid "Write Metadata" msgstr "" msgid "Write content" msgstr "" msgid "Write properties" msgstr "" msgid "Yes" msgstr "Tak" msgid "You are editing" msgstr "Edytujesz" msgid "You are not authorised to use this function." msgstr "Nie masz uprawnień aby użyć tej funkcji." msgid "You are viewing" msgstr "Przeglądasz" msgid "You do not have permission to modify this record." msgstr "Nie posiadasz uprawnień do edycji tych danych" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "Musisz się zalogować." msgid "Your configuration produced PHP errors which should be corrected" msgstr "Twoja konfiguracja powoduje błędy PHP, które należy poprawić" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "Katalog %s nie jest do odczytu" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap: Nie można uruchomić TLS: ldap_start_tls() spowodowało błąd" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "drivers_pwauth_pam: Nie można odnaleźć pliku %s " #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam: Nie można odnaleźć pliku %s " #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "zapamiętaj mnie" msgid "from principal" msgstr "" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "powinieneś zalogować się swoją nazwą użytkownika i hasłem." davical-1.1.1/po/pt_BR.po0000644000000000000000000012265711767336605012022 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # , 2011. # , 2012. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.net/projects/p/davical/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "%F %T" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "%T" msgid "*** Default Locale ***" msgstr "*** *** Localidade padrão" msgid "*** Unknown ***" msgstr "*** *** Unknown" #, php-format msgid "- adding %s to group : %s" msgstr "- Adicionar %s ao grupo: %s" #, php-format msgid "- adding users %s to group : %s" msgstr "- Adicionando %s para grupo de usuários: %s" #, php-format msgid "- creating groups : %s" msgstr "- Criando os grupos: %s" #, php-format msgid "- creating record for users : %s" msgstr "- Criação de registro para os usuários: %s" #, php-format msgid "- deactivate groups : %s" msgstr "- Desativando os grupos: %s" #, php-format msgid "- deactivating users : %s" msgstr "- Desativando os usuários: %s" #, php-format msgid "- nothing done on : %s" msgstr "- Nada foi feito em: %s" #, php-format msgid "- removing %s from group : %s" msgstr "- Removendo %s do grupo: %s" #, php-format msgid "- updating groups : %s" msgstr "- Atualizando os grupos: %s" #, php-format msgid "- updating user records : %s" msgstr "- Atualizando o registro do usuário: %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "ATENÇÃO: todos os eventos neste caminho serão removidos antes de inserir o arquivo allof ics" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "

Ajuda

Para obter ajuda inicial você deve visitar a Página Inicial do projeto DAViCal ou dar uma olhada no Wiki do DAViCal .

Se você não consegue encontrar as respostas lá, visite-nos no IRC canal #davical em irc.oftc.net , ou envie uma pergunta para a Lista de discussão dos usuários do DAViCal .

Os arquivos dapodem ser muito úteis.

" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Por favor, Registre-se no sistema

Para o acesso ao %s você deve registrar-se com o nome de usuário e senha que foram emitidos para você.

Se você gostaria de solicitar o acesso, envie um e-mail para %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "Uma coleção principal do DAViCal só pode conter coleções" msgid "A collection already exists at that location." msgstr "A coleção já existe naquele local." msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "Um recurso já existe no destino." msgid "AWL Library version " msgstr "Versão da Biblioteca AWL" msgid "Access Tickets" msgstr "Os bilhetes de acesso" msgid "Access ticket deleted" msgstr "Ticket de acesso excluído" msgid "Action" msgstr "Ação" msgid "Active" msgstr "Ativo" msgid "Adding new member to this Group Principal" msgstr "Adicionando novo membro a este grupo principal" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Admin" msgid "Administration" msgstr "Administração" msgid "Administrator" msgstr "Administrador" msgid "All" msgstr "Todos" msgid "All collection data will be unrecoverably deleted." msgstr "Todo conjunto de dados serão apagados de forma irrecuperável." #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "Todos os eventos do usuário \"%s\" foram removidos e substituídos pelos do arquivo %s" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "Todos os calendários do diretor e eventos serão apagados de forma irrecuperável." msgid "All privileges" msgstr "Todos os privilégios" msgid "All requested changes were made." msgstr "Todas as alterações solicitadas foram realizadas." msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "Permitir verificações livre / ocupado destinadas ao proprietário deste agendamento" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "Um usuário \"Administrador\" tem todos os direitos para o Sistema DAViCal" msgid "Anonymous users are not allowed to modify calendars" msgstr "Os usuários anônimos não têm permissão para modificar calendários" msgid "Anonymous users may only access public calendars" msgstr "Usuários anônimos podem acessar apenas calendários públicos" msgid "Append" msgstr "" msgid "Application DB User" msgstr "Aplicação do usuário DB" msgid "Apply Changes" msgstr "Aplicar Alterações" msgid "Apply DB Patches" msgstr "Aplicar Patches DB" msgid "Attachment" msgstr "Anexo" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "Vínculo excluído" msgid "Bindings to other collections" msgstr "Ligações para outras coleções" msgid "Bindings to this Collection" msgstr "Ligações para esta coleção" msgid "Bindings to this Principal's Collections" msgstr "Ligações para este Coleção do principal" msgid "Body contains no XML data!" msgstr "O Corpo não contém dados XML!" msgid "Bound As" msgstr "Ligado como" msgid "Browse all users" msgstr "Navegue por todos os usuários" msgid "Busy" msgstr "Ocupado" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "Calendário \"%s\" foi carregado a partir de arquivos." msgid "Calendar Principals" msgstr "Administradores do calendário" msgid "Calendar Timezone" msgstr "Fuso horário do calendário" msgid "Can only add tickets for existing collection paths which you own" msgstr "Só é possível adicionar tickets para os caminhos de coleção existentes e que você possui" msgid "Categories" msgstr "Categorias" msgid "Change Password" msgstr "Alterar senha" msgid "Click to display user details" msgstr "Clique para exibir detalhes do usuário" msgid "Click to edit principal details" msgstr "Clique para editar os detalhes principais" msgid "Collection" msgstr "Coleção" msgid "Collection Grants" msgstr "Permissões da coleção" msgid "Collection ID" msgstr "ID da coleção" msgid "Collection deleted" msgstr "Coleção excluída" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "Coleções não podem ser ambos os calendários CalDAV e addressbooks CardDAV ao mesmo tempo" msgid "Configuring Calendar Clients for DAViCal" msgstr "Configurando os clientes de Calendário para DAViCal" msgid "Configuring DAViCal" msgstr "Configurando DAViCal" msgid "Confirm" msgstr "Confirmar" msgid "Confirm Deletion of the Binding" msgstr "Confirmar a exclusão da vinculação" msgid "Confirm Deletion of the Collection" msgstr "Confirmar a exclusão da Coleção" msgid "Confirm Deletion of the Principal" msgstr "Confirmar a exclusão do principal" msgid "Confirm Deletion of the Ticket" msgstr "Confirmar a exclusão do Ticket" msgid "Confirm Password" msgstr "Confirme sua senha" msgid "Confirm the new password." msgstr "Confirme a nova senha." msgid "Could not retrieve" msgstr "Não foi possível recuperar" msgid "Create" msgstr "Criar" msgid "Create Collection" msgstr "Criar Coleção" msgid "Create Events/Collections" msgstr "Criar Eventos / Coleções" msgid "Create New Collection" msgstr "Criar Nova Coleção" msgid "Create New Principal" msgstr "Criar novo principal" msgid "Create Principal" msgstr "Criar Principal" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Criar um novo principal (ou seja um novo usuário de recursos, ou grupo)" msgid "Create a resource or collection" msgstr "Criar um recurso ou coleção" msgid "Creating new Collection." msgstr "Criação de nova coleção." msgid "Creating new Principal record." msgstr "Criação de registro principal novo." msgid "Creating new ticket granting privileges to this Principal" msgstr "Criação de novo bilhete concedendo privilégios a este principal" msgid "Current DAViCal version " msgstr "DAViCal versão atual" msgid "DAV Path" msgstr "Caminho DAV" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "DAV:: resourcetype só pode ser definido como um valor novo, não pode ser removido." msgid "DAViCal CalDAV Server" msgstr "Servidor DAViCal CalDAV" msgid "DAViCal DB Schema version " msgstr "Versão de esquema DAViCal DB" msgid "DAViCal Homepage" msgstr "Homepage DAViCal" msgid "DAViCal Wiki" msgstr "DAViCal Wiki" msgid "DAViCal only allows BIND requests for collections at present." msgstr "DAViCal só permite solicitações BIND para coleções no neste momento." msgid "DKIM signature missing" msgstr "Assinatura DKIM faltando" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "validação da assinatura DKIM falhou (erro de DNS)" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "validação da assinatura DKIM falhou (ERROR Parse KEY)" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "validação da assinatura DKIM falhou (Erro de validação KEY)" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "validação da assinatura DKIM falhou (erro de verificação de assinatura)" msgid "Database Error" msgstr "Erro de banco de dados" msgid "Database Host" msgstr "Host do banco de dados" msgid "Database Name" msgstr "Nome do banco de dados" msgid "Database Owner" msgstr "Proprietário de banco de dados" msgid "Database Password" msgstr "Senha do banco de dados" msgid "Database Port" msgstr "Porta do Banco de dados" msgid "Database Username" msgstr "Nome de usuário do banco de dados" msgid "Database error" msgstr "Erro de banco de dados" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Formato do estilo da Data" msgid "Date Style" msgstr "Estilo da data" msgid "Default Privileges" msgstr "Privilégios padrão" msgid "Default relationships added." msgstr "Relacionamentos padrão adicionados." msgid "Delete" msgstr "Excluir" msgid "Delete Events/Collections" msgstr "Excluir Eventos / Coleções" msgid "Delete Principal" msgstr "Excluir principal" msgid "Delete a resource or collection" msgstr "Excluir um recurso ou coleção" msgid "Deleted a grant from this Principal" msgstr "Excluída uma permissão a partir deste Principal" msgid "Deleting Binding:" msgstr "Excluindo Vinculação:" msgid "Deleting Collection:" msgstr "Exclusão de Coleção:" msgid "Deleting Principal:" msgstr "Excluindo Principal:" msgid "Deleting Ticket:" msgstr "Exclusão de Ticket:" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "Entregar convites agendados de um organizador para esta caixa de entrada de agendamento" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "Entregar respostas de agendamento de um participante a esta caixa de entrada de agendamento" msgid "Dependencies" msgstr "Dependências" msgid "Dependency" msgstr "Dependência" msgid "Description" msgstr "Descrição" msgid "Destination collection does not exist" msgstr "Coleção de destino não existe" msgid "Directory on the server" msgstr "Diretório no servidor" msgid "Display Name" msgstr "Nome para Exibição" msgid "Displayname" msgstr "Displayname" msgid "Does the user have the right to perform this role?" msgstr "O usuário tem o direito de desempenhar este papel?" msgid "Domain" msgstr "Domínio" msgid "EMail" msgstr "EMail" msgid "EMail OK" msgstr "EMail OK" msgid "ERROR: The full name may not be blank." msgstr "ERRO: O nome completo não pode estar em branco." msgid "ERROR: The new password must match the confirmed password." msgstr "ERRO: A nova senha deve corresponder à senha confirmada." msgid "ERROR: There was a database error writing the roles information!" msgstr "ERRO: Houve um erro de banco de dados ao gravar as informações de regras!" msgid "Edit" msgstr "Editar" msgid "Edit this user record" msgstr "Editar registro de usuário" msgid "Email Address" msgstr "Endereço de e-mail" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Digite um nome de usuário, se você conhecer, e clique aqui, para ser enviada por e-mail uma senha temporária." msgid "Enter your username and password then click here to log in." msgstr "Digite seu nome de usuário e senha, clique aqui para entrar" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Erro NoGroupFound com filtro >%s<, atributos >%s<; dn >%s<" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Erro NoUserFound com filtro >%s<, atributos >%s<, dn >%s<" msgid "Error querying database." msgstr "Erro consultando banco de dados." msgid "Error writing calendar details to database." msgstr "Erro ao escrever detalhes do calendário para o banco de dados." msgid "Error writing calendar properties to database." msgstr "Erro ao gravar as propriedades do calendário para o banco de dados." msgid "European" msgstr "Europeu" msgid "European (d/m/y)" msgstr "Europeu (d / m / y)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "Recurso existente não corresponde ao cabeçalho \"If-Match\" - não aceito." msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "Recurso existente no cabeçalho \"If-None-Match\" - não aceito." msgid "Expires" msgstr "Expira" msgid "External Calendars" msgstr "Calendários externos" msgid "External Url" msgstr "Url externa" msgid "Fail" msgstr "Falha" msgid "Failed to write collection." msgstr "Falha ao gravar coleção." msgid "Feeds are only supported for calendars at present." msgstr "Inserções são suportadas apenas para calendários no presente." msgid "For access to the" msgstr "Para o acesso ao" msgid "Forbidden" msgstr "Proibido" msgid "Free/Busy" msgstr "Livre / Ocupado" msgid "Full Name" msgstr "Nome Completo" msgid "Fullname" msgstr "Fullname" msgid "GET requests on collections are only supported for calendars." msgstr "Solicitações GET em coleções são suportados apenas para calendários." msgid "GNU gettext support" msgstr "Suporte ao GNU gettext" msgid "GO!" msgstr "IR!" msgid "Go to the DAViCal Feature Requests" msgstr "Ir para as requisições de funcionalidades do DAViCal" msgid "Grant" msgstr "Conceder" msgid "Granting new privileges from this Principal" msgstr "Concessão de novos privilégios a partir deste principal" #. Translators: in the sense of a group of people msgid "Group" msgstr "Grupo" msgid "Group Members" msgstr "Membros do Grupo" msgid "Group Memberships" msgstr "Participações no grupo" msgid "Group Principals" msgstr "Principais do grupo" msgid "Has Members" msgstr "Tem membros" msgid "Help" msgstr "Ajuda" msgid "Help on the current screen" msgstr "Ajuda na tela atual" msgid "Help! I've forgotten my password!" msgstr "Ajuda! Esqueci minha senha!" msgid "Home" msgstr "Início" msgid "Home " msgstr "" msgid "Home Page" msgstr "Página Inicial" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "Formato ISO" msgid "ISO Format (YYYY-MM-DD)" msgstr "Formato ISO (AAAA-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "id" msgid "If you have forgotten your password then" msgstr "Se você esqueceu sua senha, então," msgid "If you would like to request access, please e-mail" msgstr "Se você gostaria de solicitar o acesso, envie um e-mail" msgid "Import all .ics files of a directory" msgstr "Importar todos os arquivos. Ics de um diretório" msgid "Import calendars and Synchronise LDAP." msgstr "Importar calendários e sincronizar LDAP." msgid "Inactive Principals" msgstr "Principais inativos" msgid "Incorrect content type for addressbook: " msgstr "Tipo de conteúdo incorreto para endereços:" msgid "Incorrect content type for calendar: " msgstr "Tipo de conteúdo incorreto para o calendário:" msgid "Invalid user name or password." msgstr "Nome de usuário ou senha inválidos." msgid "Invalid username or password." msgstr "Nome de usuário ou senha inválidos." msgid "Is Member of" msgstr "É Membro de" msgid "Is a Calendar" msgstr "É um Calendário" msgid "Is an Addressbook" msgstr "É um Addressbook" msgid "Is this user active?" msgstr "Este usuário está ativo?" msgid "Items in Collection" msgstr "Itens na coleção" msgid "Joined" msgstr "Cadastrado" msgid "Language" msgstr "Linguagem" msgid "Last used" msgstr "Usado pela última vez" msgid "List External Calendars" msgstr "Lista de Calendários Externos" msgid "List Groups" msgstr "Listar grupos" msgid "List Resources" msgstr "Listar recursos" msgid "List Users" msgstr "Listar usuários" msgid "Load From File" msgstr "Carregar a partir do arquivo" msgid "Locale" msgstr "Localidade" msgid "Location" msgstr "Localização" msgid "Log On Please" msgstr "Por favor, Identifique-se" msgid "Log out of DAViCal" msgstr "Sair do DAViCal" msgid "Logout" msgstr "Sair" msgid "Member deleted from this Group Principal" msgstr "Membro excluídos deste Grupo principal" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "A maior parte do DAViCal funcionará, mas a atualização para PHP 5.2 ou posterior é fortemente recomendado." msgid "Name" msgstr "Nome" msgid "New Collection" msgstr "Nova coleção" msgid "New Password" msgstr "Nova Senha" msgid "New Principal" msgstr "Novo principal" #. Translators: not 'Yes' msgid "No" msgstr "Não" msgid "No calendar content" msgstr "Nenhum conteúdo de calendário" msgid "No collection found at that location." msgstr "Nenhuma coleção encontrada no local." msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "Sem resumo" #. Translators: short for 'Number' msgid "No." msgstr "Não." msgid "No. of Collections" msgstr "No. de Coleções" msgid "No. of Principals" msgstr "No. de Principais" msgid "No. of Resources" msgstr "No. de Recursos" msgid "Not overwriting existing destination resource" msgstr "Não substituir recurso de destino existente" msgid "Opaque" msgstr "Opaco" msgid "Organizer Missing" msgstr "Organizador faltando" msgid "Override a Lock" msgstr "Substituir um bloqueio" msgid "PDO PostgreSQL drivers" msgstr "Drivers de PDO do PostgreSQL" msgid "PHP DateTime class" msgstr "Classe PHP DateTime" msgid "PHP LDAP module available" msgstr "Módulo PHP LDAP disponível" msgid "PHP Magic Quotes GPC off" msgstr "PHP Magic Quotes GPC desligado" msgid "PHP Magic Quotes runtime off" msgstr "PHP Magic Quotes runtime desligado" msgid "PHP PDO module available" msgstr "Módulo do PHP PDO disponível" msgid "PHP calendar extension available" msgstr "Extensão PHP calendar disponível" msgid "PHP curl support" msgstr "Suporte a PHP curl" msgid "PHP iconv support" msgstr "Suporte a PHP iconv" msgid "PHP not using Apache Filter mode" msgstr "O PHP não está usando o modo de filtragem do Apache" msgid "PHP5 curl support is required for external binds" msgstr "Suporte do curl PHP5 é requerido para ligações externas" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "Colocar em uma coleção só é permitido para texto / conteúdo do calendário em uma coleção de calendário" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "PUT em uma coleção só é permitido para conteúdos do tipo texto/vcard contra uma coleção de endereços" msgid "Passed" msgstr "Passou" msgid "Password" msgstr "Senha" msgid "Path" msgstr "Caminho" msgid "Person" msgstr "Pessoa" msgid "Please confirm deletion of access ticket - see below" msgstr "Por favor, confirme a exclusão do bilhete de acesso - veja abaixo" msgid "Please confirm deletion of binding - see below" msgstr "Por favor, confirme a exclusão de vínculo - veja abaixo" msgid "Please confirm deletion of collection - see below" msgstr "Por favor, confirme a exclusão de coleção - veja abaixo" msgid "Please confirm deletion of the principal" msgstr "Por favor, confirme a exclusão do principal" msgid "Please note the time and advise the administrator of your system." msgstr "Por favor, verifique o tempo e avise o administrador do sistema." msgid "Principal" msgstr "Principal" msgid "Principal Collections" msgstr "Coleções principais" msgid "Principal Grants" msgstr "Permissões principais" msgid "Principal ID" msgstr "ID principais" msgid "Principal Type" msgstr "Tipo principais" msgid "Principal deleted" msgstr "Principais excluídos" msgid "Privileges" msgstr "Privilégios" msgid "Privileges granted to All Users" msgstr "Privilégios concedidos a todos os usuários" msgid "Privileges to allow delivery of scheduling messages" msgstr "Privilégios para permitir a entrega de mensagens de agendamento" msgid "Privileges to delegate scheduling decisions" msgstr "Privilégios para delegar as decisões de agendamento" msgid "Property is read-only" msgstr "Propriedade é somente leitura" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Público" msgid "Publicly Readable" msgstr "Publicamente legível" msgid "REPORT body contains no XML data!" msgstr "Corpo REPORT não contém dados XML!" msgid "REPORT body is not valid XML data!" msgstr "Corpo REPORT não é um dado XML válido!" msgid "Read" msgstr "Ler" msgid "Read ACLs for a resource or collection" msgstr "Ler ACLs para um recurso ou coleção" msgid "Read Access Controls" msgstr "Ler Controles de Acesso" msgid "Read Current User's Access" msgstr "Ler acesso do usuário atual" msgid "Read Free/Busy Information" msgstr "Ler informação de Livre / Ocupado" msgid "Read the content of a resource or collection" msgstr "Ler o conteúdo de um recurso ou coleção" msgid "" "Read the details of the current user's access control to this resource." msgstr "Ler os detalhes de controle de acesso deste recurso para o usuário atual" msgid "Read the free/busy information for a calendar collection" msgstr "Ler as informações livre/ocupado para uma coleção de calendário" msgid "Read/Write" msgstr "Ler/Gravar" msgid "References" msgstr "Referências" msgid "Remove" msgstr "Remover" msgid "Remove a lock" msgstr "Remover um bloqueio" msgid "Remove dangling external calendars" msgstr "Remover calendários externos pendentes" msgid "Report Bug" msgstr "Relatório de Falhas" msgid "Report a bug in the system" msgstr "Relatar uma falha no sistema" msgid "Request Feature" msgstr "Solicitar uma funcionalidade" msgid "Request body is not valid XML data!" msgstr "Corpo da requisição não é um dado XML válido!" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Recurso" msgid "Resource Calendar Principals" msgstr "Recurso de Calendário Principal" msgid "Resource Not Found." msgstr "Recurso não encontrado." msgid "Resource has changed on server - not deleted" msgstr "O recurso foi alterado no servidor - não excluída" msgid "Resources may not be changed to / from collections." msgstr "Recursos não podem ser mudados para/de coleções." msgid "Revoke" msgstr "Revogar" msgid "SRV Record" msgstr "Registro SRV" msgid "Schedule Deliver" msgstr "Entregar agenda" msgid "Schedule Send" msgstr "Enviar agenda" msgid "Schedule Transparency" msgstr "Transparência da agenda" msgid "Scheduling: Deliver a Reply" msgstr "Agendamento: Entregar uma Resposta" msgid "Scheduling: Deliver an Invitation" msgstr "Agendamento: Entregar um Convite" msgid "Scheduling: Delivery" msgstr "Agendamento: Entrega" msgid "Scheduling: Query free/busy" msgstr "Agendamento: Consultar livre/ocupado" msgid "Scheduling: Send a Reply" msgstr "Agendamento: Enviar resposta" msgid "Scheduling: Send an Invitation" msgstr "Agendamento: Enviar um convite" msgid "Scheduling: Send free/busy" msgstr "Agendamento: Enviar livre/ocupado" msgid "Scheduling: Sending" msgstr "Agendamento: Enviando" msgid "Send free/busy enquiries" msgstr "Enviar solicitação de livre/ocupado" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "Enviar convites de agendamento como um organizador do proprietário desta caixa de saída de agendamento." msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "Enviar respostas de agendamento como um participante do proprietário desta caixa de saída de agendamento." msgid "Set free/busy privileges" msgstr "Definir privilégios de Livre/Ocupado" msgid "Set read privileges" msgstr "Definir privilégios de leitura" msgid "Set read+write privileges" msgstr "Definir privilégios de leitura+gravação" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "Definir o caminho para armazenar seu ics, por exemplo 'calendar' será referenciado como caldav.php/username/calendar/" msgid "Setup" msgstr "Configuração" msgid "Setup DAViCal" msgstr "Configurar DAViCal" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Mostrar ajuda sobre" msgid "Site Statistics" msgstr "Estatísticas do site" msgid "Site Statistics require the database to be available!" msgstr "Estatísticas do site requerem o banco de dados para estarem disponíveis!" msgid "Some properties were not able to be changed." msgstr "Algumas propriedades não puderam ser alteradas." msgid "Some properties were not able to be set." msgstr "Algumas propriedades não puderam ser definidas." msgid "Source resource does not exist." msgstr "Recursos de origem não existem." msgid "" "Special collections may not contain a calendar or other special collection." msgstr "Coleções especiais não podem conter um calendário ou outra coleção especial." msgid "Specific Privileges" msgstr "Privilégios específicos" msgid "Status" msgstr "Estado" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "Estado: %d, Mensagem: %s, Usuário: %d, Caminho: %s" msgid "Submit" msgstr "Submeter" msgid "Suhosin \"server.strip\" disabled" msgstr "Suhosin \"server.strip\" desabilitado" msgid "Sync LDAP Groups with DAViCal" msgstr "Sincronizar Grupos LDAP com DAViCal" msgid "Sync LDAP with DAViCal" msgstr "Sincronizar o LDAP com DAViCal" msgid "Target" msgstr "Alvo" msgid "That destination name contains invalid characters." msgstr "Esse nome de destino contém caracteres inválidos." msgid "That resource is not present on this server." msgstr "Esse recurso não está presente no servidor." msgid "The BIND Request MUST identify an existing resource." msgstr "A requisição BIND \"deve identificar um recurso existente." msgid "The BIND Request-URI MUST identify a collection." msgstr "A requisição BIND Request-URI deve identificar uma coleção." msgid "The BIND method is not allowed at that location." msgstr "O método BIND não é permitido naquele local." msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "O CalDAV: a propriedade schedule-calendar-transp pode ser definida apenas em calendários." msgid "The DAViCal Home Page" msgstr "A Home Page do DAViCal" msgid "The access ticket will be deleted." msgstr "O bilhete de acesso será apagado." msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "O relatório de endereços de consulta deve ser executado em uma coleção de endereços" msgid "The application failed to understand that request." msgstr "O aplicativo não conseguiu entender esta requisição\n." msgid "The application program does not understand that request." msgstr "O programa da aplicação não entende esta requisição." msgid "The binding will be deleted." msgstr "O vínculo será apagado." msgid "The calendar path contains illegal characters." msgstr "O caminho do calendário contém caracteres ilegais." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "O relatório do calendário de consulta deve ser executado em um calendário ou em uma coleção de calendário" msgid "The collection name may not be blank." msgstr "O nome da coleção não pode ficar em branco." msgid "The destination collection does not exist" msgstr "A coleção de destino não existe" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "O displayname só pode ser definido em coleções, diretores ou ligações." msgid "The email address really should not be blank." msgstr "O endereço de e-mail realmente não deve ficar em branco." #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "O arquivo \"%s\" não está codificado em UTF-8, por favor verifique o log de erros para mais detalhes" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "O arquivo não é codificado UTF-8, por favor, verifique o erro para mais detalhes." msgid "The full name for this person, group or other type of principal." msgstr "O nome completo para essa pessoa, grupo ou outro tipo de principal." msgid "The full name must not be blank." msgstr "O nome completo não deve ficar em branco." msgid "The name this user can log into the system with." msgstr "O nome com que este usuário poderá se logar no sistema." msgid "The path on the server where your .ics files are." msgstr "O caminho no servidor onde seus arquivos .ics estão." msgid "The preferred language for this person." msgstr "O idioma preferido para essa pessoa." #, php-format msgid "The principal \"%s\" does not exist" msgstr "O principal \"%s\" não existe" msgid "The style of dates used for this person." msgstr "O estilo de datas utilizadas para essa pessoa." msgid "The user's e-mail address." msgstr "O endereço de email do usuário." msgid "The user's full name." msgstr "Nome completo do usuário." msgid "The user's password for logging in." msgstr "A senha do usuário para entrada no sistema" msgid "The username must not be blank, and may not contain a slash" msgstr "O nome de usuário não deve ficar em branco, e não pode conter uma barra" msgid "There was an error reading from the database." msgstr "Houve um erro de leitura do banco de dados." msgid "There was an error writing to the database." msgstr "Houve um erro ao gravar no banco de dados." msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Esta operação faz o seguinte:
  • verifica grupos válidos no diretório LDAP
  • verifica os grupos no DAViCal
então
  • se um grupo está presente no DAViCal, mas não está presente no LDAP, o mesmo será ajustado como inativo no DAViCal
  • se um grupo está presente no LDAP, mas não está no DAViCal, o mesmo será criado no DAViCal
  • se um grupo está presente no LDAP e no DAViCal, então, suas informações serão atualizadas no DAViCal
" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Esta operação faz o seguinte:
  • verifica os usuários válidos no diretório LDAP
  • verifica usuários no DAViCal
,então,
  • se um usuário está presente no DAViCal, mas não está presente no LDAP, o mesmo será colocado como inativo no DAViCal
  • se um usuário está presente no LDAP, mas não está presente no DAViCal, o mesmo será criado no DAViCal
  • se um usuário estiver presente no LDAP e presente no DAViCal, então suas informações serão atualizadas no DAViCal
" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "Esta página primeiramente verifica o ambiente necessário para o DAViCal funcionar corretamente. Sugestões ou correções para novas funcionalidades serão gratamente recebidas." msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "Este processo irá importar cada arquivo em um diretório chamado \"username.ics\" e criar um usuário e um calendário para cada arquivo a ser importado." msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "Este servidor só suporta o formato de texto/calendário para URLs livre/ocupado" msgid "Ticket ID" msgstr "ID do Ticket" msgid "Time" msgstr "Hora" msgid "To Collection" msgstr "Para Coleção" msgid "To ID" msgstr "Para o ID" msgid "Toggle all privileges" msgstr "Alternar todos os privilégios" msgid "Tools" msgstr "Ferramentas" msgid "Transparent" msgstr "Transparente" msgid "URL" msgstr "URL" msgid "US Format" msgstr "Formato US" msgid "Unauthenticated User" msgstr "Usuário não autenticado" msgid "United States of America (m/d/y)" msgstr "Estados Unidos da América (m/d/y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Atualizar" msgid "Updated" msgstr "Atualizado" msgid "Updating Collection record." msgstr "Atualizando os registros da Coleção." msgid "Updating Member of this Group Principal" msgstr "Atualizando Membro para este Gerente de Grupo" msgid "Updating Principal record." msgstr "Atualizando registro de Gerente de Grupo." msgid "Updating grants by this Principal" msgstr "Atualizando permissões para este Gerente de Grupo" msgid "Upgrade DAViCal database schema" msgstr "Atualização do esquema do banco de dados do DAViCal" msgid "Upgrade Database" msgstr "Atualização do Banco de dados" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "Gerente de calendário de usuários" msgid "User Details" msgstr "Detalhes do Usuário" msgid "User Functions" msgstr "Funções do Usuário" msgid "User Name" msgstr "Nome de usuário" msgid "User Roles" msgstr "Funções de usuário" msgid "User is active" msgstr "O Usuário está ativo" msgid "User record written." msgstr "Registro de usuário gravado." msgid "Username" msgstr "Nome de Usuário" msgid "View My Details" msgstr "Ver Meus Detalhes" msgid "View my own principal record" msgstr "Ver meu próprio registro principal" msgid "View this user record" msgstr "Ver este registro de usuário" msgid "Visit the DAViCal Wiki" msgstr "Visite o Wiki do DAViCal" #, php-format msgid "Want: %s, Currently: %s" msgstr "Deve ser: %s, Atualmente: %s" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "Atenção: não há usuários administradores ativos! Você deve corrigir isso antes de sair. Considere usar a configuração $c->do_not_sync_from_ldap." msgid "When the user's e-mail account was validated." msgstr "Quando a conta de email do usuário foi validada." msgid "Write" msgstr "Gravar" msgid "Write ACLs for a resource or collection" msgstr "Gravar as ACLs para um recurso ou coleção" msgid "Write Access Controls" msgstr "Gravar Controles de Acesso" msgid "Write Data" msgstr "Gravar Dados" msgid "Write Metadata" msgstr "Gravar Metadados" msgid "Write content" msgstr "Gravar conteúdo" msgid "Write properties" msgstr "Gravar propriedades" msgid "Yes" msgstr "Sim" msgid "You are editing" msgstr "Você está editando" msgid "You are not authorised to use this function." msgstr "Você não está autorizado a usar esta função." msgid "You are viewing" msgstr "Você está visualizando" msgid "You do not have permission to modify this record." msgstr "Você não tem permissão para modificar este registro." msgid "You may not PUT to a collection URL" msgstr "Você não pode postar em uma URL de coleção" msgid "You must log in to use this system." msgstr "Você deve fazer login para utilizar este sistema." msgid "Your configuration produced PHP errors which should be corrected" msgstr "Sua configuração possui erros de PHP que devem ser corrigido" msgid "calendar-timezone property is only valid for a calendar." msgstr "a propriedade de fuso horário de calendário, só é válida para um calendário." #, php-format msgid "directory %s is not readable" msgstr "diretório %s não é legível" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "drivers_imap_pam: parâmetro imap_url não configurado em /etc/davical/*-conf.php" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap: Não foi possível iniciar TLS: ldap_start_tls () falhou" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap: Falha ao conectar ao host %1$s na porta %2$s com binddn %3$s" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap: Falha ao tentar acessar a base LDAP utilizando a versão 3 do protocolo, TLS não suportado" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap: Não é possível conectar à base LDAP - verifique a configuração dos parâmetros bindDN e passDN, e se o seu servidor LDAP pode ser alcançado" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap: Não é possível conectar-se à base LDAP na porta %s no host %s" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap: função ldap_connect não definida, verifique o módulo php_ldap" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "drivers_pwauth_pam: Não é possível encontrar o arquivo %s" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam: Não é possível encontrar o arquivo %s" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "não esquecer de mim" msgid "from principal" msgstr "do principal" msgid "iSchedule Domains" msgstr "Domínios iSchedule" msgid "invalid request" msgstr "requisição inválida" msgid "path to store your ics" msgstr "caminho para armazenar seu ics" msgid "recipient must be organizer or attendee of event" msgstr "destinatário precisa ser organizador ou participante do evento" msgid "sender must be organizer or attendee of event" msgstr "remetente precisa ser organizador ou participante do evento" msgid "unauthenticated" msgstr "não autenticado" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "você deve fazer logon com o nome de usuário e senha que foram emitidos para você." davical-1.1.1/po/it.values0000644000000000000000000000005411633117640012257 0ustar VALUES( 'it', 'Italian', 'Italiano' ); davical-1.1.1/po/messages.pot0000644000000000000000000006132411767336605013000 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Translators: this is the formatting of a date with time. See http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "" #. Translators: his is the formatting of just the time. See http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "" msgid "*** Default Locale ***" msgstr "" msgid "*** Unknown ***" msgstr "" #, php-format msgid "- adding %s to group : %s" msgstr "" #, php-format msgid "- adding users %s to group : %s" msgstr "" #, php-format msgid "- creating groups : %s" msgstr "" #, php-format msgid "- creating record for users : %s" msgstr "" #, php-format msgid "- deactivate groups : %s" msgstr "" #, php-format msgid "- deactivating users : %s" msgstr "" #, php-format msgid "- nothing done on : %s" msgstr "" #, php-format msgid "- removing %s from group : %s" msgstr "" #, php-format msgid "- updating groups : %s" msgstr "" #, php-format msgid "- updating user records : %s" msgstr "" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list." "

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "" msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "" msgid "AWL Library version " msgstr "" msgid "Access Tickets" msgstr "" msgid "Access ticket deleted" msgstr "" msgid "Action" msgstr "" msgid "Active" msgstr "" msgid "Adding new member to this Group Principal" msgstr "" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "" msgid "Administration" msgstr "" msgid "Administrator" msgstr "" msgid "All" msgstr "" msgid "All collection data will be unrecoverably deleted." msgstr "" #, php-format msgid "" "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "" msgid "All privileges" msgstr "" msgid "All requested changes were made." msgstr "" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "" msgid "Anonymous users are not allowed to modify calendars" msgstr "" msgid "Anonymous users may only access public calendars" msgstr "" msgid "Append" msgstr "" msgid "Application DB User" msgstr "" msgid "Apply Changes" msgstr "" msgid "Apply DB Patches" msgstr "" msgid "Attachment" msgstr "" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "" msgid "Bindings to other collections" msgstr "" msgid "Bindings to this Collection" msgstr "" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "" msgid "Busy" msgstr "" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "" msgid "Calendar Principals" msgstr "" msgid "Calendar Timezone" msgstr "" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "" msgid "Change Password" msgstr "" msgid "Click to display user details" msgstr "" msgid "Click to edit principal details" msgstr "" msgid "Collection" msgstr "" msgid "Collection Grants" msgstr "" msgid "Collection ID" msgstr "" msgid "Collection deleted" msgstr "" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the " "same time" msgstr "" msgid "Configuring Calendar Clients for DAViCal" msgstr "" msgid "Configuring DAViCal" msgstr "" msgid "Confirm" msgstr "" msgid "Confirm Deletion of the Binding" msgstr "" msgid "Confirm Deletion of the Collection" msgstr "" msgid "Confirm Deletion of the Principal" msgstr "" msgid "Confirm Deletion of the Ticket" msgstr "" msgid "Confirm Password" msgstr "" msgid "Confirm the new password." msgstr "" msgid "Could not retrieve" msgstr "" msgid "Create" msgstr "" msgid "Create Collection" msgstr "" msgid "Create Events/Collections" msgstr "" msgid "Create New Collection" msgstr "" msgid "Create New Principal" msgstr "" msgid "Create Principal" msgstr "" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "" msgid "Create a resource or collection" msgstr "" msgid "Creating new Collection." msgstr "" msgid "Creating new Principal record." msgstr "" msgid "Creating new ticket granting privileges to this Principal" msgstr "" msgid "Current DAViCal version " msgstr "" msgid "DAV Path" msgstr "" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "" msgid "DAViCal CalDAV Server" msgstr "" msgid "DAViCal DB Schema version " msgstr "" msgid "DAViCal Homepage" msgstr "" msgid "DAViCal Wiki" msgstr "" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "" msgid "Database Error" msgstr "" msgid "Database Host" msgstr "" msgid "Database Name" msgstr "" msgid "Database Owner" msgstr "" msgid "Database Password" msgstr "" msgid "Database Port" msgstr "" msgid "Database Username" msgstr "" msgid "Database error" msgstr "" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "" msgid "Date Style" msgstr "" msgid "Default Privileges" msgstr "" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "" msgid "Delete Events/Collections" msgstr "" msgid "Delete Principal" msgstr "" msgid "Delete a resource or collection" msgstr "" msgid "Deleted a grant from this Principal" msgstr "" msgid "Deleting Binding:" msgstr "" msgid "Deleting Collection:" msgstr "" msgid "Deleting Principal:" msgstr "" msgid "Deleting Ticket:" msgstr "" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "" msgid "Dependencies" msgstr "" msgid "Dependency" msgstr "" msgid "Description" msgstr "" msgid "Destination collection does not exist" msgstr "" msgid "Directory on the server" msgstr "" msgid "Display Name" msgstr "" msgid "Displayname" msgstr "" msgid "Does the user have the right to perform this role?" msgstr "" msgid "Domain" msgstr "" msgid "EMail" msgstr "" msgid "EMail OK" msgstr "" msgid "ERROR: The full name may not be blank." msgstr "" msgid "ERROR: The new password must match the confirmed password." msgstr "" msgid "ERROR: There was a database error writing the roles information!" msgstr "" msgid "Edit" msgstr "" msgid "Edit this user record" msgstr "" msgid "Email Address" msgstr "" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary " "password." msgstr "" msgid "Enter your username and password then click here to log in." msgstr "" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" msgid "Error querying database." msgstr "" msgid "Error writing calendar details to database." msgstr "" msgid "Error writing calendar properties to database." msgstr "" msgid "European" msgstr "" msgid "European (d/m/y)" msgstr "" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "" msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "" msgid "Expires" msgstr "" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "" msgid "Forbidden" msgstr "" msgid "Free/Busy" msgstr "" msgid "Full Name" msgstr "" msgid "Fullname" msgstr "" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "" msgid "Go to the DAViCal Feature Requests" msgstr "" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "" #. Translators: in the sense of a group of people msgid "Group" msgstr "" msgid "Group Members" msgstr "" msgid "Group Memberships" msgstr "" msgid "Group Principals" msgstr "" msgid "Has Members" msgstr "" msgid "Help" msgstr "" msgid "Help on the current screen" msgstr "" msgid "Help! I've forgotten my password!" msgstr "" msgid "Home" msgstr "" msgid "Home " msgstr "" msgid "Home Page" msgstr "" msgid "ID" msgstr "" msgid "ISO Format" msgstr "" msgid "ISO Format (YYYY-MM-DD)" msgstr "" #. Translators: short for 'Identifier' msgid "Id" msgstr "" msgid "If you have forgotten your password then" msgstr "" msgid "If you would like to request access, please e-mail" msgstr "" msgid "Import all .ics files of a directory" msgstr "" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "" msgid "Invalid username or password." msgstr "" msgid "Is Member of" msgstr "" msgid "Is a Calendar" msgstr "" msgid "Is an Addressbook" msgstr "" msgid "Is this user active?" msgstr "" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "" msgid "Language" msgstr "" msgid "Last used" msgstr "" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "" msgid "List Resources" msgstr "" msgid "List Users" msgstr "" msgid "Load From File" msgstr "" msgid "Locale" msgstr "" msgid "Location" msgstr "" msgid "Log On Please" msgstr "" msgid "Log out of DAViCal" msgstr "" msgid "Logout" msgstr "" msgid "Member deleted from this Group Principal" msgstr "" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "" msgid "New Collection" msgstr "" msgid "New Password" msgstr "" msgid "New Principal" msgstr "" #. Translators: not 'Yes' msgid "No" msgstr "" msgid "No calendar content" msgstr "" msgid "No collection found at that location." msgstr "" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "" #. Translators: short for 'Number' msgid "No." msgstr "" msgid "No. of Collections" msgstr "" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "" msgid "Not overwriting existing destination resource" msgstr "" msgid "Opaque" msgstr "" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "" msgid "Password" msgstr "" msgid "Path" msgstr "" msgid "Person" msgstr "" msgid "Please confirm deletion of access ticket - see below" msgstr "" msgid "Please confirm deletion of binding - see below" msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" msgid "Please confirm deletion of the principal" msgstr "" msgid "Please note the time and advise the administrator of your system." msgstr "" msgid "Principal" msgstr "" msgid "Principal Collections" msgstr "" msgid "Principal Grants" msgstr "" msgid "Principal ID" msgstr "" msgid "Principal Type" msgstr "" msgid "Principal deleted" msgstr "" msgid "Privileges" msgstr "" msgid "Privileges granted to All Users" msgstr "" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "" #. Translators: in the sense of being available to all users msgid "Public" msgstr "" msgid "Publicly Readable" msgstr "" msgid "REPORT body contains no XML data!" msgstr "" msgid "REPORT body is not valid XML data!" msgstr "" msgid "Read" msgstr "" msgid "Read ACLs for a resource or collection" msgstr "" msgid "Read Access Controls" msgstr "" msgid "Read Current User's Access" msgstr "" msgid "Read Free/Busy Information" msgstr "" msgid "Read the content of a resource or collection" msgstr "" msgid "Read the details of the current user's access control to this resource." msgstr "" msgid "Read the free/busy information for a calendar collection" msgstr "" msgid "Read/Write" msgstr "" msgid "References" msgstr "" msgid "Remove" msgstr "" msgid "Remove a lock" msgstr "" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "" msgid "Report a bug in the system" msgstr "" msgid "Request Feature" msgstr "" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a projector... msgid "Resource" msgstr "" msgid "Resource Calendar Principals" msgstr "" msgid "Resource Not Found." msgstr "" msgid "Resource has changed on server - not deleted" msgstr "" msgid "Resources may not be changed to / from collections." msgstr "" msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "" msgid "Schedule Send" msgstr "" msgid "Schedule Transparency" msgstr "" msgid "Scheduling: Deliver a Reply" msgstr "" msgid "Scheduling: Deliver an Invitation" msgstr "" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "" msgid "Scheduling: Send a Reply" msgstr "" msgid "Scheduling: Send an Invitation" msgstr "" msgid "Scheduling: Send free/busy" msgstr "" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "" msgid "Set free/busy privileges" msgstr "" msgid "Set read privileges" msgstr "" msgid "Set read+write privileges" msgstr "" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as /caldav." "php/username/calendar/" msgstr "" msgid "Setup" msgstr "" msgid "Setup DAViCal" msgstr "" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "" msgid "Site Statistics" msgstr "" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "" msgid "Some properties were not able to be set." msgstr "" msgid "Source resource does not exist." msgstr "" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "" msgid "Specific Privileges" msgstr "" msgid "Status" msgstr "" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "" msgid "Submit" msgstr "" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "" msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "" msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "" msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "" msgid "The destination collection does not exist" msgstr "" msgid "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "" #, php-format msgid "" "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "" msgid "The name this user can log into the system with." msgstr "" msgid "The path on the server where your .ics files are." msgstr "" msgid "The preferred language for this person." msgstr "" #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "" msgid "The user's e-mail address." msgstr "" msgid "The user's full name." msgstr "" msgid "The user's password for logging in." msgstr "" msgid "The username must not be blank, and may not contain a slash" msgstr "" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "" msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group " "is present in DAViCal but not in LDAP set as inactive in DAViCal
  • if " "a group is present in LDAP but not in DAViCal create the group in DAViCal
  • if a group in present in LDAP and DAViCal then update information in " "DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and " "create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "" msgid "Time" msgstr "" msgid "To Collection" msgstr "" msgid "To ID" msgstr "" msgid "Toggle all privileges" msgstr "" msgid "Tools" msgstr "" msgid "Transparent" msgstr "" msgid "URL" msgstr "" msgid "US Format" msgstr "" msgid "Unauthenticated User" msgstr "" msgid "United States of America (m/d/y)" msgstr "" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "" msgid "Updated" msgstr "" msgid "Updating Collection record." msgstr "" msgid "Updating Member of this Group Principal" msgstr "" msgid "Updating Principal record." msgstr "" msgid "Updating grants by this Principal" msgstr "" msgid "Upgrade DAViCal database schema" msgstr "" msgid "Upgrade Database" msgstr "" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "" msgid "User Details" msgstr "" msgid "User Functions" msgstr "" msgid "User Name" msgstr "" msgid "User Roles" msgstr "" msgid "User is active" msgstr "" msgid "User record written." msgstr "" msgid "Username" msgstr "" msgid "View My Details" msgstr "" msgid "View my own principal record" msgstr "" msgid "View this user record" msgstr "" msgid "Visit the DAViCal Wiki" msgstr "" #, php-format msgid "Want: %s, Currently: %s" msgstr "" msgid "" "Warning: there are no active admin users! You should fix this before logging " "out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "" msgid "Write" msgstr "" msgid "Write ACLs for a resource or collection" msgstr "" msgid "Write Access Controls" msgstr "" msgid "Write Data" msgstr "" msgid "Write Metadata" msgstr "" msgid "Write content" msgstr "" msgid "Write properties" msgstr "" msgid "Yes" msgstr "" msgid "You are editing" msgstr "" msgid "You are not authorised to use this function." msgstr "" msgid "You are viewing" msgstr "" msgid "You do not have permission to modify this record." msgstr "" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "" msgid "Your configuration produced PHP errors which should be corrected" msgstr "" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "" msgid "" "drivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf." "php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "" #. Translators: this is a colloquial phrase in english (the name of a flower) and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "" msgid "from principal" msgstr "" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "" davical-1.1.1/po/pt_BR.values0000644000000000000000000000011011633117640012642 0ustar VALUES( 'pt_BR', 'Brazilian Portuguese', 'Brazilian Portuguese' ); davical-1.1.1/po/ru.values0000644000000000000000000000006211633117640012270 0ustar VALUES( 'ru', 'Russian', 'Русский' ); davical-1.1.1/po/nb_NO.po0000644000000000000000000011464211767336605012002 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # , 2011. # Daniel , 2011. # Sven Olsen , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/davical/language/nb_NO/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "%F %T" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "%T" msgid "*** Default Locale ***" msgstr "*** Forvalgt nasjonalitet ***" msgid "*** Unknown ***" msgstr "*** Ukjent ***" #, php-format msgid "- adding %s to group : %s" msgstr "- legger til %s i gruppe : %s" #, php-format msgid "- adding users %s to group : %s" msgstr "- legger til brukerne %s i gruppe : %s" #, php-format msgid "- creating groups : %s" msgstr "- oppretter grupper : %s" #, php-format msgid "- creating record for users : %s" msgstr "- oppretter post for brukere : %s" #, php-format msgid "- deactivate groups : %s" msgstr "- deaktiverer grupper : %s" #, php-format msgid "- deactivating users : %s" msgstr "- deaktiverer brukere : %s" #, php-format msgid "- nothing done on : %s" msgstr "- ingen endring på : %s" #, php-format msgid "- removing %s from group : %s" msgstr "- fjerner %s fra gruppe : %s" #, php-format msgid "- updating groups : %s" msgstr "- oppdaterer grupper : %s" #, php-format msgid "- updating user records : %s" msgstr "- oppdaterer brukerdata : %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "ADVARSEL: alle hendelser i denne banen vil bli slettet ved innsetting av ics-filen" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "

Hjelp

\n

For oppstartshjelp bør du besøke DAViCal-hjemmesiden eller ta en titt på DAViCal wikien.

\n

Kan du ikke finne svaret der, kom innom vår IRC-kanal #davicalirc.oftc.net-nettverket,\neller send spørsmålet til DAViCal epostlisten for brukere.

\n

Epostlistearkivene kan også være nyttige.

" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Logg deg inn

For tilgang til %s skal du oppgi brukernavnet og passordet du fikk

Vil du be om tilgang, kontakt %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "En DAViCal kontosamling kan bare inneholde samlinger" msgid "A collection already exists at that location." msgstr "En samling finnes allerede der" msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "En ressurs finnes allerede der " msgid "AWL Library version " msgstr "AWL bibliotekversjon " msgid "Access Tickets" msgstr "Adgangstilganger" msgid "Access ticket deleted" msgstr "Adgangstilgang slettet" msgid "Action" msgstr "Aksjon" msgid "Active" msgstr "Aktiv" msgid "Adding new member to this Group Principal" msgstr "Legger nytt medlem til denne gruppekontoen" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Admin" msgid "Administration" msgstr "Administrasjon" msgid "Administrator" msgstr "Administrator" msgid "All" msgstr "Alle" msgid "All collection data will be unrecoverably deleted." msgstr "Alle data til samlingen vil ugjenopprettelig bli slettet" #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "Alle hendelser tilhørende \"%s\" ble slettet og erstattet med de fra filen %s" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "Alle kontoens kalendre og hendelser vil ugjenopprettelig bli slettet" msgid "All privileges" msgstr "Alle privilegier" msgid "All requested changes were made." msgstr "Alle forespurte endringer ble utført" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "Tillat ledig/opptatt-forespørsler rettet til eieren av denne innboksen" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "En \"Administrator\" bruker har fulle rettigheter til hele DAViCal-systemet" msgid "Anonymous users are not allowed to modify calendars" msgstr "Anonyme brukere har ikke tillatelse til endring av kalendre" msgid "Anonymous users may only access public calendars" msgstr "Anonyme brukere har kun tilgang til offentlige kalendre" msgid "Append" msgstr "" msgid "Application DB User" msgstr "Applikasjonens DB-bruker" msgid "Apply Changes" msgstr "Utfør endringer" msgid "Apply DB Patches" msgstr "Utfør DB-endringer" msgid "Attachment" msgstr "Vedlegg" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "Forbindelse slettet" msgid "Bindings to other collections" msgstr "Forbindelse til andre samlinger" msgid "Bindings to this Collection" msgstr "Forbindelser til denne samlingen" msgid "Bindings to this Principal's Collections" msgstr "Forbindelse til denne kontoens samlinger" msgid "Body contains no XML data!" msgstr "Meldingskroppen inneholder ingen XML-data!" msgid "Bound As" msgstr "Forbundet som" msgid "Browse all users" msgstr "Bla gjennom alle brukere" msgid "Busy" msgstr "Opptatt" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "Kalenderen \"%s\" ble lastet fra fil." msgid "Calendar Principals" msgstr "Kalenderkontoer" msgid "Calendar Timezone" msgstr "Kalender tidssone" msgid "Can only add tickets for existing collection paths which you own" msgstr "Kan bare legge til tilgang til eksisterende samlinger du eier" msgid "Categories" msgstr "Kategorier" msgid "Change Password" msgstr "Endre passord" msgid "Click to display user details" msgstr "Klikk for brukerdetaljer" msgid "Click to edit principal details" msgstr "Klikk for redigering av kontodetaljer" msgid "Collection" msgstr "Samling" msgid "Collection Grants" msgstr "Samlingsrettigheter" msgid "Collection ID" msgstr "Samlings-ID" msgid "Collection deleted" msgstr "Samling slettet" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "Samlinger kan ikke være både CalDAV og CardDAV adressebøker samtidig" msgid "Configuring Calendar Clients for DAViCal" msgstr "Konfigurerer kalender-klienter for DAViCal" msgid "Configuring DAViCal" msgstr "Konfigurerer DAViCal" msgid "Confirm" msgstr "Bekreft" msgid "Confirm Deletion of the Binding" msgstr "Bekreft sletting av forbindelsen" msgid "Confirm Deletion of the Collection" msgstr "Bekreft sletting av samlingen" msgid "Confirm Deletion of the Principal" msgstr "Bekreft sletting av kontoen" msgid "Confirm Deletion of the Ticket" msgstr "Bekreft sletting av tilgangen" msgid "Confirm Password" msgstr "Bekreft passordet" msgid "Confirm the new password." msgstr "Bekreft nytt passord" msgid "Could not retrieve" msgstr "Kunne ikke hente" msgid "Create" msgstr "Opprett" msgid "Create Collection" msgstr "Opprett samling" msgid "Create Events/Collections" msgstr "Opprett hendelser/samlinger" msgid "Create New Collection" msgstr "Lag ny samling" msgid "Create New Principal" msgstr "Lag ny konto" msgid "Create Principal" msgstr "Lag konto" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Lag ny konto (ny bruker, ressurs eller gruppe)" msgid "Create a resource or collection" msgstr "Lag en ressurs eller samling" msgid "Creating new Collection." msgstr "Oppretter ny samling" msgid "Creating new Principal record." msgstr "Oppretter ny kontopost" msgid "Creating new ticket granting privileges to this Principal" msgstr "Oppretter ny tilgang med privilegier til denne konto" msgid "Current DAViCal version " msgstr "Gjeldende DAViCal versjon" msgid "DAV Path" msgstr "DAV bane" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "DAV::ressurstype kan bare settes til ny verdi, kan ikke slettes" msgid "DAViCal CalDAV Server" msgstr "DAViCal CalDAV Server" msgid "DAViCal DB Schema version " msgstr "DAViCal DB Schema-versjon " msgid "DAViCal Homepage" msgstr "DAViCal hjemmeside" msgid "DAViCal Wiki" msgstr "DAViCal Wiki" msgid "DAViCal only allows BIND requests for collections at present." msgstr "DAViCal tillater bare BIND-forespørsler for gjeldende samlinger" msgid "DKIM signature missing" msgstr "DKIM-signatur mangler" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "DKIM signatursjekk feilet(DNS ERROR)" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "DKIM signatursjekk feilet(KEY Parse ERROR)" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "DKIM signatursjekk feilet(KEY Validation ERROR)" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "DKIM signatursjekk feilet(Signature verification ERROR)" msgid "Database Error" msgstr "Databasefeil" msgid "Database Host" msgstr "Database Host" msgid "Database Name" msgstr "Database Navn" msgid "Database Owner" msgstr "Database Eier" msgid "Database Password" msgstr "Database Passord" msgid "Database Port" msgstr "Database Port" msgid "Database Username" msgstr "Database Brukernavn" msgid "Database error" msgstr "Databasefeil" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Datoformat " msgid "Date Style" msgstr "Datoformat" msgid "Default Privileges" msgstr "Forvalgte privilegier" msgid "Default relationships added." msgstr "La til forvalgte relasjoner." msgid "Delete" msgstr "Slett" msgid "Delete Events/Collections" msgstr "Slett hendelser/samlinger" msgid "Delete Principal" msgstr "Slett konto" msgid "Delete a resource or collection" msgstr "Slett en ressurs eller samling" msgid "Deleted a grant from this Principal" msgstr "Slettet en rettighet til denne kontoen" msgid "Deleting Binding:" msgstr "Sletter forbindelse:" msgid "Deleting Collection:" msgstr "Sletter samling:" msgid "Deleting Principal:" msgstr "Sletter konto:" msgid "Deleting Ticket:" msgstr "Sletter tilgang" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "Levér invitasjoner fra en organisator til denne innboksen" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "Levér svar fra en deltaker til denne innboksen" msgid "Dependencies" msgstr "Avhengigheter" msgid "Dependency" msgstr "Avhengighet" msgid "Description" msgstr "Beskrivelse" msgid "Destination collection does not exist" msgstr "Samlingen finnes ikke" msgid "Directory on the server" msgstr "Mappe på tjeneren" msgid "Display Name" msgstr "Visningsnavn" msgid "Displayname" msgstr "Visningsnavn" msgid "Does the user have the right to perform this role?" msgstr "Har brukeren rettigheter til denne rollen?" msgid "Domain" msgstr "" msgid "EMail" msgstr "Epost" msgid "EMail OK" msgstr "Epost OK" msgid "ERROR: The full name may not be blank." msgstr "FEIL: Det fulle navnet kan ikke være tomt" msgid "ERROR: The new password must match the confirmed password." msgstr "FEIL: Det nye passordet må stemme med det bekreftede passordet" msgid "ERROR: There was a database error writing the roles information!" msgstr "FEIL: Det var en databasefeil under skriving av rolleinformasjon" msgid "Edit" msgstr "Redigér" msgid "Edit this user record" msgstr "Redigér denne brukerens post" msgid "Email Address" msgstr "Epostadresse" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Oppgi brukernavnet, om du vet det, og klikk her for tilsending av midlertidig passord " msgid "Enter your username and password then click here to log in." msgstr "Oppgi brukernavn og passord og klikk her for å logge inn" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Feil NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgid "Error querying database." msgstr "Feil under spørring i database" msgid "Error writing calendar details to database." msgstr "Feil under skriving av detaljer til database" msgid "Error writing calendar properties to database." msgstr "Feil under skriving av kalenderegenskaper til database" msgid "European" msgstr "Europeisk" msgid "European (d/m/y)" msgstr "Europeisk (d/m/y)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "Eksisterende ressurs passer ikke \"If-Match\" header - ikke akseptert." msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "Eksisterende ressurs passer \"If-None-Match\" header - ikke akseptert," msgid "Expires" msgstr "Utløper" msgid "External Calendars" msgstr "Eksterne kalendere" msgid "External Url" msgstr "Ekstern URL" msgid "Fail" msgstr "Feil" msgid "Failed to write collection." msgstr "Mislykkes med skriving av samling" msgid "Feeds are only supported for calendars at present." msgstr "Kanalabonnement støttes kun av kalendere for øyeblikket." msgid "For access to the" msgstr "For adgang til" msgid "Forbidden" msgstr "Forbudt" msgid "Free/Busy" msgstr "Ledig/Opptatt" msgid "Full Name" msgstr "Fullt navn" msgid "Fullname" msgstr "Fullt navn" msgid "GET requests on collections are only supported for calendars." msgstr "GET-forespørsler på samlinger støttes bare for kalendre" msgid "GNU gettext support" msgstr "GNU gettext support" msgid "GO!" msgstr "Utfør!" msgid "Go to the DAViCal Feature Requests" msgstr "Gå til DAViCal Feature Requests" msgid "Grant" msgstr "Opprett" msgid "Granting new privileges from this Principal" msgstr "Oppretter nye privilegier fra denne kontoen" #. Translators: in the sense of a group of people msgid "Group" msgstr "Gruppe" msgid "Group Members" msgstr "Gruppemedlemmer" msgid "Group Memberships" msgstr "Gruppemedlemskap" msgid "Group Principals" msgstr "Gruppekontoer" msgid "Has Members" msgstr "Har medlemmer" msgid "Help" msgstr "Hjelp" msgid "Help on the current screen" msgstr "Hjelp til gjeldende side" msgid "Help! I've forgotten my password!" msgstr "Hjelp! Jeg har glemt passordet" msgid "Home" msgstr "Home" msgid "Home " msgstr "" msgid "Home Page" msgstr "Hjemmeside" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "ISO Format" msgid "ISO Format (YYYY-MM-DD)" msgstr "ISO Format (YYYY-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "Hvis du har glemt passordet" msgid "If you would like to request access, please e-mail" msgstr "Hvis du vil ha tilgang, send epost " msgid "Import all .ics files of a directory" msgstr "Importer alle .ics filer fra en mappe" msgid "Import calendars and Synchronise LDAP." msgstr "Importér kalendre og synkronisér LDAP" msgid "Inactive Principals" msgstr "Inaktive kontoer" msgid "Incorrect content type for addressbook: " msgstr "Uriktig innholdstype for adressebok:" msgid "Incorrect content type for calendar: " msgstr "Uriktig innholdstype for kalender" msgid "Invalid user name or password." msgstr "Ugyldig brukernavn eller passord" msgid "Invalid username or password." msgstr "Ugyldig brukernavn eller passord" msgid "Is Member of" msgstr "Er medlem av" msgid "Is a Calendar" msgstr "Er en kalender" msgid "Is an Addressbook" msgstr "Er en adressebok" msgid "Is this user active?" msgstr "Er denne brukeren aktiv?" msgid "Items in Collection" msgstr "Objekter i samlingen" msgid "Joined" msgstr "Tilknyttet" msgid "Language" msgstr "Språk" msgid "Last used" msgstr "Sist brukt" msgid "List External Calendars" msgstr "List opp eksterne kalendere" msgid "List Groups" msgstr "Liste grupper" msgid "List Resources" msgstr "Liste ressurser" msgid "List Users" msgstr "Liste brukere" msgid "Load From File" msgstr "Last fra fil" msgid "Locale" msgstr "Locale" msgid "Location" msgstr "Plassering" msgid "Log On Please" msgstr "Logg inn" msgid "Log out of DAViCal" msgstr "Logg ut fra DAViCal" msgid "Logout" msgstr "Logg ut" msgid "Member deleted from this Group Principal" msgstr "Medlem slettet fra denne gruppekonto" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "De fleste funksjoner av DAViCal vil fungere, men å oppgradere til PHP 5.2 eller nyere er anbefalt på det sterkeste." msgid "Name" msgstr "Navn" msgid "New Collection" msgstr "Ny samling" msgid "New Password" msgstr "Nytt passord" msgid "New Principal" msgstr "Ny konto" #. Translators: not 'Yes' msgid "No" msgstr "Nei" msgid "No calendar content" msgstr "Ikke noe kalenderinnhold" msgid "No collection found at that location." msgstr "Ingen samling funnet på den lokasjonen" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "Ingen oppsummering" #. Translators: short for 'Number' msgid "No." msgstr "Nr." msgid "No. of Collections" msgstr "Antall samlinger" msgid "No. of Principals" msgstr "Antall kontoer" msgid "No. of Resources" msgstr "Antall ressurser" msgid "Not overwriting existing destination resource" msgstr "Skriver ikke over eksisterende ressurs" msgid "Opaque" msgstr "Opaque" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "Bryt en lås" msgid "PDO PostgreSQL drivers" msgstr "PDO PostgreSQL drivere" msgid "PHP DateTime class" msgstr "PHP DateTime class" msgid "PHP LDAP module available" msgstr "PHP LDAP modul tilgjengelig" msgid "PHP Magic Quotes GPC off" msgstr "PHP Magic Quotes GPC off" msgid "PHP Magic Quotes runtime off" msgstr "PHP Magic Quotes runtime off" msgid "PHP PDO module available" msgstr "PHP PDO modul tilgjengelig" msgid "PHP calendar extension available" msgstr "PHP kalenderutvidelse er tilgjengelig." msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "Støtte for PHP iconv" msgid "PHP not using Apache Filter mode" msgstr "PHP er ikke satt til å bruke Apache Filter-modus." msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "PUT på en samling er bare tillatt for tekst-/kalenderinnhold i en kalendersamling" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "En PUT-forespørsel er kun tillatt for tekst-/vcard-innhold i en adresseboksamling." msgid "Passed" msgstr "Godkjent" msgid "Password" msgstr "Passord" msgid "Path" msgstr "Bane" msgid "Person" msgstr "Person" msgid "Please confirm deletion of access ticket - see below" msgstr "Bekreft sletting av adgangstilgang - se under" msgid "Please confirm deletion of binding - see below" msgstr "Bekreft sletting av forbindelse - se under" msgid "Please confirm deletion of collection - see below" msgstr "Bekreft sletting av samling - se under" msgid "Please confirm deletion of the principal" msgstr "Bekreft sletting av kontoen" msgid "Please note the time and advise the administrator of your system." msgstr "Notér klokkeslett og meld fra til systemets administrator" msgid "Principal" msgstr "Konto" msgid "Principal Collections" msgstr "Kontosamlinger" msgid "Principal Grants" msgstr "Kontorettigheter" msgid "Principal ID" msgstr "Konto-ID" msgid "Principal Type" msgstr "Kontotype" msgid "Principal deleted" msgstr "Konto slettet" msgid "Privileges" msgstr "Rettigheter" msgid "Privileges granted to All Users" msgstr "Rettigheter tildelt til alle brukere" msgid "Privileges to allow delivery of scheduling messages" msgstr "Privilegier til å tillate møteplanmeldingsvarsler" msgid "Privileges to delegate scheduling decisions" msgstr "Privilegier til å delegere møteplanavgjørelser" msgid "Property is read-only" msgstr "Egenskapen er kun lese" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Offentlig" msgid "Publicly Readable" msgstr "Offentlig lesbar" msgid "REPORT body contains no XML data!" msgstr "REPORT body inneholder ingen XML-data!" msgid "REPORT body is not valid XML data!" msgstr "REPORT body er ikke gyldig XML-data!" msgid "Read" msgstr "Les" msgid "Read ACLs for a resource or collection" msgstr "Les tilgangslister for en ressurs eller samling" msgid "Read Access Controls" msgstr "Les tilgangskontroll" msgid "Read Current User's Access" msgstr "Les gjeldende brukers adgang" msgid "Read Free/Busy Information" msgstr "Les Ledig/Opptatt informasjon" msgid "Read the content of a resource or collection" msgstr "Les innholdet til en ressurs eller samling" msgid "" "Read the details of the current user's access control to this resource." msgstr "Les detaljer om gjeldende brukers adgangskontroll til denne ressursen" msgid "Read the free/busy information for a calendar collection" msgstr "Les Ledig/Opptatt informasjon for en kalendersamling" msgid "Read/Write" msgstr "Les/Skriv" msgid "References" msgstr "Referanser" msgid "Remove" msgstr "Fjern" msgid "Remove a lock" msgstr "Fjern en lås" msgid "Remove dangling external calendars" msgstr "Fjern haltende eksterne kalendere" msgid "Report Bug" msgstr "Rapportér feil" msgid "Report a bug in the system" msgstr "Rapportér feil i systemet" msgid "Request Feature" msgstr "Be om funksjonalitet" msgid "Request body is not valid XML data!" msgstr "Request body er ikke gyldig XML-data!" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Ressurs" msgid "Resource Calendar Principals" msgstr "Ressurskalender-kontoer" msgid "Resource Not Found." msgstr "Ressurs ikke funnet" msgid "Resource has changed on server - not deleted" msgstr "Ressurs er endret på tjener - ikke slettet" msgid "Resources may not be changed to / from collections." msgstr "Ressurser kan ikke endres fra/til samlinger" msgid "Revoke" msgstr "Gjenopprett" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "Hendelse Levér" msgid "Schedule Send" msgstr "Hendelse Send" msgid "Schedule Transparency" msgstr "Hendelse gjennomsiktighet" msgid "Scheduling: Deliver a Reply" msgstr "Hendelse: Gi et svar" msgid "Scheduling: Deliver an Invitation" msgstr "Hendlese: Levér en invitasjon" msgid "Scheduling: Delivery" msgstr "Hendelse: Levering" msgid "Scheduling: Query free/busy" msgstr "Hendelse: Finn Ledig/Opptatt" msgid "Scheduling: Send a Reply" msgstr "Hendelse: Send et svar" msgid "Scheduling: Send an Invitation" msgstr "Hendelse: Send en invitasjon" msgid "Scheduling: Send free/busy" msgstr "Hendelse: Send Ledig/Opptatt" msgid "Scheduling: Sending" msgstr "Hendelse: Sender" msgid "Send free/busy enquiries" msgstr "Send Ledig/Opptatt forespørsel" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "Send hendelsesinvitasjon som organisator fra eieren av denne utboksen" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "Send invitasjonssvar som deltaker fra eieren av denne utboksen" msgid "Set free/busy privileges" msgstr "Sett Ledig/Opptatt rettigheter" msgid "Set read privileges" msgstr "Sett leserettigheter" msgid "Set read+write privileges" msgstr "Sett lese+skriverettigheter" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "Angi en sti for lagring av ics. For eksempel ‹kalender› vil bli referert som /caldav.php/brukernavn/kalender/" msgid "Setup" msgstr "Oppsett" msgid "Setup DAViCal" msgstr "Sett opp DAViCal" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Vis hjelp om" msgid "Site Statistics" msgstr "Statistikk" msgid "Site Statistics require the database to be available!" msgstr "Statistikk krever en tilgjengelig database!" msgid "Some properties were not able to be changed." msgstr "Noen egenskaper kunne ikke endres" msgid "Some properties were not able to be set." msgstr "Noen egenskaper kunne ikke settes" msgid "Source resource does not exist." msgstr "Ressurskilde finnes ikke" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "Spesielle samlinger kan ikke inneholde kalendre eller andre spesialsamlinger" msgid "Specific Privileges" msgstr "Spesifikke privilegier" msgid "Status" msgstr "Status" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "Status: %d, Message: %s, User: %d, Path: %s" msgid "Submit" msgstr "Send" msgid "Suhosin \"server.strip\" disabled" msgstr "Suhosin \"server.strip\" disabled" msgid "Sync LDAP Groups with DAViCal" msgstr "Synkroniser LDAP grupper med DAViCal" msgid "Sync LDAP with DAViCal" msgstr "Synk LDAP med DAViCal" msgid "Target" msgstr "Mål" msgid "That destination name contains invalid characters." msgstr "Målets navn inneholder ugyldige karakterer" msgid "That resource is not present on this server." msgstr "Ressursen er ikke tilstede på denne tjeneren" msgid "The BIND Request MUST identify an existing resource." msgstr "BIND Request MÅ identifisere en eksisterende ressurs." msgid "The BIND Request-URI MUST identify a collection." msgstr "BIND Request-URI MÅ identifisere en samling." msgid "The BIND method is not allowed at that location." msgstr "BIND metoden er ikke tillatt på den lokasjonen." msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "CalDAV:schedule-calendar-transp egenskap kan bare settes på kalendre" msgid "The DAViCal Home Page" msgstr "DAViCal Hjemmeside" msgid "The access ticket will be deleted." msgstr "Adgangstilgangen vil bli slettet" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "Adressebok-forespørselsrapport må kjøres mot en adressebok-samling" msgid "The application failed to understand that request." msgstr "Programmet kunne ikke forstå den anmodningen." msgid "The application program does not understand that request." msgstr "Programmet forstår ikke forespørselen" msgid "The binding will be deleted." msgstr "Forbindelsen vil bli slettet" msgid "The calendar path contains illegal characters." msgstr "Kalenderbanen inneholder ulovlige karakterer" msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "Kalender forespørselsrapport må kjøres mot en kalender eller hendelsessamling" msgid "The collection name may not be blank." msgstr "Samlingens navn kan ikke være tom" msgid "The destination collection does not exist" msgstr "Målsamlingen eksisterer ikke" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "Visningsnavn kan bare settes på samlinger, kontoer eller forbindelser" msgid "The email address really should not be blank." msgstr "Epostadressen bør absolutt ikke være tom" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "Filen \"%s\" er ikke inkodet i UTF-8 encoded. Kontroller feilen for flere detaljer." msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "Filen er ikke UTF-8 encoded, sjekk feilen for flere detaljer" msgid "The full name for this person, group or other type of principal." msgstr "Det fulle navn for denne personen, gruppen eller annen type konto" msgid "The full name must not be blank." msgstr "Det fulle navn kan ikke være tomt" msgid "The name this user can log into the system with." msgstr "Navnet denne brukeren skal logge inn på systemet med" msgid "The path on the server where your .ics files are." msgstr "Banen på tjeneren hvor dine ics-filer er" msgid "The preferred language for this person." msgstr "Foretrukket språk for denne personen" #, php-format msgid "The principal \"%s\" does not exist" msgstr "Kontoen \"%s\" finnes ikke." msgid "The style of dates used for this person." msgstr "Datoformat brukt for denne personen" msgid "The user's e-mail address." msgstr "Brukerens epostadresse" msgid "The user's full name." msgstr "Brukerens fulle navn" msgid "The user's password for logging in." msgstr "Brukerens passord for å logge inn" msgid "The username must not be blank, and may not contain a slash" msgstr "Brukernavnet kan ikke være tomt og kan ikke inneholde slash" msgid "There was an error reading from the database." msgstr "En feil oppsto ved lesing fra databasen." msgid "There was an error writing to the database." msgstr "Det oppsto en feil under skriving til databasen" msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Denne operasjonen gjør følgende:
  • sjekker gyldige grupper i LDAP katalogen
  • sjekker grupper i DAViCal
deretter
  • hvis en gruppe finnes i DAViCal men ikke i LDAP setter som inaktiv i DAViCal
  • hvis en gruppe finnnes i LDAP men ikke i DAViCal oppretter en gruppe i DAViCal
  • hvis en gruppe finnes i LDAP og DAViCal oppdaterer informasjonen i DAViCal
" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Denne operasjonen gjør følgende:
  • sjekker gyldige gruppe i LDAP katalogen
  • sjekker brukere i DAViCal
deretter
  • hvis en bruker finnes i DAViCal men ikke i LDAP setter denne sim inaktiv i DAViCal
  • hvis en bruker finnes i LDAP men ikke i DAViCal oppretter brukeren i DAViCal
  • hvis brukeren finnes i LDAP og DAViCal oppdaterer informasjonen i DAViCal
" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "Denne siden sjekker miljøet nødvendig for at DAViCal skal virke korrekt. Forslag eller patsjer for å gjøre det enda bedre vil mottas med takk." msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "Prosesen vil hente inn hver fil i mappen med navnet \"brukernavn.ics\" og opprette en bruker og kalender for hver bruker og kalender som hentes inn." msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "Denne tjeneren støtter bare text/calendar-formatet for freebusy-adresser." msgid "Ticket ID" msgstr "Tilgangs-ID" msgid "Time" msgstr "Tid" msgid "To Collection" msgstr "Til samling" msgid "To ID" msgstr "Til ID" msgid "Toggle all privileges" msgstr "Forny alle privilegier" msgid "Tools" msgstr "Verktøy" msgid "Transparent" msgstr "Gjennomsiktig" msgid "URL" msgstr "URL" msgid "US Format" msgstr "US Format" msgid "Unauthenticated User" msgstr "Ikke-autentisert bruker" msgid "United States of America (m/d/y)" msgstr "United States of America (m/d/y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Oppdater" msgid "Updated" msgstr "Oppdatert" msgid "Updating Collection record." msgstr "Oppdaterer post samling" msgid "Updating Member of this Group Principal" msgstr "Oppdaterer medlem av denne gruppekonto" msgid "Updating Principal record." msgstr "Oppdaterer post konto" msgid "Updating grants by this Principal" msgstr "Oppdaterer rettigheter for denne kontoen" msgid "Upgrade DAViCal database schema" msgstr "Oppgrader DAViCal database schema" msgid "Upgrade Database" msgstr "Oppgrader database" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "Bruker kalenderkonto" msgid "User Details" msgstr "Brukerdetaljer" msgid "User Functions" msgstr "Brukerfunksjoner" msgid "User Name" msgstr "Brukers navn" msgid "User Roles" msgstr "Brukerroller" msgid "User is active" msgstr "Bruker er aktiv" msgid "User record written." msgstr "Brukers post skrevet" msgid "Username" msgstr "Brukernavn" msgid "View My Details" msgstr "Vis mine detaljer" msgid "View my own principal record" msgstr "Vis min egen kontopost" msgid "View this user record" msgstr "Vis denne brukerens post" msgid "Visit the DAViCal Wiki" msgstr "Besøk DAViCal Wiki" #, php-format msgid "Want: %s, Currently: %s" msgstr "Ønsket: %s, Nåværende: %s" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "Advarsel: det finnes ingen administratorbrukere! Du bør rette feilen før du logger ut. Foreslår bruk av $c->do_not_sync_from_ldap konfigurasjonsinstillingen." msgid "When the user's e-mail account was validated." msgstr "Da brukerens epost ble kontrollert" msgid "Write" msgstr "Skriv" msgid "Write ACLs for a resource or collection" msgstr "Skriv ACL for en ressurs eller samling" msgid "Write Access Controls" msgstr "Skriv adgangskontroller" msgid "Write Data" msgstr "Skriv data" msgid "Write Metadata" msgstr "Skriv metadata" msgid "Write content" msgstr "Skriv innhold" msgid "Write properties" msgstr "Skriv egenskaper" msgid "Yes" msgstr "Ja" msgid "You are editing" msgstr "Du redigerer" msgid "You are not authorised to use this function." msgstr "Du er ikke autorisert til å bruke denne funksjonen" msgid "You are viewing" msgstr "Du ser på" msgid "You do not have permission to modify this record." msgstr "Du har ikke tillatelse til å endre denne posten" msgid "You may not PUT to a collection URL" msgstr "Du kan ikke utføre PUT til en samlings URL" msgid "You must log in to use this system." msgstr "Du må logge inn for å bruke systemet" msgid "Your configuration produced PHP errors which should be corrected" msgstr "Konfigurasjonen lagde PHP feil som må rettes" msgid "calendar-timezone property is only valid for a calendar." msgstr "kalender-tidssone egenskap er kun gyldig for en kalender" #, php-format msgid "directory %s is not readable" msgstr "mappen %s er ikke lesbar" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "drivers_imap_pam : imap_url parameter ikke konfigurert i /etc/davical/*-conf.php" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap : Kunne ikke starte TLS: ldap_start_tls() feilet" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap : Feilet å binde til vert %1$s på port %2$s with bindDN of %3$s" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap : Feilet å sette LDAP til å bruke protokoll version 3, TLS ikke støttet" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap : Ute av stand til å binde til LDAP - sjekk din konfigurasjon for bindDN og passDN, og at din LDAP server kan nås" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap : Ute av stand til kommunikasjon med LDAP med port %s på vert %s" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap : function ldap_connect ikke definert, sjekk din php_ldap modul" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "drivers_pwauth_pam : Unable to find %s file" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam : Unable to find %s file" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "forglem meg ei" msgid "from principal" msgstr "fra konto" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "bane for å lagre din ics" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "Ikke-autentisert" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "logg på med brukernavnet og passordet du fikk utstedt" davical-1.1.1/po/es_MX.po0000644000000000000000000012041111767336605012011 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Eugene Ciurana , 2011. # pr3d4t0r , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Spanish (Mexico) (http://www.transifex.net/projects/p/davical/language/es_MX/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "%F %T" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "%T" msgid "*** Default Locale ***" msgstr "*** Localidad Estándar ***" msgid "*** Unknown ***" msgstr "*** Desconocido ***" #, php-format msgid "- adding %s to group : %s" msgstr "- agregando %s al grupo %s" #, php-format msgid "- adding users %s to group : %s" msgstr "- agregando usuarios %s al grupo %s" #, php-format msgid "- creating groups : %s" msgstr "- creando los grupos: %s" #, php-format msgid "- creating record for users : %s" msgstr "- creando el registro para usuarios: %s" #, php-format msgid "- deactivate groups : %s" msgstr "- groupos %s desactivados" #, php-format msgid "- deactivating users : %s" msgstr "- desactivando a los usuarios: %s" #, php-format msgid "- nothing done on : %s" msgstr "- ningún cambio para: %s" #, php-format msgid "- removing %s from group : %s" msgstr "- eliminando a %s del grupo: %s" #, php-format msgid "- updating groups : %s" msgstr "- actualizando los grupos: %s" #, php-format msgid "- updating user records : %s" msgstr "- actualizando los registros de usuario: %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "ADVERTENCIA: todos los eventos en este repositorio serán eliminados antes de insertar el archivo ics" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "

Ayuda\n

Visita la Página Principal de DAViCal para ayuda inicial, o consultael Wiki de DAViCal.

Si no encuentras la respuesta a tus dudas, visítanos en IRC enel canal #davical en irc.oftc.net,\no envía tus preguntas a la lista de correo de Usuarios de DAViCal.

\n

El archivo de la lista de correotambien te será útil." #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Por Favor Entra Identifícate

Debes para entrar a %s debes identificarte con tu nombre de usuario y tu clave de acceso.

Notifica a %s si deseas solicitar acceso." msgid "A DAViCal principal collection may only contain collections" msgstr "Una colección principal de DAViCal solo puede contener colecciones" msgid "A collection already exists at that location." msgstr "Una colección ya existe en ese lugar." msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "Un recurso ya existe en ese destino." msgid "AWL Library version " msgstr "Biblioteca AWL versión" msgid "Access Tickets" msgstr "Boletos de Acceso" msgid "Access ticket deleted" msgstr "Boleto de acceso eliminado" msgid "Action" msgstr "Acción" msgid "Active" msgstr "Activo" msgid "Adding new member to this Group Principal" msgstr "Agregando un miembro nuevo a este Principal de Grupo" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Admin" msgid "Administration" msgstr "Administración" msgid "Administrator" msgstr "Administrador" msgid "All" msgstr "Todos" msgid "All collection data will be unrecoverably deleted." msgstr "Todos los datos de esta colección serán eliminados." #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "Todos los calendarios y eventos de este principal serán eliminados permanentemente." msgid "All privileges" msgstr "Todos los privilegios" msgid "All requested changes were made." msgstr "Todos los cambios solicitados fueron hechos." msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "Permite solicitudes libre/ocupado para el dueño de este buzón de itinerario." msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "Un usuario \"Administrador\" tiene todos derechos al Sistema DAViCal entero." msgid "Anonymous users are not allowed to modify calendars" msgstr "Los usuarios anónimos no tienen permitido modificar calendarios" msgid "Anonymous users may only access public calendars" msgstr "Los usuarios anónimos solo pueden ver calendarios públicos" msgid "Append" msgstr "" msgid "Application DB User" msgstr "Usuario de Base de Datos de la Aplicación" msgid "Apply Changes" msgstr "Efectúa Cambios" msgid "Apply DB Patches" msgstr "Aplica Parches a la Base de Datos" msgid "Attachment" msgstr "Anexo" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "Enlace eliminado" msgid "Bindings to other collections" msgstr "Enlaces a otras colecciones" msgid "Bindings to this Collection" msgstr "Enlaces a esta colleción" msgid "Bindings to this Principal's Collections" msgstr "Enlaces a las Colleciones de este Principal" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "Enlazado con" msgid "Browse all users" msgstr "Ver a todos los usuarios" msgid "Busy" msgstr "Ocupado" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "El calendario \"%s\" fue cargado desde un archivo." msgid "Calendar Principals" msgstr "Principales del Calendario" msgid "Calendar Timezone" msgstr "Huso Horario del Calendario" msgid "Can only add tickets for existing collection paths which you own" msgstr "Solo puedes agregar boletos para tus colecciones existentes" msgid "Categories" msgstr "Categorías" msgid "Change Password" msgstr "Cambia la Clave de Acceso" msgid "Click to display user details" msgstr "Click para desplegar los detalles de usuario" msgid "Click to edit principal details" msgstr "Click para editar los detalles del principal" msgid "Collection" msgstr "Colección" msgid "Collection Grants" msgstr "Subvenciones de Colección" msgid "Collection ID" msgstr "ID de Colección" msgid "Collection deleted" msgstr "Colección eliminada" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "Las colecciones no pueden ser calendarios CalDAV y agendas de teléfono CardDAV al mismo tiempo" msgid "Configuring Calendar Clients for DAViCal" msgstr "Configurando Clientes de Calendario para DAViCal" msgid "Configuring DAViCal" msgstr "Configurando DAViCal" msgid "Confirm" msgstr "Confirma" msgid "Confirm Deletion of the Binding" msgstr "Confirma Eliminación del Enlace" msgid "Confirm Deletion of the Collection" msgstr "Confirma Eliminación de la Collación" msgid "Confirm Deletion of the Principal" msgstr "Confirma Eliminación del Principal" msgid "Confirm Deletion of the Ticket" msgstr "Confirma Eliminación del Boleto" msgid "Confirm Password" msgstr "Confirma Clave de Acceso" msgid "Confirm the new password." msgstr "Confirma la clave de acceso nueva." msgid "Could not retrieve" msgstr "No lo pudo sacar" msgid "Create" msgstr "Crear" msgid "Create Collection" msgstr "Crear una Colección" msgid "Create Events/Collections" msgstr "Crear Eventos/Colecciones" msgid "Create New Collection" msgstr "Crear una Colección Nueva" msgid "Create New Principal" msgstr "Crear un Principal Nuevo" msgid "Create Principal" msgstr "Crear un Principal" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Crear a un principal nuevo (eg. un usuario, recurso, o grupo)" msgid "Create a resource or collection" msgstr "Crear un recurso o colección" msgid "Creating new Collection." msgstr "Creando una Colección nueva." msgid "Creating new Principal record." msgstr "Creando un registro de Principal nuevo." msgid "Creating new ticket granting privileges to this Principal" msgstr "Creando un boleto para otorgar privilegios a este Principal" msgid "Current DAViCal version " msgstr "Versión actual de DAViCal " msgid "DAV Path" msgstr "Camino DAV" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "DAV::resourcetype solo puede tener un valor nuevo, y no puede ser eliminado." msgid "DAViCal CalDAV Server" msgstr "Servidor DAViCal CalDAV" msgid "DAViCal DB Schema version " msgstr "Esquema de Datos de DAViCal versión " msgid "DAViCal Homepage" msgstr "Página Principal de DAViCal" msgid "DAViCal Wiki" msgstr "Wiki de DAViCal" msgid "DAViCal only allows BIND requests for collections at present." msgstr "DAViCal solo permite solicitudes BIND a collecciones por ahora." msgid "DKIM signature missing" msgstr "Firma DKIM perdida" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "La validación de la firma DKIM falló(ERROR de DNS)" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "Validación de firma DKIM falló (ERROR al interpretar KEY)" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "La validación de la firma DKIM falló(ERROR de validación de LLAVE)" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "La validación de la firma DKIM falló(ERROR de verificación de firma)" msgid "Database Error" msgstr "Error de la base de datos" msgid "Database Host" msgstr "Servidor de Base de Datos" msgid "Database Name" msgstr "Nombre de la Base de Datos" msgid "Database Owner" msgstr "Propietario de la Base de Datos" msgid "Database Password" msgstr "Clave de Acceso a la Base de Datos" msgid "Database Port" msgstr "Puerto de la Base de Datos" msgid "Database Username" msgstr "Nombre de Usuario para la Base de Datos" msgid "Database error" msgstr "Error en la base de datos" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Estilo de Formato de Fecha" msgid "Date Style" msgstr "Formato de Fecha" msgid "Default Privileges" msgstr "Privilegios Automáticos" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "Eliminar" msgid "Delete Events/Collections" msgstr "Eliminar Eventos/Colecciones" msgid "Delete Principal" msgstr "Eliminar al Principal" msgid "Delete a resource or collection" msgstr "Eliminar un recurso o colección" msgid "Deleted a grant from this Principal" msgstr "Eliminar una subvención de este Principal" msgid "Deleting Binding:" msgstr "Eliminando Enlace:" msgid "Deleting Collection:" msgstr "Eliminando Colección:" msgid "Deleting Principal:" msgstr "Eliminando Principal:" msgid "Deleting Ticket:" msgstr "Eliminando Boleto:" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "Enviar invitaciones de itinerario de un organizador a este buzón de itinerarios" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "Enviar respuestas de itinerario de un participante a este buzón de itinerarios" msgid "Dependencies" msgstr "Dependencias" msgid "Dependency" msgstr "Dependencia" msgid "Description" msgstr "Descripción" msgid "Destination collection does not exist" msgstr "La colleción de destino no existe" msgid "Directory on the server" msgstr "Directorio en el servidor" msgid "Display Name" msgstr "Desplegar Nombre" msgid "Displayname" msgstr "Nombre de Despliegue" msgid "Does the user have the right to perform this role?" msgstr "¿El usuario tiene derechos a desempeñar este papel?" msgid "Domain" msgstr "" msgid "EMail" msgstr "EMail" msgid "EMail OK" msgstr "EMail correcto" msgid "ERROR: The full name may not be blank." msgstr "ERROR: El nombre completo no puede estar vacío." msgid "ERROR: The new password must match the confirmed password." msgstr "ERROR: La clave de acceso debe coincidir con la clave de acceso confirmada." msgid "ERROR: There was a database error writing the roles information!" msgstr "ERROR: ¡Un error de base de datos ocurrió al escribir la información de papeles!" msgid "Edit" msgstr "Editar" msgid "Edit this user record" msgstr "Editar este registro de usuario" msgid "Email Address" msgstr "Dirección de Email" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Proporcione un nombre de usuario, si lo sabe, y haga click aquí, para enviarle una clave de acceso temporal." msgid "Enter your username and password then click here to log in." msgstr "Proporcione su nombre de usuario y clave de accesso, depues haga click aquí para entrar." #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Error NoGroupFound con el filtro >%s<, atributos >%s< , dn >%s<" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Error NoUserFound con filtro >%s<, atributos >%s< , dn >%s<" msgid "Error querying database." msgstr "Error consultando la base de datos." msgid "Error writing calendar details to database." msgstr "Error al escribir los detalles del calendario en la base de datos." msgid "Error writing calendar properties to database." msgstr "Error al escribir las propiedades del calendario en la base de datos." msgid "European" msgstr "Europeo" msgid "European (d/m/y)" msgstr "Europeo (d/m/y)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "El recurso existente no coincide con el encabezado \"If-Match\" - rechazado." msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "El recurso existente coincide con el encabezado \"If-None-Match\" - rechazado." msgid "Expires" msgstr "Expira" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "Falla" msgid "Failed to write collection." msgstr "Fallo al escribir la colección." msgid "Feeds are only supported for calendars at present." msgstr "Alimentación solo se suporta para calendarios por ahora." msgid "For access to the" msgstr "Para acceso al" msgid "Forbidden" msgstr "Prohibido" msgid "Free/Busy" msgstr "Libre/Ocupado" msgid "Full Name" msgstr "Nombre completo" msgid "Fullname" msgstr "Nombre" msgid "GET requests on collections are only supported for calendars." msgstr "Las solicitudes GET en colecciones solo son suportadas para calendarios." msgid "GNU gettext support" msgstr "Soporte para GNU gettext" msgid "GO!" msgstr "¡IR!" msgid "Go to the DAViCal Feature Requests" msgstr "Ir a las Solicitudes de Prestaciones de DAViCal" msgid "Grant" msgstr "Subvención" msgid "Granting new privileges from this Principal" msgstr "Conceder nuevos privilegios a este Principal" #. Translators: in the sense of a group of people msgid "Group" msgstr "Grupo" msgid "Group Members" msgstr "Miembros del Grupo" msgid "Group Memberships" msgstr "Membresías de Grupo" msgid "Group Principals" msgstr "Principales del Grupo" msgid "Has Members" msgstr "Tiene Miembros" msgid "Help" msgstr "Ayuda" msgid "Help on the current screen" msgstr "Ayuda con la pantalla actual" msgid "Help! I've forgotten my password!" msgstr "¡Ayuda! ¡Olvidé mi clave de acceso!" msgid "Home" msgstr "Principio" msgid "Home " msgstr "" msgid "Home Page" msgstr "Página Principal" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "Formato ISO" msgid "ISO Format (YYYY-MM-DD)" msgstr "Formato ISO (YYYY-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "ID" msgid "If you have forgotten your password then" msgstr "Si olvidó su clave de acceso, entonces" msgid "If you would like to request access, please e-mail" msgstr "Si usted quiere solicitar acceso, por favor contacte a" msgid "Import all .ics files of a directory" msgstr "Importar todos los archivos .ics desde un directorio" msgid "Import calendars and Synchronise LDAP." msgstr "Importar calendarios y Sincronizar LDAP." msgid "Inactive Principals" msgstr "Principales Inactivos" msgid "Incorrect content type for addressbook: " msgstr "Tipo incorrecto para lista de direcciones: " msgid "Incorrect content type for calendar: " msgstr "Typo de contenido incorrecto para el calendario: " msgid "Invalid user name or password." msgstr "Nombre de usuario o clave de acceso inválidos." msgid "Invalid username or password." msgstr "Nombre de usuario o clave de acceso inválidos." msgid "Is Member of" msgstr "Es miembro de" msgid "Is a Calendar" msgstr "Es un Calendario" msgid "Is an Addressbook" msgstr "Es una Lista de Direcciones" msgid "Is this user active?" msgstr "¿Está activado este usuario?" msgid "Items in Collection" msgstr "Artículos en Colección" msgid "Joined" msgstr "Junto" msgid "Language" msgstr "Lenguaje" msgid "Last used" msgstr "Último uso" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "Listar Grupos" msgid "List Resources" msgstr "Listar Recursos" msgid "List Users" msgstr "Listar Usuarios" msgid "Load From File" msgstr "Cargar Desde Archivo" msgid "Locale" msgstr "Localidad" msgid "Location" msgstr "Localización" msgid "Log On Please" msgstr "Identifíquese Por Favor" msgid "Log out of DAViCal" msgstr "Salir de DAViCal" msgid "Logout" msgstr "Salida" msgid "Member deleted from this Group Principal" msgstr "Miembro eliminado de este Grupo de Principales" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "La mayoría de las funciones de DAViCal funcionarán, pero es muy recomendable actualizar a PHP 5.2 o mas reciente." msgid "Name" msgstr "Nombre" msgid "New Collection" msgstr "Colección Nueva" msgid "New Password" msgstr "Nueva Clave de Acceso" msgid "New Principal" msgstr "Principal Nuevo" #. Translators: not 'Yes' msgid "No" msgstr "No" msgid "No calendar content" msgstr "Calendario vacío" msgid "No collection found at that location." msgstr "No se encontró ninguna colección en esa localización." msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "Sin resumen" #. Translators: short for 'Number' msgid "No." msgstr "No." msgid "No. of Collections" msgstr "No. de Colecciones" msgid "No. of Principals" msgstr "No. de Principales" msgid "No. of Resources" msgstr "No. de Recursos" msgid "Not overwriting existing destination resource" msgstr "No sobreescribir recursos existentes en el destino" msgid "Opaque" msgstr "Opaco" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "Anular un Seguro" msgid "PDO PostgreSQL drivers" msgstr "Drivers PDO para PostgreSQL" msgid "PHP DateTime class" msgstr "Clase DateTime de PHP" msgid "PHP LDAP module available" msgstr "Módulo LDAP PHP disponible" msgid "PHP Magic Quotes GPC off" msgstr "Comillas Mágicas GPC de PHP deactivadas" msgid "PHP Magic Quotes runtime off" msgstr "Comillas Mágicas GPC de PHP deactivadas durante ejecución" msgid "PHP PDO module available" msgstr "Módulo PHP PDO disponible" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "Soporte PHP iconv" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "PUT solo se permite para una colección si el contenido es text/calendar para una colección de calendario" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "Aceptado" msgid "Password" msgstr "Clave de Acceso" msgid "Path" msgstr "Camino" msgid "Person" msgstr "Persona" msgid "Please confirm deletion of access ticket - see below" msgstr "Por favor confirme la eliminación del billete de acceso - vea en seguida" msgid "Please confirm deletion of binding - see below" msgstr "Por favor confirme la eliminación del enlace - vea en seguida" msgid "Please confirm deletion of collection - see below" msgstr "Por favor confirme la eliminación de la colección - vea en seguida" msgid "Please confirm deletion of the principal" msgstr "Por favor confirme la eliminación del principal" msgid "Please note the time and advise the administrator of your system." msgstr "Por favor anote la hora y avísele a su administrador de sistema." msgid "Principal" msgstr "Principal" msgid "Principal Collections" msgstr "Collecciones del Principal" msgid "Principal Grants" msgstr "Subvenciones para Principal" msgid "Principal ID" msgstr "ID del Principal" msgid "Principal Type" msgstr "Tipo del Principal" msgid "Principal deleted" msgstr "Principal eliminado" msgid "Privileges" msgstr "Privilegios" msgid "Privileges granted to All Users" msgstr "Privilegios otorgados a Todos los Usuarios" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "Esta propiedad es solo de lectura" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Público" msgid "Publicly Readable" msgstr "Lectura Pública" msgid "REPORT body contains no XML data!" msgstr "¡El cuerpo del REPORTE no contiene datos XML!" msgid "REPORT body is not valid XML data!" msgstr "¡El cuerpo del REPORTE tiene datos XML inválidos!" msgid "Read" msgstr "Leer" msgid "Read ACLs for a resource or collection" msgstr "Leer Listas de Control de Acceso (ACL) para un recurso o colección" msgid "Read Access Controls" msgstr "Leer Controles de Acceso" msgid "Read Current User's Access" msgstr "Leer Acceso del Usuario Actual" msgid "Read Free/Busy Information" msgstr "Leer Información Libre/Ocupado" msgid "Read the content of a resource or collection" msgstr "Leer el contenido de un recurso o colección" msgid "" "Read the details of the current user's access control to this resource." msgstr "Leer los detalles de control de acceso para el usuario actaul respecto a este recurso." msgid "Read the free/busy information for a calendar collection" msgstr "Leer la información libre/ocupado para una colección de calendario" msgid "Read/Write" msgstr "Leer/Escribir" msgid "References" msgstr "" msgid "Remove" msgstr "Remover" msgid "Remove a lock" msgstr "Remover un seguro" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "Reportar un problema" msgid "Report a bug in the system" msgstr "Reportar un problema en el sistema" msgid "Request Feature" msgstr "Solicitar una Prestación" msgid "Request body is not valid XML data!" msgstr "¡El cuerpo de la solicitud no contiene datos XML válidos!" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Recurso" msgid "Resource Calendar Principals" msgstr "Recursos de Principales de Calendario" msgid "Resource Not Found." msgstr "Recurso No Encontrado." msgid "Resource has changed on server - not deleted" msgstr "El Recurso cambió en el servidor - no eliminado" msgid "Resources may not be changed to / from collections." msgstr "Recursos no pueden ser cambiadoes desde / hacias colecciones." msgid "Revoke" msgstr "Revocar" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "Entrega de Itinerario" msgid "Schedule Send" msgstr "Envío de Itinerario" msgid "Schedule Transparency" msgstr "Transparencia de Itinerario" msgid "Scheduling: Deliver a Reply" msgstr "Itinerario: Entregar una Respuesta" msgid "Scheduling: Deliver an Invitation" msgstr "Itinerario: Entregar una Invitación" msgid "Scheduling: Delivery" msgstr "Itinerario: Entregas" msgid "Scheduling: Query free/busy" msgstr "Itinerario: Búsqueda libre/ocupado" msgid "Scheduling: Send a Reply" msgstr "Itinerario: Responder" msgid "Scheduling: Send an Invitation" msgstr "Itinerario: Enviar una Invitación" msgid "Scheduling: Send free/busy" msgstr "Itinerario: Enviar libre/ocupado" msgid "Scheduling: Sending" msgstr "Itinerario: Enviando" msgid "Send free/busy enquiries" msgstr "Enviar verificaciones de libre/ocupado" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "Enviar invitaciones de itinerario como el organizador desde el dueño de este buzón de itinerario." msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "Enviando respuestas como participante desde el dueño de este buzón de salida para itinerarios." msgid "Set free/busy privileges" msgstr "Activar privilegios libre/ocupado" msgid "Set read privileges" msgstr "Activar privilegios de lectura" msgid "Set read+write privileges" msgstr "Activar privilegios de lectura+escritura" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "Configuración" msgid "Setup DAViCal" msgstr "Configurar DAViCal" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Mostrar ayuda de " msgid "Site Statistics" msgstr "Estadísticas del Sitio" msgid "Site Statistics require the database to be available!" msgstr "¡Las Estadísticas del Sitio requieren que la base de datos esté disponible!" msgid "Some properties were not able to be changed." msgstr "No fue posible cambiar algunas propiedades." msgid "Some properties were not able to be set." msgstr "No fue posible configurar algunas propiedades." msgid "Source resource does not exist." msgstr "El recurso fuente no existe." msgid "" "Special collections may not contain a calendar or other special collection." msgstr "Las colecciones especiales no pueden contener un calendario u otra colección especial." msgid "Specific Privileges" msgstr "Privilegios Específicos" msgid "Status" msgstr "Estado" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "Estado: %d, Mensaje: %s, Usuario: %d, Camino: %s" msgid "Submit" msgstr "Enviar" msgid "Suhosin \"server.strip\" disabled" msgstr "Suhosin \"server.strip\" deactivado" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "Sincronizar LDAP y DAViCal" msgid "Target" msgstr "Destino" msgid "That destination name contains invalid characters." msgstr "El nombre de destino tiene caracteres inválidos." msgid "That resource is not present on this server." msgstr "El recurso no está presente en este servidor." msgid "The BIND Request MUST identify an existing resource." msgstr "La Solicitud BIND DEBE identificar un recurso existente." msgid "The BIND Request-URI MUST identify a collection." msgstr "El URI de la Solicitud BIND DEBE identificar una colección." msgid "The BIND method is not allowed at that location." msgstr "No está permitido el método BIND en esa localización." msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "La propiedad CalDAV:schedule-calendar-transp solo puede ser configurada en calendarios." msgid "The DAViCal Home Page" msgstr "La Página Principal de DAViCal" msgid "The access ticket will be deleted." msgstr "El boleto de acceso será eliminado." msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "El reporte de solicitud-lista-de-direcciones debe ejecutarse con respecto a una colección de lista de direcciones." msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "El programa de aplicación no comprendión esa solicitud." msgid "The binding will be deleted." msgstr "El enlace será eliminado." msgid "The calendar path contains illegal characters." msgstr "La trayectoria del calendario contiene caracteres ilegales." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "El reporte calendar-query debe ejecutarse contra un calendario o una colecciónde itinerario" msgid "The collection name may not be blank." msgstr "El nombre de la colección no puede dejarse en blanco." msgid "The destination collection does not exist" msgstr "La colección de destino no existe." msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "El nombre de despliegue puede asignarse solo en colecciones, principales, o enlaces." msgid "The email address really should not be blank." msgstr "La dirección de correo electrónico no deberá estar en blanco." #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "Ël archivo no está codificado en UTF-8, por favor verifica el mensaje de error para mayores detalles." msgid "The full name for this person, group or other type of principal." msgstr "El nombre completo de esta persona, grupo, u otro tipo de principal." msgid "The full name must not be blank." msgstr "El nombre completo no puede estar en blanco." msgid "The name this user can log into the system with." msgstr "El nombre con el que este usuario accederá el sistema." msgid "The path on the server where your .ics files are." msgstr "La trayectoria en el servidor donce están los archivos .ics." msgid "The preferred language for this person." msgstr "El lenguaje predilecto de esta persona." #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "El estilo de fechas usado por esta persona." msgid "The user's e-mail address." msgstr "El correo electrónico del usuario." msgid "The user's full name." msgstr "El nombre completo del usuario." msgid "The user's password for logging in." msgstr "La clave de acceso del usuario para acceder al sistema." msgid "The username must not be blank, and may not contain a slash" msgstr "El nombre de usuario no puede estar en blanco, y no debe contener diagonales." msgid "There was an error reading from the database." msgstr "Ocurrió un error al leer la base de datos." msgid "There was an error writing to the database." msgstr "Ocurrió un error al escribir en la base de datos." msgid "" "This operation does the following:

  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Esta operación hace lo sigiente:
  • verificar los grupos en el directorio LDAP
  • checar los grupos en DAViCal
luego
  • si un grupo existe en DAViCal mas no en LDAP, asignarlo como inactivo en DAViCal
  • si un grupo está presente en LDAP pero no ed DAViCal, crear el grupo en DAViCal
  • si un grupo está presente en ambos LDAP y DAViCal, actualizar la información en DAViCal
" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Esta operación hace lo siguiente:
  • verificar que los usuarios son válidos en el directorio LDAP
  • checar los usuarios en DAViCal
luego
  • si un usuario está presente en DAViCal pero no en LDAP, assignarlo como inactivo en DAViCal
  • si un usuario está presente en LDAP mas no en DAViCal, crear al usuario en DAViCal
  • si un usuario está presente en LDAP y en DAViCal, actualizar la información en DAViCal
" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "Esta página valida el ambiente operativo necesario para que DAViCal funcione correctamente. Sugestiones o parches para hacerla mas útil o efectiva serán graciosamente recibidas." msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "Este servidor solo soporta el formato text/calendar para URLs freebusy" msgid "Ticket ID" msgstr "ID del Boleto" msgid "Time" msgstr "Tiempo" msgid "To Collection" msgstr "A la Colleción" msgid "To ID" msgstr "Al ID" msgid "Toggle all privileges" msgstr "Intercambiar todos los privilegios" msgid "Tools" msgstr "Herramientas" msgid "Transparent" msgstr "Transparente" msgid "URL" msgstr "URL" msgid "US Format" msgstr "Formato EEUU" msgid "Unauthenticated User" msgstr "Usuario no Autentificado" msgid "United States of America (m/d/y)" msgstr "Estados Unidos de Norteamérica (m/d/y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Actualizar" msgid "Updated" msgstr "Actualizado" msgid "Updating Collection record." msgstr "Actualizando el registro de Colección." msgid "Updating Member of this Group Principal" msgstr "Actualizando a un Miembro de este Grupo Principal" msgid "Updating Principal record." msgstr "Actualizando el registro Principal." msgid "Updating grants by this Principal" msgstr "Actualizando las subvenciones de este Principal" msgid "Upgrade DAViCal database schema" msgstr "Actualizar el esquema de base de datos de DAViCal" msgid "Upgrade Database" msgstr "Actualizar la Base de Datos" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "Principales Usuarios de Calendario" msgid "User Details" msgstr "Detalles del Usuario" msgid "User Functions" msgstr "Funciones del Usuario" msgid "User Name" msgstr "Nombre del Usuario" msgid "User Roles" msgstr "Papeles del Usuario" msgid "User is active" msgstr "El Usuario es activo" msgid "User record written." msgstr "Registro del usuario escrito." msgid "Username" msgstr "Nombre de Usuario" msgid "View My Details" msgstr "Ver Mis Detalles" msgid "View my own principal record" msgstr "Ver mi registro principal propio" msgid "View this user record" msgstr "Ver este registro de usuario" msgid "Visit the DAViCal Wiki" msgstr "Visitar el Wiki de DAViCal" #, php-format msgid "Want: %s, Currently: %s" msgstr "Quiere: %s, Actualmente: %s" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "Precaución: ¡No hay usuarios administrativos activos! Debe reparar esto antes de salirdel sistema. Considere utilizar el parámetro $c->do_not_sync_from_ldap de configuración." msgid "When the user's e-mail account was validated." msgstr "Cuando la dirección de correo electrónico del usuario fue validada." msgid "Write" msgstr "Escribir" msgid "Write ACLs for a resource or collection" msgstr "Escribir ACLs para un recurso o colección" msgid "Write Access Controls" msgstr "Escribir los Controles de Acceso" msgid "Write Data" msgstr "Escribir Datos" msgid "Write Metadata" msgstr "Escribir Meta-datos" msgid "Write content" msgstr "Escribir contenido" msgid "Write properties" msgstr "Escribir propiedades" msgid "Yes" msgstr "Sí" msgid "You are editing" msgstr "Ud. está editando" msgid "You are not authorised to use this function." msgstr "Ud. no está autorizado a usar esta función." msgid "You are viewing" msgstr "Usted ve" msgid "You do not have permission to modify this record." msgstr "Ud. no tiene permiso para modificar este registro." msgid "You may not PUT to a collection URL" msgstr "Ud. no puede ejecutar PUT en un URL de colección" msgid "You must log in to use this system." msgstr "Ud. debe identificarse para usar este sistema." msgid "Your configuration produced PHP errors which should be corrected" msgstr "Su configuración produjo errors PHP que deben ser corregidos" msgid "calendar-timezone property is only valid for a calendar." msgstr "calendar-timezone es una propiedad válida solamente para un calendario." #, php-format msgid "directory %s is not readable" msgstr "el directorio %s no es legible" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "drivers_imap_pam : imap_url parámetro no configurado en /etc/davical/*-conf.php" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap : No pudo arrancar TLS: ldap_start_tls() falló" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap : Falló la atadura entre el sistema %1$s en el puerto %2$s con atadura DN de %3$s" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap : Falló en establecer que LDAP utilice la versión 3 del protocol, TLS no es soportada" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap : Incapaz de atar a LDAP - verifique su configuración de bindDN y passDN, y que su servidor LDAP sea accesible" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap : Incapaz de conectar a LDAP en el puerto %s del servidor %s" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap : la función ldap_connect no fue definida; cheque su módulo php_ldap" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "drivers_pwauth_pam : Incapz de encontrar al archivo %s" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam : Incapaz de encontrar el archivo %s" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "no me olvides" msgid "from principal" msgstr "del principal" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "trayectoria para almacenar ics" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "Desautenticado" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "deberá identificarse con el nombre de usuario y clave de acceso que le fueron otorgados." davical-1.1.1/po/es_ES.values0000644000000000000000000000007511651601375012647 0ustar VALUES( 'es_ES', 'Spanish (Spain)', 'Español (Espana)' ); davical-1.1.1/po/sv.values0000644000000000000000000000005311633117640012272 0ustar VALUES( 'sv', 'Swedish', 'Svenska' ); davical-1.1.1/po/hu.values0000644000000000000000000000005411633117640012257 0ustar VALUES( 'hu', 'Hungarian', 'Magyar' ); davical-1.1.1/po/es_VE.values0000644000000000000000000000010611633117640012642 0ustar VALUES( 'es_VE', 'Spanish (Venezuela)', 'Español (Venezuela)' ); davical-1.1.1/po/es_AR.po0000644000000000000000000006512511767336605012001 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_AR\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "" msgid "*** Default Locale ***" msgstr "" msgid "*** Unknown ***" msgstr "" #, php-format msgid "- adding %s to group : %s" msgstr "" #, php-format msgid "- adding users %s to group : %s" msgstr "" #, php-format msgid "- creating groups : %s" msgstr "" #, php-format msgid "- creating record for users : %s" msgstr "" #, php-format msgid "- deactivate groups : %s" msgstr "" #, php-format msgid "- deactivating users : %s" msgstr "" #, php-format msgid "- nothing done on : %s" msgstr "" #, php-format msgid "- removing %s from group : %s" msgstr "" #, php-format msgid "- updating groups : %s" msgstr "" #, php-format msgid "- updating user records : %s" msgstr "" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Por favor, iniciar sesión

Para acceder al %s debe conectarse con el nombre de usuario y contraseña que le han sido asignado.

Si desea solicitar el acceso, por favor, e-mail %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "" msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "" msgid "AWL Library version " msgstr "" msgid "Access Tickets" msgstr "" msgid "Access ticket deleted" msgstr "" msgid "Action" msgstr "Acción" msgid "Active" msgstr "Activo" msgid "Adding new member to this Group Principal" msgstr "" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Administrador" msgid "Administration" msgstr "" msgid "Administrator" msgstr "" msgid "All" msgstr "" msgid "All collection data will be unrecoverably deleted." msgstr "" #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "" msgid "All privileges" msgstr "" msgid "All requested changes were made." msgstr "" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "" msgid "Anonymous users are not allowed to modify calendars" msgstr "" msgid "Anonymous users may only access public calendars" msgstr "" msgid "Append" msgstr "" msgid "Application DB User" msgstr "" msgid "Apply Changes" msgstr "" msgid "Apply DB Patches" msgstr "" msgid "Attachment" msgstr "" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "" msgid "Bindings to other collections" msgstr "" msgid "Bindings to this Collection" msgstr "" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "Mostrar todos los usuarios" msgid "Busy" msgstr "" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "" msgid "Calendar Principals" msgstr "" msgid "Calendar Timezone" msgstr "" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "" msgid "Change Password" msgstr "" msgid "Click to display user details" msgstr "" msgid "Click to edit principal details" msgstr "" msgid "Collection" msgstr "" msgid "Collection Grants" msgstr "" msgid "Collection ID" msgstr "" msgid "Collection deleted" msgstr "" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "" msgid "Configuring Calendar Clients for DAViCal" msgstr "" msgid "Configuring DAViCal" msgstr "" msgid "Confirm" msgstr "Confirmar" msgid "Confirm Deletion of the Binding" msgstr "" msgid "Confirm Deletion of the Collection" msgstr "" msgid "Confirm Deletion of the Principal" msgstr "" msgid "Confirm Deletion of the Ticket" msgstr "" msgid "Confirm Password" msgstr "" msgid "Confirm the new password." msgstr "Confirmar la nueva contraseña." msgid "Could not retrieve" msgstr "" msgid "Create" msgstr "Crear" msgid "Create Collection" msgstr "" msgid "Create Events/Collections" msgstr "" msgid "Create New Collection" msgstr "" msgid "Create New Principal" msgstr "" msgid "Create Principal" msgstr "" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "" msgid "Create a resource or collection" msgstr "" msgid "Creating new Collection." msgstr "" msgid "Creating new Principal record." msgstr "" msgid "Creating new ticket granting privileges to this Principal" msgstr "" msgid "Current DAViCal version " msgstr "" msgid "DAV Path" msgstr "" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "" msgid "DAViCal CalDAV Server" msgstr "" msgid "DAViCal DB Schema version " msgstr "" msgid "DAViCal Homepage" msgstr "" msgid "DAViCal Wiki" msgstr "" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "" msgid "Database Error" msgstr "" msgid "Database Host" msgstr "" msgid "Database Name" msgstr "" msgid "Database Owner" msgstr "" msgid "Database Password" msgstr "" msgid "Database Port" msgstr "" msgid "Database Username" msgstr "" msgid "Database error" msgstr "" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "" msgid "Date Style" msgstr "Formato de Fecha" msgid "Default Privileges" msgstr "" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "Borrar" msgid "Delete Events/Collections" msgstr "" msgid "Delete Principal" msgstr "" msgid "Delete a resource or collection" msgstr "" msgid "Deleted a grant from this Principal" msgstr "" msgid "Deleting Binding:" msgstr "" msgid "Deleting Collection:" msgstr "" msgid "Deleting Principal:" msgstr "" msgid "Deleting Ticket:" msgstr "" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "" msgid "Dependencies" msgstr "" msgid "Dependency" msgstr "" msgid "Description" msgstr "" msgid "Destination collection does not exist" msgstr "" msgid "Directory on the server" msgstr "" msgid "Display Name" msgstr "" msgid "Displayname" msgstr "" msgid "Does the user have the right to perform this role?" msgstr "¿El usuario tiene permiso para efectuar este rol?" msgid "Domain" msgstr "" msgid "EMail" msgstr "Correo Electrónico" msgid "EMail OK" msgstr "Correo Electrónico correcto" msgid "ERROR: The full name may not be blank." msgstr "" msgid "ERROR: The new password must match the confirmed password." msgstr "" msgid "ERROR: There was a database error writing the roles information!" msgstr "ERROR: Hubo un error en la base de datos al grabar la información de los roles!" msgid "Edit" msgstr "" msgid "Edit this user record" msgstr "Mostrar el registro de éste usuario" msgid "Email Address" msgstr "" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "" msgid "Enter your username and password then click here to log in." msgstr "" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" msgid "Error querying database." msgstr "" msgid "Error writing calendar details to database." msgstr "" msgid "Error writing calendar properties to database." msgstr "" msgid "European" msgstr "" msgid "European (d/m/y)" msgstr "Formato Europeo (d/m/y)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "" msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "" msgid "Expires" msgstr "" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "Para acceder a" msgid "Forbidden" msgstr "" msgid "Free/Busy" msgstr "" msgid "Full Name" msgstr "Nombre Completo" msgid "Fullname" msgstr "" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "" msgid "Go to the DAViCal Feature Requests" msgstr "" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "" #. Translators: in the sense of a group of people msgid "Group" msgstr "Grupo" msgid "Group Members" msgstr "" msgid "Group Memberships" msgstr "" msgid "Group Principals" msgstr "" msgid "Has Members" msgstr "" msgid "Help" msgstr "Ayuda" msgid "Help on the current screen" msgstr "" msgid "Help! I've forgotten my password!" msgstr "" msgid "Home" msgstr "Página principal" msgid "Home " msgstr "" msgid "Home Page" msgstr "" msgid "ID" msgstr "" msgid "ISO Format" msgstr "" msgid "ISO Format (YYYY-MM-DD)" msgstr "Formato ISO (YYYY-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "No" msgid "If you have forgotten your password then" msgstr "" msgid "If you would like to request access, please e-mail" msgstr "Si desea obtener acceso por favor envíe un correo electrónico a" msgid "Import all .ics files of a directory" msgstr "" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "Usuario o contraseña incorrectos." msgid "Invalid username or password." msgstr "Usuario o contraseña incorrectos." msgid "Is Member of" msgstr "" msgid "Is a Calendar" msgstr "" msgid "Is an Addressbook" msgstr "" msgid "Is this user active?" msgstr "¿Éste usuario está activo?" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "Incorporado" msgid "Language" msgstr "Idioma" msgid "Last used" msgstr "Utilizado por última vez" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "" msgid "List Resources" msgstr "" msgid "List Users" msgstr "" msgid "Load From File" msgstr "" msgid "Locale" msgstr "" msgid "Location" msgstr "" msgid "Log On Please" msgstr "Conectarse por favor" msgid "Log out of DAViCal" msgstr "" msgid "Logout" msgstr "Desconectarse" msgid "Member deleted from this Group Principal" msgstr "" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "Nombre" msgid "New Collection" msgstr "" msgid "New Password" msgstr "Nueva Constraseña" msgid "New Principal" msgstr "" #. Translators: not 'Yes' msgid "No" msgstr "" msgid "No calendar content" msgstr "" msgid "No collection found at that location." msgstr "" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "" #. Translators: short for 'Number' msgid "No." msgstr "No" msgid "No. of Collections" msgstr "" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "" msgid "Not overwriting existing destination resource" msgstr "" msgid "Opaque" msgstr "" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "" msgid "Password" msgstr "Constraseña" msgid "Path" msgstr "" msgid "Person" msgstr "" msgid "Please confirm deletion of access ticket - see below" msgstr "" msgid "Please confirm deletion of binding - see below" msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" msgid "Please confirm deletion of the principal" msgstr "" msgid "Please note the time and advise the administrator of your system." msgstr "Por favor, tome nota de la fecha y hora y contacte a su administrador de sistemas." msgid "Principal" msgstr "" msgid "Principal Collections" msgstr "" msgid "Principal Grants" msgstr "" msgid "Principal ID" msgstr "" msgid "Principal Type" msgstr "" msgid "Principal deleted" msgstr "" msgid "Privileges" msgstr "" msgid "Privileges granted to All Users" msgstr "" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Público" msgid "Publicly Readable" msgstr "" msgid "REPORT body contains no XML data!" msgstr "" msgid "REPORT body is not valid XML data!" msgstr "" msgid "Read" msgstr "" msgid "Read ACLs for a resource or collection" msgstr "" msgid "Read Access Controls" msgstr "" msgid "Read Current User's Access" msgstr "" msgid "Read Free/Busy Information" msgstr "" msgid "Read the content of a resource or collection" msgstr "" msgid "" "Read the details of the current user's access control to this resource." msgstr "" msgid "Read the free/busy information for a calendar collection" msgstr "" msgid "Read/Write" msgstr "" msgid "References" msgstr "" msgid "Remove" msgstr "" msgid "Remove a lock" msgstr "" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "Reportar Error" msgid "Report a bug in the system" msgstr "Reportar un error en el sistema" msgid "Request Feature" msgstr "" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Recurso" msgid "Resource Calendar Principals" msgstr "" msgid "Resource Not Found." msgstr "" msgid "Resource has changed on server - not deleted" msgstr "" msgid "Resources may not be changed to / from collections." msgstr "" msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "" msgid "Schedule Send" msgstr "" msgid "Schedule Transparency" msgstr "" msgid "Scheduling: Deliver a Reply" msgstr "" msgid "Scheduling: Deliver an Invitation" msgstr "" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "" msgid "Scheduling: Send a Reply" msgstr "" msgid "Scheduling: Send an Invitation" msgstr "" msgid "Scheduling: Send free/busy" msgstr "" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "" msgid "Set free/busy privileges" msgstr "" msgid "Set read privileges" msgstr "" msgid "Set read+write privileges" msgstr "" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "" msgid "Setup DAViCal" msgstr "" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Mostrar ayuda sobre" msgid "Site Statistics" msgstr "" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "" msgid "Some properties were not able to be set." msgstr "" msgid "Source resource does not exist." msgstr "" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "" msgid "Specific Privileges" msgstr "" msgid "Status" msgstr "" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "" msgid "Submit" msgstr "" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "" msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "" msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "" msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "" msgid "The destination collection does not exist" msgstr "" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "" msgid "The name this user can log into the system with." msgstr "El nombre con el cual éste usuario puede conectase al sistema." msgid "The path on the server where your .ics files are." msgstr "" msgid "The preferred language for this person." msgstr "El idioma preferido por ésta persona." #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "El estilo de fechas utilizado por ésta persona." msgid "The user's e-mail address." msgstr "La dirección de correo electrónico del usuario." msgid "The user's full name." msgstr "El nombre completo del usuario." msgid "The user's password for logging in." msgstr "La contraseña del usuario para conectarse." msgid "The username must not be blank, and may not contain a slash" msgstr "" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "Hubo un error al grabar en la base de datos." msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "" msgid "Time" msgstr "" msgid "To Collection" msgstr "" msgid "To ID" msgstr "" msgid "Toggle all privileges" msgstr "" msgid "Tools" msgstr "" msgid "Transparent" msgstr "" msgid "URL" msgstr "" msgid "US Format" msgstr "" msgid "Unauthenticated User" msgstr "" msgid "United States of America (m/d/y)" msgstr "Estados Unidos de América (m/d/y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Actualizar" msgid "Updated" msgstr "Actualizado" msgid "Updating Collection record." msgstr "" msgid "Updating Member of this Group Principal" msgstr "" msgid "Updating Principal record." msgstr "" msgid "Updating grants by this Principal" msgstr "" msgid "Upgrade DAViCal database schema" msgstr "" msgid "Upgrade Database" msgstr "" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "" msgid "User Details" msgstr "Datos del Usuario" msgid "User Functions" msgstr "" msgid "User Name" msgstr "Nombre del Usuario" msgid "User Roles" msgstr "Roles del Usuario" msgid "User is active" msgstr "El usuario está activo" msgid "User record written." msgstr "Registro del usuario grabado." msgid "Username" msgstr "" msgid "View My Details" msgstr "" msgid "View my own principal record" msgstr "" msgid "View this user record" msgstr "Mostrar éste registro de usuario" msgid "Visit the DAViCal Wiki" msgstr "" #, php-format msgid "Want: %s, Currently: %s" msgstr "" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "Cuando fue validada la cuenta de correo del usuario." msgid "Write" msgstr "" msgid "Write ACLs for a resource or collection" msgstr "" msgid "Write Access Controls" msgstr "" msgid "Write Data" msgstr "" msgid "Write Metadata" msgstr "" msgid "Write content" msgstr "" msgid "Write properties" msgstr "" msgid "Yes" msgstr "" msgid "You are editing" msgstr "" msgid "You are not authorised to use this function." msgstr "No está autorizado a utilizar ésta función." msgid "You are viewing" msgstr "" msgid "You do not have permission to modify this record." msgstr "" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "Debe conectarte para usar el sistema." msgid "Your configuration produced PHP errors which should be corrected" msgstr "" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "" msgid "from principal" msgstr "" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "Para conectarse debe utilizar el nombre de usuario y contraseña que le ha sido asignado." davical-1.1.1/po/es_MX.values0000644000000000000000000000007611633117640012662 0ustar VALUES( 'es_MX', 'Spanish (Mexico)', 'Español (Mexico)' ); davical-1.1.1/po/de.po0000644000000000000000000012161611767336605011376 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. # fmms , 2011. # , 2011, 2012. # spasstl , 2011. # thoerb , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: German (http://www.transifex.net/projects/p/davical/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "%F %T" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "%T" msgid "*** Default Locale ***" msgstr "*** Standard-Locale ***" msgid "*** Unknown ***" msgstr "*** unbekannt ***" #, php-format msgid "- adding %s to group : %s" msgstr "- füge %s der Gruppe %s hinzu" #, php-format msgid "- adding users %s to group : %s" msgstr "- füge Benutzer %s der Gruppe %s hinzu" #, php-format msgid "- creating groups : %s" msgstr "- erstelle Gruppen: %s" #, php-format msgid "- creating record for users : %s" msgstr "- erstelle Eintrag für Benutzer: %s" #, php-format msgid "- deactivate groups : %s" msgstr "- deaktiviere Gruppen: %s" #, php-format msgid "- deactivating users : %s" msgstr "- deaktiviere Benutzer: %s" #, php-format msgid "- nothing done on : %s" msgstr "- nichts verändert an: %s" #, php-format msgid "- removing %s from group : %s" msgstr "- entferne %s aus der Gruppe %s" #, php-format msgid "- updating groups : %s" msgstr "- aktualisiere Gruppen: %s" #, php-format msgid "- updating user records : %s" msgstr "- aktualisiere Benutzereinträge: %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "WARNUNG: Vor dem Einfügen der ICS-Kalenderdatei werden alle Termine in diesem Pfad gelöscht" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "

Hilfe

\n

Besuchen Sie die DAViCal-Homepage oder schauen Sie \nin das DAViCal-Wiki um Hilfe zu erhalten.

\n

Falls Sie dort nicht die gesuchten Informationen finden, können Sie uns über IRC im\nChannel #davical auf irc.oftc.net besuchen\noder Ihre Frage an die DAViCal-Users-Mailingliste schicken.

\n

Das Archiv der Mailingliste\nkönnte ebenfalls interessant sein.

" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Bitte anmelden

Um auf %s zuzugreifen, müssen Sie sich mit demBenutzernamen und dem Passwort anmelden, die ihnen zugeteilt wurden.

Um einen Zugang zu beantragen, schreiben Sie eine E-Mail an %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "Eine DAViCal-Prinzipalen-Sammlung darf nur andere Sammlungen enthalten" msgid "A collection already exists at that location." msgstr "An diesem Ort ist bereits eine Sammlung vorhanden." msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "Die Ressource existiert bereits am Ziel." msgid "AWL Library version " msgstr "Version der AWL-Bibliothek" msgid "Access Tickets" msgstr "Zugriffsanfragen" msgid "Access ticket deleted" msgstr "Zugriffsanfrage gelöscht" msgid "Action" msgstr "Aktion" msgid "Active" msgstr "Aktiv" msgid "Adding new member to this Group Principal" msgstr "Füge neues Mitglied zu diesem Gruppenprinzipalen hinzu" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Admin" msgid "Administration" msgstr "Administration" msgid "Administrator" msgstr "Administrator" msgid "All" msgstr "Alle" msgid "All collection data will be unrecoverably deleted." msgstr "Sämtliche Daten der Sammlung werden unwiderruflich gelöscht." #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "All Ereignisse des Benutzers \"%s\" wurden gelöscht und durch die aus der Datei %s ersetzt" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "Alle Kalender und Termine des Prinzipals werden unwiderruflich gelöscht." msgid "All privileges" msgstr "Alle Rechte" msgid "All requested changes were made." msgstr "Alle gewünschten Änderungen wurden durchgeführt." msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "Erlaube Frei-/Beschäftigt-Anfragen an den Besitzer dieser Termineingangsbox " msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "Ein \"Administrator\" besitzt alle Rechte im DAViCal-System" msgid "Anonymous users are not allowed to modify calendars" msgstr "Nicht angemeldete Benutzer dürfen keine Kalender verändern" msgid "Anonymous users may only access public calendars" msgstr "Nicht angemeldete Benutzer können nur auf öffentliche Kalender zugreifen" msgid "Append" msgstr "" msgid "Application DB User" msgstr "Anwendungsdatenbankbenutzer" msgid "Apply Changes" msgstr "Änderungen anwenden" msgid "Apply DB Patches" msgstr "Datenbankkorrekturen anwenden" msgid "Attachment" msgstr "Anhang" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "Zuordnung gelöscht" msgid "Bindings to other collections" msgstr "Zuordnungen zu anderen Sammlungen" msgid "Bindings to this Collection" msgstr "Zuordnungen zu dieser Sammlung" msgid "Bindings to this Principal's Collections" msgstr "Zuordnungen zur Sammlung dieses Prinzipalen" msgid "Body contains no XML data!" msgstr "Der Hauptteil enthält kein XML!" msgid "Bound As" msgstr "Zugeordnet als" msgid "Browse all users" msgstr "Zeige alle Benutzer" msgid "Busy" msgstr "beschäftigt" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "Kalender \"%s\" wurde hochgeladen." msgid "Calendar Principals" msgstr "Kalenderprinzipalen" msgid "Calendar Timezone" msgstr "Zeitzone des Kalenders" msgid "Can only add tickets for existing collection paths which you own" msgstr "Es können nur Tickets für Ihre eigenen Sammlungen erstellt werden" msgid "Categories" msgstr "Kategorien" msgid "Change Password" msgstr "Passwort ändern" msgid "Click to display user details" msgstr "Klicken, um Benutzerdetails anzuzeigen" msgid "Click to edit principal details" msgstr "Klicken, um Details des Prinzipalen zu bearbeiten" msgid "Collection" msgstr "Sammlung" msgid "Collection Grants" msgstr "Berechtigungen für Sammlung" msgid "Collection ID" msgstr "Sammlungs-ID" msgid "Collection deleted" msgstr "Sammlung gelöscht" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "Sammlungen können nicht gleichzeitig CalDAV-Kalender und -Adressbuch sein" msgid "Configuring Calendar Clients for DAViCal" msgstr "Konfiguration von Kalender-Clients für DAViCal" msgid "Configuring DAViCal" msgstr "DAViCal-Konfiguration" msgid "Confirm" msgstr "Bestätigen" msgid "Confirm Deletion of the Binding" msgstr "Löschen der Zuordnung bestätigen" msgid "Confirm Deletion of the Collection" msgstr "Löschen der Sammlung bestätigen" msgid "Confirm Deletion of the Principal" msgstr "Löschen des Prinzipalen bestätigen" msgid "Confirm Deletion of the Ticket" msgstr "Löschen des Tickets bestätigen" msgid "Confirm Password" msgstr "Passwort bestätigen" msgid "Confirm the new password." msgstr "Neues Passwort bestätigen" msgid "Could not retrieve" msgstr "Aufruf fehlgeschlagen" msgid "Create" msgstr "Erstellen" msgid "Create Collection" msgstr "Sammlung erstellen" msgid "Create Events/Collections" msgstr "Termine/Sammlungen erstellen" msgid "Create New Collection" msgstr "Neue Sammlung erstellen" msgid "Create New Principal" msgstr "Neuen Prinzipalen erstellen" msgid "Create Principal" msgstr "Prinzipalen anlegen" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Einen neuen Prinzipalen (z.B. neuen Benutzer, Ressource oder Gruppe) erstellen" msgid "Create a resource or collection" msgstr "Neue Ressource oder Sammlung erstellen" msgid "Creating new Collection." msgstr "Erstelle neue Sammlung." msgid "Creating new Principal record." msgstr "Erstelle neuen Prinizipalen." msgid "Creating new ticket granting privileges to this Principal" msgstr "Generiere ein neues Ticket, um diesem Prinzipalen Berechtigungen zu verleihen" msgid "Current DAViCal version " msgstr "aktuelle DAViCal-Version" msgid "DAV Path" msgstr "DAV-Pfad" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "DAV::resourcetype darf nur auf einen neuen Wert gesetzt, nicht aber gelöscht werden." msgid "DAViCal CalDAV Server" msgstr "DAViCal-CalDAV-Server" msgid "DAViCal DB Schema version " msgstr "Version des DAViCal-Datenbankschemas" msgid "DAViCal Homepage" msgstr "DAViCal-Startseite" msgid "DAViCal Wiki" msgstr "DAViCal-Wiki" msgid "DAViCal only allows BIND requests for collections at present." msgstr "DAViCal erlaubt momentan nur BIND-Anfragen für Sammlungen." msgid "DKIM signature missing" msgstr "DKIM-Signatur fehlt" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "DKIM-Signaturvalidierung fehlgeschlagen (DNS ERROR)" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "DKIM-Signaturvalidierung fehlgeschlagen (KEY Parse ERROR)" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "DKIM-Signaturvalidierung fehlgeschlagen (KEY Validation ERROR)" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "DKIM-Signaturvalidierung fehlgeschlagen (Signature verification ERROR)" msgid "Database Error" msgstr "Datenbankfehler" msgid "Database Host" msgstr "Datenbankserver" msgid "Database Name" msgstr "Datenbankname" msgid "Database Owner" msgstr "Datenbankbesitzer" msgid "Database Password" msgstr "Datenbankpasswort" msgid "Database Port" msgstr "Datenbankport" msgid "Database Username" msgstr "Datenbankbenutzername" msgid "Database error" msgstr "Datenbankfehler" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Datumsformat" msgid "Date Style" msgstr "Datumsformat" msgid "Default Privileges" msgstr "Standardrechte" msgid "Default relationships added." msgstr "Standardbeziehungen hinzugefügt." msgid "Delete" msgstr "Löschen" msgid "Delete Events/Collections" msgstr "Termine/Sammlungen löschen" msgid "Delete Principal" msgstr "Prinzipalen löschen" msgid "Delete a resource or collection" msgstr "Ressource oder Sammlung löschen" msgid "Deleted a grant from this Principal" msgstr "Eine Berechtigung von diesem Principalen wurde gelöscht" msgid "Deleting Binding:" msgstr "Lösche Zuordnung:" msgid "Deleting Collection:" msgstr "Lösche Sammlung:" msgid "Deleting Principal:" msgstr "Lösche Prinzipalen:" msgid "Deleting Ticket:" msgstr "Lösche Ticket:" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "Auslieferung von Termineinladungen von einem Organisator an diese Termineingangsbox" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "Auslieferung von Terminantworten von einem Teilnehmer an diese Termineingangsbox" msgid "Dependencies" msgstr "Abhängigkeiten" msgid "Dependency" msgstr "Abhängigkeit" msgid "Description" msgstr "Beschreibung" msgid "Destination collection does not exist" msgstr "Zielsammlung existiert nicht" msgid "Directory on the server" msgstr "Verzeichnis auf dem Server" msgid "Display Name" msgstr "Anzeigename" msgid "Displayname" msgstr "Anzeigename" msgid "Does the user have the right to perform this role?" msgstr "Hat der Benutzer die Berechtigung für diese Rolle?" msgid "Domain" msgstr "" msgid "EMail" msgstr "E-Mail" msgid "EMail OK" msgstr "E-Mail OK" msgid "ERROR: The full name may not be blank." msgstr "FEHLER: Der vollständige Name darf nicht leer sein." msgid "ERROR: The new password must match the confirmed password." msgstr "FEHLER: Die Passwörter stimmen nicht überein." msgid "ERROR: There was a database error writing the roles information!" msgstr "FEHLER: Datenbankfehler beim Speichern der Rolleninformation!" msgid "Edit" msgstr "Bearbeiten" msgid "Edit this user record" msgstr "Benutzereintrag bearbeiten" msgid "Email Address" msgstr "E-Mail-Adresse" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Geben Sie Ihren Benutzernamen ein (falls bekannt) und klicken Sie hier, um ein temporäres Passwort per E-Mail zu erhalten." msgid "Enter your username and password then click here to log in." msgstr "Geben Sie Benutzernamen und Passwort ein und klicken Sie hier, um sich anzumelden." #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Fehler NoGroupFound mit Filter >%s<, Attribute >%s< , dn >%s<" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Der Fehler NoUserFound ist mit dem Filter >%s<, den Attributen >%s< und dn >%s< aufgetreten" msgid "Error querying database." msgstr "Fehler bei der Datenbankabfrage" msgid "Error writing calendar details to database." msgstr "Fehler beim Schreiben der Kalenderdetails in die Datenbank" msgid "Error writing calendar properties to database." msgstr "Fehler beim Schreiben der Kalendereigenschaften in die Datenbank." msgid "European" msgstr "Europäisch" msgid "European (d/m/y)" msgstr "Europäisch (tt.mm.jjjj)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "Bestehende Ressource passt nicht zum \"If-Match\"-Header - nicht akzeptiert." msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "Bestehende Ressource passt nicht zum \"If-None-Match\"-Header - nicht akzeptiert." msgid "Expires" msgstr "Läuft ab" msgid "External Calendars" msgstr "Externe Kalender" msgid "External Url" msgstr "Externe URL" msgid "Fail" msgstr "Fehlgeschlagen" msgid "Failed to write collection." msgstr "Speichern der Sammlung fehlgeschlagen" msgid "Feeds are only supported for calendars at present." msgstr "Feeds werden zurzeit nur für Kalender unterstützt." msgid "For access to the" msgstr "Für den Zugriff auf" msgid "Forbidden" msgstr "Nicht erlaubt" msgid "Free/Busy" msgstr "Verfügbarkeit" msgid "Full Name" msgstr "Vollständiger Name" msgid "Fullname" msgstr "Anzeigename" msgid "GET requests on collections are only supported for calendars." msgstr "GET-Anfragen an Sammlungen sind nur für Kalender unterstützt." msgid "GNU gettext support" msgstr "\"GNU-gettext\"-Unterstützung" msgid "GO!" msgstr "LOGIN" msgid "Go to the DAViCal Feature Requests" msgstr "Gehe zur Wunschliste für DAViCal-Features" msgid "Grant" msgstr "Zugriffberechtigung" msgid "Granting new privileges from this Principal" msgstr "Erteile neues, von diesem Prinzipalen ausgehendes Recht" #. Translators: in the sense of a group of people msgid "Group" msgstr "Gruppe" msgid "Group Members" msgstr "Gruppenmitglieder" msgid "Group Memberships" msgstr "Gruppenmitgliedschaft" msgid "Group Principals" msgstr "Gruppenprinzipalen" msgid "Has Members" msgstr "Hat Mitglieder" msgid "Help" msgstr "Hilfe" msgid "Help on the current screen" msgstr "Hilfe zur aktuellen Seite" msgid "Help! I've forgotten my password!" msgstr "Ich habe mein Passwort vergessen" msgid "Home" msgstr "Startseite" msgid "Home " msgstr "" msgid "Home Page" msgstr "Homepage" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "ISO-Format" msgid "ISO Format (YYYY-MM-DD)" msgstr "ISO-Format (jjjj-mm-tt)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "Wenn Sie Ihr Passwort vergessen haben, dann " msgid "If you would like to request access, please e-mail" msgstr "Um einen Zugang zu beantragen, schreiben Sie bitte eine E-Mail an: " msgid "Import all .ics files of a directory" msgstr "Alle ICS-Kalenderdateien eines Verzeichnisses importieren" msgid "Import calendars and Synchronise LDAP." msgstr "Kalender importieren und LDAP synchronisieren" msgid "Inactive Principals" msgstr "inaktive Prinzipalen" msgid "Incorrect content type for addressbook: " msgstr "Inhalt ist für ein Adressbuch nicht geeignet: " msgid "Incorrect content type for calendar: " msgstr "Inhalt ist für einen Kalender nicht geeignet: " msgid "Invalid user name or password." msgstr "Benutzername oder Passwort ungültig." msgid "Invalid username or password." msgstr "Benutzername oder Passwort ungültig." msgid "Is Member of" msgstr "Ist Mitglied von" msgid "Is a Calendar" msgstr "Ist ein Kalender" msgid "Is an Addressbook" msgstr "Ist ein Adressbuch" msgid "Is this user active?" msgstr "Ist dieser Benutzer aktiv?" msgid "Items in Collection" msgstr "Einträge in dieser Sammlung" msgid "Joined" msgstr "Zusammengefügt" msgid "Language" msgstr "Sprache" msgid "Last used" msgstr "Zuletzt verwendet" msgid "List External Calendars" msgstr "Externe Kalender anzeigen" msgid "List Groups" msgstr "Gruppen anzeigen" msgid "List Resources" msgstr "Ressourcen anzeigen" msgid "List Users" msgstr "Benutzer anzeigen" msgid "Load From File" msgstr "Datei hochladen" msgid "Locale" msgstr "Sprache" msgid "Location" msgstr "Ort" msgid "Log On Please" msgstr "Bitte melden Sie sich an" msgid "Log out of DAViCal" msgstr "Von DAViCal abmelden" msgid "Logout" msgstr "Abmelden" msgid "Member deleted from this Group Principal" msgstr "Mitglied wurde von diesem Gruppenprinzipalen entfernt" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "DAViCal wird größtenteils funktionieren, aber PHP 5.2 oder neuer wird dringend empfohlen. " msgid "Name" msgstr "Name" msgid "New Collection" msgstr "Neue Sammlung" msgid "New Password" msgstr "Neues Passwort" msgid "New Principal" msgstr "Neuer Prinzipal" #. Translators: not 'Yes' msgid "No" msgstr "Nein" msgid "No calendar content" msgstr "Keine Kalendereinträge vorhanden" msgid "No collection found at that location." msgstr "Keine Sammlung an dem Ort gefunden." msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "Keine Zusammenfassung" #. Translators: short for 'Number' msgid "No." msgstr "Nr." msgid "No. of Collections" msgstr "Anzahl an Sammlungen" msgid "No. of Principals" msgstr "Anzahl an Prinzipalen" msgid "No. of Resources" msgstr "Anzahl an Ressourcen" msgid "Not overwriting existing destination resource" msgstr "Bestehende Zielressource wird nicht überschrieben" msgid "Opaque" msgstr "Nicht transparent" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "Sperre übersschreiben" msgid "PDO PostgreSQL drivers" msgstr "PDO-PostgreSQL-Treiber" msgid "PHP DateTime class" msgstr "PHP-DateTime-Klasse" msgid "PHP LDAP module available" msgstr "PHP-LDAP-Modul verfügbar" msgid "PHP Magic Quotes GPC off" msgstr "PHP: magic_quotes_gpc deaktiviert" msgid "PHP Magic Quotes runtime off" msgstr "PHP: magic_quotes_runtime deaktiviert" msgid "PHP PDO module available" msgstr "PHP-PDO-Modul vorhanden" msgid "PHP calendar extension available" msgstr "PHP Kalendererweiterung verfügbar" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "PHP-iconv-Unterstützung" msgid "PHP not using Apache Filter mode" msgstr "PHP benutzt nicht den Apache Filter-Modus" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "PUT-Anfrage an eine Collection ist nur mit text/calendar-Inhalt an eine Kalender-Collection erlaubt" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "Erfolgreich" msgid "Password" msgstr "Passwort" msgid "Path" msgstr "Pfad" msgid "Person" msgstr "Person" msgid "Please confirm deletion of access ticket - see below" msgstr "Bitte bestätigen Sie die Löschung des Tickets - siehe unten" msgid "Please confirm deletion of binding - see below" msgstr "Bitte bestätigen Sie die Löschung der Zuordnung - siehe unten" msgid "Please confirm deletion of collection - see below" msgstr "Bitte bestätigen Sie die Löschung der Sammlung - siehe unten" msgid "Please confirm deletion of the principal" msgstr "Bitte bestätigen Sie die Löschung des Prinzipalen" msgid "Please note the time and advise the administrator of your system." msgstr "Notieren Sie bitte die Zeit und benachrichtigen Sie den Systemadministrator." msgid "Principal" msgstr "Prinzipal" msgid "Principal Collections" msgstr "Sammlungen des Prinzipalen" msgid "Principal Grants" msgstr "Berechtigungen des Prinzipalen" msgid "Principal ID" msgstr "ID des Prinzipalen" msgid "Principal Type" msgstr "Typ des Prinzipalen" msgid "Principal deleted" msgstr "Prinzipal gelöscht" msgid "Privileges" msgstr "Berechtigungen" msgid "Privileges granted to All Users" msgstr "Berechtigungen für alle Benutzer gesetzt" msgid "Privileges to allow delivery of scheduling messages" msgstr "Rechte um die Zustellung von Scheduling-Nachrichten zu erlauben" msgid "Privileges to delegate scheduling decisions" msgstr "Rechte um Scheduling-Anfragen zu delegieren" msgid "Property is read-only" msgstr "Eigenschaft ist schreibgeschützt" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Öffentlich" msgid "Publicly Readable" msgstr "Für alle lesbar" msgid "REPORT body contains no XML data!" msgstr "REPORT-Body enthält keine XML-Daten!" msgid "REPORT body is not valid XML data!" msgstr "REPORT-Body enthält keine gültigen XML-Daten!" msgid "Read" msgstr "Lesen" msgid "Read ACLs for a resource or collection" msgstr "ACLs für eine Ressource oder Sammlung lesen" msgid "Read Access Controls" msgstr "Zugriffsrechte lesen" msgid "Read Current User's Access" msgstr "Zugriff des aktuellen Benutzers lesen" msgid "Read Free/Busy Information" msgstr "Verfügbarkeitsinformationen lesen" msgid "Read the content of a resource or collection" msgstr "Den Inhalt einer Ressource oder Sammlung lesen" msgid "" "Read the details of the current user's access control to this resource." msgstr "Lesen der Details der Zugriffsberechtigungen des aktuellen Benutzers" msgid "Read the free/busy information for a calendar collection" msgstr "Lesen der Verfügbarkeitsinformation eines Kalenders" msgid "Read/Write" msgstr "Lesen/Schreiben" msgid "References" msgstr "Verlinkungen" msgid "Remove" msgstr "Entfernen" msgid "Remove a lock" msgstr "Sperre entfernen" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "Fehler melden" msgid "Report a bug in the system" msgstr "Einen Systemfehler melden" msgid "Request Feature" msgstr "Feature beantragen" msgid "Request body is not valid XML data!" msgstr "Anfrage-Body enthält keine gültigen XML-Daten!" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Ressource" msgid "Resource Calendar Principals" msgstr "Ressource Kalender Prinzipalen" msgid "Resource Not Found." msgstr "Resource nicht gefunden" msgid "Resource has changed on server - not deleted" msgstr "Ressource hat sich auf dem Server geändert - nicht gelöscht" msgid "Resources may not be changed to / from collections." msgstr "Ressourcen können nicht in/aus Sammlungen umgewandelt werden." msgid "Revoke" msgstr "Widerrufen" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "Terminzustellung" msgid "Schedule Send" msgstr "Termin senden" msgid "Schedule Transparency" msgstr "Terminplantransparenz" msgid "Scheduling: Deliver a Reply" msgstr "Terminverarbeitung: Antwort zustellen" msgid "Scheduling: Deliver an Invitation" msgstr "Terminverarbeitung: Einladung zustellen" msgid "Scheduling: Delivery" msgstr "Terminverarbeitung: Zustellung" msgid "Scheduling: Query free/busy" msgstr "Terminverarbeitung: Verfügbarkeit abfragen" msgid "Scheduling: Send a Reply" msgstr "Terminverarbeitung: Antwort versenden" msgid "Scheduling: Send an Invitation" msgstr "Terminverarbeitung: Einladung versenden" msgid "Scheduling: Send free/busy" msgstr "Terminverarbeitung: Verfügbarkeit versenden" msgid "Scheduling: Sending" msgstr "Terminverarbeitung: Senden..." msgid "Send free/busy enquiries" msgstr "Verfügbarkeitsanfrage senden" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "Einladungen als Organisator vom Besitzer dieser Terminausgangsbox verschicken." msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "Einladungsantworten als Teilnehmer vom Besitzer dieser Terminausgangsbox versenden." msgid "Set free/busy privileges" msgstr "Verfügbarkeitsrechte setzen" msgid "Set read privileges" msgstr "Leserechte setzen" msgid "Set read+write privileges" msgstr "Schreib-/Leserechte setzen" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "Konfiguration" msgid "Setup DAViCal" msgstr "DAViCal konfigurieren" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Zeige Hilfe zum Thema" msgid "Site Statistics" msgstr "Seitenstatistiken" msgid "Site Statistics require the database to be available!" msgstr "Seitenstatistik erfordert Datenbankanbindung" msgid "Some properties were not able to be changed." msgstr "Einige Eigenschaften konnten nicht geändert werden." msgid "Some properties were not able to be set." msgstr "Einige Eigenschaften konnten nicht gesetzt werden." msgid "Source resource does not exist." msgstr "Quellressource existiert nicht." msgid "" "Special collections may not contain a calendar or other special collection." msgstr "Spezialsammlungen dürfen keine Kalender oder andere Spezialsammlungen enthalten." msgid "Specific Privileges" msgstr "Sonderrechte" msgid "Status" msgstr "Status" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "Status: %d, Nachricht: %s, Benutzer: %d, Pfad: %s" msgid "Submit" msgstr "Abschicken" msgid "Suhosin \"server.strip\" disabled" msgstr "Suhosin: \"server.strip\" deaktiviert" msgid "Sync LDAP Groups with DAViCal" msgstr "LDAP-Gruppen mit DAViCal synchronisieren" msgid "Sync LDAP with DAViCal" msgstr "Synchronisiere LDAP mit DAViCal" msgid "Target" msgstr "Ziel" msgid "That destination name contains invalid characters." msgstr "Der Zielname enthält ungültige Zeichen" msgid "That resource is not present on this server." msgstr "Diese Ressource ist auf dem Server nicht vorhanden." msgid "The BIND Request MUST identify an existing resource." msgstr "Die BIND-Anfrage MUSS eine bestehende Ressource bezeichnen." msgid "The BIND Request-URI MUST identify a collection." msgstr "Die URI der BIND-Anfrage MUSS eine Sammlung bezeichnen." msgid "The BIND method is not allowed at that location." msgstr "Die BIND-Methode ist an dieser Stelle nicht erlaubt." msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "Das Attribut \"CalDAV:schedule-calendar-transp\" darf nur bei Kalendern gesetzt werden." msgid "The DAViCal Home Page" msgstr "Die DAViCal-Startseite" msgid "The access ticket will be deleted." msgstr "Das Zugriffsticket wird gelöscht." msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "addressbook-query darf nur bei einem Adressbuch ausgeführt werden" msgid "The application failed to understand that request." msgstr "Die Anwendungen konnte die Anfrage nicht verarbeiten." msgid "The application program does not understand that request." msgstr "Das Anwendungsprogramm versteht diese Anfrage nicht." msgid "The binding will be deleted." msgstr "Die Zuordnung wird gelöscht." msgid "The calendar path contains illegal characters." msgstr "Der Kalenderpfad enthält ungültige Zeichen." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "calendar-query darf nur bei einem Kalender oder einer Terminsammlung ausgeführt werden" msgid "The collection name may not be blank." msgstr "Der Name für die Sammlung darf nicht leer sein." msgid "The destination collection does not exist" msgstr "Die angeforderte Sammlung existiert nicht" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "Der Anzeigenname darf nur für Sammlungen, Prinzipale oder Verknüpfungen gesetzt werden." msgid "The email address really should not be blank." msgstr "Das Feld für die E-Mail-Adresse sollte auf keinen Fall leer bleiben." #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "Die Datei \"%s\" ist nicht UTF-8-kodiert; weitere Details stehen in der Fehlermeldung." msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "Die Datei ist nicht in UTF-8-kodiert, bitte Fehler überprüfen für mehr Details." msgid "The full name for this person, group or other type of principal." msgstr "Der vollständige Name dieser Person, Gruppe oder anderer Prinzipale." msgid "The full name must not be blank." msgstr "Der vollständige Name darf nicht leer sein." msgid "The name this user can log into the system with." msgstr "Name, mit dem sich dieser Benutzer beim System anmelden kann." msgid "The path on the server where your .ics files are." msgstr "Verzeichnis auf dem Server, in dem Ihre .ics-Dateien liegen." msgid "The preferred language for this person." msgstr "Die bevorzugte Sprache dieses Benutzers." #, php-format msgid "The principal \"%s\" does not exist" msgstr "Der Prinzipale \"%s\" existiert nicht." msgid "The style of dates used for this person." msgstr "Das Datumsformat, das von diesem Benutzer verwendet wird." msgid "The user's e-mail address." msgstr "Die E-Mail-Adresse des Benutzers." msgid "The user's full name." msgstr "Der vollständige Name des Benutzers." msgid "The user's password for logging in." msgstr "Passwort, mit dem der Benutzer sich anmeldet." msgid "The username must not be blank, and may not contain a slash" msgstr "Der Benutzername darf nicht leer sein und keinen Slash enthalten" msgid "There was an error reading from the database." msgstr "Es ist ein Fehler beim Lesen von der Datenbank aufgetreten" msgid "There was an error writing to the database." msgstr "Beim Schreiben in die Datenbank ist ein Fehler aufgetreten." msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Diese Funktion erledigt die folgenden Aufgaben:\n
    \n
  • überprüfen der gültigen Gruppen im LDAP-Verzeichnis
  • \n
  • überprüfen der Gruppen in DAViCal
  • \n
danach\n
    \n
  • falls eine Gruppe in DAViCal vorhanden ist, nicht aber im LDAP, diese in DAViCal als inaktiv markieren
  • \n
  • falls eine Gruppe im LDAP vorhanden ist, nicht aber in DAViCal, diese in DAViCal anlegen
  • \n
  • falls eine Gruppe im LDAP und DAViCal vorhanden ist, die Informationen in DAViCal aktualisieren
  • \n
" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Diese Funktion erledigt die folgenden Aufgaben:\n
    \n
  • überprüfen der gültigen Benutzer im LDAP-Verzeichnis
  • \n
  • überprüfen der Benutzer in DAViCal
  • \n
danach\n
    \n
  • falls ein Benutzer in DAViCal vorhanden ist, nicht aber im LDAP, diesen in DAViCal als inaktiv markieren
  • \n
  • falls ein Benutzer im LDAP vorhanden ist, nicht aber in DAViCal, diesen in DAViCal anlegen
  • \n
  • falls ein Benutzer im LDAP und DAViCal vorhanden ist, die Informationen in DAViCal aktualisieren
  • \n
" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "Diese Seite überprüft in erster Linie die Umgebung, die für DAViCal für korrektes Fuktionieren benötigt wird. Vorschläge oder Korrekturen, um diese Seite noch sinnvoller zu gestalten werden dankbar angenommen." msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "Dieser Prozess wird jede Datei eines Verzeichnis in der Form \"Benutzer.ics\" importieren und die entsprechenden Benutzer anlegen." msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "Der Server unterstützt nur das text/calendar-Format für FreeBusy-URLs" msgid "Ticket ID" msgstr "Ticket-ID" msgid "Time" msgstr "Zeit" msgid "To Collection" msgstr "Zur Sammlung" msgid "To ID" msgstr "Zur ID" msgid "Toggle all privileges" msgstr "Alle Rechte umschalten" msgid "Tools" msgstr "Werkzeuge" msgid "Transparent" msgstr "Transparent" msgid "URL" msgstr "URL" msgid "US Format" msgstr "US-Format" msgid "Unauthenticated User" msgstr "Nicht eingeloggter Benutzer" msgid "United States of America (m/d/y)" msgstr "Vereinigte Staaten von Amerika (m/t/j)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Aktualisieren" msgid "Updated" msgstr "Aktualisiert" msgid "Updating Collection record." msgstr "Aktualisiere Sammlungseintrag." msgid "Updating Member of this Group Principal" msgstr "Aktualisiere Mitglied dieses Gruppenprinzipalen" msgid "Updating Principal record." msgstr "Prinizipal aktualisiert!" msgid "Updating grants by this Principal" msgstr "Berechtigungen dieses Prinzipalen aktualisiert" msgid "Upgrade DAViCal database schema" msgstr "DAViCal-Datenbankschema aktualisieren" msgid "Upgrade Database" msgstr "Datenbank aktualisieren" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "Prinzipal des Benutzerkalenders" msgid "User Details" msgstr "Benutzerdetails" msgid "User Functions" msgstr "Benutzerfunktionen" msgid "User Name" msgstr "Benutzername" msgid "User Roles" msgstr "Benutzerrollen" msgid "User is active" msgstr "Benutzer aktiviert" msgid "User record written." msgstr "Benutzereintrag gespeichert" msgid "Username" msgstr "Benutzername" msgid "View My Details" msgstr "Meine Einstellungen" msgid "View my own principal record" msgstr "Meinen eigenen Prinzipaleintrag anzeigen" msgid "View this user record" msgstr "Diesen Benutzereintrag anzeigen" msgid "Visit the DAViCal Wiki" msgstr "DAViCal-Wiki besuchen" #, php-format msgid "Want: %s, Currently: %s" msgstr "Erwartet: %s, erhalten: %s" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "Warnung: Es sind keine aktiven Admin-Benutzer. Sie sollten dies vor dem Abmelden beheben. \n\nZiehen sie die Option $c->do_not_sync_from_ldap in Erwägung." msgid "When the user's e-mail account was validated." msgstr "Sobald das E-Mail-Konto des Benutzers bestätigt wurde." msgid "Write" msgstr "Schreiben" msgid "Write ACLs for a resource or collection" msgstr "Schreiben der ACLs für eine Ressource oder Sammlung" msgid "Write Access Controls" msgstr "Zugriffsrechte setzen" msgid "Write Data" msgstr "Daten speichern" msgid "Write Metadata" msgstr "Metadaten speichern" msgid "Write content" msgstr "Schreibe Inhalt" msgid "Write properties" msgstr "Schreibe Eigenschaften" msgid "Yes" msgstr "Ja" msgid "You are editing" msgstr "Sie bearbeiten" msgid "You are not authorised to use this function." msgstr "Sieh haben keine Berechtigung, um diese Funktion auszuführen." msgid "You are viewing" msgstr "Sie sehen" msgid "You do not have permission to modify this record." msgstr "Sie haben keine Berechtigung, diesen Eintrag zu ändern." msgid "You may not PUT to a collection URL" msgstr "PUT-Anfrage auf eine Sammlungs-URL ist nicht erlaubt" msgid "You must log in to use this system." msgstr "Sie müssen angemeldet sein um dieses System zu nutzen." msgid "Your configuration produced PHP errors which should be corrected" msgstr "Ihre Konfiguration hat PHP-Fehler verursacht. Dies sollte korrigiert werden." msgid "calendar-timezone property is only valid for a calendar." msgstr "Die Eigenschaft \"calendar-timezone\" ist nur für einen Kalender gültig." #, php-format msgid "directory %s is not readable" msgstr "Verzeichnis %s kann nicht gelesen werden" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "drivers_imap_pam: imap_url-Parameter wurde nicht in /etc/davical/*-conf.php konfiguriert" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap: TLS konnte nicht gestartet werden: ldap_start_tls() ist fehlgeschlagen" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap: Verbindung (bind) zu Host %1$s auf Port %2$s mit bindDN %3$s ist fehlgeschlagen" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap: LDAP Protokoll-Version 3 konnte nicht gesetzt werden, TLS wird nicht unterstützt" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap: Verbindung (bind) zu LDAP fehlgeschlagen - bitte überprüfen, ob bindDN und passDN richtig konfiguriert sind, und ob der LDAP Server erreichbar ist" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap: LDAP-Verbindung zu Port %s auf Host %s fehlgeschlagen" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap: Funktion ldap_connect nicht definiert, bitte php_ldap Modul überprüfen" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "drivers_pwauth_pam: Kann Datei %s nicht finden" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam: Kann Datei %s nicht finden" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "angemeldet bleiben" msgid "from principal" msgstr "von Prinzipal" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "Speicherort für .ics-Datei" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "Nicht angemeldet" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "Melden Sie sich mit dem Ihnen zugeteilten Benutzernamen und Passwort an." davical-1.1.1/po/et.po0000644000000000000000000006150311767336605011414 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Estonian (http://www.transifex.net/projects/p/davical/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "" msgid "*** Default Locale ***" msgstr "" msgid "*** Unknown ***" msgstr "" #, php-format msgid "- adding %s to group : %s" msgstr "" #, php-format msgid "- adding users %s to group : %s" msgstr "" #, php-format msgid "- creating groups : %s" msgstr "" #, php-format msgid "- creating record for users : %s" msgstr "" #, php-format msgid "- deactivate groups : %s" msgstr "" #, php-format msgid "- deactivating users : %s" msgstr "" #, php-format msgid "- nothing done on : %s" msgstr "" #, php-format msgid "- removing %s from group : %s" msgstr "" #, php-format msgid "- updating groups : %s" msgstr "" #, php-format msgid "- updating user records : %s" msgstr "" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "" msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "" msgid "AWL Library version " msgstr "" msgid "Access Tickets" msgstr "" msgid "Access ticket deleted" msgstr "" msgid "Action" msgstr "" msgid "Active" msgstr "" msgid "Adding new member to this Group Principal" msgstr "" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "" msgid "Administration" msgstr "" msgid "Administrator" msgstr "" msgid "All" msgstr "" msgid "All collection data will be unrecoverably deleted." msgstr "" #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "" msgid "All privileges" msgstr "" msgid "All requested changes were made." msgstr "" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "" msgid "Anonymous users are not allowed to modify calendars" msgstr "" msgid "Anonymous users may only access public calendars" msgstr "" msgid "Append" msgstr "" msgid "Application DB User" msgstr "" msgid "Apply Changes" msgstr "" msgid "Apply DB Patches" msgstr "" msgid "Attachment" msgstr "" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "" msgid "Bindings to other collections" msgstr "" msgid "Bindings to this Collection" msgstr "" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "" msgid "Busy" msgstr "" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "" msgid "Calendar Principals" msgstr "" msgid "Calendar Timezone" msgstr "" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "" msgid "Change Password" msgstr "" msgid "Click to display user details" msgstr "" msgid "Click to edit principal details" msgstr "" msgid "Collection" msgstr "" msgid "Collection Grants" msgstr "" msgid "Collection ID" msgstr "" msgid "Collection deleted" msgstr "" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "" msgid "Configuring Calendar Clients for DAViCal" msgstr "" msgid "Configuring DAViCal" msgstr "" msgid "Confirm" msgstr "" msgid "Confirm Deletion of the Binding" msgstr "" msgid "Confirm Deletion of the Collection" msgstr "" msgid "Confirm Deletion of the Principal" msgstr "" msgid "Confirm Deletion of the Ticket" msgstr "" msgid "Confirm Password" msgstr "" msgid "Confirm the new password." msgstr "" msgid "Could not retrieve" msgstr "" msgid "Create" msgstr "" msgid "Create Collection" msgstr "" msgid "Create Events/Collections" msgstr "" msgid "Create New Collection" msgstr "" msgid "Create New Principal" msgstr "" msgid "Create Principal" msgstr "" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "" msgid "Create a resource or collection" msgstr "" msgid "Creating new Collection." msgstr "" msgid "Creating new Principal record." msgstr "" msgid "Creating new ticket granting privileges to this Principal" msgstr "" msgid "Current DAViCal version " msgstr "" msgid "DAV Path" msgstr "" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "" msgid "DAViCal CalDAV Server" msgstr "" msgid "DAViCal DB Schema version " msgstr "" msgid "DAViCal Homepage" msgstr "" msgid "DAViCal Wiki" msgstr "" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "" msgid "Database Error" msgstr "" msgid "Database Host" msgstr "" msgid "Database Name" msgstr "" msgid "Database Owner" msgstr "" msgid "Database Password" msgstr "" msgid "Database Port" msgstr "" msgid "Database Username" msgstr "" msgid "Database error" msgstr "" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "" msgid "Date Style" msgstr "" msgid "Default Privileges" msgstr "" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "" msgid "Delete Events/Collections" msgstr "" msgid "Delete Principal" msgstr "" msgid "Delete a resource or collection" msgstr "" msgid "Deleted a grant from this Principal" msgstr "" msgid "Deleting Binding:" msgstr "" msgid "Deleting Collection:" msgstr "" msgid "Deleting Principal:" msgstr "" msgid "Deleting Ticket:" msgstr "" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "" msgid "Dependencies" msgstr "" msgid "Dependency" msgstr "" msgid "Description" msgstr "" msgid "Destination collection does not exist" msgstr "" msgid "Directory on the server" msgstr "" msgid "Display Name" msgstr "" msgid "Displayname" msgstr "" msgid "Does the user have the right to perform this role?" msgstr "" msgid "Domain" msgstr "" msgid "EMail" msgstr "" msgid "EMail OK" msgstr "" msgid "ERROR: The full name may not be blank." msgstr "" msgid "ERROR: The new password must match the confirmed password." msgstr "" msgid "ERROR: There was a database error writing the roles information!" msgstr "" msgid "Edit" msgstr "" msgid "Edit this user record" msgstr "" msgid "Email Address" msgstr "" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "" msgid "Enter your username and password then click here to log in." msgstr "" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" msgid "Error querying database." msgstr "" msgid "Error writing calendar details to database." msgstr "" msgid "Error writing calendar properties to database." msgstr "" msgid "European" msgstr "" msgid "European (d/m/y)" msgstr "" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "" msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "" msgid "Expires" msgstr "" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "" msgid "Forbidden" msgstr "" msgid "Free/Busy" msgstr "" msgid "Full Name" msgstr "" msgid "Fullname" msgstr "" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "" msgid "Go to the DAViCal Feature Requests" msgstr "" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "" #. Translators: in the sense of a group of people msgid "Group" msgstr "" msgid "Group Members" msgstr "" msgid "Group Memberships" msgstr "" msgid "Group Principals" msgstr "" msgid "Has Members" msgstr "" msgid "Help" msgstr "" msgid "Help on the current screen" msgstr "" msgid "Help! I've forgotten my password!" msgstr "" msgid "Home" msgstr "" msgid "Home " msgstr "" msgid "Home Page" msgstr "" msgid "ID" msgstr "" msgid "ISO Format" msgstr "" msgid "ISO Format (YYYY-MM-DD)" msgstr "" #. Translators: short for 'Identifier' msgid "Id" msgstr "" msgid "If you have forgotten your password then" msgstr "" msgid "If you would like to request access, please e-mail" msgstr "" msgid "Import all .ics files of a directory" msgstr "" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "" msgid "Invalid username or password." msgstr "" msgid "Is Member of" msgstr "" msgid "Is a Calendar" msgstr "" msgid "Is an Addressbook" msgstr "" msgid "Is this user active?" msgstr "" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "" msgid "Language" msgstr "" msgid "Last used" msgstr "" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "" msgid "List Resources" msgstr "" msgid "List Users" msgstr "" msgid "Load From File" msgstr "" msgid "Locale" msgstr "" msgid "Location" msgstr "" msgid "Log On Please" msgstr "" msgid "Log out of DAViCal" msgstr "" msgid "Logout" msgstr "" msgid "Member deleted from this Group Principal" msgstr "" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "" msgid "New Collection" msgstr "" msgid "New Password" msgstr "" msgid "New Principal" msgstr "" #. Translators: not 'Yes' msgid "No" msgstr "" msgid "No calendar content" msgstr "" msgid "No collection found at that location." msgstr "" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "" #. Translators: short for 'Number' msgid "No." msgstr "" msgid "No. of Collections" msgstr "" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "" msgid "Not overwriting existing destination resource" msgstr "" msgid "Opaque" msgstr "" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "" msgid "Password" msgstr "" msgid "Path" msgstr "" msgid "Person" msgstr "" msgid "Please confirm deletion of access ticket - see below" msgstr "" msgid "Please confirm deletion of binding - see below" msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "" msgid "Please confirm deletion of the principal" msgstr "" msgid "Please note the time and advise the administrator of your system." msgstr "" msgid "Principal" msgstr "" msgid "Principal Collections" msgstr "" msgid "Principal Grants" msgstr "" msgid "Principal ID" msgstr "" msgid "Principal Type" msgstr "" msgid "Principal deleted" msgstr "" msgid "Privileges" msgstr "" msgid "Privileges granted to All Users" msgstr "" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "" #. Translators: in the sense of being available to all users msgid "Public" msgstr "" msgid "Publicly Readable" msgstr "" msgid "REPORT body contains no XML data!" msgstr "" msgid "REPORT body is not valid XML data!" msgstr "" msgid "Read" msgstr "" msgid "Read ACLs for a resource or collection" msgstr "" msgid "Read Access Controls" msgstr "" msgid "Read Current User's Access" msgstr "" msgid "Read Free/Busy Information" msgstr "" msgid "Read the content of a resource or collection" msgstr "" msgid "" "Read the details of the current user's access control to this resource." msgstr "" msgid "Read the free/busy information for a calendar collection" msgstr "" msgid "Read/Write" msgstr "" msgid "References" msgstr "" msgid "Remove" msgstr "" msgid "Remove a lock" msgstr "" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "" msgid "Report a bug in the system" msgstr "" msgid "Request Feature" msgstr "" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "" msgid "Resource Calendar Principals" msgstr "" msgid "Resource Not Found." msgstr "" msgid "Resource has changed on server - not deleted" msgstr "" msgid "Resources may not be changed to / from collections." msgstr "" msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "" msgid "Schedule Send" msgstr "" msgid "Schedule Transparency" msgstr "" msgid "Scheduling: Deliver a Reply" msgstr "" msgid "Scheduling: Deliver an Invitation" msgstr "" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "" msgid "Scheduling: Send a Reply" msgstr "" msgid "Scheduling: Send an Invitation" msgstr "" msgid "Scheduling: Send free/busy" msgstr "" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "" msgid "Set free/busy privileges" msgstr "" msgid "Set read privileges" msgstr "" msgid "Set read+write privileges" msgstr "" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "" msgid "Setup DAViCal" msgstr "" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "" msgid "Site Statistics" msgstr "" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "" msgid "Some properties were not able to be set." msgstr "" msgid "Source resource does not exist." msgstr "" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "" msgid "Specific Privileges" msgstr "" msgid "Status" msgstr "" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "" msgid "Submit" msgstr "" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "" msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "" msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "" msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "" msgid "The destination collection does not exist" msgstr "" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "" msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "" msgid "The name this user can log into the system with." msgstr "" msgid "The path on the server where your .ics files are." msgstr "" msgid "The preferred language for this person." msgstr "" #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "" msgid "The user's e-mail address." msgstr "" msgid "The user's full name." msgstr "" msgid "The user's password for logging in." msgstr "" msgid "The username must not be blank, and may not contain a slash" msgstr "" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "" msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "" msgid "Time" msgstr "" msgid "To Collection" msgstr "" msgid "To ID" msgstr "" msgid "Toggle all privileges" msgstr "" msgid "Tools" msgstr "" msgid "Transparent" msgstr "" msgid "URL" msgstr "" msgid "US Format" msgstr "" msgid "Unauthenticated User" msgstr "" msgid "United States of America (m/d/y)" msgstr "" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "" msgid "Updated" msgstr "" msgid "Updating Collection record." msgstr "" msgid "Updating Member of this Group Principal" msgstr "" msgid "Updating Principal record." msgstr "" msgid "Updating grants by this Principal" msgstr "" msgid "Upgrade DAViCal database schema" msgstr "" msgid "Upgrade Database" msgstr "" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "" msgid "User Details" msgstr "" msgid "User Functions" msgstr "" msgid "User Name" msgstr "" msgid "User Roles" msgstr "" msgid "User is active" msgstr "" msgid "User record written." msgstr "" msgid "Username" msgstr "" msgid "View My Details" msgstr "" msgid "View my own principal record" msgstr "" msgid "View this user record" msgstr "" msgid "Visit the DAViCal Wiki" msgstr "" #, php-format msgid "Want: %s, Currently: %s" msgstr "" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "" msgid "Write" msgstr "" msgid "Write ACLs for a resource or collection" msgstr "" msgid "Write Access Controls" msgstr "" msgid "Write Data" msgstr "" msgid "Write Metadata" msgstr "" msgid "Write content" msgstr "" msgid "Write properties" msgstr "" msgid "Yes" msgstr "" msgid "You are editing" msgstr "" msgid "You are not authorised to use this function." msgstr "" msgid "You are viewing" msgstr "" msgid "You do not have permission to modify this record." msgstr "" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "" msgid "Your configuration produced PHP errors which should be corrected" msgstr "" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "" msgid "from principal" msgstr "" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "" davical-1.1.1/po/nb_NO.values0000644000000000000000000000005511633117640012637 0ustar VALUES( 'nb', 'Norwegian', 'Bokmål' ); davical-1.1.1/po/pt_PT.po0000644000000000000000000012234611767336605012035 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # m42 , 2011. # , 2012. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/davical/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "%F %T" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "%T" msgid "*** Default Locale ***" msgstr "*** Definições Regionais predefinidas ***" msgid "*** Unknown ***" msgstr "*** Desconhecido ***" #, php-format msgid "- adding %s to group : %s" msgstr "- a acrescentar %s ao grupo : %s" #, php-format msgid "- adding users %s to group : %s" msgstr "- a acrescentar utilizadores %s ao grupo : %s" #, php-format msgid "- creating groups : %s" msgstr "- a criar grupos : %s" #, php-format msgid "- creating record for users : %s" msgstr "- a criar um registo para os utilizadores : %s" #, php-format msgid "- deactivate groups : %s" msgstr "- a desactivar grupos : %s" #, php-format msgid "- deactivating users : %s" msgstr "- a desactivar utilizadores : %s" #, php-format msgid "- nothing done on : %s" msgstr "- nada feito em : %s" #, php-format msgid "- removing %s from group : %s" msgstr "- a remover %s do grupo : %s" #, php-format msgid "- updating groups : %s" msgstr "- a actualizar grupos : %s" #, php-format msgid "- updating user records : %s" msgstr "- a actualizar registos de utilizador : %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "AVISO: todos os eventos neste caminho serão apagados antes de inserir o ficheiro ics" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "

Ajuda

\n

Para ajuda inicial visite a Home Page do DAViCal ou veja \no Wiki DAViCal.

\n

Se não encontrar aí as respostas, visite o canal #davical do IRC no\nservidor irc.oftc.net,\nou envie uma questão para Lista de correio dos Utilizadores DAViCal.

\n

os arquivos da lista de correio\ntambém podem ser úteis.

" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Entre por favor

Para aceder ao %s deve entrar com o nome de utilizador e password que lhe foram atribuídos.

Se necessitar de pedir acesso, envie um e-mail para %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "Uma colecção principal do DAViCal só pode conter colecções" msgid "A collection already exists at that location." msgstr "Já existe uma colecção nessa localização." msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "Já existe um recurso nesse destino." msgid "AWL Library version " msgstr "Versão da biblioteca AWL " msgid "Access Tickets" msgstr "Tickets de acesso" msgid "Access ticket deleted" msgstr "Ticket de acesso apagado" msgid "Action" msgstr "Acção" msgid "Active" msgstr "Activo" msgid "Adding new member to this Group Principal" msgstr "A acrescentar um novo membro a este Grupo Principal" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Administrador" msgid "Administration" msgstr "Administração" msgid "Administrator" msgstr "Administrador" msgid "All" msgstr "Todos" msgid "All collection data will be unrecoverably deleted." msgstr "Todos os dados da colecção serão irremediavelmente apagados" #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "Todos os eventos do utilizador \"%s\" foram apagados e substituídos pelos do ficheiro %s" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "Todos os calendários e eventos do principal serão irremediavelmente apagados." msgid "All privileges" msgstr "Todos os privilégios" msgid "All requested changes were made." msgstr "Todas as alterações pedidas foram efectuadas." msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "Permitir verificação de disponibilidade do dono deste calendário" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "Um utilizador \"Administrador\" tem todas as permissões para todo o sistema DAViCal" msgid "Anonymous users are not allowed to modify calendars" msgstr "Utilizadores anónimos não podem alterar calendários" msgid "Anonymous users may only access public calendars" msgstr "Utilizadores anónimos têm acesso apenas a calendários públicos" msgid "Append" msgstr "" msgid "Application DB User" msgstr "Utilizador da Base de Dados da aplicação" msgid "Apply Changes" msgstr "Efectuar Mudanças" msgid "Apply DB Patches" msgstr "Aplicar patches da Base de Dados" msgid "Attachment" msgstr "Anexo" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "Ligação apagada" msgid "Bindings to other collections" msgstr "Ligações a outras colecções" msgid "Bindings to this Collection" msgstr "Ligações a esta colecção" msgid "Bindings to this Principal's Collections" msgstr "Ligações às colecções deste Principal" msgid "Body contains no XML data!" msgstr "O corpo não contém dados XML!" msgid "Bound As" msgstr "Ligado Como" msgid "Browse all users" msgstr "Percorrer todos os utilizadores" msgid "Busy" msgstr "Ocupado" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "O calendário \"%s\" foi carregado a partir do ficheiro." msgid "Calendar Principals" msgstr "Principais do calendário" msgid "Calendar Timezone" msgstr "Fuso horário do calendário" msgid "Can only add tickets for existing collection paths which you own" msgstr "Só é permitido acrescentar tickets a uma colecção da qual seja dono" msgid "Categories" msgstr "Categorias" msgid "Change Password" msgstr "Alterar Password" msgid "Click to display user details" msgstr "Clique para ver detalhes de utilizador" msgid "Click to edit principal details" msgstr "Clique para editar os detalhes do principal" msgid "Collection" msgstr "Colecção" msgid "Collection Grants" msgstr "Permissões da colecção" msgid "Collection ID" msgstr "ID da colecção" msgid "Collection deleted" msgstr "Colecção apagada" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "As colecções não podem ser calendários CalDAV e livros de endereços CardDAV simultaneamente" msgid "Configuring Calendar Clients for DAViCal" msgstr "A configurar clientes de calendário para o DAViCal" msgid "Configuring DAViCal" msgstr "A configurar o DAViCal" msgid "Confirm" msgstr "Confirmar" msgid "Confirm Deletion of the Binding" msgstr "Confirmar eliminação da ligação" msgid "Confirm Deletion of the Collection" msgstr "Confirmar eliminação da colecção" msgid "Confirm Deletion of the Principal" msgstr "Confirmar eliminação do Principal" msgid "Confirm Deletion of the Ticket" msgstr "Confirmar eliminação do ticket" msgid "Confirm Password" msgstr "Confirmar Password" msgid "Confirm the new password." msgstr "Confirmar a nova password" msgid "Could not retrieve" msgstr "Não pude recuperar" msgid "Create" msgstr "Criar" msgid "Create Collection" msgstr "Criar colecção" msgid "Create Events/Collections" msgstr "Criar Eventos/Colecções" msgid "Create New Collection" msgstr "Criar nova colecção" msgid "Create New Principal" msgstr "Criar novo Principal" msgid "Create Principal" msgstr "Criar principal" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Criar um novo principal (i.e. um novo utilizador, recurso ou grupo)" msgid "Create a resource or collection" msgstr "Criar um recurso ou colecção" msgid "Creating new Collection." msgstr "Criar uma nova colecção." msgid "Creating new Principal record." msgstr "Criar um novo registo de principal" msgid "Creating new ticket granting privileges to this Principal" msgstr "A criar novo ticket para atribuir privilégios a este principal" msgid "Current DAViCal version " msgstr "Versão DAViCal actual " msgid "DAV Path" msgstr "Caminho DAV" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "DAV::resourcetype só pode ser definido para um novo valor, não pode ser removido." msgid "DAViCal CalDAV Server" msgstr "Servidor CalDAV DAViCal" msgid "DAViCal DB Schema version " msgstr "Versão do Schema da Base de Dados do DAViCal" msgid "DAViCal Homepage" msgstr "Homepage do DAViCal" msgid "DAViCal Wiki" msgstr "Wiki do DAViCal" msgid "DAViCal only allows BIND requests for collections at present." msgstr "O DAViCal actualmente apenas permite pedidos BIND para colecções." msgid "DKIM signature missing" msgstr "Assinatura DKIM em falta" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "Validação da assinatura DKIM falhou (ERRO DNS)" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "Validação da assinatura DKIM falhou (ERRO análise CHAVE)" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "Validação da assinatura DKIM falhou (ERRO validação CHAVE)" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "Validação da assinatura DKIM falhou (ERRO verificação de assinatura)" msgid "Database Error" msgstr "Erro de Base de Dados" msgid "Database Host" msgstr "Servidor de Base de Dados" msgid "Database Name" msgstr "Nome da Base de Dados" msgid "Database Owner" msgstr "Dono da Base de Dados" msgid "Database Password" msgstr "Password da Base de Dados" msgid "Database Port" msgstr "Porto da Base de Dados" msgid "Database Username" msgstr "Nome de utilizador da Base de Dados" msgid "Database error" msgstr "Erro da Base de Dados" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Estilo de formato de data" msgid "Date Style" msgstr "Estilo de data" msgid "Default Privileges" msgstr "Privilégios predefinidos" msgid "Default relationships added." msgstr "Acrescentados relacionamentos predefinidos" msgid "Delete" msgstr "Eliminar" msgid "Delete Events/Collections" msgstr "Eliminar eventos/colecções" msgid "Delete Principal" msgstr "Eliminar principal" msgid "Delete a resource or collection" msgstr "Eliminar recurso ou colecção" msgid "Deleted a grant from this Principal" msgstr "Foi eliminada uma permissão deste principal" msgid "Deleting Binding:" msgstr "A eliminar ligação:" msgid "Deleting Collection:" msgstr "A eliminar colecção:" msgid "Deleting Principal:" msgstr "A eliminar principal:" msgid "Deleting Ticket:" msgstr "A eliminar ticket:" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "Entregar os convites de um organizador a esta caixa de entrada de reuniões" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "Entregar as respostas a convites dos participantes a esta caixa de entrada de reuniões" msgid "Dependencies" msgstr "Dependências" msgid "Dependency" msgstr "Dependência" msgid "Description" msgstr "Descrição" msgid "Destination collection does not exist" msgstr "A colecção de destino não existe" msgid "Directory on the server" msgstr "Directório no servidor" msgid "Display Name" msgstr "Nome a apresentar" msgid "Displayname" msgstr "Nome a apresentar" msgid "Does the user have the right to perform this role?" msgstr "O utilizador tem o direito de executar este papel?" msgid "Domain" msgstr "Domínio" msgid "EMail" msgstr "Email" msgid "EMail OK" msgstr "Email OK" msgid "ERROR: The full name may not be blank." msgstr "ERRO: O nome completo não pode ficar em branco." msgid "ERROR: The new password must match the confirmed password." msgstr "ERRO: A nova password tem que corresponder à password confirmada." msgid "ERROR: There was a database error writing the roles information!" msgstr "ERRO: Houve um erro de base de dados ao escrever informação de papéis!" msgid "Edit" msgstr "Editar" msgid "Edit this user record" msgstr "Editar este registo de utilizador" msgid "Email Address" msgstr "Endereço de email" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Indique um nome de utilizador, se o souber, e clique aqui, para que lhe seja enviada uma password temporária." msgid "Enter your username and password then click here to log in." msgstr "Indique o seu nome de utilizador e password e clique aqui para entrar." #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Erro NoGroupFound com o filtro >%s<, atributos >%s< , dn >%s<" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Erro NoUserFound com filtro >%s<, atributos >%s< , dn >%s<" msgid "Error querying database." msgstr "Erro ao consultar a base de dados." msgid "Error writing calendar details to database." msgstr "Erro ao escrever os detalhes do calendário na base de dados." msgid "Error writing calendar properties to database." msgstr "Erro ao escrever os detalhes do calendário para a base de dados." msgid "European" msgstr "Europeu" msgid "European (d/m/y)" msgstr "Europeu(d/m/a)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "Recurso existente não corresponde com cabeçalho \"If-Match\" - não aceite." msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "Recurso existente corresponde com cabeçalho \"If-None-Match\" - não aceite." msgid "Expires" msgstr "Expira" msgid "External Calendars" msgstr "Calendários Externos" msgid "External Url" msgstr "Url Externo" msgid "Fail" msgstr "Falha" msgid "Failed to write collection." msgstr "Falhou a escrever colecção." msgid "Feeds are only supported for calendars at present." msgstr "Feeds só são suportadas actualmente para calendários." msgid "For access to the" msgstr "Para acesso ao" msgid "Forbidden" msgstr "Proibido" msgid "Free/Busy" msgstr "Livre/Ocupado" msgid "Full Name" msgstr "Nome Completo" msgid "Fullname" msgstr "Nome completo" msgid "GET requests on collections are only supported for calendars." msgstr "Pedidos GET a colecções são suportados apenas para calendários." msgid "GNU gettext support" msgstr "Suporte GNU gettext" msgid "GO!" msgstr "OK!" msgid "Go to the DAViCal Feature Requests" msgstr "Ir para os Pedidos de Funcionalidades do DAViCal" msgid "Grant" msgstr "Atribuir" msgid "Granting new privileges from this Principal" msgstr "A atribuir novos privilégios a partir deste Principal" #. Translators: in the sense of a group of people msgid "Group" msgstr "Grupo" msgid "Group Members" msgstr "Membros do grupo" msgid "Group Memberships" msgstr "Associação a grupos" msgid "Group Principals" msgstr "Principais do grupo" msgid "Has Members" msgstr "Tem membros" msgid "Help" msgstr "Ajuda" msgid "Help on the current screen" msgstr "Ajuda para este écran" msgid "Help! I've forgotten my password!" msgstr "Ajuda! Esqueci-me da minha password!" msgid "Home" msgstr "Entrada" msgid "Home " msgstr "" msgid "Home Page" msgstr "Página de Entrada" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "Formato ISO" msgid "ISO Format (YYYY-MM-DD)" msgstr "Formato ISO (AAAA-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "Se se esqueceu da sua password, então" msgid "If you would like to request access, please e-mail" msgstr "Se quiser obter acesso, por favor envie e-mail" msgid "Import all .ics files of a directory" msgstr "Importar todos os ficheiros .ics de um directório" msgid "Import calendars and Synchronise LDAP." msgstr "Importar calendários e sincronizar LDAP" msgid "Inactive Principals" msgstr "Principais inactivos" msgid "Incorrect content type for addressbook: " msgstr "Tipo de conteúdo incorrecto para o livro de endereços: " msgid "Incorrect content type for calendar: " msgstr "Tipo de conteúdo incorrecto para o calendário: " msgid "Invalid user name or password." msgstr "Nome de utilizador ou password inválido." msgid "Invalid username or password." msgstr "Nome de utilizador ou password inválido." msgid "Is Member of" msgstr "É membro de" msgid "Is a Calendar" msgstr "É um calendário" msgid "Is an Addressbook" msgstr "É um livro de endereços" msgid "Is this user active?" msgstr "Este utilizador está activo?" msgid "Items in Collection" msgstr "Items na colecção" msgid "Joined" msgstr "Agregado" msgid "Language" msgstr "Idioma" msgid "Last used" msgstr "Último usado" msgid "List External Calendars" msgstr "Listar Calendários Externos" msgid "List Groups" msgstr "Listar Grupos" msgid "List Resources" msgstr "Listar recursos" msgid "List Users" msgstr "Listar utilizadores" msgid "Load From File" msgstr "Carregar do ficheiro" msgid "Locale" msgstr "Definições regionais" msgid "Location" msgstr "Localização" msgid "Log On Please" msgstr "Por favor entrar" msgid "Log out of DAViCal" msgstr "Sair do DAViCal" msgid "Logout" msgstr "Sair" msgid "Member deleted from this Group Principal" msgstr "Membro eliminado deste Principal de Grupo" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "A maior parte do DAViCal irá funcionar mas é fortemente recomendado actualizar para o PHP 5.2 ou mais recente." msgid "Name" msgstr "Nome" msgid "New Collection" msgstr "Nova colecção" msgid "New Password" msgstr "Nova password" msgid "New Principal" msgstr "Novo principal" #. Translators: not 'Yes' msgid "No" msgstr "Não" msgid "No calendar content" msgstr "Sem conteúdo de calendário" msgid "No collection found at that location." msgstr "Colecção não encontrada nessa localização." msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "Sem sumário" #. Translators: short for 'Number' msgid "No." msgstr "Núm." msgid "No. of Collections" msgstr "Núm. de colecções" msgid "No. of Principals" msgstr "Núm. de Principais" msgid "No. of Resources" msgstr "Núm. de recursos" msgid "Not overwriting existing destination resource" msgstr "Não vai sobrescrever recurso de destino existente" msgid "Opaque" msgstr "Opaco" msgid "Organizer Missing" msgstr "Falta Organizador" msgid "Override a Lock" msgstr "Ultrapassar um Lock" msgid "PDO PostgreSQL drivers" msgstr "Drivers PDO PostgreSQL" msgid "PHP DateTime class" msgstr "Classe de PHP DateTime" msgid "PHP LDAP module available" msgstr "Módulo LDAP de PHP disponível" msgid "PHP Magic Quotes GPC off" msgstr "Magic Quotes do PHP desligado" msgid "PHP Magic Quotes runtime off" msgstr "Magic Quotes do PHP desligado em ambiente de execução" msgid "PHP PDO module available" msgstr "Módulo PDO do PHP disponível" msgid "PHP calendar extension available" msgstr "Extensão PHP para calendários disponível" msgid "PHP curl support" msgstr "Suporte curl do PHP" msgid "PHP iconv support" msgstr "Suporte iconv do PHP" msgid "PHP not using Apache Filter mode" msgstr "O PHP não está a usar o modo Apache Filter" msgid "PHP5 curl support is required for external binds" msgstr "O suporte curl do PHP5 é necessário para ligações externas" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "PUT de conteúdo text/calendar apenas é permitido numa colecção do tipo calendário" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "PUT de conteúdo text/vcard apenas é permitido numa colecção do tipo livro de endereços" msgid "Passed" msgstr "Passou" msgid "Password" msgstr "Password" msgid "Path" msgstr "Caminho" msgid "Person" msgstr "Pessoa" msgid "Please confirm deletion of access ticket - see below" msgstr "Confirme por favor a eliminação do ticket de acesso - ver abaixo" msgid "Please confirm deletion of binding - see below" msgstr "Confirme por favor a eliminação da ligação - ver abaixo" msgid "Please confirm deletion of collection - see below" msgstr "Confirme por favor a eliminação da colecção - ver abaixo" msgid "Please confirm deletion of the principal" msgstr "Confirme por favor a eliminação do principal" msgid "Please note the time and advise the administrator of your system." msgstr "Por favor tome nota da hora e avise o administrador do seu sistema." msgid "Principal" msgstr "Principal" msgid "Principal Collections" msgstr "Colecções do Principal" msgid "Principal Grants" msgstr "Atribuições do Principal" msgid "Principal ID" msgstr "ID do Principal" msgid "Principal Type" msgstr "Tipo de Principal" msgid "Principal deleted" msgstr "Principal eliminado" msgid "Privileges" msgstr "Privilégios" msgid "Privileges granted to All Users" msgstr "Privilégios atribuídos para Todos os utilizadores" msgid "Privileges to allow delivery of scheduling messages" msgstr "Privilégios para permitir a entrega de mensagens de calendarização" msgid "Privileges to delegate scheduling decisions" msgstr "Privilégios para delegar decisões de calendarização" msgid "Property is read-only" msgstr "A propriedade é só de leitura" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Público" msgid "Publicly Readable" msgstr "Legível publicamente" msgid "REPORT body contains no XML data!" msgstr "O corpo do RELATÓRIO não contém dados XML!" msgid "REPORT body is not valid XML data!" msgstr "O corpo do RELATÓRIO não é XML válido!" msgid "Read" msgstr "Ler" msgid "Read ACLs for a resource or collection" msgstr "Ler ACLs para um recurso ou colecção" msgid "Read Access Controls" msgstr "Ler controlos de acesso" msgid "Read Current User's Access" msgstr "Ler acesso do utilizador actual" msgid "Read Free/Busy Information" msgstr "Ler informação de livre/ocupado" msgid "Read the content of a resource or collection" msgstr "Ler o conteúdo de um recurso ou colecção" msgid "" "Read the details of the current user's access control to this resource." msgstr "Ler os detalhes do controlo de acesso do utilizador actual a este recurso" msgid "Read the free/busy information for a calendar collection" msgstr "Ler informação de livre/ocupado para uma colecção de calendários" msgid "Read/Write" msgstr "Ler/Escrever" msgid "References" msgstr "Referências" msgid "Remove" msgstr "Remover" msgid "Remove a lock" msgstr "Remover um lock" msgid "Remove dangling external calendars" msgstr "Remover calendários externos com problemas" msgid "Report Bug" msgstr "Relatar um bug" msgid "Report a bug in the system" msgstr "Relatar um bug no sistema" msgid "Request Feature" msgstr "Pedir Funcionalidade" msgid "Request body is not valid XML data!" msgstr "Corpo do pedido não tem dados XML válidos!" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Recurso" msgid "Resource Calendar Principals" msgstr "Principais do recurso de calendário" msgid "Resource Not Found." msgstr "Recurso não encontrado" msgid "Resource has changed on server - not deleted" msgstr "Recurso foi alterado no servidor - não foi apagado" msgid "Resources may not be changed to / from collections." msgstr "Os recursos não podem ser alterados entre colecções." msgid "Revoke" msgstr "Revogar" msgid "SRV Record" msgstr "Registo SRV" msgid "Schedule Deliver" msgstr "Entrega de horário" msgid "Schedule Send" msgstr "Horário enviado" msgid "Schedule Transparency" msgstr "Transparência do horário" msgid "Scheduling: Deliver a Reply" msgstr "Horários: Entregar uma resposta" msgid "Scheduling: Deliver an Invitation" msgstr "Horários: Entregar um convite" msgid "Scheduling: Delivery" msgstr "Horários: Entrega" msgid "Scheduling: Query free/busy" msgstr "Horários: Verificar informação de livre/ocupado" msgid "Scheduling: Send a Reply" msgstr "Horários: Enviar uma resposta" msgid "Scheduling: Send an Invitation" msgstr "Horários: Enviar um convite" msgid "Scheduling: Send free/busy" msgstr "Horários: Enviar informação de livre/ocupado" msgid "Scheduling: Sending" msgstr "Horários: A enviar" msgid "Send free/busy enquiries" msgstr "Enviar consultas de informação livre/ocupado" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "Enviar convites de horários como organizador, sendo dono desta caixa de saída." msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "Enviar respostas de horários como participante, sendo dono desta caixa de saída." msgid "Set free/busy privileges" msgstr "Definir privilégios de livre/ocupado" msgid "Set read privileges" msgstr "Definir privilégios de leitura" msgid "Set read+write privileges" msgstr "Definir privilégios de leitura+escrita" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "Definir o caminho para guardar o seu ficheiro ics - e.g. 'calendar' será referido como /caldav.php/nome_de_utilizador/calendar/" msgid "Setup" msgstr "Configurar" msgid "Setup DAViCal" msgstr "Configurar DAViCal" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Mostrar ajuda sobre" msgid "Site Statistics" msgstr "Estatísticas do site" msgid "Site Statistics require the database to be available!" msgstr "As estatísticas do site exigem que a base de dados esteja disponível!" msgid "Some properties were not able to be changed." msgstr "Algumas propriedades não puderam ser alteradas." msgid "Some properties were not able to be set." msgstr "Algumas propriedades não puderam ser definidas." msgid "Source resource does not exist." msgstr "Recurso de origem não existe." msgid "" "Special collections may not contain a calendar or other special collection." msgstr "Colecções especiais não podem conter um calendário ou outra colecção especial." msgid "Specific Privileges" msgstr "Privilégios específicos" msgid "Status" msgstr "Estado" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "Estado: %d, Mensagem: %s, Utilizador: %d, Caminho: %s" msgid "Submit" msgstr "Submeter" msgid "Suhosin \"server.strip\" disabled" msgstr "\"server.strip\" do suhosin desabilitado" msgid "Sync LDAP Groups with DAViCal" msgstr "Sincronizar Grupos LDAP com o DAViCal" msgid "Sync LDAP with DAViCal" msgstr "Sincronizar LDAP com o DAViCal" msgid "Target" msgstr "Destino" msgid "That destination name contains invalid characters." msgstr "Esse nome de destino contém caracteres inválidos." msgid "That resource is not present on this server." msgstr "Esse recurso não está presente neste servidor." msgid "The BIND Request MUST identify an existing resource." msgstr "O pedido BIND, TEM QUE identificar um recurso existente." msgid "The BIND Request-URI MUST identify a collection." msgstr "O URI do pedido BIND, TEM QUE identificar uma colecção." msgid "The BIND method is not allowed at that location." msgstr "O método BIND não é permitido nessa localização." msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "A propriedade CalDAV:schedule-calendar-transp só pode ser definida em calendários." msgid "The DAViCal Home Page" msgstr "A Home page do DAViCal" msgid "The access ticket will be deleted." msgstr "O ticket de acesso será apagado." msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "O relatório addressbook-query tem que ser executado sobre uma colecção de livros de endereços" msgid "The application failed to understand that request." msgstr "A aplicação não conseguiu entender esse pedido." msgid "The application program does not understand that request." msgstr "O programa não entende esse pedido." msgid "The binding will be deleted." msgstr "A ligação será apagada." msgid "The calendar path contains illegal characters." msgstr "O caminho do calendário contém caracteres ilegais." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "O relatório calendar-query tem que ser executado sobre uma colecção de calendário ou horários" msgid "The collection name may not be blank." msgstr "O nome da colecção não pode ficar em branco." msgid "The destination collection does not exist" msgstr "A colecção de destino não existe" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "O nome a mostrar só pode ser definido em colecções, principais ou ligações." msgid "The email address really should not be blank." msgstr "O endereço de email não devia, de facto, ficar em branco." #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "O ficheiro \"%s\" não está codificado como UTF-8, por favor verifique a mensagem de erro para mais promenores" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "O ficheiro não está codificado em UTF-8, por favor verifique a mensagem de erro para mais detalhes." msgid "The full name for this person, group or other type of principal." msgstr "O nome completo desta pessoa, grupo ou outro tipo de principal." msgid "The full name must not be blank." msgstr "O nome completo não pode ficar em branco." msgid "The name this user can log into the system with." msgstr "O nome que este utilizador pode usar para entrar no sistema." msgid "The path on the server where your .ics files are." msgstr "O caminho no servidor onde estão guardados os seus ficheiros .ics." msgid "The preferred language for this person." msgstr "O idioma preferido para esta pessoa." #, php-format msgid "The principal \"%s\" does not exist" msgstr "O principal \"%s\" não existe" msgid "The style of dates used for this person." msgstr "O estilo de datas em uso para esta pessoa." msgid "The user's e-mail address." msgstr "O endereço de email do utilizador." msgid "The user's full name." msgstr "O nome completo do utilizador." msgid "The user's password for logging in." msgstr "A password do utilizador para entrar." msgid "The username must not be blank, and may not contain a slash" msgstr "O nome de utilizador não pode ficar em branco e não pode conter uma barra \"/\"" msgid "There was an error reading from the database." msgstr "Ocorreu um erro ao ler da Base de Dados." msgid "There was an error writing to the database." msgstr "Ocorreu um erro ao escrever na Base de Dados." msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Esta operação faz o seguinte:
  • verifica grupos válidos no directório LDAP
  • verifica grupos no DAViCal
então
  • se um grupo existe no DAViCal mas não no LDAP, marca-o como inactivo no DAViCal
  • se um grupo está presente no LDAP mas não no DAViCal, cria o grupo no DAViCal
  • se um grupo existir no LDAP e no DAViCal, actualiza a informação no DAViCal
" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Esta operação faz o seguinte:
  • verifica utilizadores válidos no directório LDAP
  • verifica utilizadores no DAViCal
então
  • se um utilizador existe no DAViCal mas não no LDAP, marca-o como inactivo no DAViCal
  • se um utilizador está presente no LDAP mas não no DAViCal, cria o utilizador no DAViCal
  • se um utilizador existir no LDAP e no DAViCal, actualiza a informação no DAViCal
" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "Esta página verifica o ambiente de execução necessário para que o DAViCal trabalhe correctamente. Sugestões ou correcções para que faça coisas mais úteis serão recebidos com gratidão." msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "Este processo irá importar cada ficheiro chamado \"nome_de_utilizador.ics\" ecriar um utilizador e calendário para cada ficheiro." msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "Este servidor suporta apenas o formato text/calendar para URLs de livre/ocupado" msgid "Ticket ID" msgstr "ID de ticket" msgid "Time" msgstr "Tempo" msgid "To Collection" msgstr "Para a colecção" msgid "To ID" msgstr "Para o ID" msgid "Toggle all privileges" msgstr "Mudar todos os privilégios" msgid "Tools" msgstr "Ferramentas" msgid "Transparent" msgstr "Transparente" msgid "URL" msgstr "URL" msgid "US Format" msgstr "Formato EUA" msgid "Unauthenticated User" msgstr "Utilizador não autenticado" msgid "United States of America (m/d/y)" msgstr "Estados Unidos da América (m/d/a)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Actualizar" msgid "Updated" msgstr "Actualizado" msgid "Updating Collection record." msgstr "A actualizar o registo da colecção." msgid "Updating Member of this Group Principal" msgstr "A actualizar membro deste Principal de grupo" msgid "Updating Principal record." msgstr "A actualizar o registo de principal" msgid "Updating grants by this Principal" msgstr "A actualizar permissões de acordo com este principal" msgid "Upgrade DAViCal database schema" msgstr "Actualizar o schema da Base de Dados do DAViCal" msgid "Upgrade Database" msgstr "Actualizar Base de Dados" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "Principais do calendário de utilizador" msgid "User Details" msgstr "Detalhes de utilizador" msgid "User Functions" msgstr "Funções de utilizador" msgid "User Name" msgstr "Nome de utilizador" msgid "User Roles" msgstr "Papéis de utilizador" msgid "User is active" msgstr "Utilizador está activo" msgid "User record written." msgstr "Registo de utilizador escrito." msgid "Username" msgstr "Nome de utilizador" msgid "View My Details" msgstr "Ver os meus detalhes" msgid "View my own principal record" msgstr "Ver o meu próprio registo principal" msgid "View this user record" msgstr "Ver o registo deste utilizador" msgid "Visit the DAViCal Wiki" msgstr "Visitar a Wiki do DAViCal" #, php-format msgid "Want: %s, Currently: %s" msgstr "Desejado: %s, Actualmente: %s" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "Aviso: não há utilizadores administradores activos! Deve corrigir isto antes de sair. Considere usar a definição de configuração $c->do_not_sync_from_ldap." msgid "When the user's e-mail account was validated." msgstr "Quando a conta de email do utilizador foi validada." msgid "Write" msgstr "Escrever" msgid "Write ACLs for a resource or collection" msgstr "Escrever ACLs para um recurso ou colecção" msgid "Write Access Controls" msgstr "Escrever controlos de acesso" msgid "Write Data" msgstr "Escrever dados" msgid "Write Metadata" msgstr "Escrever metadados" msgid "Write content" msgstr "Escrever conteúdo" msgid "Write properties" msgstr "Escrever propriedades" msgid "Yes" msgstr "Sim" msgid "You are editing" msgstr "Está a editar" msgid "You are not authorised to use this function." msgstr "Não está autorizado a usar esta função." msgid "You are viewing" msgstr "Está a ver" msgid "You do not have permission to modify this record." msgstr "Não tem permissão para modificar este registo." msgid "You may not PUT to a collection URL" msgstr "Não pode executar um pedido PUT num URL de colecção" msgid "You must log in to use this system." msgstr "Tem que entrar para poder usar este sistema." msgid "Your configuration produced PHP errors which should be corrected" msgstr "A sua configuração criou alguns erros de PHP que devem ser corrigidos" msgid "calendar-timezone property is only valid for a calendar." msgstr "a propriedade calendar-timezone só é válida para um calendário." #, php-format msgid "directory %s is not readable" msgstr "o directório %s não é legível" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "drivers_imap_pam: o parâmetro imap_url não está configurado em /etc/davical/*-conf.php" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap : Impossível inicial TLS: falhou ldap_start_tls()" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap : Falhou a ligação ao servidor %1$s no porto %2$s com o bindDN de %3$s" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap : Falhou a definição do protocolo versão 3 para o LDAP, TLS não suportado" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap : Não foi possível ligar ao LDAP - verifique a sua configuração de bindDN e passDN, e que o seu servidor LDAP está acessível" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap : Impossível ligar ao LDAP com o porto %s no servidor %s" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap : a função ldap_connect não está definida, verifique o seu módulo php_ldap" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "drivers_pwauth_pam : Impossível encontrar o ficheiro %s" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam : Impossível encontrar o ficheiro %s" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "lembrar este login" msgid "from principal" msgstr "a partir do principal" msgid "iSchedule Domains" msgstr "Domínios iSchedule" msgid "invalid request" msgstr "pedido inválido" msgid "path to store your ics" msgstr "caminho para guardar o seu ics" msgid "recipient must be organizer or attendee of event" msgstr "O destinatário deve ser o organizador ou estar presente no evento" msgid "sender must be organizer or attendee of event" msgstr "O remetente deve ser o organizador ou estar presente no evento" msgid "unauthenticated" msgstr "não autenticado" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "deve entrar com o nome de utilizador e password que lhe foram atribuídas." davical-1.1.1/po/pt_PT.values0000644000000000000000000000006411633117640012672 0ustar VALUES( 'pt_PT', 'Portuguese', 'Portuguese' ); davical-1.1.1/po/fr.po0000644000000000000000000012505111767336605011412 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. # , 2011. # tikismoke , 2011. # , 2011, 2012. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: French (http://www.transifex.net/projects/p/davical/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "%F %T" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "%T" msgid "*** Default Locale ***" msgstr "*** Langue par défaut ***" msgid "*** Unknown ***" msgstr "*** Inconnu ***" #, php-format msgid "- adding %s to group : %s" msgstr "- ajout de %s au groupe : %s" #, php-format msgid "- adding users %s to group : %s" msgstr "- ajout de l'utilisateur %s au groupe : %s" #, php-format msgid "- creating groups : %s" msgstr "- création du groupe : %s" #, php-format msgid "- creating record for users : %s" msgstr "- création d'enregistrement pour l'utilisateurs : %s" #, php-format msgid "- deactivate groups : %s" msgstr "- désactivation des groupes : %s" #, php-format msgid "- deactivating users : %s" msgstr "- désactivation des utilisateurs : %s" #, php-format msgid "- nothing done on : %s" msgstr "- rien à faire sur %s" #, php-format msgid "- removing %s from group : %s" msgstr "- suppression de %s du groupe : %s" #, php-format msgid "- updating groups : %s" msgstr "- mise à jour des groupes : %s" #, php-format msgid "- updating user records : %s" msgstr "- mise à jour des enregistrements de l'utilisateur : %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "Attention : tous les événements de ce chemin seront supprimés avant l'insertion de tous ceux du fichier ics" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "

Aide

\n

Pour obtenir de l'aide, vous devez commencer par aller voir sur le site DAViCal Home Page (en anglais) ou sur le Wiki DAViCal (presque complètement traduit en français).

\n

Si vous n'y trouvez pas ce que vous cherchez, prenez contact avec nous en anglais par IRC sur le canal #davical du serveur irc.oftc.net,\nou envoyez une question en anglais sur DAViCal Users mailing list.

\n

Les archives peuvent également vous être utiles.

" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Veuillez vous connecter

Pour accéder à %s vous devez vous connecter avec le nom d'utilisateur et le mot de passe qui vous ont été fournis.

Si vous voulez demander un accès, envoyez un courriel à %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "Un compte collection DAViCal ne peut contenir que des collections" msgid "A collection already exists at that location." msgstr "Une collection existe déjà à cet emplacement." msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "Une ressource existe déjà à cette destination." msgid "AWL Library version " msgstr "Version de la librairie AWL " msgid "Access Tickets" msgstr "Ticket d'accès" msgid "Access ticket deleted" msgstr "Ticket d'accès supprimé" msgid "Action" msgstr "Action" msgid "Active" msgstr "Actif" msgid "Adding new member to this Group Principal" msgstr "Ajout d'un nouveau membre à ce groupe" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Administrateur" msgid "Administration" msgstr "Administration" msgid "Administrator" msgstr "Administrateur" msgid "All" msgstr "Tous" msgid "All collection data will be unrecoverably deleted." msgstr "Toutes les données de la collection seront effacées définitivement." #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "Tous les événements de l'utilisateur \"%s\" ont été supprimés et remplacés par ceux du fichier %s" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "Tous les agendas et les évènements de l'utilisateur seront effacées définitivement." msgid "All privileges" msgstr "Tous les Privilèges" msgid "All requested changes were made." msgstr "Toutes les modifications demandées ont été effectuées" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "Autoriser les requêtes Libre/Occupé envoyées au propriétaire de cette boîte de réception planification" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "Mise à jour d'enregistrement de principal." msgid "Anonymous users are not allowed to modify calendars" msgstr "Mise à jour accorde par ce principal" msgid "Anonymous users may only access public calendars" msgstr "Les utilisateurs anonymes ne peuvent accéder qu'aux agendas publics" msgid "Append" msgstr "" msgid "Application DB User" msgstr "Utilisateur de BDD Application" msgid "Apply Changes" msgstr "Appliquer les modifications" msgid "Apply DB Patches" msgstr "Appliquer la rustine à la base" msgid "Attachment" msgstr "Pièce jointe" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "Liaison supprimée" msgid "Bindings to other collections" msgstr "Liaison vers d'autres collections" msgid "Bindings to this Collection" msgstr "Liaison vers cette Collection" msgid "Bindings to this Principal's Collections" msgstr "Liaisons vers ces Collections du compte" msgid "Body contains no XML data!" msgstr "Le corps ne contient aucune donnée XML !" msgid "Bound As" msgstr "Lié à" msgid "Browse all users" msgstr "Afficher tous les utilisateurs" msgid "Busy" msgstr "Occupé" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "L'agenda \"%s\" a été chargé à partir du fichier." msgid "Calendar Principals" msgstr "Liste des comptes" msgid "Calendar Timezone" msgstr "Fuseau horaire" msgid "Can only add tickets for existing collection paths which you own" msgstr "Ne peut ajouter des tickets que sur un chemin de collection existant que vous possédez" msgid "Categories" msgstr "Catégories" msgid "Change Password" msgstr "Changer le mot de passe" msgid "Click to display user details" msgstr "Cliquer pour afficher les détails de cet utilisateur" msgid "Click to edit principal details" msgstr "Cliquer pour afficher le détail du compte" msgid "Collection" msgstr "Collection" msgid "Collection Grants" msgstr "Droits de la collection" msgid "Collection ID" msgstr "Id. de la collection" msgid "Collection deleted" msgstr "Collection supprimée" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "Les collections ne peuvent pas être des agendas CalDAV et des carnets d'adresses CardDAV en même temps" msgid "Configuring Calendar Clients for DAViCal" msgstr "Configurer les clients d'agendas pour DAViCal" msgid "Configuring DAViCal" msgstr "Configurer DAViCal" msgid "Confirm" msgstr "Confirmer" msgid "Confirm Deletion of the Binding" msgstr "Confirmer la suppression de la liaison" msgid "Confirm Deletion of the Collection" msgstr "Confirmer la suppression de la collection" msgid "Confirm Deletion of the Principal" msgstr "Confirmer la suppression du compte" msgid "Confirm Deletion of the Ticket" msgstr "Confirmer la suppression du ticket" msgid "Confirm Password" msgstr "Confirmer le mot de passe" msgid "Confirm the new password." msgstr "Confirmer le nouveau mot de passe" msgid "Could not retrieve" msgstr "Ne peut télécharger" msgid "Create" msgstr "Créer" msgid "Create Collection" msgstr "Créer une collection" msgid "Create Events/Collections" msgstr "Créer des collections ou des évènements" msgid "Create New Collection" msgstr "Créer une nouvelle collection" msgid "Create New Principal" msgstr "Créer un nouveau compte" msgid "Create Principal" msgstr "Créer un compte" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Créer un nouveau compte (c-à-d un utilisateur, une ressource ou un groupe)" msgid "Create a resource or collection" msgstr "Créer une ressource ou une collection" msgid "Creating new Collection." msgstr "Créer une nouvelle collection." msgid "Creating new Principal record." msgstr "Création d'un nouveau compte." msgid "Creating new ticket granting privileges to this Principal" msgstr "Création d'un nouveau ticket accordant des privilèges à ce compte" msgid "Current DAViCal version " msgstr "Version DAViCal courante " msgid "DAV Path" msgstr "Chemin DAV" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "DAV::resourcetype ne peut qu'être positionné à une nouvelle valeur, pas supprimé." msgid "DAViCal CalDAV Server" msgstr "Serveur CalDAV DAViCal" msgid "DAViCal DB Schema version " msgstr "Version du schéma de la base DAViCal " msgid "DAViCal Homepage" msgstr "Page d'accueil DAViCal" msgid "DAViCal Wiki" msgstr "Wiki DAViCal" msgid "DAViCal only allows BIND requests for collections at present." msgstr "A l'heure actuelle DAViCal ne permet que les requêtes BIND pour les collections." msgid "DKIM signature missing" msgstr "signature DKIM manquante" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "La validation de la signature DKIM a échoué (erreur DNS)" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "La validation de la signature DKIM a échoué (erreur d'analyse de clé)" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "La validation de la signature DKIM a échoué (erreur de validation de clé)" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "validation de la signature DKIM échouée (erreur de vérification de signature)" msgid "Database Error" msgstr "Erreur de base de données" msgid "Database Host" msgstr "Nom d'hôte pour la base de données" msgid "Database Name" msgstr "Nom de la base de données" msgid "Database Owner" msgstr "Propriétaire de la base de données" msgid "Database Password" msgstr "Mot de passe de la base de données" msgid "Database Port" msgstr "Port de base de données" msgid "Database Username" msgstr "Utilisateur de base de données" msgid "Database error" msgstr "Erreur de base de données" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Format des dates" msgid "Date Style" msgstr "Format des dates" msgid "Default Privileges" msgstr "Privilèges par défaut" msgid "Default relationships added." msgstr "Relations par défaut ajoutées." msgid "Delete" msgstr "Supprimer" msgid "Delete Events/Collections" msgstr "Supprimer des collections ou des évènements" msgid "Delete Principal" msgstr "Supprimer ce compte" msgid "Delete a resource or collection" msgstr "Supprimer une ressource ou une collection" msgid "Deleted a grant from this Principal" msgstr "Un accès donné par ce compte a été supprimé" msgid "Deleting Binding:" msgstr "Suppression des liaisons:" msgid "Deleting Collection:" msgstr "Suppression de la collection :" msgid "Deleting Principal:" msgstr "Suppression du compte :" msgid "Deleting Ticket:" msgstr "Suppression du Ticket:" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "Envoyer des invitations (programmées par un organisateur à cette boîte de réception planification)" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "Envoyer des réponses aux invitations (d'un participant à cette boîte de réception planification)" msgid "Dependencies" msgstr "Dépendances" msgid "Dependency" msgstr "Dépendance" msgid "Description" msgstr "Description" msgid "Destination collection does not exist" msgstr "collection de destination n'existe pas" msgid "Directory on the server" msgstr "Répertoire sur le serveur" msgid "Display Name" msgstr "Nom à afficher" msgid "Displayname" msgstr "Nom à afficher" msgid "Does the user have the right to perform this role?" msgstr "L'utilisateur est-il autorisé à avoir ce rôle ?" msgid "Domain" msgstr "Domaine" msgid "EMail" msgstr "Courriel" msgid "EMail OK" msgstr "Courriel vérifié" msgid "ERROR: The full name may not be blank." msgstr "ERREUR : Le nom complet ne peut être vide." msgid "ERROR: The new password must match the confirmed password." msgstr "ERREUR : Le nouveau mot de passe doit être identique au mot de passe confirmé." msgid "ERROR: There was a database error writing the roles information!" msgstr "ERREUR: Il y a eu une erreur lors de l'écriture dans la base de données des informations pour les rôles !" msgid "Edit" msgstr "Modifier" msgid "Edit this user record" msgstr "Modifier l'enregistrement de cet utilisateur" msgid "Email Address" msgstr "Adresse de courriel" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Indiquez un nom d'utilisateur, si vous le connaissez et cliquez ici pour recevoir un mot de passe temporaire." msgid "Enter your username and password then click here to log in." msgstr "Indiquez votre nom d'utilisateur et votre mot de passe puis cliquez ici pour vous connecter" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Erreur NoGroupFound avec le filtre >%s<, attributs >%s< , dn >%s<" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Erreur NoUserFound avec le filtre >%s<, attributs >%s<, dn >%s<" msgid "Error querying database." msgstr "Erreur lors de l'interrogation de la base de données." msgid "Error writing calendar details to database." msgstr "Il s'est produit une erreur lors de l'écriture des données." msgid "Error writing calendar properties to database." msgstr "Il s'est produit une erreur lors de l'écriture des données." msgid "European" msgstr "Européen (jj/mm/aa)" msgid "European (d/m/y)" msgstr "Européen (jj/mm/aa)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "La ressource existante ne correspond pas à l'entête (HTTP) 'If-Match' - pas accepté." msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "La ressource existante correspond à l'entête (HTTP) 'if-None-Match' - pas accepté." msgid "Expires" msgstr "Expires" msgid "External Calendars" msgstr "Agendas externes" msgid "External Url" msgstr "URL externe" msgid "Fail" msgstr "Échec" msgid "Failed to write collection." msgstr "Échec de l'écriture de la collection." msgid "Feeds are only supported for calendars at present." msgstr "A l'heure actuelle, les flux ne sont pris en charge que pour les agendas." msgid "For access to the" msgstr "Pour accéder à" msgid "Forbidden" msgstr "Interdit" msgid "Free/Busy" msgstr "Libre/Occupé" msgid "Full Name" msgstr "Nom complet" msgid "Fullname" msgstr "Nom complet" msgid "GET requests on collections are only supported for calendars." msgstr "Les demandes GET sur les collections ne sont prises en charge que pour les agendas." msgid "GNU gettext support" msgstr "support de GNU gettext" msgid "GO!" msgstr "ENTRER !" msgid "Go to the DAViCal Feature Requests" msgstr "Aller aux demandes de fonctionnalités DAViCal" msgid "Grant" msgstr "Accorder" msgid "Granting new privileges from this Principal" msgstr "Accord de nouveaux privilèges par ce compte" #. Translators: in the sense of a group of people msgid "Group" msgstr "Groupe" msgid "Group Members" msgstr "Membres du groupe" msgid "Group Memberships" msgstr "Adhésions au groupe" msgid "Group Principals" msgstr "Liste des groupes" msgid "Has Members" msgstr "A des membres" msgid "Help" msgstr "Aide" msgid "Help on the current screen" msgstr "Aide sur l'écran actuel" msgid "Help! I've forgotten my password!" msgstr "Au secours ! J'ai oublié mon mot de passe !" msgid "Home" msgstr "Accueil" msgid "Home " msgstr "" msgid "Home Page" msgstr "Accueil" msgid "ID" msgstr "ID." msgid "ISO Format" msgstr "Format ISO (AAAA-MM-JJ)" msgid "ISO Format (YYYY-MM-DD)" msgstr "Format ISO (AAAA-MM-JJ)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "Si vous avez oublié votre mot de passe alors" msgid "If you would like to request access, please e-mail" msgstr "Si vous souhaitez avoir accès, veuillez envoyer un courriel" msgid "Import all .ics files of a directory" msgstr "Importer tous les fichiers .ics d'un répertoire" msgid "Import calendars and Synchronise LDAP." msgstr "Importer les agendas et synchroniser l'annuaire LDAP." msgid "Inactive Principals" msgstr "Comptes inactifs" msgid "Incorrect content type for addressbook: " msgstr "Type de contenu incorrect pour le carnet d'adresses:" msgid "Incorrect content type for calendar: " msgstr "Type de contenu incorrect pour l'agenda:" msgid "Invalid user name or password." msgstr "Nom d'utilisateur ou mot de passe incorrects." msgid "Invalid username or password." msgstr "Nom d'utilisateur ou mot de passe incorrects." msgid "Is Member of" msgstr "Est membre de" msgid "Is a Calendar" msgstr "Est un agenda" msgid "Is an Addressbook" msgstr "Est un carnet d'adresses" msgid "Is this user active?" msgstr "Utilisateur actif ?" msgid "Items in Collection" msgstr "Nb d'articles dans la Collection" msgid "Joined" msgstr "Inscrit" msgid "Language" msgstr "Langue" msgid "Last used" msgstr "Dernier utilisé" msgid "List External Calendars" msgstr "Liste des Agendas Externes" msgid "List Groups" msgstr "Liste des Groupes" msgid "List Resources" msgstr "Liste des ressources" msgid "List Users" msgstr "Liste des utilisateurs" msgid "Load From File" msgstr "Charger d'un fichier" msgid "Locale" msgstr "Langue" msgid "Location" msgstr "Emplacement" msgid "Log On Please" msgstr "Veuillez vous connecter" msgid "Log out of DAViCal" msgstr "Se déconnectez de DAViCal" msgid "Logout" msgstr "Déconnexion" msgid "Member deleted from this Group Principal" msgstr "Membre supprimé de ce groupe" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "La plupart des fonctions DAViCal fonctionneront, mais une mise à jour vers PHP 5.2 ou ultérieure est fortement recommandé." msgid "Name" msgstr "Nom" msgid "New Collection" msgstr "Nouvelle collection" msgid "New Password" msgstr "Nouveau mot de passe" msgid "New Principal" msgstr "Nouveau Compte" #. Translators: not 'Yes' msgid "No" msgstr "No" msgid "No calendar content" msgstr "Pas de contenu dans cet agenda" msgid "No collection found at that location." msgstr "Pas de collection trouvée à cet endroit." msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "Aucun résumé" #. Translators: short for 'Number' msgid "No." msgstr "No." msgid "No. of Collections" msgstr "Nb. de collections" msgid "No. of Principals" msgstr "Nb. de comptes" msgid "No. of Resources" msgstr "Nb. de ressources" msgid "Not overwriting existing destination resource" msgstr "N'écrase pas la ressource destination existante" msgid "Opaque" msgstr "Opaque" msgid "Organizer Missing" msgstr "Il manque un organisateur" msgid "Override a Lock" msgstr "Passer outre un verrou" msgid "PDO PostgreSQL drivers" msgstr "Pilote PDO pour PostgreSQL" msgid "PHP DateTime class" msgstr "Classe PHP DateTime" msgid "PHP LDAP module available" msgstr "Module PHP LDAP disponible" msgid "PHP Magic Quotes GPC off" msgstr "PHP Magic Quotes GPC désactivé" msgid "PHP Magic Quotes runtime off" msgstr "PHP Magic Quotes Runtime désactivé" msgid "PHP PDO module available" msgstr "Module PDO PHP disponible" msgid "PHP calendar extension available" msgstr "Extension d'agenda PHP disponible" msgid "PHP curl support" msgstr "Support de PHP curl" msgid "PHP iconv support" msgstr "support PHP iconv" msgid "PHP not using Apache Filter mode" msgstr "PHP n'utilise pas le mode Apache Filter" msgid "PHP5 curl support is required for external binds" msgstr "Le support de PHP5 curl est requis pour les liaisons externes" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "Mise à jour d'une collection agenda autorisée uniquement pour un contenu text/calendar" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "Mise à jour d'une collection carnet d'adresses autorisée uniquement pour un contenu text/vcard" msgid "Passed" msgstr "Passé" msgid "Password" msgstr "Mot de passe" msgid "Path" msgstr "Chemin" msgid "Person" msgstr "Personne" msgid "Please confirm deletion of access ticket - see below" msgstr "Confirmer la suppression du ticket d'accès - voir ci-dessous" msgid "Please confirm deletion of binding - see below" msgstr "Confirmer la suppression de la liaison - voir ci-dessous" msgid "Please confirm deletion of collection - see below" msgstr "Veuillez confirmer la suppression de la collection - voir ci-dessous" msgid "Please confirm deletion of the principal" msgstr "Veuillez confirmer la suppression du compte" msgid "Please note the time and advise the administrator of your system." msgstr "Veuillez noter l'heure et informer l'administrateur de votre système informatique." msgid "Principal" msgstr "Compte" msgid "Principal Collections" msgstr "Collections de comptes" msgid "Principal Grants" msgstr "Accès accordés par le compte" msgid "Principal ID" msgstr "Id compte" msgid "Principal Type" msgstr "Type de compte" msgid "Principal deleted" msgstr "Compte supprimé" msgid "Privileges" msgstr "Privilèges" msgid "Privileges granted to All Users" msgstr "Privilèges accordés à tous les utilisateurs" msgid "Privileges to allow delivery of scheduling messages" msgstr "Privilèges de gestion standard des invitations (inviter, accepter, libre/occupé)" msgid "Privileges to delegate scheduling decisions" msgstr "Privilèges de gestion des invitations par délégation (inviter, accepter, libre/occupé)" msgid "Property is read-only" msgstr "Cette propriété est en lecture-seule" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Public" msgid "Publicly Readable" msgstr "Lisible par tous" msgid "REPORT body contains no XML data!" msgstr "REPORT ne contient pas de données XML !" msgid "REPORT body is not valid XML data!" msgstr "REPORT ne contient pas de données XML valides !" msgid "Read" msgstr "Lecture" msgid "Read ACLs for a resource or collection" msgstr "Lire les droits d'accès pour une ressource ou collection" msgid "Read Access Controls" msgstr "Lire les contrôles d'accès" msgid "Read Current User's Access" msgstr "Lire les droits de l'utilisateur courant" msgid "Read Free/Busy Information" msgstr "Lire les informations Libre/Occupé" msgid "Read the content of a resource or collection" msgstr "Lire le contenu de la ressource ou de la collection" msgid "" "Read the details of the current user's access control to this resource." msgstr "Lire les détails du contrôle d'accès de l'utilisateur courant à cette ressource." msgid "Read the free/busy information for a calendar collection" msgstr "Lire les informations Libre/Occupé pour un agenda" msgid "Read/Write" msgstr "Lecture/Écriture" msgid "References" msgstr "Références" msgid "Remove" msgstr "Supprimer" msgid "Remove a lock" msgstr "Supprimer un verrou" msgid "Remove dangling external calendars" msgstr "Retirer les agendas externes liés" msgid "Report Bug" msgstr "Signaler une erreur" msgid "Report a bug in the system" msgstr "Signaler une erreur du logiciel" msgid "Request Feature" msgstr "Demander une amélioration" msgid "Request body is not valid XML data!" msgstr "Le corps de la requête n'est pas du XML valide !" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Ressource" msgid "Resource Calendar Principals" msgstr "Liste des Ressources" msgid "Resource Not Found." msgstr "Ressource introuvable." msgid "Resource has changed on server - not deleted" msgstr "La ressource a été modifiée sur le serveur - non supprimée" msgid "Resources may not be changed to / from collections." msgstr "Les ressources ne devraient pas être modifiées en/à partir de collections." msgid "Revoke" msgstr "Retirer" msgid "SRV Record" msgstr "Enregistrement srv" msgid "Schedule Deliver" msgstr "Planif: Invitations" msgid "Schedule Send" msgstr "Planif: Délégation" msgid "Schedule Transparency" msgstr "Transparence de planification" msgid "Scheduling: Deliver a Reply" msgstr "Planification: Envoyer une réponse" msgid "Scheduling: Deliver an Invitation" msgstr "Planification: Envoyer une invitation" msgid "Scheduling: Delivery" msgstr "Planification: Envoi" msgid "Scheduling: Query free/busy" msgstr "Planification: Requête Libre/Occupé" msgid "Scheduling: Send a Reply" msgstr "Planification: Envoyer une réponse par délégation" msgid "Scheduling: Send an Invitation" msgstr "Planification: Envoyer une invitation par délégation" msgid "Scheduling: Send free/busy" msgstr "Planification: Envoyer Libre/Occupé par délégation" msgid "Scheduling: Sending" msgstr "Planification: Délégation d'envoi" msgid "Send free/busy enquiries" msgstr "Envoyer une requête Libre/Occupé" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "Envoyer des invitations en tant qu'organisateur depuis cette boîte d’envoi planification (délégation)." msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "Envoyer des réponses aux invitations en tant que participant depuis cette boîte d’envoi planification (délégation)" msgid "Set free/busy privileges" msgstr "Attribuer le privilège Libre/Occupé" msgid "Set read privileges" msgstr "Définir des privilèges de lecture" msgid "Set read+write privileges" msgstr "Définir des privilèges de lecture + écriture" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "Positionnez le chemin d'accès à l'agenda, par exemple 'calendar' pour y accéder par le chemin /caldav.php/username/calendar/" msgid "Setup" msgstr "Configuration" msgid "Setup DAViCal" msgstr "Configuration DAViCal" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Afficher l'aide sur" msgid "Site Statistics" msgstr "Statistiques" msgid "Site Statistics require the database to be available!" msgstr "Les statistiques du site requièrent l'accès à la base de données!" msgid "Some properties were not able to be changed." msgstr "Des propriétés n'ont pu être modifiées." msgid "Some properties were not able to be set." msgstr "Des propriétés n'ont pu être établies." msgid "Source resource does not exist." msgstr "La ressource source n'existe pas" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "Les collections spéciales ne peuvent pas contenir un agenda ou une autre collection spéciale." msgid "Specific Privileges" msgstr "Privilèges spécifiques" msgid "Status" msgstr "Statut" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "Statut: %d, Message: %s, User: %d, Chemin: %s" msgid "Submit" msgstr "Valider" msgid "Suhosin \"server.strip\" disabled" msgstr "Suhosin \"server.strip\" désactivé" msgid "Sync LDAP Groups with DAViCal" msgstr "Synchroniser les groupes LDAP avec DAViCal" msgid "Sync LDAP with DAViCal" msgstr "Synchroniser LDAP avec DAViCal" msgid "Target" msgstr "Cible" msgid "That destination name contains invalid characters." msgstr "Ce chemin contient des caractères interdits." msgid "That resource is not present on this server." msgstr "Cette ressource n'est pas présente sur ce serveur" msgid "The BIND Request MUST identify an existing resource." msgstr "La requête BIND DOIT identifier une ressource existante." msgid "The BIND Request-URI MUST identify a collection." msgstr "La requête-URI BIND DOIT identifier une collection." msgid "The BIND method is not allowed at that location." msgstr "La méthode de connexion (BIND) n'est pas autorisée à cet endroit." msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "La propriété CalDAV:schedule-calendar-transp ne peut être positionnée que sur des agendas." msgid "The DAViCal Home Page" msgstr "Page d'accueil DAViCal" msgid "The access ticket will be deleted." msgstr "Le ticket d'accès sera supprimé." msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "Le rapport de carnet d'adresses doit être demandé sur une collection de type carnet d'adresses" msgid "The application failed to understand that request." msgstr "L'application n'a pas réussi à comprendre cette rzquête." msgid "The application program does not understand that request." msgstr "L'application ne comprend pas la demande." msgid "The binding will be deleted." msgstr "La liaison sera supprimée." msgid "The calendar path contains illegal characters." msgstr "Le chemin vers l'agenda contient des caractères interdits." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "Le rapport d'agenda doit être demandé sur un agenda ou une collection planification" msgid "The collection name may not be blank." msgstr "Le nom de la collection ne devrait pas être vide." msgid "The destination collection does not exist" msgstr "La collection de destination n'existe pas" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "Le nom à afficher ne peut être défini que pour une Collection, un Compte ou une liaison." msgid "The email address really should not be blank." msgstr "L'adresse courriel ne devrait vraiment pas être vide." #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "Le fichier \"%s\" n'est pas au format UTF-8, merci de regarder les erreurs pour plus de détail" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "Le fichier n'est pas encodé en UTF-8, veuillez vérifier les erreurs pour plus d'information." msgid "The full name for this person, group or other type of principal." msgstr "Le nom complet pour cette personne, groupe ou autre type de compte." msgid "The full name must not be blank." msgstr "Le nom complet ne doit pas être vide." msgid "The name this user can log into the system with." msgstr "Le nom ou pseudonyme que cet utilisateur emploiera pour se connecter à l'application." msgid "The path on the server where your .ics files are." msgstr "Le chemin sur le serveur où sont stockés tous les fichiers .ics." msgid "The preferred language for this person." msgstr "La langue parlée par cette personne." #, php-format msgid "The principal \"%s\" does not exist" msgstr "Le compte \"%s\" n'existe pas" msgid "The style of dates used for this person." msgstr "Le style de dates utilisé par cette personne." msgid "The user's e-mail address." msgstr "Adresse e-mail de l'utilisateur." msgid "The user's full name." msgstr "Nom complet de l'utilisateur." msgid "The user's password for logging in." msgstr "Mot de passe utilisateur pour se connecter." msgid "The username must not be blank, and may not contain a slash" msgstr "Le nom de l'utilisateur ne devrait pas être vide et ne devrait pas contenir de slash ('/')" msgid "There was an error reading from the database." msgstr "Il y a eu une erreur lors de la lecture de la base de données." msgid "There was an error writing to the database." msgstr "Il s'est produit une erreur lors de l'écriture des données." msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Cette action:
  • regarde les groupes valides dans l'annuaire LDAP
  • regarde les groupes dans DAViCal
puis
  • si un groupe est présent dans DAViCal et pas dans l'annuaire LDAP, le positionne inactif dans DAViCal
  • si un groupe est présent dans l'annuaire LDAP et pas dans DAViCal, crée le groupe dans DAViCal
  • si un groupe est présent dans l'annuaire LDAP et dans DAViCal, le met à jour dans DAViCal
" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Cette action:
  • regarde des comptes utilisateurs valides dans l'annuaire LDAP
  • regarde les comptes utilisateurs dans DAViCal
puis
  • si un compte est présent dans DAViCal et pas dans l'annuaire LDAP, le rend inactif dans DAViCal
  • si un compte est présent dans l'annuaire LDAP mais pas dans DAViCal, le crée dans DAViCal
  • si un compte est présent dans LDAP et dans DAViCal, le met à jour dans DAViCal
" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "Cette page vérifie principalement l'environnement nécessaire pour faire fonctionner Davical correctement. Les suggestions ou correctifs pour lui faire faire des choses plus utiles sont les bienvenus." msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "Cette action va importer chaque fichier dans un répertoire nommé \"username.ics\" et créer un utilisateur et un agenda pour chaque fichier à importer." msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "Ce serveur ne supporte que le format texte/calendrier pour l'URL Libre/occupé" msgid "Ticket ID" msgstr "Id du ticket" msgid "Time" msgstr "Temps" msgid "To Collection" msgstr "Pour la Collection" msgid "To ID" msgstr "Pour l'ID" msgid "Toggle all privileges" msgstr "Inverser tous les privilèges" msgid "Tools" msgstr "Outils" msgid "Transparent" msgstr "Transparent" msgid "URL" msgstr "URL" msgid "US Format" msgstr "Format US" msgid "Unauthenticated User" msgstr "Utilisateur non authentifié" msgid "United States of America (m/d/y)" msgstr "États-Unis d'Amérique (m / d / y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Enregistrer/Mettre à jour" msgid "Updated" msgstr "Mis à jour" msgid "Updating Collection record." msgstr "Mise à jour de l'enregistrement collection" msgid "Updating Member of this Group Principal" msgstr "Mise à jour des membres de ce groupe" msgid "Updating Principal record." msgstr "Mise à jour du compte." msgid "Updating grants by this Principal" msgstr "Mise à jour des droits accordés par ce compte" msgid "Upgrade DAViCal database schema" msgstr "Mise à jour le schéma de la base de données de DAViCal" msgid "Upgrade Database" msgstr "Mise à jour de la base" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "Liste des comptes utilisateurs" msgid "User Details" msgstr "Informations sur l'utilisateur" msgid "User Functions" msgstr "Informations sur l'utilisateur" msgid "User Name" msgstr "Nom de l'utilisateur" msgid "User Roles" msgstr "Rôles de l'utilisateur" msgid "User is active" msgstr "Utilisateur activé" msgid "User record written." msgstr "Données utilisateur correctement enregistrées." msgid "Username" msgstr "Utilisateur" msgid "View My Details" msgstr "Mes informations" msgid "View my own principal record" msgstr "Consulter mes données personnelles" msgid "View this user record" msgstr "Consulter les informations de cet utilisateur" msgid "Visit the DAViCal Wiki" msgstr "Aller au wiki de DAViCal" #, php-format msgid "Want: %s, Currently: %s" msgstr "Nécessite: %s , actuellement: %s" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "Attention: il n'y a pas de compte admin actif ! Vous devez corriger ça avant de vous déconnecter. Utilisez éventuellement le paramétrage $c->do_not_sync_from_ldap." msgid "When the user's e-mail account was validated." msgstr "Date à laquelle l'adresse courriel de cet utilisateur a été validée." msgid "Write" msgstr "Écrire" msgid "Write ACLs for a resource or collection" msgstr "Positionner ACLs d'une ressource ou collection" msgid "Write Access Controls" msgstr "Ecrire des contrôles d'accès" msgid "Write Data" msgstr "Écrire" msgid "Write Metadata" msgstr "Écrire les méta-données" msgid "Write content" msgstr "Écrire du contenu" msgid "Write properties" msgstr "Écrire les propriétés" msgid "Yes" msgstr "Oui" msgid "You are editing" msgstr "Vous modifiez" msgid "You are not authorised to use this function." msgstr "Vous n'êtes pas autorisé à utiliser cette fonction." msgid "You are viewing" msgstr "Vous regardez" msgid "You do not have permission to modify this record." msgstr "Vous n'avez pas l'autorisation de modifier cet enregistrement." msgid "You may not PUT to a collection URL" msgstr "Vous ne pouvez pas mettre à jour vers une URL de collection" msgid "You must log in to use this system." msgstr "Vous devez vous connecter pour utiliser ce logiciel." msgid "Your configuration produced PHP errors which should be corrected" msgstr "Votre configuration a généré des erreurs PHP qui devrait être corrigé" msgid "calendar-timezone property is only valid for a calendar." msgstr "La propriété fuseau horaire n'est valide que pour un agenda." #, php-format msgid "directory %s is not readable" msgstr "le répertoire %s n'est pas accessible en lecture." msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "drivers_imap_pam : le paramètre imap_url n'est pas configuré dans /etc/davical/*-conf.php" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap : impossible de démarrer TLS : ldap_start_tlf() a échoué." #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap : impossible de se connecter à l'hôte %1$s sur le port %2$s avec bindDN %3$s." msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap : impossible pour LDAP d'utiliser le protocole version 3, TLS n'est pas géré." msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap : Impossible de se lier à LDAP, veuillez vérifier votre bindDN et passDN de votre configuration ou si votre serveur LDAP est accessible." #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap : impossible de se connecter à l'annuaire LDAP sur le port %s de l'hôte %s." msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap : la fonction ldap_connect n'est pas définie, vérifiez que vous avez l'extension php_ldap." #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "drivers_pwauth_pam : fichier %s introuvable" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam : incapable de trouver le fichier %s." #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "Ne pas m'oublier" msgid "from principal" msgstr "depuis le compte" msgid "iSchedule Domains" msgstr "Domaines ISchedule" msgid "invalid request" msgstr "Requête invalide" msgid "path to store your ics" msgstr "le chemin où stocker votre ics" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "non authentifié" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "Vous devez vous connecter avec le nom d'utilisateur et le mot de passe qui vous ont été fournis." davical-1.1.1/po/es_ES.po0000644000000000000000000012322611767336605012003 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Eugene Ciurana , 2011. # Jorge López , 2011, 2012. # pr3d4t0r , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Spanish (Spain) (http://www.transifex.net/projects/p/davical/language/es_ES/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "%F %T" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "%T" msgid "*** Default Locale ***" msgstr "*** Configuración regional estándar ***" msgid "*** Unknown ***" msgstr "*** Desconocido ***" #, php-format msgid "- adding %s to group : %s" msgstr "- agregando %s al grupo %s" #, php-format msgid "- adding users %s to group : %s" msgstr "- agregando usuarios %s al grupo %s" #, php-format msgid "- creating groups : %s" msgstr "- creando los grupos: %s" #, php-format msgid "- creating record for users : %s" msgstr "- creando el registro para usuarios: %s" #, php-format msgid "- deactivate groups : %s" msgstr "- grupos %s desactivados" #, php-format msgid "- deactivating users : %s" msgstr "- desactivando a los usuarios: %s" #, php-format msgid "- nothing done on : %s" msgstr "- ningún cambio para: %s" #, php-format msgid "- removing %s from group : %s" msgstr "- eliminando a %s del grupo: %s" #, php-format msgid "- updating groups : %s" msgstr "- actualizando los grupos: %s" #, php-format msgid "- updating user records : %s" msgstr "- actualizando los registros de usuario: %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "ADVERTENCIA: todos los eventos en este contenedor serán eliminados antes de insertar el archivo ics" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "

Ayuda\n

Visita la Página Principal de DAViCal para ayuda inicial, o consultael Wiki de DAViCal.

Si no encuentras la respuesta a tus dudas, visítanos en IRC enel canal #davical en irc.oftc.net,\no envía tus preguntas a la lista de correo de Usuarios de DAViCal.

\n

El archivo de la lista de correotambien te será útil." #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Por favor, autentíquese

Para acceder a %s debe identificarse con su nombre de usuario y su clave de acceso.

Escriba a %s si desea solicitar acceso." msgid "A DAViCal principal collection may only contain collections" msgstr "Una colección de un Principal de DAViCal solo puede contener otras colecciones" msgid "A collection already exists at that location." msgstr "Ya existe una colección en esa ruta." msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "Ya existe un recurso en ese destino." msgid "AWL Library version " msgstr "Versión de la biblioteca AWL" msgid "Access Tickets" msgstr "Tickets de acceso" msgid "Access ticket deleted" msgstr "Ticket de acceso eliminado" msgid "Action" msgstr "Acción" msgid "Active" msgstr "Activo" msgid "Adding new member to this Group Principal" msgstr "Agregando un nuevo miembro a este grupo" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Admin" msgid "Administration" msgstr "Administración" msgid "Administrator" msgstr "Administrador" msgid "All" msgstr "Todos" msgid "All collection data will be unrecoverably deleted." msgstr "Todos los datos de esta colección serán eliminados permanentemente." #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "Todos los eventos del usuario \"%s\" fueron eliminados y reemplazados por los contenidos en el fichero %s" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "Todos los calendarios y eventos de este Principal serán eliminados permanentemente." msgid "All privileges" msgstr "Todos los privilegios" msgid "All requested changes were made." msgstr "Todos los cambios solicitados fueron aplicados." msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "Permitir consultas libre/ocupado sobre el dueño de este buzón de planificación" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "Un usuario \"Administrador\" tiene todos los permisos en DAViCal." msgid "Anonymous users are not allowed to modify calendars" msgstr "Los usuarios anónimos no tienen permiso para modificar calendarios" msgid "Anonymous users may only access public calendars" msgstr "Los usuarios anónimos solo pueden ver calendarios públicos" msgid "Append" msgstr "" msgid "Application DB User" msgstr "Usuario de la base de datos" msgid "Apply Changes" msgstr "Aplicar cambios" msgid "Apply DB Patches" msgstr "Aplicar cambios a la base de datos" msgid "Attachment" msgstr "Adjunto" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "Enlace eliminado" msgid "Bindings to other collections" msgstr "Enlaces a otras colecciones" msgid "Bindings to this Collection" msgstr "Enlaces a esta colección" msgid "Bindings to this Principal's Collections" msgstr "Enlaces a las colecciones de este Principal" msgid "Body contains no XML data!" msgstr "¡El cuerpo no contiene datos XML!" msgid "Bound As" msgstr "Enlazado como" msgid "Browse all users" msgstr "Ver todos los usuarios" msgid "Busy" msgstr "Ocupado" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "El calendario \"%s\" fue cargado desde un fichero." msgid "Calendar Principals" msgstr "Principals del calendario" msgid "Calendar Timezone" msgstr "Zona horaria del calendario" msgid "Can only add tickets for existing collection paths which you own" msgstr "Solo puede agregar tickets en conexiones existentes que le pertenezcan" msgid "Categories" msgstr "Categorías" msgid "Change Password" msgstr "Cambiar la contraseña" msgid "Click to display user details" msgstr "Haga click para ver los detalles del usuario" msgid "Click to edit principal details" msgstr "Haga click para ver los detalles del Principal" msgid "Collection" msgstr "Colección" msgid "Collection Grants" msgstr "Permisos sobre la colección" msgid "Collection ID" msgstr "ID de la colección" msgid "Collection deleted" msgstr "Colección eliminada" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "Las colecciones no pueden ser calendarios CalDAV y agendas de teléfono CardDAV al mismo tiempo" msgid "Configuring Calendar Clients for DAViCal" msgstr "Configurando clientes de calendario para DAViCal" msgid "Configuring DAViCal" msgstr "Configurando DAViCal" msgid "Confirm" msgstr "Confirmar" msgid "Confirm Deletion of the Binding" msgstr "Confirmar eliminación del enlace" msgid "Confirm Deletion of the Collection" msgstr "Confirmar eliminación de la colección" msgid "Confirm Deletion of the Principal" msgstr "Confirmar eliminación del Principal" msgid "Confirm Deletion of the Ticket" msgstr "Confirmar eliminación del ticket" msgid "Confirm Password" msgstr "Confirmar la contraseña" msgid "Confirm the new password." msgstr "Confirmar la nueva contraseña" msgid "Could not retrieve" msgstr "No se pudo obtener" msgid "Create" msgstr "Crear" msgid "Create Collection" msgstr "Crear una colección" msgid "Create Events/Collections" msgstr "Crear eventos/colecciones" msgid "Create New Collection" msgstr "Crear una colección nueva" msgid "Create New Principal" msgstr "Crear un Principal nuevo" msgid "Create Principal" msgstr "Crear un Principal" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Crear un Principal nuevo (i.e. un usuario, recurso, o grupo)" msgid "Create a resource or collection" msgstr "Crear un recurso o colección" msgid "Creating new Collection." msgstr "Creando una colección nueva." msgid "Creating new Principal record." msgstr "Creando un registro nuevo de Principal." msgid "Creating new ticket granting privileges to this Principal" msgstr "Creando un ticket nuevo para dar privilegios a este Principal" msgid "Current DAViCal version " msgstr "Versión actual de DAViCal" msgid "DAV Path" msgstr "Ruta DAV" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "DAV::resourcetype sólo puede tener un nuevo valor, no puede ser eliminado" msgid "DAViCal CalDAV Server" msgstr "Servidor CalDAV DAViCal" msgid "DAViCal DB Schema version " msgstr "Versión del esquema de la base de datos de DAViCal " msgid "DAViCal Homepage" msgstr "Página web de DAViCal" msgid "DAViCal Wiki" msgstr "Wiki de DAViCal" msgid "DAViCal only allows BIND requests for collections at present." msgstr "DAViCal solo permite BINDs a collecciones por ahora." msgid "DKIM signature missing" msgstr "Falta la firma DKIM" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "La validación de la firma DKIM falló(ERROR de DNS)" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "Validación de firma DKIM falló (ERROR al interpretar KEY)" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "La validación de la firma DKIM falló(ERROR de validación de LLAVE)" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "La validación de la firma DKIM falló(ERROR de verificación de firma)" msgid "Database Error" msgstr "Error en la base de datos" msgid "Database Host" msgstr "Servidor de base de datos" msgid "Database Name" msgstr "Nombre de la base de datos" msgid "Database Owner" msgstr "Propietario de la base de datos" msgid "Database Password" msgstr "Contraseña de la base de datos" msgid "Database Port" msgstr "Puerto de la base de datos" msgid "Database Username" msgstr "Nombre de usuario para la base de datos" msgid "Database error" msgstr "Error en la base de datos" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Estilo del formato de fecha" msgid "Date Style" msgstr "Formato de fecha" msgid "Default Privileges" msgstr "Privilegios por defecto" msgid "Default relationships added." msgstr "Relaciones por defecto añadidas" msgid "Delete" msgstr "Eliminar" msgid "Delete Events/Collections" msgstr "Eliminar eventos/colecciones" msgid "Delete Principal" msgstr "Eliminar el Principal" msgid "Delete a resource or collection" msgstr "Eliminar un recurso o colección" msgid "Deleted a grant from this Principal" msgstr "Prilegio eliminado de este Principal" msgid "Deleting Binding:" msgstr "Eliminando enlace:" msgid "Deleting Collection:" msgstr "Eliminando colección:" msgid "Deleting Principal:" msgstr "Eliminando Principal:" msgid "Deleting Ticket:" msgstr "Eliminando ticket:" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "Permitir al organizador de un evento enviar una invitación a este buzón de planificación" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "Permitir a un asistente a un evento enviar una respuesta a este buzón de planificación" msgid "Dependencies" msgstr "Dependencias" msgid "Dependency" msgstr "Dependencia" msgid "Description" msgstr "Descripción" msgid "Destination collection does not exist" msgstr "La colección de destino no existe" msgid "Directory on the server" msgstr "Directorio en el servidor" msgid "Display Name" msgstr "Nombre mostrado" msgid "Displayname" msgstr "Nombre mostrado" msgid "Does the user have the right to perform this role?" msgstr "¿El usuario tiene permiso para desempeñar este rol?" msgid "Domain" msgstr "Dominio" msgid "EMail" msgstr "Email" msgid "EMail OK" msgstr "Email correcto" msgid "ERROR: The full name may not be blank." msgstr "ERROR: El nombre completo no puede estar vacío." msgid "ERROR: The new password must match the confirmed password." msgstr "ERROR: La nueva contraseña debe coincidir con el campo de confirmación" msgid "ERROR: There was a database error writing the roles information!" msgstr "ERROR: Hubo un error en la base de datos al escribir la información sobre los roles" msgid "Edit" msgstr "Editar" msgid "Edit this user record" msgstr "Editar el registro de este usuario" msgid "Email Address" msgstr "Dirección de email" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Proporcione un nombre de usuario, si lo sabe, y haga click aquí para enviarle una contraseña temporal." msgid "Enter your username and password then click here to log in." msgstr "Proporcione su nombre de usuario y contraseña, depues haga click aquí para acceder." #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Error NoGroupFound con el filtro >%s<, atributos >%s< , dn >%s<" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Error NoUserFound con filtro >%s<, atributos >%s< , dn >%s<" msgid "Error querying database." msgstr "Error consultando la base de datos." msgid "Error writing calendar details to database." msgstr "Error al escribir los detalles del calendario en la base de datos." msgid "Error writing calendar properties to database." msgstr "Error al escribir las propiedades del calendario en la base de datos." msgid "European" msgstr "Europeo" msgid "European (d/m/y)" msgstr "Europeo (d/m/y)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "El recurso existente no coincide con el encabezado \"If-Match\" - rechazado." msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "El recurso existente coincide con el encabezado \"If-None-Match\" - rechazado." msgid "Expires" msgstr "Expira" msgid "External Calendars" msgstr "Calendarios externos" msgid "External Url" msgstr "URL externa" msgid "Fail" msgstr "Fallo" msgid "Failed to write collection." msgstr "Fallo al escribir la colección." msgid "Feeds are only supported for calendars at present." msgstr "Los 'feeds' sólo se permiten en calendarios por ahora" msgid "For access to the" msgstr "Para acceso al" msgid "Forbidden" msgstr "Prohibido" msgid "Free/Busy" msgstr "Libre/Ocupado" msgid "Full Name" msgstr "Nombre completo" msgid "Fullname" msgstr "Nombre" msgid "GET requests on collections are only supported for calendars." msgstr "Las solicitudes GET en colecciones solo están disponibles para calendarios." msgid "GNU gettext support" msgstr "Soporte para GNU gettext" msgid "GO!" msgstr "¡Adelante!" msgid "Go to the DAViCal Feature Requests" msgstr "Ir a las peticiones de funcionalidad de DAViCal" msgid "Grant" msgstr "Permiso" msgid "Granting new privileges from this Principal" msgstr "Añadiendo nuevos permisos a este Principal" #. Translators: in the sense of a group of people msgid "Group" msgstr "Grupo" msgid "Group Members" msgstr "Miembros del grupo" msgid "Group Memberships" msgstr "Membresías de grupo" msgid "Group Principals" msgstr "Principals del grupo" msgid "Has Members" msgstr "Tiene miembros" msgid "Help" msgstr "Ayuda" msgid "Help on the current screen" msgstr "Ayuda con la pantalla actual" msgid "Help! I've forgotten my password!" msgstr "¡Ayuda! ¡He olvidado mi contraseña!" msgid "Home" msgstr "Inicio" msgid "Home " msgstr "" msgid "Home Page" msgstr "Página principal" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "Formato ISO" msgid "ISO Format (YYYY-MM-DD)" msgstr "Formato ISO (YYYY-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "ID" msgid "If you have forgotten your password then" msgstr "Si olvidó su contraseña, entonces" msgid "If you would like to request access, please e-mail" msgstr "Si usted quiere solicitar acceso, por favor escriba a la dirección " msgid "Import all .ics files of a directory" msgstr "Importar todos los ficheros .ics desde un directorio" msgid "Import calendars and Synchronise LDAP." msgstr "Importar calendarios y sincronizar con LDAP." msgid "Inactive Principals" msgstr "Principals inactivos" msgid "Incorrect content type for addressbook: " msgstr "Tipo incorrecto para una libreta de direcciones: " msgid "Incorrect content type for calendar: " msgstr "Tipo de contenido incorrecto para un calendario: " msgid "Invalid user name or password." msgstr "Nombre de usuario o contraseña inválidos." msgid "Invalid username or password." msgstr "Nombre de usuario o contraseña inválidos." msgid "Is Member of" msgstr "Es miembro de" msgid "Is a Calendar" msgstr "Es un calendario" msgid "Is an Addressbook" msgstr "Es una libreta de direcciones" msgid "Is this user active?" msgstr "¿Está habilitado este usuario?" msgid "Items in Collection" msgstr "Elementos en la colección" msgid "Joined" msgstr "Unido" msgid "Language" msgstr "Idioma" msgid "Last used" msgstr "Último uso" msgid "List External Calendars" msgstr "Listar calendarios externos" msgid "List Groups" msgstr "Listar grupos" msgid "List Resources" msgstr "Listar recursos" msgid "List Users" msgstr "Listar usuarios" msgid "Load From File" msgstr "Cargar desde fichero" msgid "Locale" msgstr "Configuración regional" msgid "Location" msgstr "Lugar" msgid "Log On Please" msgstr "Por favor, autentíquese" msgid "Log out of DAViCal" msgstr "Salir de DAViCal" msgid "Logout" msgstr "Salir" msgid "Member deleted from this Group Principal" msgstr "Miembro eliminado de este grupo" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "La mayoría de las funciones de DAViCal funcionarán, pero es muy recomendable actualizar a PHP 5.2 o más reciente." msgid "Name" msgstr "Nombre" msgid "New Collection" msgstr "Nueva colección" msgid "New Password" msgstr "Nueva contraseña" msgid "New Principal" msgstr "Nuevo Principal" #. Translators: not 'Yes' msgid "No" msgstr "No" msgid "No calendar content" msgstr "El calendario no tiene contenido" msgid "No collection found at that location." msgstr "No se encontró ninguna colección en esa ruta" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "Sin resumen" #. Translators: short for 'Number' msgid "No." msgstr "Núm." msgid "No. of Collections" msgstr "Núm. de colecciones" msgid "No. of Principals" msgstr "Núm. de Principals" msgid "No. of Resources" msgstr "Núm. de recursos" msgid "Not overwriting existing destination resource" msgstr "No se sobreescribió el recurso ya existente." msgid "Opaque" msgstr "Opaco" msgid "Organizer Missing" msgstr "Falta el organizador" msgid "Override a Lock" msgstr "Ignorar un bloqueo" msgid "PDO PostgreSQL drivers" msgstr "Drivers PDO para PostgreSQL" msgid "PHP DateTime class" msgstr "Clase DateTime de PHP" msgid "PHP LDAP module available" msgstr "Módulo LDAP PHP disponible" msgid "PHP Magic Quotes GPC off" msgstr "\"Magic quotes GPC\" de PHP desactivadas" msgid "PHP Magic Quotes runtime off" msgstr "\"Magic quotes GPC\" de PHP desactivadas en tiempo de ejecución" msgid "PHP PDO module available" msgstr "Módulo PHP PDO disponible" msgid "PHP calendar extension available" msgstr "Extensión de calendarios para PHP disponible" msgid "PHP curl support" msgstr "Soporte de cURL en PHP" msgid "PHP iconv support" msgstr "Soporte PHP iconv" msgid "PHP not using Apache Filter mode" msgstr "PHP sin usar el modo filtro de Apache" msgid "PHP5 curl support is required for external binds" msgstr "El soporte cURL para PHP5 se necesita para binds externos" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "El método PUT con contenido de tipo text/calendar sólo se permite en una colección de tipo calendario" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "El método PUT con contenido de tipo text/vcard sólo se permite en una colección de tipo libreta de direcciones" msgid "Passed" msgstr "Aceptado" msgid "Password" msgstr "Contraseña" msgid "Path" msgstr "Ruta" msgid "Person" msgstr "Persona" msgid "Please confirm deletion of access ticket - see below" msgstr "Por favor confirme la eliminación del ticket de acceso - véase más abajo" msgid "Please confirm deletion of binding - see below" msgstr "Por favor confirme la eliminación del enlace - véase más abajo" msgid "Please confirm deletion of collection - see below" msgstr "Por favor confirme la eliminación de la colección - véase más abajo" msgid "Please confirm deletion of the principal" msgstr "Por favor confirme la eliminación del Principal" msgid "Please note the time and advise the administrator of your system." msgstr "Por favor anote la hora y coméntelo a su administrador del sistema." msgid "Principal" msgstr "Principal'" msgid "Principal Collections" msgstr "Colecciones del Principal" msgid "Principal Grants" msgstr "Permisos del Principal" msgid "Principal ID" msgstr "ID del Principal" msgid "Principal Type" msgstr "Tipo de Principal" msgid "Principal deleted" msgstr "Principal eliminado" msgid "Privileges" msgstr "Permisos" msgid "Privileges granted to All Users" msgstr "Permisos dados a todos los usuarios" msgid "Privileges to allow delivery of scheduling messages" msgstr "Permisos para permitir el envío de mensajes de planificación de eventos" msgid "Privileges to delegate scheduling decisions" msgstr "Permisos para delegar decisiones de planificación de eventos" msgid "Property is read-only" msgstr "Esta propiedad es de sólo lectura" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Público" msgid "Publicly Readable" msgstr "De lectura pública" msgid "REPORT body contains no XML data!" msgstr "¡El cuerpo de la operación REPORT no contiene datos XML!" msgid "REPORT body is not valid XML data!" msgstr "¡El cuerpo de la operación REPORT contiene datos XML inválidos!" msgid "Read" msgstr "Lectura" msgid "Read ACLs for a resource or collection" msgstr "Leer ACLs (listas de control de acceso) de un recurso o colección" msgid "Read Access Controls" msgstr "Leer controles de acceso" msgid "Read Current User's Access" msgstr "Leer permisos de acceso del usuario actual" msgid "Read Free/Busy Information" msgstr "Consultar información libre/ocupado" msgid "Read the content of a resource or collection" msgstr "Leer el contenido de un recurso o colección" msgid "" "Read the details of the current user's access control to this resource." msgstr "Leer los detalles de control de acceso para el usuario actual a este recurso" msgid "Read the free/busy information for a calendar collection" msgstr "Consultar la información libre/ocupado para una colección de calendario" msgid "Read/Write" msgstr "Lectura/escritura" msgid "References" msgstr "Apunta a" msgid "Remove" msgstr "Eliminar" msgid "Remove a lock" msgstr "Eliminar un bloqueo" msgid "Remove dangling external calendars" msgstr "Eliminar calendarios externos que van y vienen" msgid "Report Bug" msgstr "Informar de un fallo" msgid "Report a bug in the system" msgstr "Informar de un problema en el sistema" msgid "Request Feature" msgstr "Solicitar una funcionalidad" msgid "Request body is not valid XML data!" msgstr "¡El cuerpo de la petición no contiene datos XML válidos!" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Recurso" msgid "Resource Calendar Principals" msgstr "Principals de tipo recurso con calendario" msgid "Resource Not Found." msgstr "Recurso no encontrado." msgid "Resource has changed on server - not deleted" msgstr "El recurso fue modificado en el servidor - no se eliminó" msgid "Resources may not be changed to / from collections." msgstr "Los recursos no pueden ser convertidos a colecciones (y viceversa)" msgid "Revoke" msgstr "Revocar" msgid "SRV Record" msgstr "Registro SVR" msgid "Schedule Deliver" msgstr "Entrega de planificaciones" msgid "Schedule Send" msgstr "Envío de planificaciones" msgid "Schedule Transparency" msgstr "Transparencia de planificaciones" msgid "Scheduling: Deliver a Reply" msgstr "Planificación: entregar una respuesta" msgid "Scheduling: Deliver an Invitation" msgstr "Planificación: entregar una invitación" msgid "Scheduling: Delivery" msgstr "Planificación: entrega" msgid "Scheduling: Query free/busy" msgstr "Planificación: consultar disponibilidad (libre/ocupado)" msgid "Scheduling: Send a Reply" msgstr "Planificación: enviar una respuesta" msgid "Scheduling: Send an Invitation" msgstr "Planificación: enviar una invitación" msgid "Scheduling: Send free/busy" msgstr "Planificación: enviar información libre/ocupado" msgid "Scheduling: Sending" msgstr "Planificación: envío" msgid "Send free/busy enquiries" msgstr "Enviar comprobaciones de libre/ocupado" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "Envío de invitaciones de planificación como organizador por parte del dueño de este buzón de planificación" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "Envío de respuestas a propuestas de planificación como asistente por parte del dueño de este buzón de planificación" msgid "Set free/busy privileges" msgstr "Activar permisos libre/ocupado" msgid "Set read privileges" msgstr "Activar permisos de lectura" msgid "Set read+write privileges" msgstr "Activar permisos de lectura+escritura" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "Indique la ruta en la que se almacenarán sus ics. Por ejemplo, 'calendario' se traducirá en '/caldav.php/usuario/calendario/'" msgid "Setup" msgstr "Configuración" msgid "Setup DAViCal" msgstr "Configurar DAViCal" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Mostrar ayuda sobre" msgid "Site Statistics" msgstr "Estadísticas del sitio" msgid "Site Statistics require the database to be available!" msgstr "¡Las estadísticas del sitio necesitan que la base de datos esté disponible!" msgid "Some properties were not able to be changed." msgstr "No fue posible cambiar algunas propiedades." msgid "Some properties were not able to be set." msgstr "No fue posible configurar algunas propiedades." msgid "Source resource does not exist." msgstr "El recurso de origen no existe." msgid "" "Special collections may not contain a calendar or other special collection." msgstr "Las colecciones especiales no pueden contener un calendario u otra colección especial." msgid "Specific Privileges" msgstr "Privilegios concretos." msgid "Status" msgstr "Estado" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "Estado: %d, Mensaje: %s, Usuario: %d, Ruta: %s" msgid "Submit" msgstr "Enviar" msgid "Suhosin \"server.strip\" disabled" msgstr "Suhosin \"server.strip\" desactivado" msgid "Sync LDAP Groups with DAViCal" msgstr "Sincronizar grupos LDAP con DAViCal" msgid "Sync LDAP with DAViCal" msgstr "Sincronizar LDAP en DAViCal" msgid "Target" msgstr "Destino" msgid "That destination name contains invalid characters." msgstr "El nombre de destino tiene caracteres inválidos." msgid "That resource is not present on this server." msgstr "El recurso no existe en este servidor." msgid "The BIND Request MUST identify an existing resource." msgstr "La solicitud BIND DEBE identificar un recurso existente." msgid "The BIND Request-URI MUST identify a collection." msgstr "El URI de la solicitud BIND DEBE identificar a una colección." msgid "The BIND method is not allowed at that location." msgstr "No está permitido el método BIND en esa ruta." msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "La propiedad CalDAV:schedule-calendar-transp sólo puede ser configurada en calendarios." msgid "The DAViCal Home Page" msgstr "Página principal de DAViCal" msgid "The access ticket will be deleted." msgstr "El ticket de acceso será eliminado." msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "La solicitud addressbook-query debe ejecutarse contra una colección de tipo libreta de direcciones" msgid "The application failed to understand that request." msgstr "La aplicación no pudo entender la petición" msgid "The application program does not understand that request." msgstr "La aplicación no entendió su petición" msgid "The binding will be deleted." msgstr "El enlace será eliminado." msgid "The calendar path contains illegal characters." msgstr "La ruta al calendario contiene caracteres no permitidos." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "La petición calendar-query debe ejecutarse contra un calendario o una colección de planificación." msgid "The collection name may not be blank." msgstr "El nombre de la colección no puede dejarse en blanco." msgid "The destination collection does not exist" msgstr "La colección de destino no existe." msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "El nombre mostrado puede asignarse sólo en colecciones, Principals, o enlaces." msgid "The email address really should not be blank." msgstr "La dirección de correo electrónico no debería estar vacía." #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "El fichero \"%s\" no está codificado en UTF-8, por favor compruebe el log de errores para conocer más detalles" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "El fichero no está codificado en UTF-8, por favor compruebe el log de errores para conocer más detalles" msgid "The full name for this person, group or other type of principal." msgstr "El nombre completo de esta persona, grupo, u otro tipo de Principal" msgid "The full name must not be blank." msgstr "El nombre completo no puede estar en blanco." msgid "The name this user can log into the system with." msgstr "El nombre con el que este usuario accederá el sistema." msgid "The path on the server where your .ics files are." msgstr "La ruta en el servidor donde están los ficheros .ics." msgid "The preferred language for this person." msgstr "El idioma preferido de esta persona." #, php-format msgid "The principal \"%s\" does not exist" msgstr "El Principal %s no existe" msgid "The style of dates used for this person." msgstr "El formato de fecha usado por esta persona." msgid "The user's e-mail address." msgstr "El correo electrónico del usuario." msgid "The user's full name." msgstr "El nombre completo del usuario." msgid "The user's password for logging in." msgstr "La contraseña del usuario para acceder al sistema." msgid "The username must not be blank, and may not contain a slash" msgstr "El nombre de usuario no puede estar vacío, y no debe contener barras inclinadas." msgid "There was an error reading from the database." msgstr "Ocurrió un error al leer la base de datos." msgid "There was an error writing to the database." msgstr "Ocurrió un error al escribir en la base de datos." msgid "" "This operation does the following:

  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Esta operación hace lo siguiente:
  • comprobar los grupos válidos en LDAP
  • comprobar los grupos en DAViCal
, tras esto:
  • si un grupo está en DAViCal pero no en LDAP, marcarlo como inactivo
  • si un grupo está en LDAP pero no en DAViCal, crearlo en DAViCal
  • si está en ambos, actualizar la información en DAViCal
" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Esta operación hace lo siguiente:
  • comprobar los usuarios válidos en LDAP
  • comprobar los usuarios en DAViCal
, tras esto:
  • si un usuario está en DAViCal pero no en LDAP, marcarlo como inactivo
  • si un usuario está en LDAP pero no en DAViCal, crearlo en DAViCal
  • si está en ambos, actualizar la información en DAViCal
" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "Esta página comprueba si el entorno es el necesario para que DAViCal funcione correctamente. Las sugerencias y los parches para hacerla más útil son bienvenidos." msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "Este proceso importará de un directorio cada fichero \"usuario.ics\", creando un usuario con el nombre indicado y un calendario, uno por cada fichero encontrado." msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "Este servidor sólo soporta el formato text/calendar para URLs freebusy" msgid "Ticket ID" msgstr "ID del ticket" msgid "Time" msgstr "Tiempo" msgid "To Collection" msgstr "A la colección" msgid "To ID" msgstr "Al ID" msgid "Toggle all privileges" msgstr "Invertir todos los permisos" msgid "Tools" msgstr "Herramientas" msgid "Transparent" msgstr "Transparente" msgid "URL" msgstr "URL" msgid "US Format" msgstr "Formato EEUU" msgid "Unauthenticated User" msgstr "Usuario no autenticado" msgid "United States of America (m/d/y)" msgstr "Estados Unidos de Norteamérica (m/d/y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Actualizar" msgid "Updated" msgstr "Actualizado" msgid "Updating Collection record." msgstr "Actualizando el registro de la colección." msgid "Updating Member of this Group Principal" msgstr "Actualizando un miembro de este grupo" msgid "Updating Principal record." msgstr "Actualizando el registro del Principal" msgid "Updating grants by this Principal" msgstr "Actualizando los permisos desde este Principal" msgid "Upgrade DAViCal database schema" msgstr "Actualizar el esquema de la base de datos de DAViCal" msgid "Upgrade Database" msgstr "Actualizar la base de datos" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "Principals de tipo usuario" msgid "User Details" msgstr "Detalles del usuario" msgid "User Functions" msgstr "Funciones sobre usuarios" msgid "User Name" msgstr "Nombre del usuario" msgid "User Roles" msgstr "Roles del usuario" msgid "User is active" msgstr "El usuario está activo" msgid "User record written." msgstr "Registro del usuario guardado." msgid "Username" msgstr "Nombre de usuario" msgid "View My Details" msgstr "Ver mis detalles" msgid "View my own principal record" msgstr "Ver el registro de mi propio Principal'" msgid "View this user record" msgstr "Ver el registro de este usuario" msgid "Visit the DAViCal Wiki" msgstr "Visitar el Wiki de DAViCal" #, php-format msgid "Want: %s, Currently: %s" msgstr "Quiere: %s, Actualmente: %s" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "Precaución: ¡No hay usuarios con privilegios de administración activos! Debe reparar esto antes de salir. Plantéese utilizar el parámetro $c->do_not_sync_from_ldap en la configuración." msgid "When the user's e-mail account was validated." msgstr "Cuando la dirección de correo electrónico del usuario fue validada." msgid "Write" msgstr "Escribir" msgid "Write ACLs for a resource or collection" msgstr "Escribir ACLs para un recurso o colección" msgid "Write Access Controls" msgstr "Escribir controles de acceso" msgid "Write Data" msgstr "Escribir datos" msgid "Write Metadata" msgstr "Escribir meta-datos" msgid "Write content" msgstr "Escribir contenido" msgid "Write properties" msgstr "Escribir propiedades" msgid "Yes" msgstr "Sí" msgid "You are editing" msgstr "Está editando" msgid "You are not authorised to use this function." msgstr "No está autorizado a usar esta función." msgid "You are viewing" msgstr "Está viendo" msgid "You do not have permission to modify this record." msgstr "No tiene permiso para modificar este registro." msgid "You may not PUT to a collection URL" msgstr "No puede usar PUT sobre la URL de una colección" msgid "You must log in to use this system." msgstr "Debe autenticarse para utilizar el sistema" msgid "Your configuration produced PHP errors which should be corrected" msgstr "Su configuración produjo errores de PHP que deberían ser corregidos" msgid "calendar-timezone property is only valid for a calendar." msgstr "La propiedad calendar-timezone sólo es válida en calendarios." #, php-format msgid "directory %s is not readable" msgstr "no se puede leer el directorio %s" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "drivers_imap_pam : el parámetro imap_url parámetro no está configurado en /etc/davical/*-conf.php" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap : no se pudo usar TLS: ldap_start_tls() falló" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap : falló el bind en el host %1$s por el puerto %2$s con DN %3$s" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap : no se pudo usar LDAP versión 3, el uso de TLS no está soportado" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap : no se pudo hacer bind en LDAP - compruebe la configuración de los parámetros bindDN y passDN, y asegúrese de que su servidor LDAP es accesible." #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap : no se pudo conectar a LDAP por el puerto %s en el host %s" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap : la función ldap_connect no existe; compruebe que tiene instalado el módulo php_ldap" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "drivers_pwauth_pam : no se encontró el fichero %s" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam : no se encontró el fichero %s" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "recuérdame" msgid "from principal" msgstr "del Principal" msgid "iSchedule Domains" msgstr "Dominios para iSchedule" msgid "invalid request" msgstr "petición inválida" msgid "path to store your ics" msgstr "ruta para almacenar sus ics" msgid "recipient must be organizer or attendee of event" msgstr "el receptor debe ser organizador o asistente al evento" msgid "sender must be organizer or attendee of event" msgstr "el remitente debe ser organizador o asistente al evento" msgid "unauthenticated" msgstr "no autenticado" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "deberá autenticarse con el nombre de usuario y contraseña que se le comunicaron." davical-1.1.1/po/nl.values0000644000000000000000000000006211633117640012253 0ustar VALUES( 'nl', 'Netherlands', 'Nederlands' ); davical-1.1.1/po/pl.values0000644000000000000000000000005111633117640012253 0ustar VALUES( 'pl', 'Polish', 'Polski' ); davical-1.1.1/po/sv.po0000644000000000000000000007535011767336605011441 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "" msgid "*** Default Locale ***" msgstr "" msgid "*** Unknown ***" msgstr "" #, php-format msgid "- adding %s to group : %s" msgstr "" #, php-format msgid "- adding users %s to group : %s" msgstr "" #, php-format msgid "- creating groups : %s" msgstr "" #, php-format msgid "- creating record for users : %s" msgstr "- skapar poster för användare : %s" #, php-format msgid "- deactivate groups : %s" msgstr "" #, php-format msgid "- deactivating users : %s" msgstr "- inaktiverar användare : %s" #, php-format msgid "- nothing done on : %s" msgstr "- inget utfört på : %s" #, php-format msgid "- removing %s from group : %s" msgstr "" #, php-format msgid "- updating groups : %s" msgstr "" #, php-format msgid "- updating user records : %s" msgstr "- uppdaterar användarposter : %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "Varning: alla händelser i denna sökväg kommer att raderas innan ics-filen läggs till" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Var god logga in

För att få tillgång till %s behöver du logga in med det användarnamn och lösenord som tilldelats dig.

För att begära ett konto, skicka e-post till %s.

" msgid "A DAViCal principal collection may only contain collections" msgstr "" msgid "A collection already exists at that location." msgstr "En samling finns redan på denna plats." msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "" msgid "AWL Library version " msgstr "" msgid "Access Tickets" msgstr "" msgid "Access ticket deleted" msgstr "" msgid "Action" msgstr "Aktivitet" msgid "Active" msgstr "Aktiv" msgid "Adding new member to this Group Principal" msgstr "Lägger till my medlem till detta gruppkonto" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Administratör" msgid "Administration" msgstr "Administration" msgid "Administrator" msgstr "" msgid "All" msgstr "Alla" msgid "All collection data will be unrecoverably deleted." msgstr "All data för samlingen kommer att raderas oåterkallerligen." #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "" msgid "All privileges" msgstr "" msgid "All requested changes were made." msgstr "Alla begärda ändringar har utförts." msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "" msgid "Anonymous users are not allowed to modify calendars" msgstr "Anonyma användare har inte rättighet att ändra kalendrar" msgid "Anonymous users may only access public calendars" msgstr "Anonyma användare har bara åtkomst till publika kalendrar" msgid "Append" msgstr "" msgid "Application DB User" msgstr "" msgid "Apply Changes" msgstr "" msgid "Apply DB Patches" msgstr "" msgid "Attachment" msgstr "" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "" msgid "Bindings to other collections" msgstr "" msgid "Bindings to this Collection" msgstr "" msgid "Bindings to this Principal's Collections" msgstr "" msgid "Body contains no XML data!" msgstr "" msgid "Bound As" msgstr "" msgid "Browse all users" msgstr "Se över alla användare" msgid "Busy" msgstr "Upptagen" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "" msgid "Calendar Principals" msgstr "Kalenderkonton" msgid "Calendar Timezone" msgstr "Kalender-tidszon" msgid "Can only add tickets for existing collection paths which you own" msgstr "" msgid "Categories" msgstr "" msgid "Change Password" msgstr "Ändra lösenord" msgid "Click to display user details" msgstr "Klicka för att visa användardetaljer" msgid "Click to edit principal details" msgstr "Klicka flr att visa kontodetaljer" msgid "Collection" msgstr "Samling" msgid "Collection Grants" msgstr "Samlingens rättigheter" msgid "Collection ID" msgstr "Samlingens ID" msgid "Collection deleted" msgstr "Samlingen raderad" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "" msgid "Configuring Calendar Clients for DAViCal" msgstr "" msgid "Configuring DAViCal" msgstr "" msgid "Confirm" msgstr "Bekräfta" msgid "Confirm Deletion of the Binding" msgstr "" msgid "Confirm Deletion of the Collection" msgstr "Bekräfta radering av samlingen" msgid "Confirm Deletion of the Principal" msgstr "" msgid "Confirm Deletion of the Ticket" msgstr "" msgid "Confirm Password" msgstr "" msgid "Confirm the new password." msgstr "Bekräfta det nya lösenordet" msgid "Could not retrieve" msgstr "" msgid "Create" msgstr "Skapa" msgid "Create Collection" msgstr "" msgid "Create Events/Collections" msgstr "Skapa händelse/samling" msgid "Create New Collection" msgstr "Skapa ny samling" msgid "Create New Principal" msgstr "Skapa nytt konto" msgid "Create Principal" msgstr "Skapa konto" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Skapa nytt konto (dvs nya användare, resursd, eller grupp" msgid "Create a resource or collection" msgstr "" msgid "Creating new Collection." msgstr "" msgid "Creating new Principal record." msgstr "" msgid "Creating new ticket granting privileges to this Principal" msgstr "" msgid "Current DAViCal version " msgstr "" msgid "DAV Path" msgstr "DAV-sökväg" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "" msgid "DAViCal CalDAV Server" msgstr "DAViCal CalDAV Server" msgid "DAViCal DB Schema version " msgstr "" msgid "DAViCal Homepage" msgstr "DAViCal Startsida" msgid "DAViCal Wiki" msgstr "DAViCal Wiki" msgid "DAViCal only allows BIND requests for collections at present." msgstr "" msgid "DKIM signature missing" msgstr "" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "" msgid "Database Error" msgstr "Databasfel" msgid "Database Host" msgstr "" msgid "Database Name" msgstr "" msgid "Database Owner" msgstr "" msgid "Database Password" msgstr "" msgid "Database Port" msgstr "" msgid "Database Username" msgstr "" msgid "Database error" msgstr "Databasfel" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Stil på datumformat" msgid "Date Style" msgstr "Datumformat" msgid "Default Privileges" msgstr "Standardrättigheter" msgid "Default relationships added." msgstr "" msgid "Delete" msgstr "Radera" msgid "Delete Events/Collections" msgstr "Radera händelser/samlingar" msgid "Delete Principal" msgstr "" msgid "Delete a resource or collection" msgstr "" msgid "Deleted a grant from this Principal" msgstr "Raderade en rättighet från detta konto" msgid "Deleting Binding:" msgstr "" msgid "Deleting Collection:" msgstr "Raderar samling:" msgid "Deleting Principal:" msgstr "" msgid "Deleting Ticket:" msgstr "" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "" msgid "Dependencies" msgstr "" msgid "Dependency" msgstr "" msgid "Description" msgstr "Beskrivning" msgid "Destination collection does not exist" msgstr "" msgid "Directory on the server" msgstr "Serverns katalog" msgid "Display Name" msgstr "Visningsnamn" msgid "Displayname" msgstr "Visningsnamn" msgid "Does the user have the right to perform this role?" msgstr "Har användaren rättighet att utföra denna roll?" msgid "Domain" msgstr "" msgid "EMail" msgstr "E-post" msgid "EMail OK" msgstr "E-post OK" msgid "ERROR: The full name may not be blank." msgstr "FEL: Det fullständiga namnet kan inte lämnas tomt." msgid "ERROR: The new password must match the confirmed password." msgstr "" msgid "ERROR: There was a database error writing the roles information!" msgstr "FEL: Ett databasfel uppstod när rollinformationen skulle sparas!" msgid "Edit" msgstr "" msgid "Edit this user record" msgstr "Ändra denna användarpost" msgid "Email Address" msgstr "E-postadress" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Mata in ett användarnamn, om du känner till det, för att erhålla e-post med ett engångslösenord" msgid "Enter your username and password then click here to log in." msgstr "Mata in ditt användarnamn och lösenord och klicka sedan här för att logga in." #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Feltyp NoUserFound med filter >%s<, attribut >%s< och dn >%s<" msgid "Error querying database." msgstr "Fel vid databasförfrågan." msgid "Error writing calendar details to database." msgstr "Fel vid sparande av kalenderdetaljer till databasen." msgid "Error writing calendar properties to database." msgstr "" msgid "European" msgstr "" msgid "European (d/m/y)" msgstr "Europeisk (dd/mm/åååå)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "Befintlig resurs matchar inte \"If-Match\"-header - ej accepterad." msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "Befintlig resurs matchar \"If-None-Match\"-header - ej accepterad." msgid "Expires" msgstr "" msgid "External Calendars" msgstr "" msgid "External Url" msgstr "" msgid "Fail" msgstr "" msgid "Failed to write collection." msgstr "" msgid "Feeds are only supported for calendars at present." msgstr "" msgid "For access to the" msgstr "För tillgång till" msgid "Forbidden" msgstr "Förbjuden" msgid "Free/Busy" msgstr "" msgid "Full Name" msgstr "Fullständigt namn" msgid "Fullname" msgstr "Fullständigt namn" msgid "GET requests on collections are only supported for calendars." msgstr "" msgid "GNU gettext support" msgstr "" msgid "GO!" msgstr "KÖR!" msgid "Go to the DAViCal Feature Requests" msgstr "Gå till DAViCal lista över funktionsförbättringar" msgid "Grant" msgstr "" msgid "Granting new privileges from this Principal" msgstr "Tillåter ny privilegier från detta konto" #. Translators: in the sense of a group of people msgid "Group" msgstr "Grupp" msgid "Group Members" msgstr "Gruppmedlemmar" msgid "Group Memberships" msgstr "Gruppmedlemskap" msgid "Group Principals" msgstr "Gruppkonton" msgid "Has Members" msgstr "Har medlemmar" msgid "Help" msgstr "Hjälp" msgid "Help on the current screen" msgstr "Hjälp för aktuellt fönster" msgid "Help! I've forgotten my password!" msgstr "Hjällp! Jag har glömt mitt lösenord!" msgid "Home" msgstr "Hem" msgid "Home " msgstr "" msgid "Home Page" msgstr "Startsida" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "" msgid "ISO Format (YYYY-MM-DD)" msgstr "ISO Format (ÅÅÅÅ-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "Om du har glömt ditt lösenord så" msgid "If you would like to request access, please e-mail" msgstr "Om du vill begära åtkomst, skicka e-post till" msgid "Import all .ics files of a directory" msgstr "Importera alla .ics-filer från en katalog" msgid "Import calendars and Synchronise LDAP." msgstr "" msgid "Inactive Principals" msgstr "" msgid "Incorrect content type for addressbook: " msgstr "" msgid "Incorrect content type for calendar: " msgstr "" msgid "Invalid user name or password." msgstr "Ogiltigt användarnamn eller lösenord." msgid "Invalid username or password." msgstr "Ogiltigt användarnamn eller lösenord." msgid "Is Member of" msgstr "Är medlem av" msgid "Is a Calendar" msgstr "Är en kalender" msgid "Is an Addressbook" msgstr "Är en adressbok" msgid "Is this user active?" msgstr "Är denna användare aktiv?" msgid "Items in Collection" msgstr "" msgid "Joined" msgstr "Inlagd" msgid "Language" msgstr "Språk" msgid "Last used" msgstr "Senast använd" msgid "List External Calendars" msgstr "" msgid "List Groups" msgstr "Lista grupper" msgid "List Resources" msgstr "Lista resurser" msgid "List Users" msgstr "Lista användare" msgid "Load From File" msgstr "" msgid "Locale" msgstr "" msgid "Location" msgstr "" msgid "Log On Please" msgstr "Var god logga in" msgid "Log out of DAViCal" msgstr "Logga ur DAViCal" msgid "Logout" msgstr "Logga ur" msgid "Member deleted from this Group Principal" msgstr "Medlem borttagen från detta gruppkonto" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "" msgid "Name" msgstr "Namn" msgid "New Collection" msgstr "Ny samling" msgid "New Password" msgstr "Nytt lösenord" msgid "New Principal" msgstr "" #. Translators: not 'Yes' msgid "No" msgstr "" msgid "No calendar content" msgstr "Inget kalenderinnehåll" msgid "No collection found at that location." msgstr "Ingen samling funnen på denna plats." msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "" #. Translators: short for 'Number' msgid "No." msgstr "Nr." msgid "No. of Collections" msgstr "" msgid "No. of Principals" msgstr "" msgid "No. of Resources" msgstr "" msgid "Not overwriting existing destination resource" msgstr "Skriver ej över befintlig resursdestination" msgid "Opaque" msgstr "Ej transparent" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "Bryt upp ett lås" msgid "PDO PostgreSQL drivers" msgstr "" msgid "PHP DateTime class" msgstr "" msgid "PHP LDAP module available" msgstr "" msgid "PHP Magic Quotes GPC off" msgstr "" msgid "PHP Magic Quotes runtime off" msgstr "" msgid "PHP PDO module available" msgstr "" msgid "PHP calendar extension available" msgstr "" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "" msgid "PHP not using Apache Filter mode" msgstr "" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "" msgid "Passed" msgstr "" msgid "Password" msgstr "Lösenord" msgid "Path" msgstr "Sökväg" msgid "Person" msgstr "" msgid "Please confirm deletion of access ticket - see below" msgstr "" msgid "Please confirm deletion of binding - see below" msgstr "" msgid "Please confirm deletion of collection - see below" msgstr "Vänligen bekräfta radering av samling - se nedan" msgid "Please confirm deletion of the principal" msgstr "" msgid "Please note the time and advise the administrator of your system." msgstr "Vänligen notera tidpunkten och konsultera systemadministratören." msgid "Principal" msgstr "Konto" msgid "Principal Collections" msgstr "Kontosamlingar" msgid "Principal Grants" msgstr "Kontorättigheter" msgid "Principal ID" msgstr "Konto-ID" msgid "Principal Type" msgstr "Kontotyp" msgid "Principal deleted" msgstr "" msgid "Privileges" msgstr "Rättigheter" msgid "Privileges granted to All Users" msgstr "" msgid "Privileges to allow delivery of scheduling messages" msgstr "" msgid "Privileges to delegate scheduling decisions" msgstr "" msgid "Property is read-only" msgstr "Egenskapen är enbart läsbar" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Publik" msgid "Publicly Readable" msgstr "Publikt läsbar" msgid "REPORT body contains no XML data!" msgstr "REPORT Body innehåller inga XML-data!" msgid "REPORT body is not valid XML data!" msgstr "REPORT Body är inte giltig XML-data!" msgid "Read" msgstr "Läs" msgid "Read ACLs for a resource or collection" msgstr "" msgid "Read Access Controls" msgstr "Inställningar för läsrättigheter" msgid "Read Current User's Access" msgstr "Läs in nuvarande användares rättigheter" msgid "Read Free/Busy Information" msgstr "Läs in tillgänglighetsinformation" msgid "Read the content of a resource or collection" msgstr "" msgid "" "Read the details of the current user's access control to this resource." msgstr "" msgid "Read the free/busy information for a calendar collection" msgstr "" msgid "Read/Write" msgstr "" msgid "References" msgstr "" msgid "Remove" msgstr "" msgid "Remove a lock" msgstr "" msgid "Remove dangling external calendars" msgstr "" msgid "Report Bug" msgstr "Rapportera fel" msgid "Report a bug in the system" msgstr "Rapportera fel i systemet" msgid "Request Feature" msgstr "Begär funktionsförbättring" msgid "Request body is not valid XML data!" msgstr "" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Resurs" msgid "Resource Calendar Principals" msgstr "Resurskalender-konto" msgid "Resource Not Found." msgstr "" msgid "Resource has changed on server - not deleted" msgstr "Resurs har ändrats på servern - ej raderad" msgid "Resources may not be changed to / from collections." msgstr "Resurs kan inte ändras till / från samlingar." msgid "Revoke" msgstr "" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "" msgid "Schedule Send" msgstr "" msgid "Schedule Transparency" msgstr "Bokningstransparens" msgid "Scheduling: Deliver a Reply" msgstr "Bokning: leverera ett svar" msgid "Scheduling: Deliver an Invitation" msgstr "Bokning: leverera en inbjudan" msgid "Scheduling: Delivery" msgstr "" msgid "Scheduling: Query free/busy" msgstr "Bokning: hämta tillgänglighet" msgid "Scheduling: Send a Reply" msgstr "Bokning: skicka ett svar" msgid "Scheduling: Send an Invitation" msgstr "Bokning: sicka en inbjudan" msgid "Scheduling: Send free/busy" msgstr "Bokning: skicka tillgänglighet" msgid "Scheduling: Sending" msgstr "" msgid "Send free/busy enquiries" msgstr "" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "" msgid "Set free/busy privileges" msgstr "" msgid "Set read privileges" msgstr "" msgid "Set read+write privileges" msgstr "" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "" msgid "Setup" msgstr "Konfigurera" msgid "Setup DAViCal" msgstr "Konfigurera DAViCal" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Visa hjälp för" msgid "Site Statistics" msgstr "" msgid "Site Statistics require the database to be available!" msgstr "" msgid "Some properties were not able to be changed." msgstr "Vissa egenskaper kunde inte ändras." msgid "Some properties were not able to be set." msgstr "Vissa egenskaper kunde inte ställas in." msgid "Source resource does not exist." msgstr "Källresursen existerar inte." msgid "" "Special collections may not contain a calendar or other special collection." msgstr "Speciella samlingar får inte innehålla en kalender eller en annan speciell samling." msgid "Specific Privileges" msgstr "" msgid "Status" msgstr "" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "Status: %d, Meddelande: %s, Användare: %d, Sökväg: %s" msgid "Submit" msgstr "Skicka" msgid "Suhosin \"server.strip\" disabled" msgstr "" msgid "Sync LDAP Groups with DAViCal" msgstr "" msgid "Sync LDAP with DAViCal" msgstr "" msgid "Target" msgstr "" msgid "That destination name contains invalid characters." msgstr "" msgid "That resource is not present on this server." msgstr "Denna resulrs finns inte på denna server." msgid "The BIND Request MUST identify an existing resource." msgstr "" msgid "The BIND Request-URI MUST identify a collection." msgstr "" msgid "The BIND method is not allowed at that location." msgstr "" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "" msgid "The DAViCal Home Page" msgstr "DAViCals hemsida" msgid "The access ticket will be deleted." msgstr "" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "" msgid "The application failed to understand that request." msgstr "" msgid "The application program does not understand that request." msgstr "Användarprogrammet förstår inte denna begäran." msgid "The binding will be deleted." msgstr "" msgid "The calendar path contains illegal characters." msgstr "Kalendersökvägen inehåller otillåtna tecken." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "" msgid "The collection name may not be blank." msgstr "" msgid "The destination collection does not exist" msgstr "" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "" msgid "The email address really should not be blank." msgstr "" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "Filen är inte teckenkodad i UTF-8, var god kontrollera felet för fler detaljer." msgid "The full name for this person, group or other type of principal." msgstr "" msgid "The full name must not be blank." msgstr "" msgid "The name this user can log into the system with." msgstr "Name mit dem sich dieser Benutzer beim System anmelden kann." msgid "The path on the server where your .ics files are." msgstr "sökvägen på servern där dina .ics ligger." msgid "The preferred language for this person." msgstr "Det föredragna språket för dena person." #, php-format msgid "The principal \"%s\" does not exist" msgstr "" msgid "The style of dates used for this person." msgstr "Datumformatet för denna person." msgid "The user's e-mail address." msgstr "Användarens e-postadress." msgid "The user's full name." msgstr "Användarens fulla namn." msgid "The user's password for logging in." msgstr "Användarens lösenord för inloggning." msgid "The username must not be blank, and may not contain a slash" msgstr "" msgid "There was an error reading from the database." msgstr "" msgid "There was an error writing to the database." msgstr "Det uppstöd ett fel vid skrivning till databasen." msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "" msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "" msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "" msgid "Ticket ID" msgstr "" msgid "Time" msgstr "" msgid "To Collection" msgstr "" msgid "To ID" msgstr "Till ID" msgid "Toggle all privileges" msgstr "" msgid "Tools" msgstr "" msgid "Transparent" msgstr "Transparens" msgid "URL" msgstr "" msgid "US Format" msgstr "" msgid "Unauthenticated User" msgstr "" msgid "United States of America (m/d/y)" msgstr "U.S.A. (m/d/y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Uppdatera" msgid "Updated" msgstr "Uppdaterad" msgid "Updating Collection record." msgstr "" msgid "Updating Member of this Group Principal" msgstr "Uppdaterar medlem fr detta gruppkonto" msgid "Updating Principal record." msgstr "" msgid "Updating grants by this Principal" msgstr "Uppdaterar rättigheter givna av detta konto" msgid "Upgrade DAViCal database schema" msgstr "Uppgradera DAViCals databasschema" msgid "Upgrade Database" msgstr "Uppgradera databas" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "Användarkalenderkonton" msgid "User Details" msgstr "Användardetaljer" msgid "User Functions" msgstr "Användarfunktioner" msgid "User Name" msgstr "Användarnamn" msgid "User Roles" msgstr "Användarroller" msgid "User is active" msgstr "Användaren är aktiv" msgid "User record written." msgstr "Användarpost skriven." msgid "Username" msgstr "Användarnamn" msgid "View My Details" msgstr "Visa mina detaljer" msgid "View my own principal record" msgstr "Visa min egen kontopost" msgid "View this user record" msgstr "Visa denna användares kontopost" msgid "Visit the DAViCal Wiki" msgstr "Gå till DAViCals Wiki" #, php-format msgid "Want: %s, Currently: %s" msgstr "" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "" msgid "When the user's e-mail account was validated." msgstr "När användarens e-postadress validerades." msgid "Write" msgstr "Spara" msgid "Write ACLs for a resource or collection" msgstr "" msgid "Write Access Controls" msgstr "Inställningar för skrivrättigheter" msgid "Write Data" msgstr "Spara data" msgid "Write Metadata" msgstr "Spara metadata" msgid "Write content" msgstr "" msgid "Write properties" msgstr "" msgid "Yes" msgstr "" msgid "You are editing" msgstr "Du editerar" msgid "You are not authorised to use this function." msgstr "Du har inte rättigheter att använda denna funktion." msgid "You are viewing" msgstr "Du inspekterar" msgid "You do not have permission to modify this record." msgstr "" msgid "You may not PUT to a collection URL" msgstr "" msgid "You must log in to use this system." msgstr "Du måste logga in för att använda detta system." msgid "Your configuration produced PHP errors which should be corrected" msgstr "" msgid "calendar-timezone property is only valid for a calendar." msgstr "" #, php-format msgid "directory %s is not readable" msgstr "mappen %s är inte åtkomlig" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap : Could not start TLS: ldap_start_tls() failed" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not supported" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN and passDN, and that your LDAP server is reachable" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap : function ldap_connect not defined, check your php_ldap module" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam : Unable to find %s file" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "Kom ihåg mig" msgid "from principal" msgstr "" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "sökväg för att spara din .ics" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "du behöver logga in med det användarnamn och lösenord du erhållit." davical-1.1.1/po/de.values0000644000000000000000000000005211633117640012231 0ustar VALUES( 'de', 'German', 'Deutsch' ); davical-1.1.1/po/fr.values0000644000000000000000000000005411633117640012252 0ustar VALUES( 'fr', 'French', 'Français' ); davical-1.1.1/po/nl.po0000644000000000000000000012070011767336605011410 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrew McMillan , 2011. # , 2011, 2012. msgid "" msgstr "" "Project-Id-Version: DAViCal\n" "Report-Msgid-Bugs-To: http://repo.or.cz/w/davical.git/tree/HEAD:/issues\n" "POT-Creation-Date: 2012-05-28 21:24+1200\n" "PO-Revision-Date: 2012-05-28 09:26+0000\n" "Last-Translator: Andrew McMillan \n" "Language-Team: Dutch (http://www.transifex.net/projects/p/davical/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #. Translators: this is the formatting of a date with time. See #. http://php.net/manual/en/function.strftime.php msgid "%F %T" msgstr "%F%T" #. Translators: his is the formatting of just the time. See #. http://php.net/manual/en/function.strftime.php msgid "%T" msgstr "%T" msgid "*** Default Locale ***" msgstr "*** Standaard Landinstellingen ***" msgid "*** Unknown ***" msgstr "*** Onbekend ***" #, php-format msgid "- adding %s to group : %s" msgstr "- toevoegen van %s aan groep: %s" #, php-format msgid "- adding users %s to group : %s" msgstr "- toevoegen van gebruikers %s aan groep: %s" #, php-format msgid "- creating groups : %s" msgstr "- aanmaken van groepen: %s" #, php-format msgid "- creating record for users : %s" msgstr "- aanmaken van gebruikers: %s" #, php-format msgid "- deactivate groups : %s" msgstr "- groepen: %s uitschakelen" #, php-format msgid "- deactivating users : %s" msgstr "- gebruikers: %s uitschakelen" #, php-format msgid "- nothing done on : %s" msgstr "- ongewijzigd: %s" #, php-format msgid "- removing %s from group : %s" msgstr "- verwijderen van %s uit de groep: %s" #, php-format msgid "- updating groups : %s" msgstr "- bijwerken van groepen: %s" #, php-format msgid "- updating user records : %s" msgstr "- wijzigen van gebruikers: %s" msgid "" "WARNING: all events in this path will be deleted before inserting allof " "the ics file" msgstr "OPGELET: Alle afspraken in deze map zullen verwijderd worden vooraleer het ics-bestand wordt ingevoegd" #, php-format msgid "" "

Help

\n" "

For initial help you should visit the DAViCal Home Page or take\n" "a look at the DAViCal Wiki.

\n" "

If you can't find the answers there, visit us on IRC in\n" "the #davical channel on irc.oftc.net,\n" "or send a question to the DAViCal Users mailing list.

\n" "

The mailing list\n" "archives can be helpful too.

" msgstr "

Help

Voor de eerste hulp kunt u terecht op deDAViCal Home Page of neem een kijkje op de DAViCal Wiki .

Als u daar de antwoorden niet kan vinden, bezoek ons op IRC in het #davical kanaal op irc.oftc.net , of stuur een vraag aan de DAViCal Gebruikers mailing list.

Demailing list archieven kunnen ook nuttig zijn.

" #, php-format msgid "" "

Log On Please

For access to the %s you should log on withthe " "username and password that have been issued to you.

If you would like " "to request access, please e-mail %s.

" msgstr "

Meld u alstublieft aan

Om toegang te krijgen tot de %s moet u zich aanmelden met de gebruikersnaam en het wachtwoord dat u heeft gekregen.

Om toegang aan te vragen, dient u %s te contacteren.

" msgid "A DAViCal principal collection may only contain collections" msgstr "Een DAViCal principaalcollectie kan alleen collecties bevatten" msgid "A collection already exists at that location." msgstr "Er bestaat reeds een collectie op die locatie" msgid "A collection may not be both a calendar and an addressbook." msgstr "" msgid "A resource already exists at the destination." msgstr "Er bestaat reeds een bron op die bestemming." msgid "AWL Library version " msgstr "AWL Library versie" msgid "Access Tickets" msgstr "Toegang Tickets" msgid "Access ticket deleted" msgstr "Toegang ticket verwijderd" msgid "Action" msgstr "Actie" msgid "Active" msgstr "Actief" msgid "Adding new member to this Group Principal" msgstr "Een nieuw lid toevoegen aan deze Groep Principaal" #. Translators: in the sense of 'systems admin' msgid "Admin" msgstr "Beheer" msgid "Administration" msgstr "Beheer" msgid "Administrator" msgstr "Beheerder" msgid "All" msgstr "Alle" msgid "All collection data will be unrecoverably deleted." msgstr "Alle gegevens van de collectie worden onherroepelijk verwijderd." #, php-format msgid "All events of user \"%s\" were deleted and replaced by those from file %s" msgstr "Alle afspraken van gebruiker \"%s\" werden verwijderd en vervangen door die van bestand %s" msgid "" "All of the principal's calendars and events will be unrecoverably deleted." msgstr "Alle agenda's en afspraken van de Principaal worden onherroepelijk verwijderd." msgid "All privileges" msgstr "Alle bevoegdheden" msgid "All requested changes were made." msgstr "De gevraagde wijzigingen werden doorgevoerd" msgid "" "Allow free/busy enquiries targeted at the owner of this scheduling inbox" msgstr "Laat Vrij/Bezet-queries gericht aan de eigenaar van deze planning inbox toe" msgid "An \"Administrator\" user has full rights to the whole DAViCal System" msgstr "Een \"Beheerder\" heeft alle bevoegdheden in een DAViCal Systeem" msgid "Anonymous users are not allowed to modify calendars" msgstr "Anonieme gebruikers kunnen geen agenda's bewerken" msgid "Anonymous users may only access public calendars" msgstr "Anonieme gebruikers hebben enkel toegang tot openbare agenda's" msgid "Append" msgstr "" msgid "Application DB User" msgstr "'Application DB' gebruiker" msgid "Apply Changes" msgstr "Wijzigingen toepassen" msgid "Apply DB Patches" msgstr "DB patches toepassen" msgid "Attachment" msgstr "Bijlage" msgid "Authentication server unavailable." msgstr "" msgid "Binding deleted" msgstr "Associatie verwijderd" msgid "Bindings to other collections" msgstr "Associaties met andere collecties" msgid "Bindings to this Collection" msgstr "Associaties met deze Collectie" msgid "Bindings to this Principal's Collections" msgstr "Associaties met de Collecties van deze Principaal" msgid "Body contains no XML data!" msgstr "Body bevat geen XML data!" msgid "Bound As" msgstr "Geassocieerd als" msgid "Browse all users" msgstr "Blader door alle gebruikers" msgid "Busy" msgstr "Bezet" #, php-format msgid "Calendar \"%s\" was loaded from file." msgstr "Agenda \"%s\" werd ingeladen van bestand." msgid "Calendar Principals" msgstr "Agenda Principalen" msgid "Calendar Timezone" msgstr "Tijdzone van Agenda" msgid "Can only add tickets for existing collection paths which you own" msgstr "Kan enkel tickets toevoegen voor uw reeds bestaande, collecties" msgid "Categories" msgstr "Categorieën" msgid "Change Password" msgstr "Wijzig wachtwoord" msgid "Click to display user details" msgstr "Klik om de gebruikersgegevens weer te geven" msgid "Click to edit principal details" msgstr "Klik om de Principaalgegevens te bewerken" msgid "Collection" msgstr "Collectie" msgid "Collection Grants" msgstr "Toekenningen van de Collectie" msgid "Collection ID" msgstr "ID van de Collectie" msgid "Collection deleted" msgstr "Collectie verwijderd" msgid "" "Collections may not be both CalDAV calendars and CardDAV addressbooks at the" " same time" msgstr "Collecties kunnen niet terzelfdertijd CalDAV agenda's en CardDAV adresboeken zijn" msgid "Configuring Calendar Clients for DAViCal" msgstr "Agenda applicaties instellen voor DAViCal" msgid "Configuring DAViCal" msgstr "DAViCal instellen" msgid "Confirm" msgstr "Bevestig" msgid "Confirm Deletion of the Binding" msgstr "Bevestig het verwijderen van de Associatie" msgid "Confirm Deletion of the Collection" msgstr "Bevestig het verwijderen van de Collectie" msgid "Confirm Deletion of the Principal" msgstr "Bevestig het verwijderen van de Principaal" msgid "Confirm Deletion of the Ticket" msgstr "Bevestig het verwijderen van het Ticket" msgid "Confirm Password" msgstr "Bevestig het wachtwoord" msgid "Confirm the new password." msgstr "Bevestig het nieuwe wachtwoord." msgid "Could not retrieve" msgstr "Kon gegevens niet ophalen" msgid "Create" msgstr "Maak" msgid "Create Collection" msgstr "Maak Collectie aan" msgid "Create Events/Collections" msgstr "Maak Afspraken/Collecties aan" msgid "Create New Collection" msgstr "Maak nieuwe Collectie aan" msgid "Create New Principal" msgstr "Maak nieuwe Principaal aan" msgid "Create Principal" msgstr "Maak Principaal aan" msgid "Create a new principal (i.e. a new user, resource or group)" msgstr "Maak nieuwe Principaal aan (d.i. een nieuwe gebruiker, bron of groep)" msgid "Create a resource or collection" msgstr "Maak een Bron of Collectie aan" msgid "Creating new Collection." msgstr "Nieuwe Collectie aanmaken" msgid "Creating new Principal record." msgstr "Nieuwe Principaal aanmaken" msgid "Creating new ticket granting privileges to this Principal" msgstr "Nieuw Ticket aanmaken dat bevoegdheden toekent aan deze Principaal" msgid "Current DAViCal version " msgstr "Huidige DAViCal versie" msgid "DAV Path" msgstr "DAV Pad" msgid "" "DAV::resourcetype may only be set to a new value, it may not be removed." msgstr "DAV::resourcetype mag alleen worden ingesteld op een nieuwe waarde en kan het niet worden verwijderd." msgid "DAViCal CalDAV Server" msgstr "DAViCal CalDAV Server" msgid "DAViCal DB Schema version " msgstr "DAViCal DB schema versie" msgid "DAViCal Homepage" msgstr "DAViCal website" msgid "DAViCal Wiki" msgstr "DAViCal wiki" msgid "DAViCal only allows BIND requests for collections at present." msgstr "DAViCal staat op heden enkel BIND requests toe voor collecties" msgid "DKIM signature missing" msgstr "DKIM handtekening ontbreekt" msgid "DKIM signature validation failed(DNS ERROR)" msgstr "DKIM handtekening validatie mislukt (DNS ERROR)" msgid "DKIM signature validation failed(KEY Parse ERROR)" msgstr "DKIM handtekening validatie mislukt (KEY Parse ERROR)" msgid "DKIM signature validation failed(KEY Validation ERROR)" msgstr "DKIM handtekening validatie mislukt (KEY Validation ERROR)" msgid "DKIM signature validation failed(Signature verification ERROR)" msgstr "DKIM handtekening validatie mislukt (Signature verification ERROR)" msgid "Database Error" msgstr "Database Fout" msgid "Database Host" msgstr "Database Host" msgid "Database Name" msgstr "Database Naam" msgid "Database Owner" msgstr "Database Eigenaar" msgid "Database Password" msgstr "Database Wachtwoord" msgid "Database Port" msgstr "Database Poort" msgid "Database Username" msgstr "Database Gebruikersnaam" msgid "Database error" msgstr "Database fout" msgid "Database is Connected" msgstr "" msgid "Date Format Style" msgstr "Opmaakstijl datum" msgid "Date Style" msgstr "Opmaak datum" msgid "Default Privileges" msgstr "Standaard Bevoegdheden" msgid "Default relationships added." msgstr "Standaard relaties toegevoegd." msgid "Delete" msgstr "Verwijder" msgid "Delete Events/Collections" msgstr "Verwijder Afspraken/Collecties" msgid "Delete Principal" msgstr "Verwijder Principaal" msgid "Delete a resource or collection" msgstr "Verwijder een Bron of Collectie" msgid "Deleted a grant from this Principal" msgstr "Deze Principaal werd een toekenning ontnomen" msgid "Deleting Binding:" msgstr "Verwijderen Associatie:" msgid "Deleting Collection:" msgstr "Verwijderen Collectie:" msgid "Deleting Principal:" msgstr "Verwijderen Principaal:" msgid "Deleting Ticket:" msgstr "Verwijderen Ticket:" msgid "" "Deliver scheduling invitations from an organiser to this scheduling inbox" msgstr "Bezorg uitnodigingen van een organisator aan deze planning inbox" msgid "Deliver scheduling replies from an attendee to this scheduling inbox" msgstr "Bezorg bevestigingen van een genodigde aan deze planning inbox" msgid "Dependencies" msgstr "Afhankelijkheden" msgid "Dependency" msgstr "Afhankelijkheid" msgid "Description" msgstr "Beschrijving" msgid "Destination collection does not exist" msgstr "Bestemmingscollectie bestaat niet" msgid "Directory on the server" msgstr "Map op de server" msgid "Display Name" msgstr "Weergavenaam" msgid "Displayname" msgstr "Weergavenaam" msgid "Does the user have the right to perform this role?" msgstr "Heeft de gebruiker het recht om deze rol uit te voeren" msgid "Domain" msgstr "" msgid "EMail" msgstr "E-mail" msgid "EMail OK" msgstr "E-mail OK" msgid "ERROR: The full name may not be blank." msgstr "FOUT: De volledige naam mag niet leeg zijn." msgid "ERROR: The new password must match the confirmed password." msgstr "FOUT: Het nieuwe wachtwoord is niet exact hetzelfde als het bevestigingswachtwoord." msgid "ERROR: There was a database error writing the roles information!" msgstr "FOUT: Database fout bij het schrijven van de rolleninformatie" msgid "Edit" msgstr "Wijzig" msgid "Edit this user record" msgstr "Wijzig deze gebruiker" msgid "Email Address" msgstr "E-mailadres" msgid "" "Enter a username, if you know it, and click here, to be e-mailed a temporary" " password." msgstr "Voer een gebruikersnaam in als je die weet en klik hier om een tijdelijk wachtwoord te krijgen via e-mail" msgid "Enter your username and password then click here to log in." msgstr "Voer je gebruikersnaam en wachtwoord in en klik hier om U aan te melden" #, php-format msgid "Error NoGroupFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Fout NoGroupFound met filter > %s <, attributen > %s <, dn > %s <" #, php-format msgid "Error NoUserFound with filter >%s<, attributes >%s< , dn >%s<" msgstr "Fout NoUserFound met filter > %s <, attributen > %s <, dn > %s <" msgid "Error querying database." msgstr "Fout bij het bevragen van de database" msgid "Error writing calendar details to database." msgstr "Fout bij het schrijven van agendadetails naar de database" msgid "Error writing calendar properties to database." msgstr "Fout bij het schrijven van agenda-eigenschappen naar de database" msgid "European" msgstr "Europees" msgid "European (d/m/y)" msgstr "Europees (d/m/y)" msgid "Existing resource does not match \"If-Match\" header - not accepted." msgstr "Bestaande bron stemt niet overeen met \"If-Match\" header - niet geaccepteerd." msgid "Existing resource matches \"If-None-Match\" header - not accepted." msgstr "Bestaande bron stemt overeen met \"If-None-Match\" header - niet geaccepteerd." msgid "Expires" msgstr "Verstrijkt" msgid "External Calendars" msgstr "Externe Agenda's" msgid "External Url" msgstr "Externe Url" msgid "Fail" msgstr "Mislukt" msgid "Failed to write collection." msgstr "Collectie schrijven mislukt." msgid "Feeds are only supported for calendars at present." msgstr "Feeds worden alleen ondersteund voor agenda's op dit moment." msgid "For access to the" msgstr "Voor toegang tot de" msgid "Forbidden" msgstr "Verboden" msgid "Free/Busy" msgstr "Vrij/Bezet" msgid "Full Name" msgstr "Volledige Naam" msgid "Fullname" msgstr "Volledige Naam" msgid "GET requests on collections are only supported for calendars." msgstr "GET requests op collecties worden enkel ondersteund op agenda's" msgid "GNU gettext support" msgstr "GNU gettext ondersteuning" msgid "GO!" msgstr "Ga!" msgid "Go to the DAViCal Feature Requests" msgstr "Ga naar de DAViCal feature requests" msgid "Grant" msgstr "Toekenning" msgid "Granting new privileges from this Principal" msgstr "Nieuwe bevoegdheden toekennen van deze Principaal" #. Translators: in the sense of a group of people msgid "Group" msgstr "Groep" msgid "Group Members" msgstr "Groepsleden" msgid "Group Memberships" msgstr "Groep-lidmaatschappen" msgid "Group Principals" msgstr "Groep-Principalen" msgid "Has Members" msgstr "Heeft leden" msgid "Help" msgstr "Hulp" msgid "Help on the current screen" msgstr "Help op het huidige scherm" msgid "Help! I've forgotten my password!" msgstr "Help, ik ben mijn wachtwoord vergeten!" msgid "Home" msgstr "Thuis" msgid "Home " msgstr "" msgid "Home Page" msgstr "Website" msgid "ID" msgstr "ID" msgid "ISO Format" msgstr "ISO formaat" msgid "ISO Format (YYYY-MM-DD)" msgstr "ISO formaat (YYYY-MM-DD)" #. Translators: short for 'Identifier' msgid "Id" msgstr "Id" msgid "If you have forgotten your password then" msgstr "Indien u uw wachtwoord vergeten bent dan" msgid "If you would like to request access, please e-mail" msgstr "Indien u toegang wilt aanvragen, e-mail dan" msgid "Import all .ics files of a directory" msgstr "Importeer alle ics-bestanden in een map" msgid "Import calendars and Synchronise LDAP." msgstr "Importeer agenda's en synchroniseer LDAP" msgid "Inactive Principals" msgstr "Niet-actieve Principalen" msgid "Incorrect content type for addressbook: " msgstr "Onjuist 'content type' voor adresboek" msgid "Incorrect content type for calendar: " msgstr "Onjuist 'content type' voor agenda" msgid "Invalid user name or password." msgstr "Verkeerde gebruikersnaam of wachtwoord." msgid "Invalid username or password." msgstr "Verkeerde gebruikersnaam of wachtwoord." msgid "Is Member of" msgstr "Is lid van" msgid "Is a Calendar" msgstr "Is een Agenda" msgid "Is an Addressbook" msgstr "Is een Adresboek" msgid "Is this user active?" msgstr "Is deze gebruiker actief?" msgid "Items in Collection" msgstr "Items in Collectie" msgid "Joined" msgstr "Gekoppeld" msgid "Language" msgstr "Taal" msgid "Last used" msgstr "Laatst gebruikt" msgid "List External Calendars" msgstr "Lijst met Externe Agenda's" msgid "List Groups" msgstr "Toon groepen" msgid "List Resources" msgstr "Toon bronnen" msgid "List Users" msgstr "Toon gebruikers" msgid "Load From File" msgstr "Inladen van bestand" msgid "Locale" msgstr "Landinstellingen" msgid "Location" msgstr "Plaats" msgid "Log On Please" msgstr "Meld U aan, alstublieft" msgid "Log out of DAViCal" msgstr "Afmelden uit DAViCal" msgid "Logout" msgstr "Afmelden" msgid "Member deleted from this Group Principal" msgstr "Lid verwijderd van deze groep-Principaal" msgid "" "Most of DAViCal will work but upgrading to PHP 5.2 or later is strongly " "recommended." msgstr "Het grootste deel van DAViCal zal werken, maar upgraden naar PHP 5.2 of hoger wordt sterk aanbevolen." msgid "Name" msgstr "Naam" msgid "New Collection" msgstr "Nieuwe Collectie" msgid "New Password" msgstr "Nieuw Wachtwoord" msgid "New Principal" msgstr "Nieuwe Principaal" #. Translators: not 'Yes' msgid "No" msgstr "Nee" msgid "No calendar content" msgstr "Geen agenda-inhoud" msgid "No collection found at that location." msgstr "Geen collectie gevonden op die plaats" msgid "No resource exists at the destination." msgstr "" msgid "No summary" msgstr "Geen samenvatting" #. Translators: short for 'Number' msgid "No." msgstr "Aantal" msgid "No. of Collections" msgstr "Aantal Collecties" msgid "No. of Principals" msgstr "Aantal Principalen" msgid "No. of Resources" msgstr "Aantal bronnen" msgid "Not overwriting existing destination resource" msgstr "Bestaande doelbron wordt niet overschreven" msgid "Opaque" msgstr "Transparantie" msgid "Organizer Missing" msgstr "" msgid "Override a Lock" msgstr "Negeer een Lock" msgid "PDO PostgreSQL drivers" msgstr "PDO PostgreSQL drivers" msgid "PHP DateTime class" msgstr "PHP DateTime class" msgid "PHP LDAP module available" msgstr "PHP LDAP module beschikbaar" msgid "PHP Magic Quotes GPC off" msgstr "PHP Magic Quotes GPC uit" msgid "PHP Magic Quotes runtime off" msgstr "PHP Magic Quotes Runtime uit" msgid "PHP PDO module available" msgstr "PHP PDO module beschikbaar " msgid "PHP calendar extension available" msgstr "PHP calendar extensie beschikbaar" msgid "PHP curl support" msgstr "" msgid "PHP iconv support" msgstr "PHP iconv ondersteuning" msgid "PHP not using Apache Filter mode" msgstr "PHP gebruikt geen 'Apache Filter'-modus" msgid "PHP5 curl support is required for external binds" msgstr "" msgid "" "PUT on a collection is only allowed for text/calendar content against a " "calendar collection" msgstr "PUT in een collectie is enkel toegestaan voor het type text/calendar tegen een agenda collectie" msgid "" "PUT on a collection is only allowed for text/vcard content against an " "addressbook collection" msgstr "PUT naar een collectie is enkel toegestaan indien het een text/vcard betreft naar een adresboek" msgid "Passed" msgstr "Geslaagd" msgid "Password" msgstr "Wachtwoord" msgid "Path" msgstr "Pad" msgid "Person" msgstr "Persoon" msgid "Please confirm deletion of access ticket - see below" msgstr "Bevestig a.u.b. het verwijderen van het toegangsticket - zie hieronder" msgid "Please confirm deletion of binding - see below" msgstr "Bevestig a.u.b. het verwijderen van de associatie - zie hieronder" msgid "Please confirm deletion of collection - see below" msgstr "Bevestig a.u.b. het verwijderen van de collectie - zie hieronder" msgid "Please confirm deletion of the principal" msgstr "Bevestig a.u.b. het verwijderen van de Principaal" msgid "Please note the time and advise the administrator of your system." msgstr "Noteer a.u.b. het tijdstip en breng de beheerder van Uw systeem op de hoogte." msgid "Principal" msgstr "Principaal" msgid "Principal Collections" msgstr "Principaal collecties" msgid "Principal Grants" msgstr "Toekenningen aan deze Principaal" msgid "Principal ID" msgstr "Principaal ID" msgid "Principal Type" msgstr "Principaal Type" msgid "Principal deleted" msgstr "Principaal verwijderd" msgid "Privileges" msgstr "Bevoegdheden" msgid "Privileges granted to All Users" msgstr "Bevoegdheden aan alle Gebruikers toegekend" msgid "Privileges to allow delivery of scheduling messages" msgstr "Bevoegdheden tot verzenden van planning-berichten" msgid "Privileges to delegate scheduling decisions" msgstr "Bevoegdheden tot delegeren van planning-beslissingen" msgid "Property is read-only" msgstr "Eigenschap is alleen-lezen" #. Translators: in the sense of being available to all users msgid "Public" msgstr "Openbaar" msgid "Publicly Readable" msgstr "Openbaar voor iedereen" msgid "REPORT body contains no XML data!" msgstr "REPORT-body bevat geen XML gegevens!" msgid "REPORT body is not valid XML data!" msgstr "REPORT-body bevat ongeldige XML" msgid "Read" msgstr "Lees" msgid "Read ACLs for a resource or collection" msgstr "Bevraag ACLs voor een bron of collectie" msgid "Read Access Controls" msgstr "Bevraag Toegangscontrole" msgid "Read Current User's Access" msgstr "Bevraag de bevoegdheden van de huidige gebruiker" msgid "Read Free/Busy Information" msgstr "Bevraag de Vrij/Bezet-informatie" msgid "Read the content of a resource or collection" msgstr "Bevraag de inhoud van een bron of collectie" msgid "" "Read the details of the current user's access control to this resource." msgstr "Bevraag de toegangsmogelijkheden van de huidige gebruiker m.b.t. deze bron" msgid "Read the free/busy information for a calendar collection" msgstr "Bevraag de Vrij/Bezet informatie m.b.t. een collectie/agenda" msgid "Read/Write" msgstr "Lees/Schrijf" msgid "References" msgstr "Referenties" msgid "Remove" msgstr "Verwijder" msgid "Remove a lock" msgstr "Verwijder een beveiliging" msgid "Remove dangling external calendars" msgstr "Verwijder achtergelaten externe agenda's" msgid "Report Bug" msgstr "Rapporteer softwarefout" msgid "Report a bug in the system" msgstr "Rapporteer een softwarefout in het systeem" msgid "Request Feature" msgstr "Vraag een feature aan" msgid "Request body is not valid XML data!" msgstr "Request body is geen geldige XML data" #. Translators a thing which might be booked: a room, a carpark, a #. projector... msgid "Resource" msgstr "Bron" msgid "Resource Calendar Principals" msgstr "Bron Agenda Principalen" msgid "Resource Not Found." msgstr "Bron niet gevonden" msgid "Resource has changed on server - not deleted" msgstr "Bron gewijzigd op de server - niet verwijderd" msgid "Resources may not be changed to / from collections." msgstr "Bronnen kunnen niet omgezet worden in Collecties en vice versa" msgid "Revoke" msgstr "Herroepen" msgid "SRV Record" msgstr "" msgid "Schedule Deliver" msgstr "Levering van de planning" msgid "Schedule Send" msgstr "Verzending van de planning" msgid "Schedule Transparency" msgstr "Transparantie van de planning" msgid "Scheduling: Deliver a Reply" msgstr "Planning: Lever een antwoord af" msgid "Scheduling: Deliver an Invitation" msgstr "Planning: Lever een uitnodiging af" msgid "Scheduling: Delivery" msgstr "Planning: Bezorging" msgid "Scheduling: Query free/busy" msgstr "Planning: Bevraag Vrij/Bezet" msgid "Scheduling: Send a Reply" msgstr "Planning: Verzend een antwoord" msgid "Scheduling: Send an Invitation" msgstr "Planning: Verzend een uitnodiging" msgid "Scheduling: Send free/busy" msgstr "Planning: Verzend Vrij/Bezet" msgid "Scheduling: Sending" msgstr "Planning: Verzenden" msgid "Send free/busy enquiries" msgstr "Verzend Vrij/Bezet-rondvraag" msgid "" "Send scheduling invitations as an organiser from the owner of this " "scheduling outbox." msgstr "Verzend planning-informatie als een organisator vanwege de eigenaar van deze planning-outbox" msgid "" "Send scheduling replies as an attendee from the owner of this scheduling " "outbox." msgstr "Verzend planning-antwoorden als een genodigde vanwege de eigenaar van deze planning-outbox" msgid "Set free/busy privileges" msgstr "'Vrij/Bezet'-bevoegdheden instellen" msgid "Set read privileges" msgstr "'Alleen-lezen'-bevoegdheden instellen" msgid "Set read+write privileges" msgstr "'Lees+Schrijf'-bevoegdheden instellen" msgid "" "Set the path to store your ics e.g. 'calendar' will be referenced as " "/caldav.php/username/calendar/" msgstr "Configureer het pad waar uw ics zal worden bewaard, bijvoorbeeld 'kalender' zal worden verwezen als /caldav.php/gebruikersnaam/kalender/" msgid "Setup" msgstr "Configureren" msgid "Setup DAViCal" msgstr "DAViCal instellen" msgid "Should the uploaded entries be appended to the collection?" msgstr "" msgid "Show help on" msgstr "Toon hulp over" msgid "Site Statistics" msgstr "Website statistieken" msgid "Site Statistics require the database to be available!" msgstr "Website statistieken vereisen dat de database beschikbaar is" msgid "Some properties were not able to be changed." msgstr "Sommige eigenschappen konden niet gewijzigd worden." msgid "Some properties were not able to be set." msgstr "Sommige eigenschappen konden niet ingesteld worden." msgid "Source resource does not exist." msgstr "Oorspronkelijke bron bestaat niet" msgid "" "Special collections may not contain a calendar or other special collection." msgstr "Bijzondere collecties kunnen geen Agenda of andere bijzondere collectie bevatten." msgid "Specific Privileges" msgstr "Specifieke bevoegdheden" msgid "Status" msgstr "Status" #, php-format msgid "Status: %d, Message: %s, User: %d, Path: %s" msgstr "Status: %d, Bericht: %s, Gebruiker: %d, Pad: %s" msgid "Submit" msgstr "Verzend" msgid "Suhosin \"server.strip\" disabled" msgstr "Suhosin \"server.strip\" uitgeschakeld" msgid "Sync LDAP Groups with DAViCal" msgstr "Synchroniseer LDAP groepen met DAViCal" msgid "Sync LDAP with DAViCal" msgstr "Synchroniseer LDAP met DAViCal" msgid "Target" msgstr "Doel" msgid "That destination name contains invalid characters." msgstr "De naam van dat doel bevat ongeldige karakters" msgid "That resource is not present on this server." msgstr "Die bron is niet aanwezig op deze server" msgid "The BIND Request MUST identify an existing resource." msgstr "De 'BIND request' MOET een bestaande bron identificeren" msgid "The BIND Request-URI MUST identify a collection." msgstr "De 'BIND request-URI' MOET een collectie identificeren" msgid "The BIND method is not allowed at that location." msgstr "De 'BIND method' is niet toegestaan op die locatie" msgid "" "The CalDAV:schedule-calendar-transp property may only be set on calendars." msgstr "De 'CalDAV:schedule-calendar-transp'-eigenschap kan enkel toegepast worden op een agenda." msgid "The DAViCal Home Page" msgstr "De DAViCal website" msgid "The access ticket will be deleted." msgstr "Het toegangsticket zal verwijderd worden" msgid "" "The addressbook-query report must be run against an addressbook collection" msgstr "Het 'addressbook-query' rapport moet uitgevoerd worden in een collectie/adresboek" msgid "The application failed to understand that request." msgstr "De toepassing kent dat verzoek niet." msgid "The application program does not understand that request." msgstr "Deze applicatie begrijpt dat verzoek niet." msgid "The binding will be deleted." msgstr "De associatie zal verwijderd worden" msgid "The calendar path contains illegal characters." msgstr "Het agenda-pad bevat niet-toegestane tekens." msgid "" "The calendar-free-busy-set is superseded by the schedule-calendar-transp " "property of a calendar collection." msgstr "" msgid "" "The calendar-query report must be run against a calendar or a scheduling " "collection" msgstr "Het 'calendar-query' rapport moet uitgevoerd worden in een collectie/agenda" msgid "The collection name may not be blank." msgstr "De naam van de collectie kan niet leeg gelaten worden" msgid "The destination collection does not exist" msgstr "De doel-collectie bestaat niet" msgid "" "The displayname may only be set on collections, principals or bindings." msgstr "De weergavenaam kan enkel bij collecties, principalen of associaties ingesteld worden" msgid "The email address really should not be blank." msgstr "Het emailadres kan echt niet leeg gelaten worden" #, php-format msgid "The file \"%s\" is not UTF-8 encoded, please check error for more details" msgstr "Het bestand \"%s\" is niet UTF-8 ge-encodeerd. Ga de foutmelding na voor meer details" msgid "" "The file is not UTF-8 encoded, please check the error for more details." msgstr "Het bestand is niet UTF-8 ge-encodeerd, bekijk aub de foutmelding voor meer details." msgid "The full name for this person, group or other type of principal." msgstr "De volledige naam voor deze persoon, groep of ander soort prinicpaal" msgid "The full name must not be blank." msgstr "De volledige naam kan niet leeg gelaten worden" msgid "The name this user can log into the system with." msgstr "De naam waarmee deze gebruiker zich op het systeem kan aanmelden." msgid "The path on the server where your .ics files are." msgstr "De map op de server waar uw ics-bestanden zich bevinden." msgid "The preferred language for this person." msgstr "De voorkeurstaal van deze gebruiker" #, php-format msgid "The principal \"%s\" does not exist" msgstr "De principaal \"%s\" bestaat niet" msgid "The style of dates used for this person." msgstr "De datumweergave die gebruikt wordt voor deze gebruiker" msgid "The user's e-mail address." msgstr "Het e-mailadres van de gebruiker" msgid "The user's full name." msgstr "De volledige naam van de gebruiker" msgid "The user's password for logging in." msgstr "Het wachtwoord waarmee de gebruiker zich aanmeldt" msgid "The username must not be blank, and may not contain a slash" msgstr "De gebruikersnaam kan niet leeg gelaten worden en kan geen slash bevatten" msgid "There was an error reading from the database." msgstr "Er is een fout opgetreden bij het lezen uit de database." msgid "There was an error writing to the database." msgstr "Er is een fout opgetreden bij het schrijven naar de database" msgid "" "This operation does the following:
  • check valid groups in LDAP " "directory
  • check groups in DAViCal
then
  • if a group" " is present in DAViCal but not in LDAP set as inactive in DAViCal
  • " "
  • if a group is present in LDAP but not in DAViCal create the group in " "DAViCal
  • if a group in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Deze actie doet het volgende:
  • controleer op geldige groepen in de LDAP-directory
  • controleer op groepen in DAViCal
dan
  • als er een groep aanwezig is in DAViCal maar niet in LDAP: als inactief markeren in DAViCal
  • als er een groep bestaat in LDAP, maar niet in DAViCal: de groep in DAViCal aanmaken
  • als een groep in LDAP en DAViCal bestaat: de informatie in DAViCal bijwerken
" msgid "" "This operation does the following:
  • check valid users in LDAP " "directory
  • check users in DAViCal
then
  • if a user " "is present in DAViCal but not in LDAP set him as inactive in DAViCal
  • " "
  • if a user is present in LDAP but not in DAViCal create the user in " "DAViCal
  • if a user in present in LDAP and DAViCal then update " "information in DAViCal
" msgstr "Deze actie doet het volgende:
  • controleer op geldige gebruikers in de LDAP-directory
  • controleer op gebruikers in DAViCal
dan
  • als een gebruiker aanwezig is in DAViCal maar niet in LDAP: markeer hem als inactief in DAViCal
  • als een gebruiker aanwezig is in LDAP, maar niet in DAViCal: de gebruiker in DAViCal aanmaken
  • als een gebruiker aanwezig is in LDAP en DAViCal: de informatie in DAViCal bijwerken
" msgid "" "This page primarily checks the environment needed for DAViCal to work " "correctly. Suggestions or patches to make it do more useful stuff will be " "gratefully received." msgstr "Deze pagina controleert in de eerste plaats de omgeving die nodig is om DAViCal correct te laten werken. Suggesties of patches om het meer nuttige dingen te laten doen zullen dankbaar worden ontvangen." msgid "" "This process will import each file in a directory named \"username.ics\" and" " create a user and calendar for each file to import." msgstr "Deze procedure zal elk bestand van het type \"gebruikersnaam.ics\" in een bepaalde map importeren en een gebruikersnaam en kalender voor elk te importeren bestand aanmaken." msgid "This server only supports the text/calendar format for freebusy URLs" msgstr "Deze server ondersteunt alleen het 'text/calendar'-formaat voor Vrij/Bezet-URL's" msgid "Ticket ID" msgstr "Ticket ID" msgid "Time" msgstr "Tijd" msgid "To Collection" msgstr "Naar Collectie" msgid "To ID" msgstr "Naar ID" msgid "Toggle all privileges" msgstr "Vink alle bevoegdheden aan/af" msgid "Tools" msgstr "Extra" msgid "Transparent" msgstr "Transparant" msgid "URL" msgstr "URL" msgid "US Format" msgstr "US Formaat" msgid "Unauthenticated User" msgstr "Niet-geverifieerde gebruiker" msgid "United States of America (m/d/y)" msgstr "Verenigde Staten van Amerika (m/d/y)" msgid "Unsupported resourcetype modification." msgstr "" msgid "Update" msgstr "Bijwerken" msgid "Updated" msgstr "Bijgewerkt" msgid "Updating Collection record." msgstr "Collectie bijwerken" msgid "Updating Member of this Group Principal" msgstr "Lid van deze Groep Principaal bijwerken" msgid "Updating Principal record." msgstr "Principaal bijwerken" msgid "Updating grants by this Principal" msgstr "Bijwerken van toekenningen door deze Principaal" msgid "Upgrade DAViCal database schema" msgstr "DAViCal database schema bijwerken" msgid "Upgrade Database" msgstr "Database bijwerken" msgid "Upload an iCalendar file or VCard file to replace this collection." msgstr "" msgid "User Calendar Principals" msgstr "Principalen van de Agenda van deze Gebruiker" msgid "User Details" msgstr "Gebruikersgegevens" msgid "User Functions" msgstr "Gebruikersfuncties" msgid "User Name" msgstr "Gebruikersnaam" msgid "User Roles" msgstr "Gebruikersrollen" msgid "User is active" msgstr "Gebruiker is actief" msgid "User record written." msgstr "Gebruiker weggeschreven." msgid "Username" msgstr "Gebruikersnaam" msgid "View My Details" msgstr "Bekijk mijn gegevens" msgid "View my own principal record" msgstr "Bekijk mijn eigen Principaal" msgid "View this user record" msgstr "Bekijk deze gebruiker" msgid "Visit the DAViCal Wiki" msgstr "Bezoek de DAViCal wiki" #, php-format msgid "Want: %s, Currently: %s" msgstr "Wilt: %s, Nu: %s" msgid "" "Warning: there are no active admin users! You should fix this before logging" " out. Consider using the $c->do_not_sync_from_ldap configuration setting." msgstr "Opgelet: er zijn geen actieve admin gebruikers! U moet dit oplossen vóór u zich afmeldt. Overweeg het gebruik van de '$c->do_not_sync_from_ldap' configuratie-instelling." msgid "When the user's e-mail account was validated." msgstr "Nadat het e-mailadres van de gebruiker bevestigd is." msgid "Write" msgstr "Schrijf" msgid "Write ACLs for a resource or collection" msgstr "Schrijf ACLs voor een bron of collectie" msgid "Write Access Controls" msgstr "Schrijf Bevoegdheden" msgid "Write Data" msgstr "Schrijf Gegevens" msgid "Write Metadata" msgstr "Schrijf Metadata" msgid "Write content" msgstr "Schrijf inhoud" msgid "Write properties" msgstr "Schrijf eigenschappen" msgid "Yes" msgstr "Ja" msgid "You are editing" msgstr "U bent aan het bijwerken" msgid "You are not authorised to use this function." msgstr "U bent niet bevoegd om deze functie te gebruiken" msgid "You are viewing" msgstr "U bent aan het bekijken" msgid "You do not have permission to modify this record." msgstr "U bent niet bevoegd om deze record bij te werken" msgid "You may not PUT to a collection URL" msgstr "U kan 'PUT' niet toepassen op de URL van een collectie" msgid "You must log in to use this system." msgstr "U moet zich aanmelden om dit systeem te gebruiken." msgid "Your configuration produced PHP errors which should be corrected" msgstr "Uw configuratie heeft PHP fouten weergegeven die gecorrigeerd moeten worden" msgid "calendar-timezone property is only valid for a calendar." msgstr "De 'calendar-timezone'-eigenschap is enkel geldig voor een agenda." #, php-format msgid "directory %s is not readable" msgstr "Map %s kan niet worden gelezen" msgid "" "drivers_imap_pam : imap_url parameter not configured in " "/etc/davical/*-conf.php" msgstr "drivers_imap_pam : 'imap_url'-parameter niet ingesteld in /etc/davical/*-conf.php" msgid "drivers_ldap : Could not start TLS: ldap_start_tls() failed" msgstr "drivers_ldap : Kan TLS niet starten: ldap_start_tls() mislukt" #, php-format msgid "" "drivers_ldap : Failed to bind to host %1$s on port %2$s with bindDN of %3$s" msgstr "drivers_ldap : Binden met host %1$s via poort %2$s met bindDN %3$s mislukt" msgid "" "drivers_ldap : Failed to set LDAP to use protocol version 3, TLS not " "supported" msgstr "drivers_ldap : LDAP instellen om protocol versie 3 te gebruiken mislukt, TLS niet ondersteund" msgid "" "drivers_ldap : Unable to bind to LDAP - check your configuration for bindDN " "and passDN, and that your LDAP server is reachable" msgstr "drivers_ldap : Kan niet binden met LDAP - kijk de configuratie (bindDN en passDN) na en zorg ervoor dat de LDAP server bereikbaar is" #, php-format msgid "drivers_ldap : Unable to connect to LDAP with port %s on host %s" msgstr "drivers_ldap : Kan geen verbinding maken met LDAP met poort %s op host %s" msgid "" "drivers_ldap : function ldap_connect not defined, check your php_ldap module" msgstr "drivers_ldap : functie ldap_connect niet ingesteld, kijk Uw php_ldap module na" #, php-format msgid "drivers_pwauth_pam : Unable to find %s file" msgstr "drivers_pwauth_pam : Kan bestand %s niet vinden" #, php-format msgid "drivers_squid_pam : Unable to find %s file" msgstr "drivers_squid_pam : Kan bestand %s niet vinden" #. Translators: this is a colloquial phrase in english (the name of a flower) #. and is an option allowing people to log in automatically in future msgid "forget me not" msgstr "Aangemeld blijven" msgid "from principal" msgstr "van Principaal" msgid "iSchedule Domains" msgstr "" msgid "invalid request" msgstr "" msgid "path to store your ics" msgstr "map waar Uw ics-bestanden zullen worden bewaard" msgid "recipient must be organizer or attendee of event" msgstr "" msgid "sender must be organizer or attendee of event" msgstr "" msgid "unauthenticated" msgstr "niet geverifieerd" msgid "" "you should log on with the username and password that have been issued to " "you." msgstr "U moet zich aanmelden met de gebruikersnaam en het wachtwoord die U zijn toegewezen." davical-1.1.1/docs/0000755000000000000000000000000011776303360010741 5ustar davical-1.1.1/docs/translation.rst0000644000000000000000000000732411633117640014033 0ustar *********** Translation *********** DAViCAL uses the standard translation infrastructure of many projects. It is based on ``gettext`` (http://www.gnu.org/software/gettext/). Translators =========== Translating DAViCal ------------------- All translation of DAViCal is done by the Transifex tool (http://transifex.org/). We are using the Transifex service (http://www.transifex.net/) to translate the software. To translate DAViCal go to http://www.transifex.net/projects/p/davical. You can register an account there and then translate DAViCal in the webbrowser to your language. Furthermore you can improve existing translations and join the team of your language. Developers ========== Adding translatable string to the PHP-Source -------------------------------------------- DAViCal currently does not use ``_()`` but has two functions to do the translation. These functions are named ``i18n()`` and ``translate()``. With ``translate()`` a message can be directly translated. .. code-block:: php nl: translations/davical.messagespot/nl.po -> et: translations/davical.messagespot/et.po -> fr: translations/davical.messagespot/fr.po -> de: translations/davical.messagespot/de.po -> hu: translations/davical.messagespot/hu.po -> it: translations/davical.messagespot/it.po -> ja: translations/davical.messagespot/ja.po -> nb_NO: translations/davical.messagespot/nb_NO.po -> pl: translations/davical.messagespot/pl.po -> ru: translations/davical.messagespot/ru.po -> es_AR: translations/davical.messagespot/es_AR.po -> sv: translations/davical.messagespot/sv.po Done. davical-1.1.1/docs/davical_en_user_guide.odt0000644000000000000000000344573011246135773015774 0ustar PK](:^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK](:Configurations2/statusbar/PK](:'Configurations2/accelerator/current.xmlPKPK](:Configurations2/floater/PK](:Configurations2/popupmenu/PK](:Configurations2/progressbar/PK](:Configurations2/menubar/PK](:Configurations2/toolbar/PK](:Configurations2/images/Bitmaps/PK](:Wۜzz-Pictures/1000000000000261000000D1FE38E511.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222a" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?/xo \0Ȋl#sV&Q^DT32Bsk^dYLflۇNm[m3 Ӟ8]IE^q]$WBp !BqNkUNeĒ)mm8+oKMi ċ$[kF/tzֲf`maۑ~GD ăX)1 а*ip֏i Rp=ito/&nj?/Q8V#G#7?kN|7+T3o^i^^FݕUAeUV,^ 01K -+]n9+%Ӯ$┷9RG5|8nI&hE\2p3ךʏK}ig Kw-O2)cfY5C O23nIB[/8 ܎>SZ9S,2[$b `LUDMG1?$ev}9~ĵWZ[q8$!!Zۚ^խ_An8 r3gMi3s?~F3?5(_\_5\o/-P8NMoQ2(7/UFn/ү.= xo/-3{wx4 9dP xOLSMg[0NNk2_ 5ä dX+p$>B"kx $[U;M{skr_C~DXkSsQq›e8գI&rKv?]f~"k>OG~? ?5*#W"3s?~F ?5(__4sἾB?ۚo43s?~F|7T_sQq­3s?~FFn/φ ۚAE7?_O ,x`z_pZg5|A|UA @Y2q9❙d"-dH>OIv\cnF6tZao!^rÄrб)ičKB@g?ұw/2f[-Ncu*nfh~u[9X`|8MN tU>dcfG$u1:ا+ TY CcaMN~Z^fTXWhexb /Fm52S$rJr) -%)V JU98'яW~]unQ% Rrx'OSҾynj?/Q8V#G#7?k^|7+T*nj?/Q8V#G#7?hy}jOG~? ?5*#7?hf~"o/-P8G?[f~"_ ?5(__4sἾB?ۚo43s?~F|7T_sQq­3s?~FFn/φ ۚnj?/UFn/E9_pZSsQqG~? E?#G> T*nj?/Q8V#G#7?hy}jOG~? ?5*#7?hf~"o/-P8G?[f~"_ ?5(__4sἾB?ۚo43s?~F|7T_sQq­3s?~FFn/φ ۚnj?/UFn/E9_pZSsQqG~? E?#G> T*nj?/Q8V#G#7?hy}jOG~? X|HF#Rxz e3B:psJSYp%; Q^QV5;;t*(D"bx9ǍFX }ўO_jRIG>7&I~# @ye. :k@YG' L99#=>\&º׎3=pzTHuYLF!^N*P.tmYcda)vm eq]n)eՑy`D@+n#hOvko 6`o I8s$-(Yu+RPpޣ{g \dR Lu>eYqPHY ':>.=&)#8[|ٝx/lܱ`]9L?>i,*;ڈR3'׎G^x4rS19#䜄wDSݝJYdgthZ_Ox?4}O5G4}O5K?̿ W_o j3~2Glu>ݮhNP9tz is&xd@g8,A>>h?P׵(n $odHP2I}:uGb7_fٳxTZ]{DvW?㶘6ċ@1~])`Vҫ0$pKh{UDK1z)9ǮE"ɍ=,+P08G9hķcV uq=rEG7cB_2G4^r3x>}Z]{ET3jAxjMCi˺dPDJ$u8iwAc}Pb4|)$[88*Lb o,?\t4.=;z+)˜2LsF3=C}k{K&h. #'Gե]1 DF! &wrGAϱ~7*KyųmpHf >EW}{E:+>+Uᯘ6v91OIm⧻HwW+ݴ60@O.mEqMhc8TMKy.J XGr=G9_QiwAQ\;4rPіd< GFiy ulEsq= /Kh\ 3̷3A"F`'%q\k7dUvِj t GեGsEpV^0d8ՑnbSFvQ#1zOhڊv[Tow|8۟]>+;(hu3I?Gե]dZG,I+!9U)V!DqWqGE1G՟tv;+4SF]Eb0H#z0 $v6m ‚sSh .;9x$P. mvc9y?0tVtv;z+DQ$EIN9<[&K8HK,n1#iwAcySs>6mP 9둎9ϥSO9|ʡm&=XsGGQ\ |6[ 69HfWg )]䯸Ǩ.kEyqOsvWTPNT6;xjc;u&&7DL~xOZ>Q\<1Sl;Θ?ޭmkk)V˘C( 9P-{DvQEs> E:Dp$Ϧ1Y/-BFvmM7?`@=@[~#4n LJKOZ.dXap΅egpWp'|mkIAYCe?VWF둘YG2@zTz~ZTI&]73WK\$0'c}EVd4JYlA FFO cn2MeVHH9S*G8ȶ  f`G끂MMbma!N iT ?5-3Xa #$N m*23U&!D#I g 2{1Y{yCm|",X KI!A[ù~g+285e+:{^rƥJKϜd.q;YfVR5ArqX>q1n|?%ޜr]*F1Q&32LXS?9Lsm,n=h٢|?xc1:tZO0+.!>k {? f Ί1@A%zǨ8E%jַV%F8P 6BI&"F 9>\:w!FB?cGc۵CqgAvReTƄH6'ܫ`1sح%Cq#MlV1tXUz揬L=,[xAm.$UC>kr\cJs="T:%ψ۫[DP1'q/tH&k=i2JA0:>4}fh=Jw?/*" ޢjQu ea^qӸp{dH7&Fs?a]>aȎ:YȲ[-O!~u 8/n,\}2vQ`L6ʉUDU<8f4wn~\rxzWaE?L=0hPd2##UHo§\WϷ%t^aȎA| %1LO~RAom+#)x=qJꨧG$<H !9q$}iG"22"A=q8>0h PrHNB-y'q{glolIԌ{Z! v0AĒ,HLH V| zHrNrxOuS٣o[J`,c1I4P.!h;e`q Ɗ^aȎ[oJnɑ.v1P?rs,g Ԏj(G'm$q40:Se FK0I$uG&\qA4+d3H9=G#6O#dlvB0S=BjfHx2=ٶ3p1{`G|sLYEU ē11һ (٣"jd |c/U!HBɝzt>0h'@*%iBp8qx?y(y wY76Š^aȎ:/y 7 P6+ϭX d@^]M0h89[~8gA;SzvO[X4㎽>QvQ"8̲շ)Y9'Ԟ*X6nDn N >0G)MnOBNT6``vEXDu[#s]u}ba¼ٷi# pGNf%3DICL/>G&c\qaHXi vT})ڈ l*=x5QK9x"ϗ6y9}osQo3䑱@<Hu4Pͫ" (,q+KfDyE =k"CvB #[!Ѯut1A,q. 8ֱd~/7]Z~J|zr/ikK-|Cqq!mK>ѴT{^<v$On&7LӚO宨/dk"vvNNynY%']23xF} s{UKs?{J|>x*W |֙{=*y{' ďLŻ?BtmȣZ{Tط~G(Ż?N<#ֽk^a|?ط~G( E׿"Ż?G-߬ /C-2?k?Gȩ?ncQw‹ LZ{Q{=*O[Xb}<#ֽF ~QOŻ?J5Һc + Llڥ"z?EO.tHdžbGb}:6ȣZ{Tط~G(Ż?N<#ֽk^a|?ط~G( E׿"Ż?G-߬ /C-2?k?Gȩ?ncQw‹ LZ{Q{=*O[Xb}<#ֽk^a|?ط~G( E׿"Ż?G-߬ /C-2?k?Gȩ?ncQw‹ LZ{Q{=*O[Xb}<#ֽk^a|?ط~G( E׿"Ż?G-߬ /C-2?k?Gȩ?ncQw‹ LZ{Q{=*O[Xb}<#ֽk^a|?ط~G( E׿"Ż?G-߬ /C-2?k?Gȩ?ncQw‹ LZ{Q{=*O[Xb}<#ֽk^a|?ط~G( E׿"Ż?G-߬ /C-2?k?Gȩ?ncQw‹ LZ{TڝܗQ#J F4ط~G*K}"+cp ~2tmnE盙~!bЮ)PZԯCϨ?Q*5W޵|AKJ^4{*'dM`Nc/+5= ԧȚ~R-9jUYw|#;lcqͦ%qʌ``z|Ik/Ga'bG^ .XOp*+Ed3%,B7 î?QV_K{U%H63+/KhKhtX$JsZ\b|aDи)Ab?,ҹܭ"DCl]^8J1w @+F[NkdUTc8hv1gdfAH"kSĩ%QYHrgd#9* 3 ս9ouH䷚6gެe=:_zgaf%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}??/?U{X%l^}?U$g]i<4Ҹ{DoEh`xHchJg'=1ޱ%/7=B]n'uVt3&k .qGl }kUZ7NmuvI:gZ[ Msq4v$SlcƁ=ĺO}mHz:mexb؍K 3'Y+T+=eOapd,eS#rKmےq\dYGOԚw<.$<KK Od p: avCh}Qy ϨϩݽW+F$ [UUDgKnrɼ-=8'kmoGֺMp;hW5066Ⱞ5 WM6au=ȻhwP8rrw>?X*1w|3sc\9pd62s ~U<:ψ5:j~I+[ʪ' ܓ y6#dI upO<QvA),`Ἡ !YpH$zrCKh^& ` 92rcFt.܅<86ᚧkxX>pqg!ٖd` }}b]{42gv.!nL!A8_kC}VvȳDm&Hr$@ힸ+̧I3oݴg9k4/f{J=u%SޮZ{(M#73}Rjpm&!x(K\*VK&2$&ATA),T{4^ǼTcu?ʹݤRhGj۷$I׎VQ!1 ΔzIz/i?6O;b;Se?OC51ծ_*L=O??OC51's'UZ{(^cu?T/JT kzY&]2F,%$y$s[}jas7o40HO:),T٣ǼTcu?cu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu???ttQcu?朗J'eMk~O6Q\uC!we{/qXx$p*`'+_ĚMEh#DZ9|-q%Gd.%C&:׮k,?\_\нku~"%Bdl;\bumu&s+U ws1IT[0Ģ8-r8G\*;_te7e6P7t%Ixzts{bt2K$IdUppNp:W?o?׬4ݛWh.7v+gkk&C R`|㿶ףj?zgEأ"yUZIɭUF;ރ^f`)G1P[#_$ר/9tLCG=I{D_/ ޙwL,]H9#Eء*63m]?LȽCd^!}vg|ڻ^{<(ȽCZ{αvA j {ϲ.k[HFwb8Bgj"yQ{<( 6tUD/3?GEآ<wLW?/bP|3./Eا&x$Rb +Q|]^&GbLڻ^ǞFX >aLȽC%FwLW?/by?j?z?צd^!}?/g|ڻ^{<(ȽCZ{ףj?zgEأ"yQjAڻ^g|b?Ey?j?z?צd^!}?/g|ڻ^{<(ȽCZ{ףj?zgEأ"yQjAڻ^g|b?Ey?j?z?צd^!}?/g|ڻ^{<(ȽCZ{ףj?zgEأ"yQjAڻ^g|b?Ey?j?z?צd^!}?/g|ڻ^{<(ȽCZ{ףj?zgEأ"yQjAڻ^g|b?Ey?j?z?צd^!}?/g|ڻ^{<(ȽCZ{ףj?zgEأ"yQjAڻ^ծ6p?/Kou`*$3S%FX=΂(<3-HJ4{p{˺a|-y6c3j fhUCob˫Y=Hd'젂#}Z B7tECi: 8}?djZhMĖRrܨ*[8ҬX1&aWhfHv{ 2oMnw h ;'2vV"3Y>]vG7TlcyIK`s3GQ,bo! ]Ǟyҧb쪞f<W{DVoxxvænbv2<XePrA$]UKehԷSsG/g!xRVqhoՃ|I噬Ãs~t}^aQ\"ҮrX r@Ɵժ D%i3ɱU6K{,Q^I*6[6s H@>Zg"а"PZ̺Rh;P6}sQZv>`U8o=cY{cңܹ_?.ƏTj:Ōmp"mq R-Çc!,L+syˑ<in\r/ۗ?܋?Gժ6.m%0,uy$t Ey_W"6bܯ,2ߡ'qRA8pqR,`?:̸Eև\[SZlcvy#4}Z{H*wQ ߌ?k?c7_P`xg/?({V's3U| g5?Z55[Y<^I"6 88 ½?({Ochewm.ɠHr8`22 V'qEsۗ?܋?NMjTX$h@7)u$XV p}~˟E"tW?sȿ#4n\r/V/i˟Er~Gh@: +ܹ_?.ƏTi˟Er~Gh@: +ܹ_?.ƏTi˟Er~Gh@: +ܹ_?.ƏTi˟Er~Gh@: +ܹ_?.ƏTi˟Er~Gh@: +ܹ_?.ƏTi˟Er~Gh@: +ܹ_?.ƏTi˟Er~Gh@: +ܹ_?.ƏTi˟Er~Gh@: +ܹ_?.ƏTi˟Er~Gh@: +ܹ_?.ƏTi˟Er~Gh@: +ܹ_ b[d N~i\~&QXs$ouh#S=8<>N @c,h)$622X㎕~/\#D++9xf 28? ?, # 3#/R}*~!{4eN_#(RW*3{ٵ!$ #'ϹA^="}Ό W# d{BtAhk-ew;p`V9\wpi䍣w^פx #HXE0|v7U{R[Ӣ.Z)(9b_rzQvAя; a6sf`#3`:UO Ie~ױDc{Gu|Sov3eb @%{1#*Ƨݒ@''$S\XibE ω5bCT<7%[9Qϧ*kkClidW T*@7`G%F_]?Ч.xIBZ)j}{$s鷏q+,$䃸zwBX_ll{Q aOh1r[ !ރw@%zāGX=$˽e} +žD#ڛKI#˓r _Rk42;V0'6rI<`ϲd?G]?Я:]Kw 6I;1Wv6y$v8Ey}[dle} ?|OE[dle} ?y73Ojϲdc.xQ{<+ϲdc.xSL!0 hAM40\wZ.xUb]+m.w+omUۛ}zRJA8R@'sgxbCwBoߨcW8YQǾsPV2W.p |#'i&:S H{<(˽:qo: G) -H54}x0G@#W֏ϲde} ?emebܼ$3  Hj6z`idgD0[/8"ϲdwBOo-i|"Tx+,WrX{u*os$,e.\rG+rp@&ϲdwBLїKf 7t$犭Iqt.٣0 D)!PϲdwBWuҢ7x xb)|>&&,M{r\\]v䪜zAg.xQ{<*YCvV`e{d B8&Z7eWsd_֏ϲdwBTtXd2\$rI!qVcrJ<Y`6BP X.sH^r( H{<(˽|MQ$%pnJ$. 3'N՟I=IAHd8$rpGJ>>=G]?Ъ._5Kdȭf/H6*Lu(#M[d?wBiWs-o-H1Z@YAj3IsSiw1fXysLc.F{>>='˽e} z[3k;C,!A Ab{:և=۫Hz<5[d {<(˽ jڶm$qZHP#v8 3LVdeqc$ҏϲd?wBPZڅ"Kw܄l nٓI$Zi44BV])PbH ͑LGEG]?Ыƾm"k(ȲqN5f`R=ȉd<8?/Nh H.xQ{<*+j E1!z=)U³x~%R}cs"]?У.xStk [G yw+dI#bxU:nmUgyV'Py=8揭ϲdwB]CA52[HUEϛ#.㒻dJjr;"@V2`-__j>>=6?wBfC..p:=NRmqܖypQAc.xQ{<*06pUUJy d`:/jbV Y('H9[d?Km].АIϻ5ŘI"w\ʀNOH|l"W 7SjdQEs~ ԡL[4C29qXiJ2z[|9 $wiO;ȶ-o^zd @!䎇zzt41YKyvVvhy"`?B ]}~T$k#Jѵ85 w$0=(^ ts5KT}ޫu,B% 7'=>;Յ/v$6$-u9m'9ɐPr3r8Z{O1~T gιM¤4n {{ׯH|-ZG!vG}G2$V|//#ݟyG?Eյp$ơAb 8??JJ>B˓k`M 8<桇=s,qRt횆KҞ5xw?0P"n< %ʧpͅ]>O|Rt7q >ITn8ջO Mg4R*|f"/Rt1(*듖ʏO:}.xI~ҫ2\{-Dh|ozK:A Xd7Nω͝:Ĩ'}H!Y2.rǠ=`z`UC—J"3Gn>L֎Z]||1mKve8#\}xxA`'x֍lʌSyJ~ Ǒ<V;o.O-#d;#Uݒ>x=(}y sߙ~-k3kW"2sx~}EWbw2szVNY![| |=~\dr}IkQy>QG9[`C۳(Zy>Qy>QG9[ݟyG?ןן|e\bU??J??J9(4KJB /?֪g^ϻg^ϻrQigQnTIw 4 :xfFXiIEWnP֦F Z)ccAVUHQJ#Gw ޽;Uj֑@$%prGAXj4Nu bI+n 伿\4+5┿0?xBk_+4j&*[H3MlVVr#68Lrmh2Uʭ h h53*%FH@~y5Kkckm"3ɶFm*q4E;X $qn8zpq>??Y^aHV?G?Gժvi3[7G;A$p3$*q<=BY'$Y,`~&E’PZԹ ӞXF߷,@$ 0ϞXVdRÞ$W"6E(B"~@#*MNwpĕ|Z/O|@A-$~"ժvi?I֯bKyϵF]ĂsG|TT+Ə4NY?wAB'vQKyX!PpHl`)f8q2GQKDޢ }?e }V=M+v_ѥ]vRy 4}Z`(P.aVN9>GNR>8qI g*wpm==Ϯ 'c$})?e<N"e]-$д,<(X'[^Ff7O.ӹAsT9jDۢdI]B{o?Gvirݗx'hݗx'hN"nQX۲۲V=M+v_ѣv_ѣ;Ean<4n<4}Z`7(?FFT&/O/OjDܢe }?e }>S{HV?G?Gժvirݗx'hݗx'hN"nQX۲۲V=M+v_ѣv_ѣ;Ean<4n<4}Z`7(?FFT&/O/OjDܢe }?e }>S{HV?G?Gժvirݗx'hݗx'hN"nQX۲۲V=M+v_ѣv_ѣ;Ean<4n<4}Z`7(?F$v ަEV׊oobxS$[ z+D]2Eq!?ީrǶ+I)DRFÐ5u}ms?;<" UH7PvQ< )/ćII?W# bO9zsPk^( 7vpxKe7}9+mQY4Ytӌ.)Ą g @y!{$6W1yRIE!n ?19]P_vGn_w3޶mYsEQ2w #1z'9$go>v>;ntH]$E1<9=9/;F9z,0EA/u}Q;8 17͆ p=}h> I@On.OGm+WNk&B9u*A286pE8!NN ǐ{?2=?Ef _v뷚Ơ֞yVz-;_ P.;oSt?77 vKDUsGQ uA_*4w?߉DW!ъɵ}39Y=? -w>~UaO"_qAv`^6${ 2NRO5vmm̽Hd,)`0s4./nOʏϴ2cR!8@D#X@Jy̭cT 8xq*OܻA7'TG/m2]fxգ 1q1 V-~T}}7b( wqa ϸqѹT 7(A4}n]!~w>~T}}-X%a ~sB,c;Tؑ\,g2OtP@;r⏭˰{$K7'ZNn240aڭǮ7X6gXy;U R =7'RAKKT-Bp4`'mnjEXlwoIcc88 vd} ITRxK}ZH*kh8_)d*s 7' R^pb]N0#>b8hܻA7'Q\[k;9!YZUd#,=O x^ܹ"Hc6AE嘓}n]"oϴai?*Uf_)HMr:`;Ҙ3pfG=Ҩ{$J>.ϴai?*.F:4i~ 36 ]ªY ].} IWUE[`H~w>~T}}˰{$rai?*>w>~UQG=9_ϴai?*ꨣrnOʏϴuTQvdW7'GnOʺ(ܻG+7']U}n]# ITw+w 5DI#5IլQ\.ZG0`Pr9jƓTᑣՃ_2RIᚹK˸^+Ki&i"ٕ.skҵɥ3pPs|\u5єSvGAjs_P̲rx8Z\p ljt;RTK:XUSxE^_i5SRƣ\%yx߽|z\եEJ_:ݷ=OUYngM9tӷ8Ƿn`I8V °(nH?R$Aa[n]J<#p t~!.o_{P/hQ )>H+ӮTUGB?HPG $1|ɳtv0يJ=>߈sKK,H0Npx־+,~`@aƠ=2(͹R2|p; ŋwckޭ rxa{G9tx.`x WE Rn7\+'T6 \@Ky%@o8?:_RǞ$$9+OʏgOu~.ʳ^IOJj~y}e!8`k*O]OAc?23$q2T.<} $~$.K1,Cpq~BeO;O??ۍqy#U).C˺Uu+`rzÐp3Ikm!I㯡gOu8dTBHb?3:\bld> hW#[0f2ǏQ{FC!UDHub=W H>a0HXn-mjݷ/ⲺsBY3y+"iw:ul _/d6 ^F㟮iڇw)Kr0C!]fgOW__+φ6L@?oLbvfY UĞTO-?19s1~тď*ٗ`2o!rΗiw*K14aR5fmB|'Rv,Ngr>5=GtnaB8R@ &<|8^,KcipT ug%tmE 7$?o7^ s OS?roX_=$?nh1jfx&Rp <־x9&u:e- Ǻ^hri IIs(XS'OdJpvS?OT7o)!s>*62晥j?YcyGo쨇<>Qj|>s>eD9^XH#f8UlJa};w?7h|=癣j_>Voo;4{*!3GtϰԿ}֬߱ϼw?7hTCeȵHa c Mj|>s>eD9hnZtϰ՛;4}} ʈs??ۧ}֬߱ϼw?7hTCe5tgfQ)-)ۤ˰՝;4}} ʈs??ۧ}֬߱ϼw?7hTCfa}J 6K$DTcyGo쨇<˰jCf ֥ |һwnqҨ} cyG4}֣yj|>s>eD9io7Gϸ՛;4}} ʈsoZq}7w?7h|=癥?>Voo;4{*!3Kyj?}֬߱ϼw?7hTCfϸo7YcyGo쨇ϼQy_>Q?f} cyG4}֧íg? ;d++w?7jk[[ @)$RJ+5Q^yQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEPK](:2lp44-Pictures/10000000000001F9000000424AADF1CE.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222B" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?|Wi7ohZT7-V(Bpz;C>_ϨMNv*5E,Oz5-.{7S=6XWt֟l&+ Q&8EǷxQ@=k;b //!,\!v1ڀJT-N4-m;RqTN"-A$ޣ{ucW^.yo"]PwAgx1sga[}O_d=y~^%ʑx !.ʓWZ}ֳWTLŭmp94Aە}ޡ.UWk[U% {wԮ@=k+ot-bID&U*}$ӽs[h-(ae=R4&ݿbrkkwrIV%T 'j쓿`sOu[MK͜VQJ}쒸Z}Kգg i# l|X wWw>Yv0[WJ+%`eՓhoU snVA.cĭ*iZPI\WŬamOn}kɛC&̺w?c6WQ|K%ʖAR#pzQv4o*]GVӡ2=֟n adA%rW/i=Qjpg  F kF?xX=,%FYK*`=Gߍ+ke8{;Dg0 juRz/94M"Qo`+S/``%5uSq gܻ{= ?o8T3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3]սڷ_TQ3hjw]B6U6WC\~]Y\xdmM(ip\һH:bĵ ҢUf+ؖޗG%VNo%QkEڧpc7C(ĵ ҢmSrGkbZz_iQG9#_iݪ[_ĒʢBex[C+J^wÒ=K_K}C+J~ڧpc7C(ĵ ҢmSrGkbZz_iQG9#ĵ ?-/?´TfbZz_ؖޗZTQwH3-/?K_K}*(;${ؖޗG%V{jÒ=K_K}C)2bqWM,ng'HYw8-$ӞK.79ԡXr'RM;{@]Fĵ ?-/?¸-ves8veJX8ZU)˜kc$V*HVW )|L$ (aEPEPEPEPEPEPEPEPEPEPEPEP~ {b+\ M,Q=q4QWV\0k xheu N$pxxUirrnY1ɬx>ЂS:Hޥ䀽5Z\\ Y90a*5Q6( bo48kG,,|+&wo%lPEDxRO}$ǧFuv!Si 12_ ?y7iW9dxUux K<[[ijL ۅb\ GT/MtӵfÌ8xf ?y7h|5eB'Ӟ[}RB3c+r𔵴?ةt-럹pާj%ޔA Lc3کK7yloy qh?׿e˛[h,qԄ Vw=cU/, ҃$hd&0Sa yEvu76vORIFzI@,&bJfB]BN9>+! M X9v#ݞ8c2?7=]a#hHً F|NW]Fpup `6G8})ib9i\HG 8/Rޡe=[g\v д;ws'=j5ifڂ,I:_H.|Iyn>-%+6QffzӞp#ޛ# `†|g tfX1 ,S׌砮X: ;G7 }ݸק]$ً[~S2Ɏ%GE:Jڡno6uA;4#5Y#&qP >RsF:d2xP5[K?>h<8zHvH=YR], 6;:jxND:F$к&v {/O{c-\;4,Vm3g;ohyfXgh1\Mf?ZF,A-cnIoJ[!HO\֢nЗkhr%Gcvg$~xE;TNHzF&oadwE9 @8֓l¬Jg;I#yBUSGWv-PaqI9?7mo,ZإfYsX f Ϯout-:8 1Iu)WL&HkgM[J2 ( <Fms%Πa7,z 0L"7$ G@cdrWLZx4msV2qvQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEPK](:vW++-Pictures/1000000000000237000001C31D6B8690.pngPNG  IHDR7WksRGB+eIDATx^[l]p( D@sd&Ix9@)b|)1{Hj%@ɓojO)K@qNj.$!3$X$r sYokwϩkgڽϿy9 @@x:Ow]sOo}}ޭvwʿi??begNSV)Y'_3hUA\<*_3Uc[{9^O,Vwӗsm|Nޝ}oNޞѷK9 x[}_#WԙFV ų)*iB?k'?'sԝK7ԵG+b:smf}-9;Ս7ɏ?RRڅ;W2ƯDwSmn_Lׂk Zߵ+W һ*^en:K|UJsۑ. N ڙį~ 7՚v pBxE,`[)gz}=WgϾgN''߱އ>~_/jqۏ[wU??Ìx?{|{_g_=t7_=~O}7>G}#?<=^[.[?k/>3[U(ۺ'wZz=;u;{|w_a?7W+қ_?v{WAETOqZG/wnT]D̝~CWT-TT9|k^}')}5/4nkk]巗&M77+uͻ˩rU&-ﺽJ+Gw_/\uﻻ,}^XjST"_+խY|oz"nWCLoЭ-=ޭ[N%0TK1TJW/ETt5Z*]xAխhm=ݻ}߭-"۬ײm M^wһSOw'z{r=K7ҟM㡫ouDw_I"PE]}w-շޑJ7P?F޺◷{jhw O{"5}u[\oJﹺ][wO ~]u<@7{P @ }j T(Uo#:DOWҭK;џҫst}_>zT։|'Wc=~MN/*݉r/:D/KNx_*Oa4 ohD;ѯOA̟wK#Tg}ROltwX? I'wm3ضKm'@ߵ}ϳ(@]+~^Iw>'`|^ |oDǼ=hw?5.i}`D]Xq7c纖(R5D[uwKJ }β,7ozxO= 夸ug=z)I+M0}PDk ܽv#@ ݔwo̞ @`=_\ @0ޗ:V  @` )6 @0R0Z%@5 @HøjRk(j# UXC@J8FJgnkN(ДR鴘X"@ ̤TJ/:G @ZjxyTV]~( b-m+b lGo˃2ڊES8TJSs*kJ˪Y~7)s(󹝲ͱ[ÕԯȪSKƲ鞶 U],yBr8$Z*4=Ut`0;Vg걖7;tb)w\Tp~#E؆MLSyj92x]vv Rl;tdvަ-  G`*o((kp;hNb.6:zv  pr69y/ob@; P0 1q꽥鷚:-\~MہZ  ̤T6U]_'k_鬝l]`jgV3Gh#eیhZK 2vXqyj{3~` UPMӯzfM/t&Zߚ=z{)e Cˉ$64;JDN" N $ lD'R'awPhRML6"@H;(4 H&& @IITShvQcFmklS`S/Cj'`-u~cG8SjsL c _xUQ8}yl)q_Uo-/!y>SOO KJ_vTqQolpJv7ljKrN72} @T:f|.?Վ},LJ&lŏ nz86]>:.ŻgQ @$yzcSLUJˣҏLo!7mY=YURkeGڱF,@JD9bz8ߚ~J#_]K?ʣlU2h]Z۟9k\}_)-c1mwݙ5)50>*6W m3\jmw'&SjnܬxFf&cp Ҳ.=hK#ӫq\4{ .QʽknnҚjk!KKzֳq\Hz$eVufD=q>(_K=O{H}NEUL4Z('驪Zaڿcbr@NT?4ՄIN<͖c4;W~,J/K,c9y|h9MD= ̶܉NIkuCnw>Q~@ܡs#w6neqW^zK{W!}}myr鸃7+f\կ(e.?c1vcӦZUIcݯ3Ɨ@,;xrhtU㫾Ҙ8XVԛ-f2vi9ìxVSQΉ|1,Ovl|LjZW=S!Tg~SxE)8C01COO(Ohc~2NfˢX i08iNW=;[ \Y j?lN^&L'^53o?/Kk~c'•Sj ~:M P㠏7t jFW`f ,rLq\'mŠl)78+^c?*`-Ƌ)ovKu%?7_azٔg3{,nR:r{wgxglQ8=NK.Z;&A8cC'apĂfuZn#L:~ EŬ>^jk@'g )Z"ls)uhk;П+UEqY&fmʟ,f>q蔪Fn:onGvYrƣ]r m?wݙdҳ(evkYTq-e(RU"+iKu?=wZZL} *#t^E~wWUHY>2tyxܴoؓw̻u`SY*v͎ؗr>bݳ<U ӎ%T5/ މX,zq&vz>upا{9Q֭mwgM u,^qQ}>k0>@o=nQ R[U3( VTkML#GϾ[R[55 @Rԥ~ @`Rjf\OlQ@JmqLKR2I- H-  p)RRFZ?  E)QS3.E@J]H'(ɔ~Qn~l] (ϗ*{҅Sכ7o'zG~tg?flcOΊO|쾫li¨#OHw(gIg.8頹C%V9r}!@`I7~ZO*r&Y-O6-W,9 - _p-^nTNH֡L˦Rcl+氄:882SI^7n{ޔtG!}^Y`3)zW`8U6޼[p-ݫ㦿V`yŲ#f6zӍ|e2s>#WWg2klU=߲>+S*#8{MT ̏tqχ(|2 PwYl]`c)©\'=S;A^Ձ>*ǝ, 8R*şW"VoOꄃtC[KW)J]sj5_r\'.+c?Dyrlj .3R{NA6Ri!#[M>7/iQ.S$Z^kjźjXwz[HKk4NI9w-v,]?6Aزo1mI(jq9NLNjq0}0<TW D<Z=-ɔ򗿜F%Zj-/.].3Zj 8fRꑇ_Cݸq#STrqm=txutkCk}6R93_6MqUVٻ'Z*L*kwO/V"@`u-TLiٔLS-ŴO"r|\^qӁ=Ԣ1GD/ o-udA#@Clwk>k 85x*mk 89k 8Tl)uPHJN4RޗL@Jށ  @`V@JـN& NF 0+ fl@'R'w`+ tPؚt=R*()ѝ gΏ9$6趹,ZlC<0:86'?RjU՛!2iqZ;q c "lU9X_^P1hR/OG +݂iQ.gQK#o\.RT6HϧGUgkY{:8}ك ٍCAI#r>MGTY* vH 1;/獧O:~0vҎ$z>MweXKcI; Tw@Lx S^UQT)7J$Ơ l}VwdPu:0 j (Hӿ9p*gC~)'S|^.7*W O>M7Ұ4]K9O?mL |r]gOXoKDZjcN @E ~_A;-<y^mKRnV7@ݭA{::{l@ug5ܗ{VsZCMh]o!%Pob.5 3R\R 8AR-JR6 E2 @1 W@J @2 @ ;6*#@)e @@\)wlTFR @R*ب9@qTܱQH)s \}rG2Tϗz衇.M?Fi-8zIENDB`PK](:@uX-Pictures/100000000000003200000032F4F2703F.pngPNG  IHDR22]sRGBYIDATXGYklu؝}rIDIY%;QFSF 4@[͏QE- @hE`D ԏA$9R(-Q%J|y;wv$2EVwswfʲȹLN%x,kHc9XwXKIaM?ֈi0?Ta ̐Rw?n[{ r6~NA`م{ ko籨&{w٦(r$ h6jZAq%Ig_V5.+ v}9=%˱ۓPȁΗ g2#cH$U{@ "ʫN8S_kL{ґOۓuMS < ;Kn޿==cGTAzl-%0y陸ή@l:'LA z,/V?9yrW>t^x˃6h`@V`I] }&e"(_%W#Rq[\pwkj:.z3hf~|1ɹb=ɞ&ih~ToZnݖe5\C94dT|#{{oƋ%AsdYx>1K7*Ʊuu]HW C+YAF ]9{O\ܙ+sQ'Oz.A <+O>y;~)7^KI&0u`Ixl}\nh.o#*| 唡vU\D"5'rϭ8@Rdh+|"Do^:w9r\ζ )=)c 6[yr(8څ{Ys?|W 56ծPAQ!eL񻟽}:44{Gݦj](Ű T"Dej3UY(0IQl3=O\ҕaT6ÇwoN]|UffoQ‘ܙ}bFG, +@HdeG8ʖDi콥+`'O&Bvj;zPޛ'"d ?'LN'&d$OoSɋ *Rry^:qj&b춰e# *@UU\dّ'?W;s旲I&JLffϬ(_o8T -IרAaP;WJzf1#C_W!T0>كteb4=շb[PQ@(;aҴ900}x>G C q st쾚d{E89ࢍ:aKޒhٮ=5u X YVͳ;v8$E %$ז-Gpɴ%b5KLZ Ca C?2i.^=A [A!;s gx[]G]RD܈㎔2=^>'C{{# Oziuε+^X ;ZBKƓ'bTɫZ H2f{n[>#@"aPCnRB8ڄqc #{=l[&XKj |,rtsb C@&x)01fG&w(p]d7 g$inQ5p/@A  i&8R.?w>R l6!̂LU)QM6 З-{MB8%31Ekr!xc/>~`*z+b~|*TKUz(# -K &(7RWc8xL& #k`\&&,@ E1lJ*)% cùjIB-ܭҡb'ȣ s@CQ+XEOh**'o~tĮ(.cDDAb04&46"ȤJD* hEA4^aF: ʠFZ Oz"i`ID,3ǴA xB{?H'|ȑ_CvX15~xx"w@ ڎ+6d6E4H|޴M"Ћ ̘FL Zvv 2E^<&H;h$f+L[y닜GB^ Fz=,%|>\D8Mvֹی_pU0̀E1h顾60T4"W)=L͚B6A p ,vѤϭ{@ZďT.̙'u= 05"jV$ uG5qgZOsP(7D& 6j$Z -,#9RTu f S:y`tbU tUC7!ZZ, =(u)ImB-9ffݮ0=NxA^1ݚٖ ; f`8Yr K+GɤzA,G4=n$^<:ew-(kH9$'~m튠$=ݨ\ ].}Naѡ uC"ǓlڲSF4u@Ρ)·]'2l)8-EX W1ۿm/jQq'G͛+UPpV0rEK}#߉ oz<"kK/JNZŤ҄V DKmb#68jQq|Ii GG|ц#fff殟~10Unt ;w$p#[qp:8֒c]" G`H1W//̜~f;}u`h׋\.XI|ҥNqrazO].vcdֈq$DSJl]%ȩQ@~aqI;s;_9]]흡Ni[Q,A|V/-VW~|+b8K)+Đi<) g ᢀ8~k1_L.I,|zw+]Fz8sɩwR=k=Ju?G=[ɯc?١l8qۏC6Gg+ZȉwF20G֤oi1M-,Q #H>i0_K`֧PO|?A/"G-Lo\xSlr)#ŮC*E^SS_Z{cn~.цڕGAO֏oC%O31>2JW@ tf$.9+ggҜ 4q|/o^ίc%)1Я0tGsYPls_c=ίaA/KEV4 j Nk㑑"C_/+h4R|iᶜFFrGգ~L1'ſhp _Mk/tv]^Cq>/\˺-RiB=ίYA_+Kָy=jA(n߀{:|DW^/&>!/ZlG\v#)4x?KO| =/gWe'@x?&4[1/hn߀{:0x4K G֐=4=ί;'M8xğ5UM|2&n߀{:Lj##i"A_C_gWR6? M8x?15s oN/?Əm)x?&Y.1Mpp8s3}B梓B`S8 c?sT\j6wٓjLag8,᱃ӽi_ēk-*It8Px<:Ro' 'hBkcvK,|BW/7]ʳ"#'n:dzѴ١kS+? W@8"^KdT'/kac,k$:iCw@: 2l;nbJcڡ`y|{zjh^erHq~_jZMm =գt ڤN2G<'^+VT*I< }V[ %U.! #j-{.@7sw`c<7SiKm9GRy$I'a[_.H<:Uۙ-<?'̷G#;5fvrۤUgKFMR`.¶xkA#W)VuNTO*;KHRѳ1=!5&՘ڱCb TpsTM+{xʮXgoõg-^YA}MP$%.րE$M;+EKxbbFHsXɕ|r3}}Z???PKئwfXPqv3׮=ST/9rOA{c֑>c7֑>c78h-3c7֑>c78HS)p(!F?zi1HzZ???9B: _5\@v=O'?ƶ???9B'<>#ZGG#ZGG(\G<kH1hkH1h ?h[i?i?sO?ko#|o#|o.b|OOm5Ϙ45Ϙ4rOy?4|OFƏFƎP'?Əy?5֑>c7֑>c71>'?ƶ???9B'<>#ZGG#ZGG(\G<kH1hkH1h ?h[i?i?sO?ko#|o#|o.b|OOiT[4`FZmIm#!JJ߼s;-<G<5H,tH 03 rH$Vt6yEQC.m9|G#Biͪ]y?4|Oilc7֑>c71>'?ƶ???9B'<>#ZGG#ZGG(\ev5H>Y$zCPZFla+LNUVflwlgU @E}ldZ{=Gk?ohC~}{ֳo o4>{=Gk?ohC~}{ֳo o4>{=Gk?ohC~}{ֳo o4>{=Gk?ohC~}{ֳo o4>{=Gk?oh@^**k?oh[r`H4ܜ˃>?_ohwW1gtL<^2i5h}4/Lfaoh}g|>o h}{֏aoh}g|>o _mj3qWteV |}6 jx~ Xs5]cbqSS5z+$C y}:{cÞYcb-:N)RRL_xy[~|_"R8;HQ}gkU,1`s]?۟Og'?e>'?O\*}(stUmfA-t O9TstQYpm6nWtgsN]6͔29R2X?EsnO!2 <8vLt, ?:[Đq!N4V4NbyfY8gn s,u+myvES͐2݃u9Kk 1^ɘgi]>~Mt2sv.N. 6Σ8p1|c5YukYx=.;z$z^#RzdZk8-Uz?Z|̎k)FSκO+|ש"t[o·\yht䃙3єg8o>=3H@2p 'rds9O:2uɧhKf_?AΎo)Li#V!8tOT8-נiC ,Psi9 kPp;ԞT__κ42کӿt_G)W9_*//GLEϢgh ʋUϢgh?34rWʋE?34`这9B+Eu`这?t_styQy:꿰t_:g/ƎPQy:.rT__Ώ*//]W>LE9_*//GLEϢgh ʋUϢgh?34rWʋE?34`这9B+Eu`这?t_styQy:꿰t_:g/ƎPQy:.rT__Ώ*//]W>LE9_*//GLEϢgh #e;Σ.vg8sEh^|6HFF o 4Nl'o>g\1$aOS?2,d#ְƗ$'i`t$@Ң #5nFip_cn' 觮JYLpdsԷcRJ ~=}鱯#+[ ޫ5C$oɸGPz`1ǯ֭[k\ٓ޲ c 8犏)8sNO]Kd,Q\3틀P>< n`B9`s(/AZFE^C8<ޖ9}˕ ? Xm'S 0csދy -ukxʱ Ixϣƫfc!]q=p=M>K @]IVߝ_Υq6hχO.@[9;g (SL% ^baH InyEs˪f/e<ۏ`G=i7#;fg1[t:<ts>FU9NG֙%+)|ǝ_Ώ:?违>w9Q4Y`w槳٘!`yb8ַ_Ώ:?违.g9QL3 ͟?:Ng&FvBu'$kkΏz/G_Ύw9Q>4Bmz Yyph{_Ώ:?违r.s+-}}J*˜ :?违t:9`E{E4M}GՍ<G_Ώ:?违KwK@ɿ14ooߘ<tyEooߘ7ot:<t|7oy7?Ə:?违t:>@y7?ƍ<G_Ώ:?违 <FMΏz/G_ΏM{&G=Ώz/G{&ѽ~chG=~chɿ14yEɿ14ooߘ<tyEooߘ7ot:<t|7oy7?Ə:?违t:>@y7?ƍ<G_Ώ:?违 <FMΏz/G_ΏM{&G=Ώz/G{&ѽ~chG=~chɿ14yEɿ14ooߘ<tyEKUEN9abr cm06g N~xMt2t4I8t:+mYdĒ2J>0kaa?7'8ihn۴;{1m!HSfvC0` yǠ~-&+3ofFRLk?=j5,,|yoNz 6AXI{f*R$ï״fijB+[xđgqLh=hms>s$!»6 [UUޒhԏȗ*#?uttW9!Ӳ#qڝxu:lj3Ĭ<8$g:+7&UC#mvFqKc} IKq8ʄωmBA qOCg529."H{Cq⇶3Y$0(?, 3JߌT!fie\,G (L$)xd WǙdT{C50D3prsٶt@U7,jje*Â~yKmm%n. PT]G#G>hwOmtP+C2nr[pj]F8f"xA[rƻ2 pOsJhn5ԑ&2av $sout/c* $Fz7l 騮vWTC L~[ʧr:BkKFK@{\.q N:b4((((((((((((((((DŽJc&K<%V#7K} սCn,x9ac7.EǧJXkilU:z^.w$#""=H|Kt ׭$*ݳpq)WZxQ"r9u}){ r%'$?ֳnKEX BIfռXu}y?agܽ %3x׽'$?ֲ,-˴s>mf*oFryh.wxC -q`hx_\z{ v} Կ\oKun킳BmfzzRi1=OGթ(s˹ -[X"ʢx:Peٕn!+!ڄH0z>KC]In?Zݲ*L }<qYdQ}V.$_֏In?`DqqSEݱUas WmD }KC]΃[G$_ְ ղ-q92JSqfS$̀l~4hyO:-w3}Z<Z?%.mKC]΃[G$_ְ ͺy2l~4hxO:-w3}Z<Z?%.FV$KC]΃[G$_ְ d <@2J. ,'.P%}GԿ9xC -ul BDD>֐f70F0Կ9?%Kuq2("7 2z>KC]In?Zݳ*0D }gHGթ(s˹ -[\L;Cl- zRu2 c.ϯGթ(s˹ -[X"nex__ a[HԿ9xC -|f70V070)p c. >}Z<Z?%. ,'XzQMV̨v 1RPsxC -|*B0LEʏS(/yw7 4OpפUeq]Fc7ּQ,¾txNGcďKk$M Ēg@ nC˱cݻ۳;v})xys\?5_:X6ߏ,cw֔Z'|_ZF1ѣ`GU;`A2ҐYZ(@-a31oJF1ѣ`GPlm X n#'JlX6Г Òyc}Ge|YچVІUڧ`ڐX*XC1Q\?4}V_ WSkW;Zqfv6ЖqAC\?4}V_ꅝ0T(chTZ[r>޹1ѣh=ԛF 9˃6v%vdOrc}GY0{_#vPhAa|ғ6B _h}>/ku&ф|_1K;mž 3\?4}U0{_#VysI=~n/?4yU:ejfhOc ;}>c}G_]YZ( XGb1=)>hT`[qX>ZF1ѣ`GRlX6Г Ó( -  z}+}<Fku"BkrF>S=) VSkVm czF1ѣ`GTlY$ĠYګ# hC ڤ GWh}>= @w()ѕC1ZF1ѣ`GTlK3hK2cdCH,TЃޕyc}G_:chTZ[pX>ZSeh\}k}<FW4;'`JAej2Џ/b1=+}<Fkua۷m X_)o36П31}}k}<FWn<;JAeh^XG1~yc}Ge|6{J nқ+V.Zdyc}Ge|v xw=>BkzW-?4yU:chUUs,`_)bBK9(>a}k}<FP - HA=4X*XC@|zW/?4yU:chm`*s;R6(2W+?4yU: KdgKxp G}'F8?o*7bb6ڦc&Z&w5rodK52UQkPnwFޭ쟇Z a'dOFtF9QcN$b eN)h0idџ6# (#7?1RkњEjc n{wؿJ͹[N3$ <l%d*6AAtL݅rϹ5NtQq`0u,ٿEΫX d9diDZ<&fҴ-7 +lVQpH?NM%vQԷk<)68֚jd99#=O1<3lef:"0~yTs}o#[2x—2x¬,T(b87_2xo yy}[ȯm-W̶'2x¬yyqoGv+f[SlM6zns>:N_k?7hƳFKϹ\PƳFk?7j{YX(cYqG55~=,{?ѣ}E}Ö=og_k>k?7hƳFGpb54cYqWϸrDZC}?ѫQg9cءgo(PƳFk?7j{YX(cYqG55~=,{?ѣ}E}Ö=og_k>k?7hƳFGpb54cYqWϸrDZC}?ѫQg9cءgo(PƳFk?7j{YX(cYqG55~=,{7zmƬ2՛zM[ڗxK'F8?o*Rr)$BUBW݅QT#KBjSQ-D(Ai![LEq#-hڼ`sסV9h|e(e ?~Txc-yߜぷ}sw$a$$bm I1?^^& 4G&4M-rAš[jvxuIIpZ2 & t,GS?=­֯wAmuK;y`/:0! R糺_zlbt~Uy|QK?*6/G@ G.ؿ'lbt~Tl5Y ?΢ؿKc:LE%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@u/X:OpפUDŽJc&{z?d?f?d?CG,aEU+6[cd34|sZU ֖G <ܹܹi;#?w &hm|ml>5ЦY~W [QWtIK{X-aex?.~Uܒy6iSGZ:Y&H13@ :zփ]k~n0W d݅gإqʶ Lcy9|b[tE*$\\4܊w#8׊FtIg 4A`FEZLd`v=1ey8Acvfi.~(9`>F;r;9ni;Y&=wǭ] [}p*'-$kh2p ##wًR[Iw8݂9~??5"x$k(쫁OީVn'?Ht?*17~THty#oTީPy#Ջq@'?*>H\tKETQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUԿ_`?1^qV+IC>BUBW݅QT (GJ&ӹ@$a~s>]KGzc}Z캤vqdAT oYfUUh7ԍYK;V$ d3+}(;}~{HRso*L]Ԯu[{+oy'vfc%'***G?أbG4xR_h,T~j4 #Z¶<]gzJ7WzhgyViJdCu$~=~nUZ;89F yﻞ1ښG?أb{OH$!|c֭ThGG?IE Џb4}B?4}@'ʒ_#2IETQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUԿ_`?1^qV+IC>BUBW݅QT Wq S`JS[jgjZ׉#V@Bu='{hjmԏg*pbGǭV>uw\mpy=)>t۔DƤH @i>dD#bYYy62OLn'j|ZVq-ITCyZ)+sd+#N4d2$VkP,O. "ʶ25mei O#<}:χ^dKOs#xsJ}2341Xڟv^v y.!T*X7qל}Fvw~q#5RMHc "Y׷RT- |s~ M$u3f>}7K87 K7''^gZooƍ}7y_jt.Iv+i ])cLc)ЎYǤ_Mt5%KIk,F~ׇˊ%Sc9%()ŭɨ}:<cfj:ȍf}:<`:ȍf}:<`:ȍf}:<`:ȍf}:<`:ȍf}:<`:ȍf}:<`:ȍf}:<`:ȍf}:<`:ȍf}:<`:ȍf}:<`:ȍf}:<`:ȍf}:<`WԿ_`?1^qV2N;c&{x7~)S͵2#끻جf-&In ,(ciǂ~n^}19UѱA=_Z 梬YGWxRo v܈8m7@J/V7q% '#wϸ/xco|(8oJܞ_3Row7a o02 cEuQ$p8e ?"6PKKq7A>Wm>FGgsأ}#bHG֣ه9Q~m>F[ϤѣQ(t?bHGح?a{b[Ϥѩ#7da9Q,(̳tcL1F+̳t2}ҏdzdcb?J?,({0L1F+̳t2}ҏdzdcb?J?,({0L1F+̳t2}ҏdzdcb?J?,({0L1F+̳t2}ҏdzdcb?J?,({0L1F+̳t2}ҏdzdcb?J?,({0L1F+̳t2}ҏdzdcb?J?,({0L1F+̳t2}ҏdzdcb?J?,({0L1F+̳t2}ҏdzdcb?J?,({0L1F+̳t2}ҏdzdcb?J?,({0L}'F8?o*ֽGV+'IC+U&5ycb~!U~!U 0(Q@Q@JP^FX壐g9QTZEef\@('@+싆B/m;nuyǷj.#Mp̨p oʭ^ܮE++y\t\{3QmY_IHD9ZUirvQEP? VY#Nit4RjsbėZEŽis @ X *;0Kq<ߚh:b+Rx11lfxU3Ǜ٪?٠dFˑ7Y(xD1cqJ{Oʵa#2եٶI$JVʑ3ҳO,Q\ ~3VIAYzUTp\Ko迕ChZ .*ϋ5 E7_ʏ>/<( Cl*6=ϋ>/P7_ʍEϋ6=Py|T0:&TIh(((((((((((((((((( x(88I8{Q;U܍w'L3A< ?*]G/O Zw)bn>8ݎ3VqԣE^^?#L\*ɇ)F?<7~GGaQ̷+Hm(e/匰{SzoIlc]vxVu[2)Dl~ ʕ'93ϭEx7tZhxQ?ШWJI+*$㎙ϽiI-ŜR[&a9?; >g? yzʌAT_h} >g?<%g?}(`.E?У?G,p=RA?Ϋ}){g(~CA"[B~#д:Iv*EVд:?-??ΎIv [B~#д:9%.4Uo OB~#`,U-??Ώ O]EVд:?-??ΎIv [B~#д:9%.4Uo OB~#`,U-??Ώ O]EVд:?-??ΎIv [B~#д:9%.4Uo OB~#`,U-??Ώ O]EVд:?-??ΎIv [B~#д:9%.4Uo OB~#`,U-??Ώ O]EVд:?-??ΎIv [B~#д:9%.ǻ~Zqw)HFcM\-4&MI-ӌQKgAIj]wO-EJ(f[ֽZ4'ԊO"/ȭ[[SI{/gM%򥅸Gb&c082w_ Z!I|<"Wq{ǎ)4O-Y%;H* fF1O"/ȦKewu3sltߨ{kO\l.aI 7,&UȪq)*{-ƵAYd6\, 6cߍv;ּ""ȣ_sʬumr[gE+_qLzljRYW ddQ#qq{_OW=xV;#0N̜Tj/Ntzn+YsjUl^֚ie2'a$@ JY>1,%f컠8Z/]Vk, 9TsKQe/Ȩ `eR'A[muB[X`ʾ  'RI^߈r~(I'tKcYcEr6{ڣwEqJ\d?$y!fY]ۺr?v=+Dx>mro%ܖ{z))'x Ջ@mY6S[P5Gl%c a~e 0q*i/.x D9ʒs=}|/-]Y흤i.hh^ηuhvQ&^d.UP9ppy樟 ecܸ<ÿ_Ѽ(Ѽ(usC6A ijyH'N$>ӠfcvKy?Qy?Q[hv(OB Ғ,ňZl|=rY <5_F~F~jͯu4W-y?Qy?V_Tr:+Ѽ(Ѽ(GSEr77Tph[F~F~Mhh}R]ڣoҏҏK{Tu4W-y?Qy?QIwj忴o?J?o?J>.Q\?G?G%=:+Ѽ(Ѽ(GSEr77Tph[F~F~Mhh}R]ڣoҏҏK{Tu4W-y?Qy?QIwj忴o?J?o?J>.Q\?G?G%=:+Ѽ(Ѽ(GSEr77Tph[F~F~{U².f$3) j?aR+3H˙\οjS_ʬ.%xܰ' <#D1${bo?(%O.=1]m*JĸE9oXhm,HmJ|MF,XJpI's~AGýD#Y\$b;OUӤ|ҤzǞ*){IcOi1Ej3($$iSTvOhgq9jO={=QuYBZ\8W>-l`Ff0 1?Zk񦝨ߥi %e1U`*HҴ7)Y>DKDg xP3|[*Q^be6ץ '$(QEqmEIDN#GŬ\]<##9yOGG%%d>X c=9%{`hiɨl_1^Tzti&4f_Ϥ/iyZ_5Z!|/+K;GG2}%hA#K#ik72}%h̾I9#_yZ_̾I?/_H?5>ϦV8n%7 s$ޫi|VȦM g09ۛ)8/J/#<7f8VAvtSЖ)%NXr b:@ٗ/W'iyZ_ Ƕ+S( 9<9I/k+Khh-ɾ[gɉIR]'؁ꭿb ^VAv+K;Yٗ/GeK|A#Q-$TM@c65s?k->/ݭe )$A+7M_4S1w1wkX{zc#??z(;${1w1wkG9#{({+^=NG !G !ZQwH2?c ?c עoSrG؁V,X`ON*F[>c;BܝRI- .5kkb@%PB*?_s~dkzgۮEwUXFVԥb\q 9V:#Kif/6l rX`zW\R5Sr:?:??УO*,Ǯ#c̲L>8Vn29#'ӯUQ??УT\:-݂9i[ͥNO?UQ??УTZۋErܟu惭Ÿiv@ryUQ??УT[$݃ch[-nyDV:x C%d 㚐_gzԾC} <g{i"*è\3~wNBA'ޮ}?ƛ??УG=zKvS"*c󎿥_޴wOB!Kn줒5?4oZ;k'GB,koZ;h޴wOB!ac[zyߣGF|gy( ֟??5??УEX޴wi5H_7O?z.w60HYrʛ"E<|A2/VZ{~d{i;qâH;W2.ߘ{i;iE)/\K괻~aꇋ?M"_jQɐK zk(_1{g. m3jj?Doٜݿ88階~2&3Xqk+.^"1^2aOa#ݞWn&k}lmzRq4Snagh˹ :Sϲa ?]tד, 0p/= |m 5M66EwtzE>={yLױyde]zrOC/GqI/4pGEnJgݞjևT|1sȩ5QꝗykWjE?"/yE^ՠq P˯D_Bԇ5K; Et]@˿>R.~?>]U}vdV.z? t,5*\g ע'ՠf?QRQWhs(E}㱞;y_ d/3 x9{Fw+;Fbp=8wWv_f--H2Tp~Sx{}HZOg=<13=(oRe1ڶҵK@m/#18#DҮ.tF$D20~VDD 0rh[4cRkkM. RD b3#{RԮﭬ,-!9&y1B`wfE1F -n)KofGxifby/Zm.m 0c`~h9B9xK{m^U.c2$n|3^5ώ'M[[5(I@/}ۘ媓(!Td׺{4\[O3tBU2##m;䁜=NigH{5,ǘvTݵ6Y@cM#isiUƗlui aż?'nL^/S=ݿKĎIx#K@V"6X)Πt*G\yQ aYXbeuH'y^AR𦀶&ݳ rv/#`1<9jw#}ne̡9G^sc3smA,l[&VkTʻB<ќof{6YB[i$;cϫ1?`75$N/! aycel`9X+6ڸ]կ.,5,iڕ4MkRIQEWFOj۩sN$.֯sOW3ZNy2^x ^%wq;Gt?W*C< ;Y3Qc7Vo%Rۑmq|GGہs_)[Z4*p,@1cJ(^ t]^^de>_I~xohhto/Q6q\fg̨!?d9AvQp<2ڄyZo vHn!6ґw0M'`2(-nYZXHE;hKU䒻}EC~|#bb7neAړq.>I U$0Esj_:4N5yEŔZyd{WmbѸS9 $*1Qp8__M7ؼ7wɿh[쮇J^j'u49 qXr\JƝQE (((((((+|]#n]{xOm빧Y?W*j4ECHaErZ5 U )bfuQ$X )Tk/ѿER'?n?7EAri3ttsKorx$xwIA5jwƅ52[i < smg<9ڐ O;mNye UA*GO vF\88b>gD8Kc]m?iw4}a; ]O"$ٮ,8݂nvv:u$dXa,^i#=pqS k-˿̈/Ē}rsSbN^duc,Ԫ, o|_Mep4~~'$;Lq 'l_6N +a?R"e;fؖ }JMBk㴷@"s"ɸJۑhZӜ럼}j(]CʘYG=@L tlQEQEQEQEQEQEQEQEQE y\W9wFuǜͿs?toS!۩s^^u?iD?W*j4ECHg=ȵ(Ծѿ<%c73/_zc?^V )6rNF]Z4-żC"I*H98|5Y(4M6+BEB̆6;@J6FVLRԬ|,WivZzOp eb Djjt"[@-u?*]*{@a{xC[g\|6H_@}! 7a?y~vSTփ ױhj]mP;&YwOpQPQ^]i~`N4\b㝹8pC E<ϾVUm ;UFO`j ( ( ( ( ( ( ( (!9*.κ;r?'d4C^u?kݫ|]#n](=j4ECS\_i 6G]Er?I>J+BB(((((((((((nʹ˿7<m: ׄFOj۩sJ |Z?P?W*C'y"MuWQ\τ}vA lg9?"Uw$ESы"'G^?.*^??bȉQp.QTbȉQDO*rDO*?"T\ U??"Th\hF/OUOF/OU1zD⨸(1zDы"'EESы"'G^?.*^??bȉQp.QTbȉQDO*5y\W9wFu=rR2'qb]s2Av ҐxOm빯v ww4 ˟\A Ms"0(QEQERUӬe]WpIfT$zՋ9-oShݐeN?>s?f%?ƏHtO i[kG_Ѡ%?ƏHtO iVGi{jn5gL]M q,Z;D$U%y@_%?ƏHtO i[kG_Ѡ%?ƴ#&%u !A+/C.f<It@K*'q*Ӿs>8%ho\ϼ?/jEo"E j]v dO@AaXj4}*  pG@dyG._4P2o\ϼ?/j٫(WL9F54R[$Fwu!UG$zL?ȣ/+r ۩s^^u?iL˟\A Ms"0(QEQENC:{W5rSXѵ{GDZ"ʻl}~uЩߦiG]Y F>dO$9΍dV>x;25 o&LT4Y~$nd@dOS]b #(pN_V=<[7x1. C1;I'vp?ЩߦhM_7EugB~;5M+0u/EZ:Wy 5ju`գihs]n2)QDY`2iY/jk1iCrY٭^@ 11Y@g)X ueq,o5؞R!|u2PruAKqheoVEujyQ*S1 <_ IN1kr ZT^T;a?siv^"/[*M~di@FRW c?'Oux0(V-N[s. tI灢.$ 33d#'b x@g)xEKQ[X:{eojl]2ʺ+|]#n]{xOm빧3.֯sOT5\|JMp* ?E #߹_z,sY #߹_zVasY #߹_z,]Er?C% !q@s`H!DՉڪu5}expJ,[ZJ j$0:QgZ&B-0; h?v9 ;c M $s SA<\R0] BckD!P#=:qrn$l لh Do8$6)Ib "@EvNkFߙǖl30Ii (]G)}㺖`$1 l+H!86>-.Q{b=p 3v P0!`H^R(?0HHP$uзpJI1)Lo&Fpppk"<^$er KlJiuoxNn #). vbӺ/vF4)q,rFs 5 P0Ԍ\p۰a[n5n-|#7[K]Q0o'66}U~db_4ᦘ[V um 5Tp큐Vf ˨E\6j٧`"8opH(KǀUfc`HkqAy6z`ԡSgqoxbapsǾR wwgCݞp؄@c͡O-7yo-::@_^^ H9=z]n<٤̀P0>~'bПÿ/}g٭ONѐ-s}`(pBq*{jɴO>٨WUUMy?JvɀSB[4TI%T]1/8'鳛d^yEyO`ySV2 Z1Wgb`g*ES(O/Tn f5BgAah܊[4,UFVD;ROײw&M5Tϧuq>%nx(nGXY\VPhA1jc'gmbsnذ1)/ˏAy0_AVyiYY UB5|7";%{Kfiƍ|J67k}P0Da2ag0Č+عsg) >z`h+RC@`eQh&O%"nnnpժ}$7Vӷ. |A}@XWXQaA0`R UU-d$ऑeeeaQ~miɘ)^̶Lf؆ގ)vPPsi׃M{IH6KK {[Y;Jڭ ;=_wR͛6n|&Z{~j0@Hf8lɆ `a[P0yUoUHEܐ{&+J\5Y!d+V57(DVfOݖך|-L8{^Xk0(E`}8bY)p HMĕ Mu35~Ȃ}UL/L.eܱ| :6ijlq |;E_K>%(Í#<Ɛa$_W9|/!/Qk1rhRT* uQWFŝ>t2 '}bhk-(-~jY] Q3iZ-x0U]V4ԔULq'A`X3QN8_E4/&.ix s1U==ɘ1wyl*OY<@B i)n1 Cz' EȽGvsxZ O>!I#/Mw eHĻ4( /d>,6TB_N"@" f/BA;}|N4DVi^Y]swIFE-N<{weAHQQ= Q-_-p磌bBp{ rqE׍F?.7E]jy. «&کC3u^G;^>>c?$ 2BI7l 9\Z6U#:5Cz\00_Qw4 )_10ܴ`䁬IyXYt'hd !p5u( {^ gr1W!`婂p{8p Ļy3zAhQ&G] w[>CspeỢG1 3Y#[ qT3jeYcUS*FgC8ˆ`'c2;^~3QU㘧#l5q+FS0$F3w*n"n9< sk B޲)-ʶ4)fvJ45&ʦ; |{qEbMYL8!\)ǑǦ 80΀lڙĂ8:~繬VbNOX M"K~OӚwh˺IED(Yp%kT{oll\gJnqCF&``DU똽6LC`,ٙpးR0doYdk3 ];XC7b  7!%[0!MFȞ}qy'ް]m| LhlwućUO'5 >Q{QQZԊlh޸鏛ѫo[| [B1a4-7Do"悛9q_㚇ԽS0Ǟ @b?o*юfB.R0!fk[d]SRvj 1-CAé\ c[0PG nyl[Rn7YnF\fEt-7 0,nY)M{7CdqV9rিۍW8?.ҴkS0Dm4j QhÑ\M4ptM8и鯣MCQOԴR0D# 4i16OƦWgbȋڝri趻'gΚw" %V-lԌݺ mYAaeAH-l /l]s5n?H%zB\l-Dal["4kGzu s`ޥ 9" \J# M{Cdtx4l=. ysǷ7֘nXu iK$w؁E3:5Ztk˂|h)N` .o-.kf. UgգS=-5ux6o8U嫩0JK}f42.>ZU<` !=tq|TjrV]  ^ˆ$H%5J@ uh%+ڥ` voȀ8-!?9jQ5`/҆xV5fP3b`H%@GaZ},S0Dƫow=6V?Z%(JcHQw_H+>(H%@[Ͱ^-<>ZI V)"ӫ9҂꧖l0ePH2o~Hǃ)J+Dv mj-j`aY0 a(64CE2f,@ۯ Snd)0@~; d·BZ ːG{~W 3 [Yն%qQ/P0,>j`2ށlT9{fJH\zqO8bJ=h9e{<* NxCF-8]FLb =־rܨ~؏O?~YSh5jƚ:>8k͔Z#xagJx)ﱊ39k'ʪ%RZe %eⱺ"cHTxI:Z)>$;wvD!o@-ՕsG,)]AW#DĘaa?=`H)bF]C`-}j& HRʳj(R"ԗKxHTxKV-Wk}bzG M9}inS0D18+%s PyZ'*ڍ4BKA~Eqv<廞~PDEGI3qs](BZYdb> lFbgʞ}wTNi_v0R0d BsY h Î=4_tw.#|ԝ[Z+F! ma|(BVzmR!I#qGV@*Qn +Չ=#z"m!$*Xe|xӴ\UtwTIƆUU&@LIabJz5HTqłnL=aJ('E\a=vy5R0䱽hsVP#Q;h?JQ0#FI!V`bO~jLT ޒhi% pEUǍDŖek3D"0 0Ŭ3)wN i<qxݗpOMdNpuaT8Ȉj+2ѫ'b]\H}д#8P]m u1E pGVSǛq6bcDnH IOcx0`QMP0, T4~첔x!QQl-S_xϻN(FJVf2Up=*^LT#׺a9]CSΟ?N|;{I2pʷQ̹9qb--pO*6icLFbXz0TY ѩ:^kCvW}јA`e*f~loc3go5;F65̻Fn$))7T!}Z^+jDdՂ'YS-"'09C-paO0%)LOS}dX<@Vٜw3F1G57lkH8°'~dX6@cbT ]n<մmqqm;8Ȱfxa$*f;dreV>G1 ]\=8Ȑ:,="#(KױX+U2G6ǢȞvsxԐtwc!$*- HT(Yd*W(`-> 2aǖ\[@fQ~zm΂"PQ{ZPx$DH| KĎL]A:=B  80uOqTVѝE>{9^3W !)-5uVwټiW(˗"n]%O0` ^Qº)lhWMIQ3t)@%/f)*wySZ -C _D{< 9e>OCMYń=&Jp;h``st3+>z'BE+0@~; d·BZ a-&K ]x;{(&Xh*}ю_տn7 1(}6/lnyܓZ}w`Fˢxvz;a1i1 r_F-ЊSN/J&gޕ  !EEu0G|d½Ga76Q-rv8é'MypC}s1fCY$][nеgzʿ FAI>uu۸=$.CfU=NtJbw}NACX5[czW{cC2>Z$KOУ?SެytT FX|(bipgnG~1|6Lઍ'cu9G  `XAٲ:]Rcxh?3-b.<ٜjIogF1d=ݙQUyAоr !#{B64L@MX} ,-;; !6FolJ;JDټ؟p`!{Q0{ٓ鲿-QN*Ȍ4.5LpW! b<1iX輦[V u SަxqJt d,jV R %@pi@pP9&8;zvL P0 u.UkXG\BMOd9( hi5 i'0"}@5K;"@`lh(IR0Mml(B&]] Vс)qK +ͤltg dx(rai櫮< uam2Љ>CuA`vU/n0+BT5܂H>-C0PǛñ"|<_DxqGJ?g@ gKBP0`t 5v~5ÍfІN0-+ &@ m@zۋ'#Kvhd`&P}'N;㗏:KT6u-oH6N;-o k$:w(7R[K(abp @0 =(5yl~pF 7`9ֵTvԟ;Wq`5NxT6ZX| YCy7j+q$\ VA6ZWWPh1 }:=#R|^81,0yeLa"$X9߅7I@  -D'`m:Jֳ]Ja ' 0[HHM$@$`4*$ w`;l= &@0IH(?[O$@ P0LbA p7 ֓ i ӨXHM$@$`4*$ w`;l= &@0IH(?[O$@ P0LbA p7 ֓ i ӨXHM$@$`4*$ w`;l= &@0IH(?[O$@ P0LbA p7 ֓ i ӨXHM$@$`4*$ w`;l= &@0IH(?[O$@ P0LbA p7 ֓ i^IENDB`PK](:hUU-Pictures/100000000000030F000002412A7F57CF.pngPNG  IHDRA)sRGBUIDATx^ ]U}I2@'` >a𒀈EH|{k۫QӊQܶ6Ak"B[_sfkw}9V  &гUdK݋  T*Zm42<  *|J-  !0yW?Q-~9F5M=RjQ @k o_Wa}QbT+޵5L`oVhA}4ľ*Ԯ*7Ba3mϘ52>ĺ3} !Ԍ iz;r&_};̴g^{hDu{v LGfd6mKvpNӟ2!f>Gvu_i\CKtQdi\w LpTzYͬFdxdz P]rZϪӦqgpϚR0ܽUaKfIppu]%}P`Sl3pn)@@98Ktyq\94W!/ȾS ->ԆrB8괙2s2^})ϖ9}G3K3o疔' S3^Ӹ.qsKWߡCoZ}y;%K|o(Ϲ%}4J" l:x\hW@@@@seKwb1 J  O<_,jl5疶׀햇odȍ[Fcm/mzM{[mN,ޯn_U'@@02sKGGn=Єw'ŢYb  MSJ:_8qniڲѩ^qqG,ּl'Mckwɱ}'D$0ɟwl^9u.x/5ǜ)qziOj7*:ϼfr鸳?-੦X}}j';JFswU$w>xv/S[[oںvoj}V_z>o|R}&}~/!o ߠgP}M}~ކ4Ֆhƒ[F*4{jx#I'N/U=qGqp>ryD<yTԲ?U:?ŇnЬA;kD<ǝu0U:?OIX&{L^u^WLN\N)VknIrgW$F,*0 M xN %}e%qN^~e8#/M=PE7$-pJ\ynij9 e8y%$”G@ ?^$.050y$nZwxаǜ%qRJ m+&Z@, xy2lI-~q1{~GT/ĉ4[w,ć;ϚU|}#pF+qnj%{iz啸eKSg8qӒwߒuIU"g;( @~SJ2hdS c[T-qKZ7WCNW`DREWߖ_w$LQ6.oQ͛/ ;d}<۳zpןS|L歐9>!yO\}{TVg y~O@o'ąCređ-=U@V0A ɖ5ߪ7--y2=n).}'"I+KGE"[`9ټ>sEDDD)!Oӏ:dK=SdOW=4V|+9:}[J&Lĉ/|Q)HnK)cJ^3嵹K6[! n L;VD ܒQ^*G@p% I7@@ْ!XE@-d   [2K  P $@@CdK`@ "@T  `Hl," @AȖ 2t@ -Z@(Wx݋Xd@2bCvqđ-u<yI`ޣ| ͖ Ui -d S&EM5R27*ѩrlYls^ ܒOl) 5ybrdKOG \c@0/TU m7,QɖxOR>KwW~XBw ܽ/p_<kt7Y9Ogѿ9RΦ `^@J \{w B??G߿?{wݗATm~>9g~?6|X_]8p!%| `C3Ϸ̊GQWu}nB4^u/^ti/K7uR߯ m;>^Ʈc-^~esϞ5Kl)ѡ酷 4QWr2;~zM7vaׯ_nz~iN2}ӷeXCy/~맿-Oq͇͝{uZ}?传QW,k|5CO=Kmg?7{aL/5b(~7lںcEo![rzb4ui*oA  m+MJ7x={{~T~>r^"5VԒ֒ ??Amz/vn*'G_ܵ_~:k%meYW>qL>n"ֈ⯢L_号@3ʇuKZ JCQI.BrOkczAe1olW=<۪^j[q~na6lvũ&+L.aPD LN?;lٶS.m{??5by'3R)E}Pw<9C׽x,ֈ⯢L`4yGI_oo]:PqFQGjqJcʆ3, ^S?ytZ{򕑿:\)xk%:d2 ܹҎ;nݺΏ8˖|MȜ˜|gԌ*nIY\ n+,ѷoEFMm'&{'&Cq+{}lʗ*vምt/nm?o::bX/*T+#2[t*M%ϴ8BシKl+S-%s'*̺zDVd9kW_cE<*HJ#@̓NI@ e$&@íG;/R6MB[KPKz&0A_MB^CM>yOCo}"Ro>v|p&՛;Cq=wSkzWQ&nFWŸpZggJ/Rⴊ[ :$|+{ ^u[^5IjP˨79^ޣCRsK|M404[-f(:+d&^:Jj%Rjn&Vcw]*r+!%x􉧾['g^xb kG=8{Yۮ_SO~e:{⼳AMH:kdCj$ҿI|fMq ll)DeKыL~멏'>wUjXRn;[Vˏ>yW)Rn1_xٽڍc/nGr^s_|Gw*#'FU᳖Nl)I%8#LRZl7?zq1^#[J=k`CӶعs{̝;#?##BolIv?Nt}K}QZ4Ljup)'/8m8:U3KRc@ -S@2Y+jdܶvuܷMEAJoq%.J\,)-R,]޹zA 3#m"%풀xrp)X;lɎ3 `[@ P/[<@%[2:T  -9?t@ -_d=6H_$0D@l 2oI:W^qYCQ) _vk::h6OdDlՄՇr PM8re[pLr8UR[ =MIRhhFtʕɉ;:Cwdvl1c\1z<շFVZҫ?xA3Q#T 6Ơi SΛuuv(ߌU#7. f5;:@#B1-[QҪb4T/?w^ fWXb&Lޑ)Abp" 22yRkĆؓhiM$9烗 ԕ #&[2:T@h3{-M+&zIf=sK7i&E,G69;R>4< mdKzRA/4|%}?˦Ք.}0@ER4iv43mCܓ &[J& _˼)3 ]P8-3tFѿ"+$Ǡz;z =yu};|}J3[M׋'Azα@~ΌꑰCx*s OI-dTbҫݳT*oՕWy'=#0P3=>333eL)ẗ́WLRg/KG=SxR,d[j*MldK<="IbR @Ȗ 0tY%:YSLezhpE -;} _G.Z^id@Uj'__R@6|m"t>t;)/QG)|Yr0z9/ˆ6'$Fǧz\`Y!b&DgB0 v ٭ΐA+[JʪՆœZY%_$'wmU$54d' ZQOvl:VjvP )mCSۈޑ-zϘ|- 4uãkVy ̇DkPm# m!CUidKqwϘ|撋w(s;?pn|99;uv;c/?ؗI@@ ҆/Vs:ȣr^6gddˎ]/mK'ZɖNL^L3gnλt4 5@&O^?[ jC(@lk;:8C3}V,̙?8h'Q!HLlҽ =摡Wϐ'O31$XDjհBQBElVJ_+.XP@fK=㹇6kbrb|XG+<9? Ƕm߾c ƶto}_홾o?)sK&={YEĢf6Yu*z,@(@luwϞ=MdH;F/UX)$ 4dڽ{B*m߱S,{lo9?8?qȫZdL2#IuzBjDhy*ɰ\^¤^ 3$L/O(rA ͖Sq2gɳJbU_CSc{"DrG5kΎs|kgOЋݳ?_| qS}KГ1򐯞JQ nRzHHԤǫWChy/ ^ \>jA  H-zLLL| Eoe$>dȖğD "ڶ}Û7رsM?={:tJ[8 :?| W_~Ҭm-yKdiN_r$btyC˨gb]wqij"q@H-ҍk&&jJd4YmmwVIh1qbǞXCvu<#jkm5mn& 7^6 M 4xEt [!aP@H-?:w{jӞ=[fo#7b(а^yo t/_rEKi3'g͚JD &350@$xOuP ʭ䓬wahl@qْC_>DmlsOOZ=;~޴Yxۍ=oXn}[{O^w˓_o"WëB^JJ25ڄfy9T;ziG2Qg@V5b9"D]ÏMnѫpٗy[|DV{twI$V yU)ߪ+e}(ߪkΖV9f[uEVzR,5:UkBWi $kl @n2۾ed^N 0*[^'  Є1U.>q%'ۚQ ;LTK ssG)FT6ȖFgzu 'vқ?uG$`;bFdKyOrOE M[&}h':q]ѾH =AD\ >s)z܂Zv>,~+u)s:{v{w3;8TNe@@O lixo׵oX#mrebeǮ6nzq&SdoeX&G~ڭ: Q@+Yұੑ-{wxԯ t Оɖ^<2IU'SIҁ%@@@@f ^3r߆~ܖ["_JdhetƱm۷ص~æ;DzÇ6:[u_kFo?)*-R@ [ڳk9]=x '"_J'Q :ݻ.m;" NdK/xGyǾMu]E^%:O=  @C o}ΧV\𻧼Oz/x ~+şD8rG5kΎs|kgOЋݳ?_| q8   `K mt7W7^wpCo @*V?XDDm7o۱cƍ{ux锎qUt~Y۸oܠ@H- vޙgn!>;]--Sx ~( ExKO<׷2cO}mfmDa@&6[Zc=㰖M-&Q@:g'.MKx%^9SyR[֬iV~&k:4 ͖>fiK-G699bk7o۞37,K˟֧Soyʰ! Ȗ|YQGE,G,:[G_}|S  6[3W?EA@\H-1# Vu/Z<2<a|ZW WT7zJ%&ۚѬzvt:@1(:)PlZ%[rn>7`1G#e |d#[L4=Dԉ(+[J{%E bF@Ȗ( (@ԌN@@@_lIߊ  ЌdK8@Ȗ( (@ԌN@@@_lIߊ  ЌdK8@Ȗ( (@ԌN@@@_lIߊ  ЌdK8@Ȗ( (@ԌN@@@_uЪEG#YbeVKIWT7zJ%&ۚQgaGjpN@)ȖU%C~s4"[_G6eD#:LTK %Ĺ8Č ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =C-hsZj/.Z*A1*J\_Rd[36jbvt:@1(:)PlZ%[rn>7`1G#e |d#[L4=Dԉ(+[JCL  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3 h]={6XY⢥ mReo,-JL5c&aGjpN@)ȖU%C~s4"[_G6eD#:LTK %Ĺ8Č ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =C-hsZj/.Z*A1*J\_Rd[36jbvt:@1(:)PlZ%[rn>7`1G#e |d#[L4=Dԉ(+[JCL  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3 h]={6XY⢥ mReo,-JL5c&aGjpN@)ȖU%C~s4"[_G6eD#:LTK %Ĺ8Č ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =C-hsZj/.Z*A1*J\_Rd[36jbvt:@1(:)PlZ%[rn>7`1G#e |d#[L4=Dԉ(+[JCL  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3 h]={6XY⢥ mReo,-JL5c&aGjpN@)ȖU%C~s4"[_G6eD#:LTK %Ĺ8Č ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =C-hsZj/.Z*A1*J\_Rd[36jbvt:@1(:)PlZ%[rn>7`1G#e |d#[L4=Dԉ(+[JCL  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3 h]={6XY⢥ mReo,-JL5c&aGjpN@)ȖU%C~s4"[_G6eD#:LTK %Ĺ8Č ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =C-hsZj/.Z*A1*J\_Rd[36jbvt:@1(:)PlZ%[rn>7`1G#e |d#[L4=Dԉ(+[JCL  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3 h]={6XY⢥ mReo,-JL5c&aGjpN@)ȖU%C~s4"[_G6eD#:LTK %Ĺ8Č ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =C-hsZj/.Z*A1*J\_Rd[36jbvt:@1(:)PlZ%[rn>7`1G#e |d#[L4=Dԉ(+[JCL  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3 h]={6XY⢥ mReo,-JL5c&aGjpN@)ȖU%C~s4"[_G6eD#:LTK %Ĺ8Č ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =C-hsZj/.Z*A1*J\_Rd[36jbvt:@1(:)PlZ%[rn>7`1G#e |d#[L4=Dԉ(+[JCL  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3 h]={6XY⢥ mReo,-JL5c&aGjpN@)ȖU%C~s4"[_G6eD#:LTK %Ĺ8Č ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =C-hsZj/.Z*A1*J\_Rd[36jbvt:@1(:)PlZ%[rn>7`1G#e |d#[L4=Dԉ(+[JCL  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3  [gMK  ْF  `Olɞ5-! dK.1# =%{ִ . -8jČ ȖY (@3 h]={6XY⢥ mReo,-JL5c&aGjpN@)ȖU%C~s4"[_G6eD#:LTK %Ĺ8Č ȖY ({%+.s{ĜgzWl\%6(@+qZْ4"o=N}F>̤@wydWhź[.V<[ʾ: L@y^=qmSXْLq^JSfaaq^T @ xz<"xGGD0.P/[?;ꝏ1ȹO^UY5E@;枬ɖRsy~.ά >gu [a d5sj E}B(d2ѝpLm@=է?-9qm Oqj~!v"SMȖ:6cV5Oy] F xhBߪېْ&s@ZMs m@&Y9l)@@yn  @@кG*.X#m@@1޼mk_ 'ْ )( @@MIrb'edKdH-")%F$>&%2[p.oy;$# IC Dz?|m}"bUNa4r}<$ֈr%M!G2D`%Mf[NsΖǻ$^ܒiA @Ǘbޥuݷ\[҅@ x iwFt_B ^:j3p8[,3DB@ ?^Tnhxk~P &?2DbHlIޮ$9Sk Q- @| V_ fT9D $C͖ٺoM E,xoi>`0gR̽M)nuo-E/ MP#+e#fClI|m-|IaA,^ke[D. h}ŎH  >ˢY'%T1rd4 ஀Ȅt=qdK:Ah%f  %1  }~hd ,FoT  b\ۼm_| Kxo0[R߱O( 8p%.2  @\[[ 0w( j@@`Z-J^P`A) V3f\.hHLzSŁەFtO)4j"r4_񱟌QO%7yNLdK<} 䑸Zo-Ϟ:R([lɥD=; 5@sE:K^ee:[PC/M(A@PK35ĉu d~%|2= uuuh^9::gy-&jF pߒ!NDܵ( }ֹ%ڶܒU$6ԉ+ݴ #[>VF B@+[B@i{H5G6T[W 2X>sN>#Qa'z,Hdnl8, 0y發OK NG|p录A`dk? do+#wC]!܇lɕ'N@ 3ZԤ'Z[D%:C*-{0QsK ?jtCgOԜ(ʨ4^˫wINTi6SżOsheK ,xQ8 QLl_Em5 Μ@ ?$ lg &| 5L00 :$dLe4'D+$KSnd1e;pN:[Ro9}P׋;drO3[kmCk3@97+|w#&U0yqw+/]^n^V r꒦yb2RNM18T>RѻHn{sLhU?@"ze"Buh* )ޥ&W(Y:5{Qb:jfShyϖ,:g9KT}! -l)㧞C<Ā.rXȖ,^ۨ BRom45V4 _yH'=`<몷;%3n$5$Y޷oMp`yYkר/ ~_`53f@`VUxM/Y$VEЋ7Fԣn͖bM #̠8\ye3MKl1jxz(8eK]]]hܒ@ [qʶBjK,02<-c$Ydpn)!  ஀<]9 @lH@@]޾ڧ^ bҰ'#U# 3wy7I1‘L bt6E@iijG5-GzJ5uHjz!Z@@Q Рs>dKNA@}}a$U:R>A4[lG !ոҴWtpD>dK W@Ai7z5ĉu ^dKG@@eBeKں<" bo>x eK(- HD%4'XC|)@@fْhc*$ņ  @{μ`"?OޯJu+_yuh哭@&|g(x繳)c2["s&/sy n/)k, u'<_gkC qX<5oTW590|'CUyɨ/a *54z3Eh0[{F>9SR-돯83z2*Ml"Tq0i h>7ƭVCȄFO^yۭ_R^1:t3sْyA^DŽ&4$)NKv` Uw @s PUN|ӸtwUdyn;:McU9+Cˑ P@=誗4OWD\M= u2g:wϜOْy)NS).̀*z\a^b@@T&nH2媼c_2\` Xʖd KkhV%|Hd+an8#4::4JyPOf ev3QnL/[i U#x#~+oWy|.SoCWWvhpCUDy7GD*ިy\ LS[֧^ҹ% 0#]Jޱ6*X5W猘QO=U/Xc l)% # @Ȗ >tȡ@aq˄ْG ET*⾙K "f͇1nڝ#b )!dɒX>Us> gSrn'̖D6O;Q &1#j0 ;kB:@uqD\EΖ#3!yԳS*VDw6@IAIznՇIz>ٟ[\!B@@ ސ@@'cL@@ R=E@ -!  [JǶ  P|[7_" @3 |U[CiW@B@糗bdKMaF'@@|3@h,]ލ( ,@̣O@@Rc#J  @3 -5w@h,@؈  dK<@ -56 4R3>}G@dK( , D@zLcYDEK,lW Ow@ lZoJ"{4̖tzJIR*D6F@@G@fKH d@pV݆D@@Z˛I D -1?@@%  TsKI@ ~vҌ( D oUy'C+ 1 @"X=J.B5v3)-}@&%CT)8Sh'ꕙ9B4 @RpO֨gD=gl%ڴ @ ojh`u&(@M@0.zV5;oَwifo~"[/! @J&L&ž7֑-e?@}[%xD[jdWLLlHM@RUM3{*q?|kB84-c[@(Rǘ" @4zl  [*C@H#*^xdx0M-l @3,VJj"R aѝ u-`@K"[ԒffKH 'ْ9E; -lR˹}= W-U" @Ȗ 4t@ -@J@(R  %T  [*`@0 @d*@@@dKL Ȗ R% Hl@IW@@ْTD@ -h0  h]=J|c@p^@|nkTrt@0&bm+ IENDB`PK](:B]B]-Pictures/10000000000001EF0000018B2E21A910.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??EŽ\LbUvg\g/0GcFoHfRd/b==Ȭ7ߝ;[ɮcy<ś/|waҔ/%IJ#P///=R\_[jE59ÕX8.Gn9/J1.G]v pwon]TKhcIs (%FI<q}b4K#7,9/еiSci@Re+y=ַ{V_KEg%r1OjϏE?M:"P["Q-<}3%Gu|f? /.K_¹O ZxNeWBo($XDIn <8GpoNm@W,Z2DQR1zۦ+,U-'Zh[/-o¼S?R/m3n[>Gy# OK{i>,۟p;y#kE8QJ]LZυ)jA>7?0G)vo3iC>7?]1OK{y >.W4YϕMy>K{i 2/?u}^r)⏪gɏ|ic>?5碜)}V`=,s}Ns}^~)⏪g|>!![?Qi)⏪gu ϵM/'O&qN}V`;O}?i$S/gi yi7?)⏫So3{'4I?k SWfzҸDI r57V5~#\o"#w'W>FcQ1x@pF* .Gk"!%r'NM3_Awi35ݣ3*.]Ha* unūkd,l1%CrXF3?^ /YGkW#K/Y-GQmN #v m9Gf T5m2 ˇ.'܅' q_Fµo ?[x;O Im/c'5otI ̈́) 2FytCQmf1h٢ʋBFA+ݿ[;?\x?.ה=iBGmPCqpcF29s|C\VmB#iE  휟ƾs~Ghs~GhXID=k*gze֢"R-f=Hr/΍,NkɬI̯Fqg߄k߄k_˫RӭW\@ YF̤Ӣuz K7MKh JWƏWƏRX{)54[Gסه}ϟN)½[=gi??/G}^]+^> _Et_O˹+ѿ?3K>I>ywyw8O=Ϩ/#g˹ p3}i4ѣQWs]>ӿ<]7A%#Cnie&CHյX,O.)嵕e̋,Gqگ DRIZF,['qU8h^mVOy x! E5nՂ m/mR,,p1/U kpyXhi,Vq=FOQҹifv>Ls1 #s6 e6xum-"ynVB-f wwCƥoib9%23(YU+F@GdO֭",,PO$% =zjg 2e`BΕK#N q,'d3LZzFatK%1:X6.ga<3qc4pΫm=a.XXN&pH@4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE˟*"Ou˟*"Oj^47o>w}_>?GAZΩcg~Ƣ0lo>w߃XQ6;h߇|j( ?ϝ4o>w5s?;k9?}~ ϝ5Ecg~Ƣ`߃G?}~ cQG0X߇|~,lo>w߃XQ6;h߇|j( ?ϝ4o>w5s?;k9?}~ ϝ5Ecg~Ƣ`߃G?}~ cQG0X߇|~,lo>w߃XQ6;h߇|j( ?ϝ4o>w5s?;k9?}~ ϝ5Ecg~Ƣ`߃G?}~ cQG0X߇|~,lo>w߃XQ6;h߇|j( ?ϝ4o>w5s?;k9?}~ cܭĈX@tFi[jJIMbѱ+Yգ+Y/q(S&gH$xdU%c7L@V 8Kaq4@#r;cj{}bHeY k2>॰U#֨ 1./`*/ȭ9LPOjsk[A9P,̛sOފ9kw6ƪG4;lCbqI)xsGUnԌ1M݋yhЬx0}JlŇٙ-#؅cܠY&oiBEM3NT4 `#UZ<_71lۖ$Os:L$w(,^emܘIݞoX<1+ evc6Gܫ/<#Ftpvi"fl: ˓feҵ9uxucvl?y;!?wN}FWڭ_+ ͷ>^HA@ڕܻ#bSA8AUu+HĻB1Ku=Mu+iٞ)1Ń#Ұjڴ60$Ii" ~brwI .eId"61)i|cv:.rx}tJȲKƎdf0<sNJKe䍜]Kq 1Pc8nu H4Y' p;N(xmJhBL,$#2l g`N*~!&9ݮdC\c#=Ef^iҥJn\eP|͹\rp֏OuNᑟf\2ܞ2Mm_jvpO6ruc(O{Yinn&#hd g xI,%ݣEwC!o!90z>cwJ6أKDcwH2ȧvݦ23qG^HmKt{# <ƑFs_W$o1mn8ngzUdkh/"X;2 7uḚ- \B8ύ۩*I5>)I 0Se¶0@90j5,Xij^]I:䪆[؎wRI6cOpgrf2ȇf6ƣ#>$.5&B6#b@V<1VFfo%o;qP|X Y:%ԯx~rO}Ϟ;dm-9.y c#p'4uYNH$F̨ .akVMn]R\0S<\[bsl;X+c @ x5}JI\"i񅶔9&b`,1 3y4 go.| Yq 3@ ]>FSX/1Z;yn*rT--b ȡ~>E#-P4RWL%Pi`[k88fxe ̚mq pH# lHO*@ulվsaW/%hpcT_vrHZ)8ǔ0?&6s*mu,vkY\RA (F>zDŽy#I"vF ݴq@Ϋn:7.{λ*O;' n+ ;AϵS4C\4ek$"4s+8sgU{ Ge Ь.dB}įnhrPRyiFz\d>⨷tNoi<ON=+?3&smB,20;X:ܵ)ip7g!BK7w`pW֎iwcp`Ia͇` ny3t_F7ٔۋiCnbWnܯQ jŭNq 46 ȿy~ZsҀ3tXX,oFiAfK±py+B\xRd #l'hbVcWB=-ÒL:uEwmC p*\<21F(daX0y(QEQET:O7t(*o8&k? uh? u' (Tw[Kqq z*jJ9.3ER0y _iwp:,zԶpwɬxgl׳:|( ϾPIaqhϣ@qY۟<.+ybr_͍RŜBq4kieܑ i|c3mb r*-K&y}Mrڙ QV) ֵ4%.{,l{u5<',:,M[O(@~+&;ypYJn.Bǝ8b0qͬO[i- 8u0ߩ- $OٔՔrr1%kLV bF=F0F;ڀ%$ri(h ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( IѱT%Mb}_>?GAZέ_>?GAZΤQE (!UB+ӼA/ZiY!E{SR`&W&E»CqlQXqxo[5tr8Y]w|n<`7uZkZH,b}qgiE[w3Y˩.˥9IdO+ӞG9eu;k;eJD[? X 8( iEcg4 o"|Dilw72ƑCx0|y)9w= _Uuka/os 7&1;Ar1,wGY@;[V֮4aӞF"iV?,c.3ιt|\Y[AsosikАlW[*zAs?~,FQ?#N*ui3iLds#Pd{RxV ĖL;"  rI錐Yʟcg4 o"xWM̨: A xC[P&,YlnM9o%20&j6,adrKO( cg4 o"w]Y~,FQ?#N+ }şӿ5>iEw4Qd8owGY@;[, ?#N(?kE\iEcg4 o"( 7Y@;[~,FWsEAs?k}şӿ5h.pcg4 o"w]Y~,FQ?#N+ }şӿ5>iEw4Qd8owGY@;[, ?#N)E]/OH^1q*; #b3M.?_ ( IѱT%Mb}_>?GAZέ_>?GAZΤQE kxFR(VZ]xƟ2D :*8ʛQ56&V8#p岃<] ΓF[. {@~z[Xȯ~ƈR _$ eqZP2;x hi^fD e9RQEQEɿK*}*Feq DB:#Z(*FAS7շ+U{\'n grU7oh {qN7*M’\2JڌO Ӏ6mUV^ K wPA\pFAFOMomU;Pndh:@0 ǩcLbZ_'1\5HH.~R\}Jt$leYH a9xJoc}_?G0XubTn5;a4@ sVl [PIj$F0#ֲ/r| 9ƻ4TIGi& [vcߝg\N9uI}Fy ;G Aq9\( x6srS˳,A8 n[#=ŵI:\Vd6LASx U~/r| 9Ɵ#Rk-[d\r[ox1-l[GddKq_γ>/r| 9QErkQc(\`Q\c}_?G0X(_r| >/,uW/kQ:+\( E_?Gcs/r| 9QErkQc(\`Q\c}_?G0X(_r| >/,u{KU_?GOQq2GJ]7Rri*J ( IѱT%Mb}_>?GAZέ_>?GAZΤQE FeDglPIǠ{%Ϋyk%͜r(Ic䑐L6ߛǃǥOEP0(?CSZZӢeqƱ^K1V'X]KSucjRXZAw2Jע"1!l=߮c! CGoYHr0~^XGEEs7"ѦxŹS3 !MI6${X>$Ƃf.˕|מEznu>,c}ʖ`xaߞ9-曤 ko 4@ A˂O'vW<5 hţqb|)  ssګkݨtylJ H9oM%&ema2>i7vmga!a$ <+Jºm./ƃ] uk;]5ߴkox4Sy-(]gjZwo$vA;;m M4|9[i$d`X#ZRQ@Š(((((((((((((((((((C`lU5C@Sةq3_WVGWV=Q@‚z( vƔ,wT[Kax zN̹HSD 'b9U91V )-'9\<, 'q~t0Zk$CF_6B?}M&I~sԟҩti\Ą}cp\v:_6۬'v5\hzr L; 9A׊Т)CYۤ*bffsނMu H\q-I`69*Tj{QWb( XzE"QK.c*5'u]_2nhW*GUA-'rZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'KIgarZ*/GUA-'K$@G+ (ϱ/ɮC4\Vwr2qޕG<(QET:O7t(*o8&k? uh? u' (S&%`C}#(ee<Góޛ+ G kUGxL#RXg:^kld]`V(&t L0{IB$23 p[n0T:uc@ZV-`K[bxc RCFs-L5sXMl A1@at}k睉ᝐU*q$"{TVla+hee퉛;0 G=x ӞP8zQ@Š(7oOKOPKJwUa ui6Ӿ<0q3<c chBʜc5xv&%FC$֤5+lb)f*q8c5cW֮sH1vv`6 91Z+IagdIhFu%~M&隬\K$D#TJEn@,,ïjjrIvq E*zO-#\D3XH%XMFEI3H+Њ˸6a&uio$P]FNFD>'Ķ=q%Io^"$(2<t{FD2gx]`c9FK];RI?lPѻ8Ip5 BY;zzP45ڡhT? MEC>C@QPCT?jP45ڡhT? MEC>C@QPCT?jP45ڡhT? MEC>C@QPCT?jP45WQC-[PK}=Hge ,aH0~ h%gr7$qՍtu7Uɍ[y8YEoKR#Bգ" o $*J:{7[u!Q@C@SتjIѱSf#gV#gR{ (Q@Q@Q@Q@Q@Q@$}i>v-i4m>5}|4]Ѵ֟o|QkO( vCFj/ZϝG٭?@%} Oi>vf;i4m>5}|4]Ѵ֟o|QkO( vCFj/ZϝG٭?@%} Oi>vf;i4m>5}|4]Ѵ֟o|QkO( vCFj/ZϝG٭?@%} Oi>vf;i4m>5}|4]Ѵ֟o|QkO( vCFj/ZϝG٭?@%} Oi>vf;i4m>5}|4]Ѵ֟o|QkO( vCFj/ZϝG٭?@%} Oi>vf;i4m>5}|4]Ѵ֟o|QkO( vCFj/ZϝG٭?@%} Oi>vf;i4m>5}|4]Ѵ֟o|QkO( vCFj/ZϝG٭?@%} Oi>vf;i51Mb}|GDЬq/T*S[6uk:uk:QE ((((((((((((r.zn TwMA4tCo7?ƌ[񨪵aX*g>>P[~CkU՞W:pmh;c\}3^k25Z7xݟጞaӚqo7?ƌ[$Ds]+2j*m~m^/n3HnA C>zrs=4Y!4boEE*|hm|,XEݽ$vi:ozէ{8m?_n3"Z&MU `IBҀT tYnRX Vf`OlA=AMef aUd%$)$.xgn3"uO+2~DkgqrHBFbS,7rNҴyFV2Wl m?_𩡞X%Xe^6 *J5CG.*@!V}=2X7/T_V ?AyT1f~Ch\ %ſߐ1o7?Ƴu;&\* ;cI=P}KuYM.ǗĶN0C=@F-f;mx,u P Kł2OEXF& ^xEpmbo\ߊ&oxAI29L#5 qo7?ƨEga;˶Рzz=O{% IѱT%Mb|Z:|I(QEQEQEQEQEQEQEQEQEQEQEQE>?$_顙He=Y gbY$XTתw]$D&),j-VQ-VP'ݓ$q1J/,xֱ.5˙v+Pfƭl:8Nuůj*>ůj*fJ{;$rR,lLs\屻;n.L1 2(0H#qҝ-VQ-VP-VQ-VPǮ` ^ Z׽izm͕\tPy`mtWӯ_`0 +m#ts@u[RZUu Xקzğ6hğ6h5^^|]̢tTd_!۟Bk^@)aM>$&{+!c9$|=$ `x??0/>qvQMY ,62l|Hg5uhKg;Lr3 sڰ' (?' (@t6V6rBԞGICl ?ƏGICl ?ƀ,DSQZ?W1yMsP/$Cj0G]]^E0w}p@n>5B۸5Y-M1ɨ~ůj*X#ʳC:b8x T1Zfn[w$$7$gQ-VQ-VP>h2ݹQq,P>y8Ҵ +KK~ xIv`IC@;Tb5k?b5k?P+lA|0@+0:H\dc=Nkkʏkʀ6+F'?-VQm_ZQȍ;/c@%Mb'J? FN;4"$#dak3햿_-\h}ĺFzT?s+ n"_/_/"~J8D9Bqs햿_햿_D9Bqs+ 9B-G-[s+ ? WrZƏZƷ W'( ?l?l?o'(Oß/_Q0~k?P>k?POß/_Q?_ҿ?.`~4}~5?_ҿ??пG(\eAheAk{?пG"~J8ŽP_/_/"~J8D9Bqs햿_햿_D9Bqs+ 9B-G-[s+ ? WrZƏZƷ W'( ?l?l?o'(Oß/_Q0~k?P>k?POß/_Q?_ҿ?.`~4}~5?_ҿ??пG(\eAheAk{?пG"~J8ŽP_/_/"~J8D9Bqs햿_햿_D9Bqs+ 9B-G-[s+ ? WrZƏZƷ W'( ?l?l?o'(Oß/_Q0~k?P>k?POß/_Q?_ҿ?.`~4}~5?_ҿ??пG(\eAheAk{?пG"~J8ŽP_/_/"~J8D9Bqs햿_햿_D9Bqs+ 9B-G-[s+ ? WrZƏZƷ W'( ?l?l?o'(Oß/_Q0~k?Pn,risQzWA?_ҿ?6Z&fee^ tF+@`lPK](:=QQ-Pictures/100000000000021E0000024181652BC1.pngPNG  IHDRAy+?sRGBQmIDATx^ yY4W>Ho ުh{\/} ٸt硒%}fx,y<owrZ\pO 9Q4w8NpntgOwZT8SXٜAsU:Qu}`wZ;ޮKےO*OZraH]@%e8H n}9q̨adAт*6δM9čLOTF-_4ͷNnٲ -H$qvnJ`~9:'A6Kb#MYf>M3bs/[@2@Z HXYvO2tY8 ϯ۟]GS[GVaԅwHln̞weɓ?7\9Xn?_vPl?mܗ$ A.vzcvb.ʡϹwsŶqjk{ʛjN>~}b[* (z-~vI Sc٫Obj;r垞cش>w?Λm×4km+{'r=r??\/7bޭwwgyZl9oOؾ)6Yתoh?yԃ^~oU?~{/m^Ms{{/w6^yۿ.6'@xaZZ[oM +K?}oN_ASp)]ѫ ]>M칥.g+{S[CeX؎nn%ElE0?Y'߼.e+zuڨ~_}yW_?h"~/僿WbJuyWn}9xk-6P yr"َZԥ-]1ПvuY@ YĿ[/$xZki75vYx6 ]Q.?7]m=-yf1EC/X/ yZk)BW,*` iz-+Nb +o]NZ] 1;vn8\ki}Kڿ=ݤMk9To}|)Zڄ{psNjMe5N@\kqi0 +oڛej6Xe{JQ[Z0"Oύ!1jbb[ԴX>b"'6o ]Jy}EbDrωuՕOޜ @ Z by͘s\2ٸEښvԵIbBL3-igj&Gi<ݜ6`Դ\ɗ2~E,rE~e[o]&gô9u|mSA9|:闦Ąִ~?c(A׃yUW"e-u2!i_x"𵋏L-}t"1ǞeS5k.ǹLyZK/Kuq񱧈S0{Z"|Ԏ;vP}Åo{xճozsr LwmhRxx>O>  Pw @ LcBWSbrdv/~Qnv8j۳`yY.0!ƄgpLLy9X^U`H ҂ -֋{OESڣ^@띟ZsVENZ6/ o*ً -H bqhWN2~.]WyR,_iZ   @ rr]X. ,۶jbwH˚K  \ț.-F-. @e|r!b`( R&r; @ -`( R&r; @ -`( R&h'Ă4k[X#K ` JZ +OV'rO.6%}[er%7Ay JZMQ&p@Q ܤh}zbOo=9Fa@4 3>N.4 _l/Oӆzvz^?ΰ[/fOy|!s4 /-jRo.՚Vۮ</;mY:`k;o {&0nT!OJ;xEɜSTg@kN4c#zd-`2dvq)U Onżb>iE&gyGRtaȎ2/Eu[iړړB8 k$m*U(nt(aEI@%(o@P#-sSs,׾;/bZKZe]O9'~5%+(ayBMa@ xˤ_[_3-tƕ7m(w2 kEOЊCnmO!3w_lT"[&lQ~/N: ee2w@!&vBvS q E5QcA WLJ ` )@Psq aIif@ -!A&;/^C@ l߶Ux`qؚ C@4 ?ZZ D? ,t@ -@(2!t}U5x*U=9~WC 'n%0LԝTC#oL+_rneEy:*,>TMut>u!gY33kb}2ןk"Y w ^yGf͞R7ʼu5UWgެ >HdW.*$k.~D5w];ujSk/\_9s@W|1p<~qЮ؅]*o`l_be}mçO29n2F鳗W,x2S~6s-wO6,1:w܂ef-9y`| U Bg/^ iiiLm{xM>Ė*X٪LA}?l_u^+VVUkdj|loOMp䍫ce5C)O.b߅/ce'?_ߟ<~G//>c>xjkn,y2“銱o푞+_s{e;=KC67?Ѝ+׎ K6֤g :lcJSXfNUcKQGwge##Nɧi5bŒ 6_iONf͚7N{V~ ~PswG5,j#G(/W*5f2X:3.6CTFcb7'+^?{]1&kTp*/bW~cizSCzh½Gͫפv6wW+}ag_:fh&Naa˴؍3kRQϦXa2UޙZ/~x@lم+#xxY:fr"'T(T%5)Q?0?5cq.b23W->ob bme G;SC¶>5-ꓙtUgyD&q=^=mvؕ8?#յH;֙*Cc͍Չ'RU>w~ cޣu[EyE&V1! >IK*->cN^;Vl87S.Ǯ|~>vS/=ڞMK}#4H46 uHO &әy𥮉D23:!fވĮK{v7_Ғ'ҵ/«٬HLN6VWG+&μ3~я_;_TLWOKT~țc.H&bIo䦥C?ٵTYSu"6}eIJkS{Ks]e3ddQ(K ycxS]Ubաlz]Y&~Xmslh`wg|ֺϥӱYW]myejh1uً_|+Y>iUueՙX7.\jUEuY=5K6K^W 5w5wUwW/۴i C!;_|د~:2mO߽lLͽsכ󃍫g^9EO<x8@/>N'Ԗοsxlh}_ͧ'upj=58t{gu\,y9ꈥ3x\\|/ڗh>%O&j:./lztMSSCK~hF}^^TwbD]ߑw.gV%.ho=[f,]g>;r{'z|4|nXl< u8M0tg ;ڶ ]#3Ϸ/=rNW\kׯU';| *|deD`k-T2X6zlͬ,~xkEEWlR}y+m̿VQ&d@nz3ɞg*g(O&;  Ujzlܙ3jr7{^U~W5,ryT{O[]v^D d2JF:U9M|#?o}ҡKԤ၎B t{oc{up?}Ko?s{֭]u7-1t? &-I1j~\炍[bgbXf0л~u;˅L퉥bx_|;65qyLLa+I􌌧ǻwUᔐg.k֚e5 z|׾l\аޮfqDݤmr2}bʪꊚsgNwߜ<}./212dZ_յ/n33'>gk(ro^ZaصdnbRʄ@EZ<DLI؄d+j+&b㽱hOrlTHKgߥVauhw<uƣm^}bo_xuXLOU>__XN,Ki^}B`JZҩbUxuejJ`*&'F9,.g؉X$̆翼_jx*x_:|ƮEI1%-&:Y[9T$*OUE"QQh[, k-Cё"5);tZUooAϊ]Q{`- '- *26;0gzleB P4!9RYHKzFlFա4oHܸ(. 3do(UY^+&сo芅331[S愘xKnKMeb悖7$*[>F-DsJw*ilc{/֏T:^s'Vk +t '-ɉP<5:?^?<6nPʨ9jD?5tcFhx`6T܉g湣<ݱ/GĄ M &'>ѾۿzX;jSO4a/l>"g*buS.Օ΋UW Bk-eDUBðRoVyX[;qtϲymZT4tkzP> vvNBVb⿁TcNB>U;+7gzc>ܓ̛K}?8=Rه}l͜+ߟ+:}ѷ~]{ߞOzxwTog檒Kn>F*UK5lY(Q]u⥛!-e5UJF-k7<߼jyւC;D\\q쁓Gj?e{SfOK>Zt+^ʇ@ءko>~x_;o>俸76u[~:&3X;۝UfUlzOMska8rc=-R5:wE|&5/Y(_(xŁ+o~h#zzp˦ex?yV,O=ajK&_X;kzʹ]n2Lߙ~{g7sm!-҈8^ZzcK6]"ᔘ3"}W?Ay5Ny|q'_/ۼ!-.29!3ݙJ VZjfͫ5vVKx}Z2]3fVK얺s7sD龼C1+q˽iތ:q=X&Jiq¥ƙ[0mn#g5$bI;{>vc/#$L2}e"V[={AusMKВ0'M}/9[|22ؗOO&eDEUE]mM:湍NkYX]W_@?9Kmcښe6[<.(sZ fRZX6 s @$ - NC3hKvIĞ 1Xe`0D 8IKw}.\k_]Y)\˰ǟYɥdD_4\Jݒ%`+-*~Z칼}jij$G%4·*LM\e1=Yd?&'ñj>y%K?:*1SI4*)UoҬÖ5O\r .IJڿf-9 i%svSAb1A/eY [vo;V7|Ӿ{d-M ~fK^ĕ5YpັLLWFjÄ5%l'dВ!q˝neb0byX}j\+`)=L({ҷ ,ꭹ79ⲘX{%=t޲96Mu%ഌm;ձ[ZӤ0(oZv{kVnh[1ﴤjg__ݓ 0d'B#h2W;鿧3{&Q_Y1O==d9w&R)K#;Q57~nI-9C$;%jA o\Iዼaؐh^=Ay:iԮЄ\:N]Ngd**Oz1h;ֽ5y`6s u;Xܙ5 H@قoƫݣ"@}-fNVٱ3X3w^kgDl駳u7xC)&4ȖBK\ڥCYBLN;7+]n<5hx1S0@_KEC !K#ȅe\. L dp?H?nԂ [H @ -bE\4@۷m:@k!? @ JRѧ!JRѧ!JRѧ!JRѧ!@Q; ;zkD D+/ff%IiٵkW- B[ZXk)th@`CHͣ~X밺_@0j)z 3& @PL Ҳv iRΖU B iٰ)L$%N*S@1#-6B/VXhK~h61tn@vH%~v ɲ9Gp QERcF,3qֆylNSSAyʹ[Ds!DZ,{+uOQFsZIW7%~Z-&A'-rb9!VS\&',]H Rj - wj.i@a UZ ՠ[w^uCI~ż(" Bsz#zZ<\5U !H!1\|{7!@n>ӽ29}a7}  x{V^_^2iځ@(E _!=bv+z^t`B,+xX"N !b@JLy)&ĶoE!DŴȅ4ACiB>%1"N@ZXkxq@ - A8%}@#29D) @ v2~1S7CB@_|ā2m@ ^ X' @@1E1PAB@bHb "2;Z yB@ؗK @ r|Z)r3o)ki; #YH䂁bi't1ԐAͅ0E+!vcbq^@""@e]vf-4Ř3 P)->j7{U @ $ )-i @ȝ@0͕{O@!!RZ,劈*Wsٙu&b!0܀Ji_"ǥ ͼ捻%0 @ xˤ( Dkxq@q9!f @@pKh7p& @ fB @ 'HKN @f\!!+b۷mPL`:1O=W"- JS@ -я!= qrZKÈGi _L@ - C=D!z(M"%c %AG4p \!晿D+/r̈ #8Unv3|Y(+s7lĐ)>;З#-#3PV Ν;Řiʍ%lF L@rKȁT=;b9 `Ei!/ @@1E1PA+&=UqF<w_ءdvr $_78ϩx7g9y(9GG<HFASptT鬙i-վRu;= u 6_ _ {La"5gm<Cʩj?:,q8X\Q{De> 9o9^9 &  e2iG3`!TW1 􇁹ވ,#^4mOv ؅"n.2ܙף9<,ZaqtZY-\n)n'QѬǤgw@ TG0KJrbHz}d8\YeY>WjSQ +f]b' <łHH<'ͫv4\:`7K:|0|Ma}CAsjJ}<%*M!Pad@IH󌄒5%zצm%pt&7G_j1}uwݧf GEqĒ\nn~ɱzt5Gϕd>E3_bhP@y]Dr~"҈'9ƮaAżtЮy? '1(G][:馰sΫ="Y)쵼E5CFt>.P@هq"am4駀ub;5uUZTy/?n&weI!}u1,Da^7g{֬6%ǀL`n(|̸ǻP}uuʫYʻ$lCt ᯖ Q JoVk(bAt8v~Nr]f0dK*WT:X. .bAPͿM1E B]&|@Ja ?y#-–-[|ZotT,g;9m[=WBqq @D B}d;♿׫"ʀhԺ5ۑ@0^|LX @"J @i! @@1E1PAB@bHb  \=C{9@((7#p$744@ ܙAZB' nЇ!Dь^C1%5@$D3nx @  D͸5 @ZB\ MHK4BLi qpp @4 -ь^C1W s#;w; CPMJt#BUqS& @ @Lw'B)h׼e}B˽&Mھ8;PgaѴa+ Zi4'ӬU˹怾!Wڴޫh K@@E,!inZ6dJ: G[T 3I6k-vu팠aO@ -`s_n1S׵8Q (5HKa"O ꧤ?ir0ܱ]] % @Z W#|(GaJ@@Zs$d3/=6*Bu8o?>x߮C i) AW0t !)(7G#rx &O!&E5QAM\!F"@bHb  @1@\!!ĕJS(رWAa8+lSy -!KdQ!ij|c|P[gJH -QKdv\ #Y;/ 7B>ǹpC~ -!-8|ٝ;wHٽ n C!OQmEPE] [K 5 2[Ƭަ!7M,y_e+\>`-Wȿ:,KV5%fk(>p /0?8cu,="^_T%cZܧCp௤+OZ%@!%sbRdu2j iKM J.K¨ =V9xF ȇ zֱҢ$v @k! @ >/ E 0y7~?_?h);v[^&vରL!KdQ!΅qg!rW\@Z\@LzF /i}o]vw!8΅x!xu,Y*gyudΝ<8{r'䏀8yYq Nq1+pXqƕ^A( i@q@Z3 @ LZSY@ykZ>rKԅ Oi`ܴWezG8tٲ΂]+vM{_CuD~ܱC{ [~<U+~3N4b2결.hz*Qq&k>8Q/'Q%HX’\=i !(,[3uKXr-ws>8@s@ˇ$N(g.Q+KhF;b IڂF@$% GM-bbRRWQmi"1Zro<%\:v3 -ƬsVg(gr)$;yY_+}hY/8]pa|rh*XWg|n(iE/f.-bhA.tOΞp@Zss {` p͏-5汋a)$-_cG9aW:&{jيY4n. yb&%på@xeRm1X tyן8svl~905kيz Vf-%a+V8݌aOVc}ϰ.s°Svw-[18`Q]vs v FA )-q@4bw n)q>;r  bi(+L)@ y_97]v)L-W^~ T#vT) y\ -Bݲeo_J9 m[=WB 8ZUeDɂAZ<@d:T>bAmlW˳P֐B]@EK@J+Ċ ר(@ -8Q \@Z\  #D)@pMiq  @5Wz&>P"@'<2]9.B'&x<  /@ @a#2~"?"Oi| @Z yHKCH  pud{:dر͵QB H♮D"K_푍♻Dk.5P8/ pqɨF#^!Sz,%A@]Z>>TEef K?)"SZDն0Uj'sGjMZ P|K3 mL#I1,Xwc!̒&ƀHdoWRTr#魙+ k n8l!GawL?@EN7n 2RIhQ6p?hhƼ߮ 97!N+oV5'߲i[ZpvD2!PK CW1Y ;&*yv:Ia桏 sI&ZoO[C˜6QI/-ÑiY<% 4vlOʅ0dEWB \:ҢbYPΌ%\?KuY -YXɿD~,ӦXC'A K[mvKUTϛ]YW\\W?nԂ@V EWX^ĥG׀ 1* )ؼ_''vMd3Ξ {o) iTXҖO 3݆Ro յ&2կ=hB,c^Z*'˟aXq Ad˼PX*1CLhV)_W~͚9fˆӽ&eN\z1)K@ |JK; P(>[ 0څ ~q1ۿ]Ɖb `^)^V CJyDZ< i+4El7:*,s۶zF(`L{ -:T>1NҒ'4@tHiyX` !@  @1@H 9@ -brp`R) @<-܅^h8 Ppd > w>D8@ XƏf@ -!A&%qk@!&88@ h ! hpu7~4kJi-رmbB Oe3hs5*D+/$ED68^Hgٮ]<פB^RrT p7~T#^ ׍O)=ɇ .B'!%0 P",-k7@ZAZB' Ї!Dь^C1%5@$D3nx @  D͸5 @ZB\ MƏf{S 3" b;vps29jT Ax x褴ڵ+h@ Q-->ZnxAlY_ kလ,  aءM*r 6=vo i14c>kya'M_%~Ơv5SQ, (9NmL { ac˒R4 z 354 TJ॔Z1gy-CI7YÌi S@DZ,'(!!݇ 6AIa_v[D]–@@-bsuQBAeҢCr0Y7(ܐ  7KvѰANviMj++ )2͎蛳kȡu7,(@JD.ڔq0ƒ^&}@ < tO @ lO'7c3 @4p){$ M 4CBHB )H y@ -br@Z  - (&(9@@Z@PLiQ s  Ң( @i! @@1E1PAB@bHb  @1@H 9@ -br@Z  - (&(9@@Z@PLiQ s  Ң( @i! @@1E1PAB@bHb  @1@H 9@ -br@Z  - (&(9@@Z@PLiQ s  Ң( @i! @@1E1PAB@bHb  @1@H 9@ -br@Z  - (&(9@@Z@PLiQ s  Ң( @i! @@1E1PAB@bHb  @1@H 9@ -br@Z  - (&(9@@Z@PLiQ s  Ң( @i! @@1E1PAB@bHb  @1@H 9@ -br@Z  - (&(9@@Z@PLiQ s  Ң( @i! @@1E1PAB@bHb  @1@H 9@ -br@Z  - (&(9@@Z@PLiQ s  Ң( @i! @@1E1PAB@bHb  @1@cY}Jؾmkb P|8O޽i }^HKcN ZB܁ }HKcH  @ZCz@ dw D@!#, @ ǐ@%d@'D?@ -! @>%1BFi Y@p@ P}@7;v|,ϫEW~9K bEt@ -a@( HKQN@%L@$ j ^#- #.C +;wDZB q"Ĩ%}@"m[(4 @8 "3] /]a?_i@0 Ej@ / by @( v2~QN@;¨%A@$+,G0 @ C„XԂHxy,])@(_`\>0 W_{c<(I' Ԅ0/ ab>: !8"IENDB`PK](:nPCss-Pictures/10000000000001EF0000013FDC2B81B3.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222?" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?xۥsa v?/cQJXDNRj{Ү$Ȏ=I _,5j.<3u:Fϐ c=+x*j1rM^ߑn:@86Z>Rc=Rz"[e^5o))aGkIMsr]lfUs-l\;n=K.MuKI6_g'z_1//]$ =@ql|)X!xķ3+c?uZN.v.4,$K)#[8G`)*X{Iw;K?1//+8\_($nCȈN0xԳ𕥆ki%17jf+7P,#):45iםqgQ4l;SW}3+y f=SP𞩨--eڴ! D.B[xAMMFQdO,- ,Gp yʱsZgJ ysɧϥ䔿l0zy 8ƞ(%fli6, ?7mG%3F#٢K0W+'j I,pu->K ~Ə)", L%p+:^xq:> 6xM*o52Ipv`*_Þ}ΐ|]?{%)`:^JDih0KUk\9vq'ZXìD$ErqZLk+砟6cizJ_[{%s^BrY mo5v$J0+ۙr:RW<4u1 J>)ڱ'%a|0t6<baPB~,vzQD,%(B.G6q=;|,=i>SR2-o1넮uGӝYwD2y +2+ŸMUcRB$1@ 쩿%hZϽ䔿JOkoR#Yu%(o>_WQJazHn䔿?W pKoX )bBb:0=?Z?`;\ >L=_FW)⏪So#?q/'I<¸aO}V{y')< )$S/o#O _M L>#';?d¹O}Z}bgE $_ Q9?V}Z}bf$2/$7)թ&oE]L Db^T1I>qm ?A0X_Ew|Hd2cr@$k[c *ǽ +㪣 4MFUXu ,`dz, KEV_=3+kO \캖.aPm݈#ڶ<5q)BZF۸D"4j"Db]8U}3\% 9ǣμ G,ͤgo$6tqv>`WYgb猴 ?A-u(O1B>mv#%  -@OMuJ Xmhd]ڪp8%VqVOA*?_Q£]xsQ[eFϘ1. ]m?oW.H9V^/U/+? vqnu mU+s#_-| Ȫ=vk~Ω>vw~"${?Zc}_+צ`i+S@_*1[?ʩqKg${[kxK}7J>xh +}orT]ĀN< k.o.[2y02߆(pb¹?U;߆焿Q{ۗ nV2b nk]F=9n%7;$2Nn_ 1<ڧ?9!س ý?U/+3WN@ⰵ^i>H˽\7FnfacG~==<G Rg;[H0[ޱU 1;UWf'A)6m~U1s?mS#ؘx_TzRgVba)w*Y,=n ]Vquu5b`@uѴ@ЋH挂/Z9 Ov*$n6=lTW FKUW:/5. q5&63 r0JdVޯZϩe &I?5 x46˾ ޴|잲ci*2TG3U"VYX5 O.lX&M:?5^}>k Lmy>f`H,4M'G`ӎx F>¡[1.b YץO2m.:H&XmVG*+k$[+}䝛Njb[6QvV79_8UlF]@ǸJİB6ZQ*L?.Lav3 &Hc%G 1RoȴFݾnٜ{SɸM>d"xXdw,؂mEF+[[8#cM뀝jXK]9o&#jŽ+G_2˃Sng8N QuRKTU9c픩#$ +1-~@8#i%1i%?:zi64Ga?5bO"~o. ؃Ea??o&[LC??o&[7J FU[i,{]ZY[Iq:±F }#hH"B G"q 탑vM,!I2sIvB݃GG`ԫjH- S(*AMn 7#hH}#?4vM+ u9U(kRIrZ}DЎ ;oLoTEjm[DXrd@ dԷ-ą`p@덤cjxOydx-㑜8][Ǘ3T+U\P%ğr&CsL-Kma#݌zS ma23 -n٬ TM-Qi0͘>=];\I_ 5éGUHXQ@²tm3OyenHfaר<֔w6ɲ+d}v-nIh_eݹHPJcp0'9f|@Z} $¦TKҫ8bsM,.+DH 4r8=(z̲P*?[K7NMieyLH'N9,"$(ʹ`{YS)jE@/m)vZO(5q~ZK+oRxI;[$r;t5Kݗ)ǡSbc$Gmm-Ͷ(s@8/xVgʄ rKT%HZ`#,ۤ ÷fNܻ8w.W`d)VPA}Zzo$ p ppNrQ[u\#5Bn8Xzz= eb`J։YXlZ Κn_$< QVjFI1wߌn#TnƟl>s@fSyҋwZ:=0[ dsö3gh4lLHKQ93YZ-O"#$HRxML!Q2C-psZO *֫@FzQqTΧn5bvB+ @58]esipԖR|@#?k'!.&B41f nmfU AT։iIm 9 _N{OEi_,muWwSx8=*G5NW󦺈5UK3'rAq `HC\AVrDQ4?uvὰOVQrOU bK+[O^T+{0^vu_ei8R’H0GJ{soW*|;rq5 g$dK,qH$d4C`yJx">VF ؅ 2+ BTK rBluYE*F 0zNM{u}"nۖ1~c޸m-oE a@ą,arA=yҗR.CxePe̷RЉ4kUQ#ч5YIPտ-"9TLր! #4MY˛E*]Q˕9O} VOOCzo׵Ic%پc:)#Aacy;xX- A+4d{;%fr(cs6\ۼ` `q5 cgPRx 5mk-@yC1YXF3}NiWZ~r&'b"nyں#V)Y%Y"ghÍ$yI&yc%#Q'OHe:cQڤ[kh%RF*V ݚ4Wh%Ibg%^6 7B855A[ 8 "3#A`eZ6]*N>Zy@Kx'_ >W6ynv=zS--eDi~ni[S,bA?>aYjePU_}>m`lTgHYUlIק֝|qoKg]b55c_:@?so!cika3YZ29ʀsIN-|fdr;=6aa+ 1@F=ɨo<'o1 uu"HI mĐ r0nb1qS9ZG8CQF$頋-?ɌmsߥlӾ'|'Q ?_?«LSY:ƁoMH6' ޶>'|'Q ?_?Ÿ}jOIJS{DK`#{w~bYx~;MjMQs6̠|}mg? }OOL>LmgLzْkFJ7Q/I? }OOL>LGb[=.U<ȿ.=y朾] n#{.lPU¶v]G$ >'|'Q&ZrI7I2 UXN1;ZPG2[v|z ?_?I? { ֩~cz"ٱnvnLڴmtXi#l޼$Ќ {qZ`e(/G}j_v_muj_`۹H?4qy(Oag3qY(% yBNOrH OFRC#&@YX@v'pcu`e(/G}jKL.^@7K!$cbӾ'|'Q ?_?a03\Wyir|,gqYQx1Xx)BK1nXl!~OOaf|f$:G 8WIWï5?#U,O;f˹`e(Sy5y+DinXO,o#*ݺ$ >'|'Q&Zsc‘rsuO2(0`2qʮFyǽEu%/4쀸Q`r r 8A⺟I? }OOL>Lυ- "l1qy d9W>$ ? =TQrOT4 @0J lq?I? TkSԗz܇Bd'SeJ t<,k{kwP‚̀=~ ?_?I? TN/G$ =T̛o݄+,ʬgcZ{~@Òy}_ ?_?I? { ֩!@9Y|ǘ8mc9ϮXX[G! Oj ?_?I? { ֩6 ;Y R23R}OOag+s3 6|(=ᨣUdPaCq!}`e(ϓe(SzN/G$ =T{W3Ol \8݌ϞG;fD -V A|Gt`e(/G}jONΰ:6 STI? }OO&ZDi%8|g? { iX&# z@=6JFubÝ-wvX *:2@#t{Ǚgc]Ң]Bcgj1MyWV1%߮{bFJthռԱ s~b0:`VXiWLp, F&Ft;y:1SmyA^ O@0_J_'˷dNĀ0 ~5Z.|͌jRxE`Aފ0dc5ZOl6ևQ V <(>^Sh[O=Q;SɬXC}%qסI~w{(R$-X=z]$Cpֳi4bOۂixCYuk4ht`KȨaNqv< ZMM9Ծr/&mA) >Q;SoɩYCQ%ܣ1 zz<{UiF6&\Άx/dBFUHbJ 梹Ft_2]PWn.3y;.|YA 욕ng(,!%A"B '2qZZ1Oww 0ˍ;|#rDǨ]ı\OЌbBʼAqGj~?Y,ƹ"W27 דNsbY/崳-縈x|p{Tfv# $&ʻБXj '6z=j(F?~v*1k?Ouۈm@rʃC+-OB-/|?l m"U$c9g:Hc}aRpdSڰគl kg`>lf=#3SxSnx<ێ>Lی^C./hW\G r) f 8g[z$Ūټhepۏ|V'+u3N- 2F>b=E6֗iHo/dw#N#b(m!eD@4!pC(((((((((((;72Ȓ(Y jwS,$䜱V.2+3P8L2,SA2:o]1: 3=zir"x5hnX7 f$7Np<׭VfJ#G ;ʨfك`޹CfkԸEyo28)nʙsu:[{Ǚqnȩs[pY-pHA.fyWsvH5;Kג6{tEbeUv1ҺCE슖r'Uv c PN@ޭ&ѱU׌?d6*G$ Z̸bRp ts]9~X#}!G^2jdĥIAvZ[LϱK(<K/ ׽L*4s>kfۯ\?M>!3E灞IJB]ez<]SCx4-̐emr7. }b[}>#?;"50YitŎ!!(ubsz.m 8!Kpb>͐};Q؟Gnih$4nkQiv2]-pfUoqW1+Z]ffNͽ1j>#?o]5;OmЊ fR̀x͓%itF$mӐp@qz>#4nikrgx,H$`(*瞇֝uY~è$\=="Iw(?,*qÜ7NIo~"]ii$1N0ARL_nXpsG`{?f/r'{ha'3DsqEbiuhQ-=Ƣ&y|Q>nihs) %/ہ2":.#ۜ8<HƬ{ɯn!]_ 0=>y?sK3\, @thK8>xw{iP[ lYNT 6[Ts?>=՟OatYʲ m'CHKKiH>ӉŲXspڏo.H= sK3G?f-z}\_G4f REpA _͓z?i}aG/ۚ_w'=4}a#o?f/;͓z?hd}>#o?f/;͓z?hd}>#o?f/;͓z?hd}>#o?f/;͓z?hd}>#o?f/;͓z?hd}>#o?f/;͓z?hd}> 7sK3G?f=4yGX}H?sK3Nd}H?sK3Nd}H?sK3Nd}{?yGlGaR=nihӼ?F6Oѣ}R=nii?446Oѣ͓z?h/GvkldQ8C}?&_*?F6Oѥ}?&_*xG2U=4yG>`e/[~lG'`$K9PGb@>b}MZҮaͼ򬱝6pNFDSGQ'ƨI$;]+XQ5oj5aRs"9;d* k5Y^B{S$WGtО%h,gnJ}IIiܥ[#  Q@':"] dk$;dVngU息 Yu 6cB)cc:X|qSNb(({{_wΒ-yFḬ{])-,$P ͹f_ֻ)a= nH¢(:zg)1&2w11sw2QIC$qӁAS{ 8v|ИoAԃoclmne{tKHY(f@˒9PQ .ӪDWnqt;k/W9ZHͤr nPNFvzy0hw\?Ƴ9Z7`{-o/K}\c>_LqOYlуfA q8W✑w}/ ^*?.!5v<xՐ>I)gSSYGN{memE$"?2q8'ߚ?@Ub]~CkW %4k! $r 'l_g qNLqf QC[$z՚+PbP6=? g-yo_*T=#םLk2_}?̡QECyrV77r+2[RI ~<]cw\C=KhJɆ_f{GPG[WVYi6|hk #I:Fw,"931iQ$:sMz>ն(e7D 䞂l53U˱IFd!Aw9c+h|[KI"bmѹ=),%/̋g1gpEPs㠣@'KI"xoM(N7ET!ype=C0RB)$zwdrHʆo=0a9$~5 :LP$bg($И4-4k#ĎrvO9޸_G81YM1h΂7/E @1qZO>dE'֌SIE.O>. (QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU?w⫕O:'yW|O&*󡙭%cPq@/-j_]^UkTNB֩Ѩ\EQNB֩WSPkzxO:{lZm(D}b=xZn5bm# YY-rNsڵ>իе~qtjqFO/.@TԮl.!Xxٗ ?\V>"餷iL|8:u.o jRܴcIUC'Uh N7י-2-]?.-̌ۃ /^'fQtrp5m$ $@=j/PSWEs7'' 'e_=CkMZ'sB vXФ FOnR^N+$AZH|kO#<`?/53P)hp_޼gѐ%Tkӿ/,+ƾ/&+X[ϔbˇ\םV"t8QQW04`(8:: V%Fr>7=uύ7cFEP@0t!L?ͪ}5< +С&Ezwk~&M]uJ3~Q5׍!GOʱioq`־Ԣ.04g#񒔔-hEQNB֩WSU-j_]iZ?85 ?iZ?8>Ӫе~qtj/QT~Ӫе~qt}UkT.^UkTNB֩*u_O/.-j_]U-j_]iZ?85 ?iZ?8>Ӫе~qtzWS: ZFrG: ZGu_O/.B*u_O/.-j_]U-j_]iZ?8EQNB֩WSPzWS: ZFrG: ZGu_O/./QT~Ӫе~qt}UkTG: ZGu_O/.B*u_O/.-j_]U-j_]iZ?85 ?iZ?8>Ӫе~qtz{GD;7: ZN̾1[o+]9LnPf%3O IkW=tm$!rA?BZ_*@z I'er/[?1?{\ЕynHIdXCȷ/!XB%:ch:kF%S̄Xsܐ+ێ]ka]$_ _&^?%^b5 K;BlEC#)s`/ƾU6XI#>3 {{Oȟg/k?1_^_%^b5ο}+LLw7V0(O\*#g@dBA_G^3mzy ~'[ _& WMsOk,)#0[ pG[W8bI8]ǿ\vIe[_mCsBU/G/k?1O Z+[+'9 WʐpWϭDt ]m~㍟{YByu?3sBU/G/[?1+oZ_?jʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/G/[?1(ťjʏAsBU/MIDx\VԿw\_T')== kRRKMxoX_xoO @n)gfIi xs"T12_ |)!i??-yt_ C=zRZO\hN2x`ALRWV8;_Gk[؛ #0a=%i*9~ܪ ^-_OC9@[O{?X]st<ŲMven-gqq_ğKa4F\HIʪpB_s?m?8X7t75g$yUⴶtgȏy'~=) &x-_6;B`H=W'h?ßOy1 [J#Q ӣ/ F3d`n]xxݕl4h˪$)f6?ZC9@[OsOl>ty\>)tͼvgrO1yF?I2}y?101^? i|?m?KMԱ?Ώx;ÄhE_(bӋcR`'}knɫ<߄kx[LYnA04 r}*C9@[OtWxEWIlS> "HdGTᇨj?2O)}n`dzS -?Tʩ>| ZgTS|E} ? i|Q? i|QO_U?~'TWпggTS|E} ? i|Q? i|QO_U?~'TWпggTS|E} ? i|Q? i|QO_U?~'TWпggTS|E} ? i|Q? i|QO_U?~'TWпggTS|E} ? i|Q? i|QO_U?~'TWпggTS|E} ? i|Q? i|QO_U?~'TWпggTS|E} ? i|Q? i|QO_U?~'TWпggTS|E} ? i|Q? i|QO_U?~'TWпggTS|E} ? i|Q? i|QO_U?~'TWпggTS|U]F?+Ş uˈtT->wF ʑEDr\euF_&?jL FCLk$ßIkpO Ikf?-'ezxO+_gn}}M%B((QEQEQEs7YԢ8Ɩ$VJ#I:ME1qom$MX<,Li#Y|n]o;4[F>Ǻv|0$cjusV[Q׍΢8a"W͑)Q3ץQ5AbIrsz)qVIW~#}=d:l󴶼q;¯qUɏ1/Gnq`z#|cqFGdxjkH9B.k'>{ #b)2=hh#րLZ FGQERdzё@ E(((((((((((+Ɵ"-ri"/qڀ)|5iS`d4φM<9^*Ԙ/)!i??-p1Z'paO kP RoEQ@Š(((/w:U*(ģ*s#)?TU3/"8Fa],K&&=PRZ\BZ*8Ã9#*_"Ht}B9D“嬛rxkxliڄ*@JbZ@ uʰG=jxgFxZSC0:=H*ݞecya&B#p?:|44RKHˎ6f &1xz :DC#(bFԌ? >ר \޴=][29 ܽY$$PTFcX1;<3Wb كoo#INA'<EXҬkw/˵+Hhx_N{ӥF141*$rN37==N-hנ.mp7®cTQl 5(%y 3#8Fcһ#ak,FUB#K4XqlP=3Uxykl G # $( +BPQC7p8Hh5bKx1Q*ARmrVf'Y`_ qNKo[ әwM6: [úg$H;\:)27S=:To%JV*oۃ1@zڌ2ߛa , 1y 1I{j{m+ZEmGazG5x PEPEPEPEPEPEPEPEPEPEPEPX~4? m[O|C`ۏKOׄ_ʟ5&?K!|5iS`d4O Ikf?-'ezxO+_gn}}M%AAEQqQE(h4&+)&v :R0H8*鿲 ]mfPa<G>_K)imNi 脄acH{V\iV3-i?4P8Q"%ǣ b;$˩u*:<0&\&ѓkOPh!z6('vp vz"B S|1y| Ҳa{m Re;=>+y)28 b:uιKJ.纷[AXW_c)SE1`gx5xvmN;,#4I!ÒǿjГUӭDf"22yXo#^۬i{Trs{zל&|wI lu̬U K.vZ-"UO(R8dBA I."@Nh6tdR@QU{=M.;$P&)*ɻp57IlKJIkh5Αy1dKVrUcfCslt4P:Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@aD_6EnV?En?[P/M<9^*Ԙ/I?/O%ѐe?-'ek5/il:]ݵՎp(܊ݸ[MEwHc=Ԋw_q'B:'c$dj/j/@8?2xQ[O k??k?4aV?2xWm\~IQ\~IQOo!*(m2nY݅4W* 2{}'y\\U[O Ij EqsT/+ ) EqsT/+ ("4gh $ɸd(K^}<ˬ޺}|W-u[lhGj2ݑ)5){s??KIf.]n'^qӖՃi+[ߏ2x⵼o$ܨB Pn2^_DK%dA}+y\\U/"Ohc/+ }'y\\UlQNc/+ }'y\\UlQE_IW7G"OآP֓OXoƪcȣ"O=c~-?gis Uiۿ,LP7K3mq~nrK: %̶FVUVR.QQim~ŷ?G2 iWSPxMͼp(X[ nC]%MDk`1퓊?OXoƎd65git zMhW)ŷ?G?,uydW)ŷ?G?,uydW)ŷ?G?,uydW)ŷ?G?,uydW)ŷ?G?,uyZo.mZIƨA?.%`Wh?'*-$TrR_Djx|QQKϖ>"O5G+ E/ZIƨA?.%`Wh?'*-$TrR_Djx|QQKϖ>"O5G+ E/ZIƨA?.%`Wh?'*-$TrR_Djx|QQKϖ>"O5G+ E/ZIƨA?.%`Wh?'*-$TrR_Djx|QQKϖ>"O5G+ E/ZIƨA?.%`Wh?'*-$TrR_Djx|QQKϖ>"O5G+ E/ZIƨA?.%`Wh?'*-$TrR_Djx|QQKϖ>"O5G+ E/ZIƨA?.%`Wh?'*-$TrR_Djx|QT=Gt?S>"O5HBMss~arз])2gvX̹rK%'>l]q~)6rD,X~.rF3ӏ効zZ|0Ef薳;td\TPK](:u44-Pictures/10000000000001FB00000138B63FC99B.pngPNG  IHDR8ӕ͟sRGBIDATx^%G]q>_89D3kf&#"??Ր$r$k >$ Q 9PZwNMmUuVWKlwuuի~nߞ{.;$~@j8r5!Y&ggA@8yĿ 6%_VUr?{+|:Ahɲ-v-Vt"=4Ec`B-}H(K>k&dGie:ْ#Y8~# gJGrЕ?NR /U9/%W3݈)6s|bK3R^27Vjus\֯{Rmn&>ϓ'\q}##y>$>WuOlLLğ؀\@ Ygƃw'CT'^AG<]WG(GӀz-A0cG=#s'Ts|Mj~yoW>+~?:IMg|ޫ<[KQշ_۾WIuUG-|2۾4wYc[Oa^w[w#z){4UWܢs^x<׷^5-y7%/}x/}~u}/\Q~t#o5mbo\r? ݓw+ܫý:*⁻3PݝܫcG|KgWGŽ }"q't?u?sgm,{Yt?:͏]vP|=ZM?*U;^t㝪̿JŏVϯ^qWWܭ}_+^W-7?hq?{L?~^~5|{t֋?:GooZd>|^'!(nv _u;R꨸oĿ}?jXNU55}.[LU/V9 vUU;ee:/Z4©eUz_pQ?z/9LI5|jB}xb@숏{H|sIG~?M ϿO=w}1._S;㟹ϼ38UiL= ) ts{u%}UG]W TF_dkgɡz]Hj@h}:zCQo.=}϶u__ǯkp>xNKS㋈ϸrq cJܶo+Oݫ۶q u,%~S˽_^4o/{u;Wͽ:wn:?ި߫߹͋sWGU|D) $|^*;]YCESb4%K OKv";7&@'vQelg+?%I0$ 6xzGlpt,s$OuGp缦smi8fPmcnaLMv^-}䋼C d||lDyStƮֵ֞n~up<.ەN3G{æ1(.F9ИyhK%Xqoj~ w*ܯ0pFpSt8PG9ӵqz7r) ]O2Kӑ\| FΏ߶J|ԙ5cr]rmrK&AִIp1MigSb7M?."w׵rS>F/a#块ǀ.x]t%drl>C 5MGldO;u0lX@ݙ6&+Yl/h5 d;&Gb&6W &7d4x$<=UG2 (^/~h  II5 @$~CD@L$~&HA "d 3AR  P_@@ j@H⇈"HLT/@?D4$@g@x! @&?$   D2 (^/~h  II5 @$~CD@L$~&HA "d 3AR  P_@@ j@H⇈"HLT/@?D4$@g@x! @&?$   D2 (^/~h  II5 @$~CD@L$~&HA "d 3AR  P_@@ j@H⇈"HLT/@?D4$@g@x! @&?$   D2 (^/~h  II5 @$~CD@L$~&HA "dXpg#+Ĕѕėwj r~)dHO^}ݖ\ѯ7д]2TD '~ nu`]@ˑD1@ @zgF^]/sՎ{G ' '3r P@z^gc!@W{uܫSP#II>LHݙ*MEP!LN9䆌#ޫkl 0?"6BV*@⯔## #b+@`K/BYs@ @ݙ ~EIf(SC92Bikh/loYsRljAk{q"vE(mKAH[ՙ1C3ݘ)`o_X\Sӌ$M*LgoZ3XarT@ ױPbF A2i0{ۺV8fw&HL|CSL$c-8kv |p_®M2= F|C08YjYI$ۑg $&8ۏ'tXPtTm#-(dAįROn`4dsm]wT~ D_ X-CiCeS]'` oN4152iSBK|' 2>bmnbRgryHۯ}ʮ,{???˯V/;!NW=-D I|=7?|Zg4rz!>twnE dK|{.~Eu>lL&hZsjiW&w`Hȟ'S& YI|}]P"OS  @'lJ\@4<F2 I|^'ӝo3MXů6=S.~>4s/wPN:sl'%/P>شf+0"g{q%w`咤@`yO?y"G&Q $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ $@KBGj kIH$$z@ άol^<Y@U݋։.K=p  bf::+>|= 0?5;BV,@x= 0?5;BV,@x= 0?5;BV,@x= 0?5;B 8xH?;T%ev/s\hX@TsߴO[qsvO9Q '`xSO(;1H3}Tf$4GBӚݓ @Tުu?q ,`Ν? 0^տ,6FRAʱ.`_i3'k?f$ ط5M(Ic@`/wdNM-Dcs5=E s??GğXS?##|MEϟO)LW@t۟;;;'T'OHNhF 9z[PI2ƁV  9>Z #@J @y$~ycB@aHa\(O/oLh 0?+" -B qV@<1E 0$0Ԋ'@7&FƕZ@>a"@OK>|p* @T|eKIENDB`PK](:q7xx-Pictures/10000000000001B7000001AC108F5B54.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?|1jWY )Rgݫr?R>#B,c;|k wg T.-UāF~BdfSOFu4Ǟ|G4I?qRY =~g}iU* (bm%9_Y=.M3qV#|ҩ&Is GNkuFir?i>yiu miƸWӗ֑oj_nHE(spe,tIsFePJ騤 Ny.[r:sGi>y JMGn>\io[".er5Q2/ʏϹzi85tR-<-|scυw1˓6ӯ&z̶isA`S=9pvR wOk+GoZq66>ʂF{~+h)5}Hu`a>׿RV']! t[$ǵZ˽䢞(!{y>*Yw~I^R)⏩o#C,/?$iWxJ^azj䔿-J>K=L䔣E7_WxXJpn)}R{y s%/,碞(0=䴣eq/W)⏪o#<+—p(0;NS?œ_8QUn&m(e]l8uKv=_aر A>~ҏzlk:,tmRPW|d`^ޯ0pr4?Y.>hc[Zvkcy8M{R[\qQk-ݥ,rfm3H&D߯K_._.5hŚX:E(IgP2FU ӼW}5I>cu+*OWsg?qoWrGlxF7_A4oK.'X;K/RPr#wѯRҡG2q\_aH6?_tiޗ?]tu5ް|K}me 3Ee fHQZ=_cpENKV?_uYt'#M I/H=voU|vm<}nۍԻ㌴$M?oW{8v6 ҿ'_Ct.=_a?L'_Dt|.h3g"ZwtE4-?]mG=;-a=?]mQG=;Xh|.(fFotVgj(?c+OtտR=_a .zҢmW{ذl.(TDZ?t?GQwaإG1?B?]]mSg1 _:E/mS{8*ҋ,q~:Eڧv=duƙ B+у[nQwgW#gU=gg7oOBGCU=*y>X/z)'Q/z$45iڻp2sX6ݠDܦt=ok6RӠӷOX|n:n}2>IM>?ƢşS2s߳TI-ZB5 fcE2&*Hm gmFMլ4YӠӷOXwvV5kt#'3y{5jqvf]P>?ƌ>?ƟE 3-[+K%Lqp;wj>d}FEOH 6lh.,đ67)CTúb:8ѡ܎wN ݈%- }?NַHBU }(+7Of"Ѻȩ4(F"n}*Oȩ4n}*>f"Ѻȩ4(}OV#0gǿZu<]QK/z$hOtVkKWZʵ6o1s4$1G AkiK@6;aGJM+{newƢAw6ki[Ӿc>2ǁ#)B\Pj2,mQí_AiVD:mz%uBOV{?tn|*Jٿnu]7zlOOh*^ֳV*ӥCMG:vΥc'eNOGMEm@XROҡ[7ʗPa F}NǮGXk>K6plg0 ޟ0>.tÏ6G==]xMfkZg P;\>#Ryuc8=A͢Mqˌ*69s{H:g /Gc!jm-7Zܡl!CNウ\AVƛ|k ˃ч}kyU[{KPN$7SaV*ĺMG%̸;vYs>֔R<),2,]AưmkAQE!Q@Q@Q@Q@Q@Q@Q@Q@Q@_ I%x ^aI?D:?yr?w]ıۨv%@' ޺}eGduVS'!GZC~C(֋{%ٹW܂]\ yCi0,=qsp1ϴ?Q+_s6mqn( :VPW#ͳuًa}l061 dR0Oa]Q;_Ƀ G]C6R]w>zfF8ǠOKƟ~ēU(]$8P;Nssv}}b0O$wAV,##a{q,[w xdaÇ˸lr3(C~U4{ib-,I 't=O&6wΗg3M1xǥ[C~chؠ 1d-l-@ )um6GFX#mYdV-)U&YL7 1+c.߱Gm/)\ 7𭴺$,s˺WN0qOÖz77LjmD1cUF$#;\ZaXأ6\,bGᐖ۶,kC3$jųl+ߞixN}QI$T\2dEP Qn}abϬ?SX“vYmNl 3ļw桛]{s$גHYHԀ?^s5}abϬ?RXf M冉o5U] ( $elQ@Lg<aXأ6\,T4]]f+Y/߱Gm(.ܿEo>m>߱@_΍_aXأ6.ܿEo>m>߱@_΍_aXأ6.ܿEo>m>߱@_΍_aXأ6.ܿEo>m>߱@_΍_aXأ6.A#:?aXؠY#+ hC:"o)'Q/z$ijOtVkKWZʵP3]^-"(d0mf 䎤*#=9/㰙mP~{sKZ]ZQ8G3&1cupV$]NM]6;cB%#,j y)29݆a[Hs^B$8߆^x2 rR۲,F&o2fwUTcq@24RdwP.1 `qq<j(Š(( #H/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@T>/Уϋz'( /A;@U }YB.@=I$G=0g*d89ei1WRO(_ I%HFOk6Y 8iK,vMkp Oxg \N^mY7">7xQ\IB^{~ZIێ= x'+ai!DneIIXފV5#YkE̱0w|}ufZw;-&:# 7@9QHaEP/u^O-Yl5&wştEG><_/mLqdgi'GIWcE wIQOϦEOϦ}ştEv4Q`}ştEdgi']X.qdgi'GIWcE wIQOϦEOϦ}ştEv4Qd8x}4,M?+ }ştEdgi']Y;,M?('?O?h.qdgi'GIWcEAs'?O?>:O"( wIQOϦEOϦ}ştEv4Q`}ştEdgi']X.qdgi'GIWcE wIQOϦEOϦ}ştEv4Q`}ştEdgi']Y;,M?*O*8CYR'.8@Qں#7_ԓ@J)|]QThOtVkKWZʵP# Azo@ꪪT* YǨZ鶉W>Zm?0تSA5͔){RD( T~4GlW7Dve{- g aPsO[{t酴6m eHr3?OOq@ڰ.[gik%ܖ?c 4qΡHH@8G ڌ\#B%' lЊ)آc,H ʃ8ڥ0(w-ywWA, 0S|ULt Z []xhmc@jM'ïvd{b99] A_cFdZުx~XlZn%ņ 8 yu)i6Z7QU]\$z,"OLt;6*)>-ApEdȨȡKy4Y?YͅncpmlǡVNJ?1ӿ#kҷF OK>Q`01ӿ#kҏLt77‹ A_cFod+d+X Lt;6+{'M}_'M}_`cmQ AOwSt K?^xOCY$E8*{c$v$𰵸b,#ulSbOCr:HƊ,hG'Rp&XؓGĞ tF]͕,^v$"c gh>qӞ?-lHMXCJ~]AؓGĞ t7 Qi4S9W`w1 zzZ59YCm Rd4osQv;=lIO*Z~,43% 2!vPsaq؂hYHV189,nlK |a` [+̃ ExljGCҴO녀J &!FDrziJPUG&:wmW{$pL!1łeTdoL\ٴēZ]ݑM7sۜn5µ]_NJ?1ӿ#kҼ&W֐]Z],K*ƹ1]P{V񍥛]JhcA&O>^Wx OGsOz)!{ULt;6+1tX#=1ϰϩ|o0F5LfL?3jS{HcF_7/Fƣ}}M 1c0FzcaSG*wo?G&:wmW1c0FzcaSB`j>g~g DZ&:wmQ A_r`j>g~gо7#3g?4}Bp}# A_aF|ܾ8G83g:5 4 {ὸ0#io)ؤ xⰭ+su4E=L4h]dBp8Ȯc^ *,_6$ 㪁ԑn:sWRO(_ I%hKWZʵZZ]?UچQݕ>M *G Z7y[ 67*y9 SQ^\q8Y~p6gI([hRP.9 sgem6O7ug`ςG:1ZtR(QLlb=Lva$PEu %h`jI8)zr$L0Z1-FRDV#y#̟W_[B`GEew2d 1\b5~ŬZ8Bͽic1^"Vn6 n7i =;–zTIr"2~>F;u3 ?Ee8N[vLJox| gX?l)SϯNύ7V"CC;hӷ ,mı9$}OiQH ?MC#68| x'֯x;F$%A*J(=\6?KKZ7YC";- oOzT[l{MuñC||n*v-Ƕq{>l{g7ߧzm}np0yJq|~ĩ8^E[=;d>l{g7ߧ||n*v-Ƕq{צGwcǙwx1[l{DjAgcmc= eP ՚+:R*0Q0ltϯCJBgYv>#ƮQVe@J(w’ EZ$֟f֖Ok6VO)f4g]U$`QUd"p褅9b8ac2qҢv&R\-2 !XˎNd ZslqK,$o}\n()|9ͷFv-8#5+hz{m˩ ȹ'A'g5ETK"nJyT]\J<1Ar^Z H9%yaOS[Pl:,+=ܯwqLe1rI$i4pt[}h1G&U863Ňe//$e[$pL;6AiJ!n(G|W.|WC! z7hY|a#>Wj$\U啢U:@=3>5[ %2Fq(ZյF7sC@ B}k(0((((((Ҋ=(x ^aI?׿)'VKWZʵZZ]?Uª GjBёL`x?L?o~W)Z2=iL?o~W(a{@zёLa{Gߕ ~G&+y0Ͻ_zёLa{Gߕ Y#d1rqC)L鿼1Ҫy0ϴ—Ϭ1bс*V0\=6v&wȑ(fɇ}L'_ -- %\61\qdfpJK(` 9$dw=}jǓq{Gߕ eͥ@rdi9ͥ1y'K>Jɇ}To~W(!ab%Qil$vF%/8{Sc6T12z:p)To~W(a{E4,[ib!6cZRmt])w(95'ߕ <Q`okkiGmo %b@^([KEBo`V5#N=F=0=)L?o~W(a{@[}wvʃ0OJ>X9,m]C++B=X{L?o~W(a{LcYEDU 8)FKKeiX}L(Y62AJO&+y0Ͻ_V[Ki{ "Vcq})ii-(R0)L?o~W(a{JF,B@Pp#ӵ2m7O '),d*$䑑ԞOO>&+X xY(b@ qגOԟZ#֙>&+Z2=iL?o~W(a{@#֙>&+ ~G&+y0Ͻ_zёLa{Gߕ ~G&+y0Ͻ_zёLa{Gߕ ~G&+y0Ͻ_z3ɇ}(r D/z$<]QZ"M-_i*mijOtVjAERQEQEQEQE? _nQȮ|ԛI{[[IV 0Z)> Kڵ*4a6Ui4vϙ:F;O׵-FY쬤X{yVr00d c>犙u/ JH+,Ajn!G8דiNnv_mNkwf)&yrn#eE㉧IGtf0PD$}e5=/]}qӁL]_H2\d`U99@%K^j],6ۓH#ںj}kò^q -`7NRGRQtVg$z'- tVY&A[_(CP5(zdWq\;GLƦT%~$?#?)k} AK_FsNDG$z'-5 tVg$z'-j4HO Z?#?)k(.iYgĚ'mM֟@ԢV:Y]pcl2@Š(((((J(A/z$<^QZ"M-_i*mijOtVjFf{d"%6w `@[Nq稪v%[$6ցquٍ I's9j9ՄX)x~+s,W baC. (BxI. l-SzgGd4>M>xMۉ89#EӬ r'mۥy KOA۬+ՂS,KJ z{PҊ(0((_7L a./HjV FRTxcڪVr0{a)H 29H-54 MfUg% !lg8Z$'Z;I,LpstiTR:a|=CuuR <9`"c`9%eStoJIY_1aX8e h}:9] 8Ej1O$IvJB`GX$NAd.fʸFv  p HK:r**kG/J|2G3$dQӨoND𶘶ֆd!tm@lrz U,Y"'Q|,wLHwF>\m%l[}:V|!v*0B'q=qV4Ok:Vb"yk@)PD9uN{SƇ!lDv 둱;vi=l4,NJ/ p(XDU n?ɥ\??ɠ <T_ʣ\??ɣpx&$TyQq*px&|"ܨHWg/<@h^G$,kB:v:$qK@9;ڗ zgUKżU,[{ɨ|_"ucEui@'= $嵤M4(9'"VPCYfO2)_\f4u+B;r$.q2El#Ftd[\[@$jG[+rUL}#J771yۭA ,ARs秥Y%[Ck{pv1ZOpAYdٴ#Jv8[HN0%^Yeo2 W%)qS-*d{Jb#T۵c$E;M4.91-V, D|?tP1/KG!uK@yQq*<GGMQTnTL$e+ m 4}U/c#Y5lo{f{P8[iwR mzW?KO=3*Ifox'8իY->{8 #*Nz+NQ@Š((((J(_ I%x ^aI?DZ]?U֟f2Ǐ2DL( AA=%A!0fh7[g\KeuvmKcVbE2?y;PheJQ+ʄ@HΝ\tfԹcgi~ظyG|JeF8]99(EPEPeu]wR"lތ:c?Gv>|vOwzb<ז n`[y. 7VUbv'$>mvqM9 ]bxI-ޓieep9]$Qиh_^@5ijȶVlFHZ0w'#=2(|?4؛s? {ҧ>6r&ך0ÖMF[c'"Ou#\YPYQ "^^`O@k9 ]xXVzo [o\Wa"B!8.ђ'w{֑Yxٙ0I $Y/&ܻdebA ;8bXs ?o.Җ 9G'U)G֗}GLV:iAR3OwOB/= ~:C.rJ5y\?Z_zit^otc+пKOB/󎀱k^osziti_q:?y1ksOB/= ~:G7O?y1i_Q֗}G@X5uE3opb}p9=~:??8bMKe3\Opd$)=: FKKv@mQͦayϵ_ AJNoכ kG[ߥ .+tG?VW[ߥ g[ߥ g[ߥ g[ߥ c|tRK"=KG{SFP|MI YF!Z7/"2xUm)fHZD c= Uk}Lh(- 9$y&A6[ƱL (@QETͥϋAxe< kBd]~MWwX؇iU]ԁȨ1(qBO Ĉ!A ?f\Hw,}Z2i: &D.5Kt#Hژ8jRCi<6^Dq`!L?b\ֺ2j;"wH/8EG#XzS=ff ̛BYqákVbӴ8tt g 2Ư,@ăx\iZ-׃ςg.rcsE# 2:eA]KFׯo!#h-wbLS+G${f^KXQ\Z.dR@}1ViS,۩EC rb#nq*\)i3٥Y#X$k+elg{EO ȾdV>l hAH.7?jk]wiPj ΀vw(>:9˨Mq-5v[EVy Z4r=ڴ×v2w64]Y}OjJӶߕ A9[fۇc${CexC]x@/V@_GV@_IoxvLJt ON[ L$f=ڸ;?w'?<d)lrknMf |1sҰxZ^;&xJ $ZX_[Zi>ִ*XQE (QEQEQEQEQEQEQEQEQEzQGWRO(_ I%$֟f$`6?G-_i*mC(g'Q?#uVVK*G J7(8#XKy#Dq&1 WרHyr\?g@ }>Ļv '31EVm;ur\?gPOZ^ZK(dy9_$vSϽLYd ~r\?gO1 H@ ~?:g'?#t(\?gG'yr\?gO?#tyr>g'?#t(\?gG'yr\?gO?#tyr>g'?#t(\?gG'yry8٩zP/z$<^QZ"M-_i*mijOtVI d+1QP25Mj^\[m}V!L6z ϵex7@^kpۭY#E' 079u}ѣts~-@<5x |YzI˃y8^q6K$"ݒ6xC54ɐryh)u{kOFϵ4j+unHv%_'GG]/Dz[_EŴfHgDGQ3u;kh'\ߣFCml`8Q pW?~^qڬ7I>?ѺOF@}ϵ4n}ѠxW^+*V#ju;J{xVM0Kqsf?7I>?n}ѣts~>f?7I>?n}ѣts~>f?7I>?n}ѣts~>f?7I>?n}ѣts~>f?7I>?n}ѣts~>Jf?PHg";_ I%x ^aI?DZ]?U֟f2V;+,ŭ񼊖 A',;u,Lo_4EspA98K.[JgHF"Y+'!.<7syAIgrHqJkDRp_T/ ! iEͱ\ne>V7 ɣY$$PH@@۔rFHϭM7j yy$BIV%B ӧ(M=nm#y%"@w w#)i,'!k'Xm!=Iʞݾϯu9/䶟KMıJchĻ?pBg5'[)59#@eaEjVP`#5v9HGxX$%@>V"xR;MN]N ufI 0 =(fujז:v cgy.<>_d/;KF+_Us' gd/;ފ,O >_Ywa]Y#%5}Ŀ»z( G_YwaG_Ywa]Y#%5}Ŀ»z( G_YwaG_Ywa]Y#%5}Ŀ»z( G?Y10*%#Ӏ?&4Tw’ E'@J)ijOtVr=EM 71*{C| Q>G#TbhGح?R>G#TbhGح?PQP}}bh@z2=EA+O}}O(ح?Q+O>G>A+O}}'hjZϴ?V(|_֌_֠C| >i>'hjZϴ?V(|_֌_֠C| >i>'hjZϴ?V(|_֌_֠C| >i>'hjZϴ?V(|_֌_֠C| >i>'hjZϴ?V(|_֌_֠C| >i>'hjZϴ?V(|_֌_֠C| >i>'hjZϴ?V(|_֌_֠C| >i>'hjZϴ?V(|_֌_֠C| >i>'hjZϴ?V(|_֌_֠C| >i>'hjZϴ?V(|Ew> |ڀ׿)'Q/z$[ a"]ltl'٥=Z:4Rni[y2/*UA0l;}_?ƏK?]?]rKi}x]}x].Ai>/WS \t \tr>/WG٥cjAw .Aw .P٥ch4_O><.aq><.aq 4_f} .?? .?9Bf}u5? G G(\u4}_?ƧA0A0 }_?ƏK?]?]rKi}x]}x].Ai>/WS \t \tr>/WG٥cjAw .Aw .P٥ch4_O><.aq><.aq 4_f} .?? .?9Bf}u5? G G(\u4}_?ƧA0A0 }_?ƏK?]?]rKi}x]}x].Ai>/WS \t \tr>/WG٥cjAw .Aw .P٥ch4_O><.aq><.aq 4_f} .?? .?9Bf}u5? G G(\u4}_?ƧA0A0 }_?ƏK?]?]r8!xݙ# =8W? .?? .?9B/)'WAh$CѤ_t!f =GPK](:(:QQ-Pictures/10000000000004670000033C418B4D49.pngPNG  IHDRg<u[ZsRGB pHYsttfxIDATx^_7;3e[+q?Qa(hcِP)&` {h?P5"F  jb@ŊB"{-Ĩ^7yֺr5sZ7{k}f{x @ @i?d @ @ & @I@A @Y @+ZblG @|Ț#zI @bdM @! k8% @5-Vv @̇i>⬗ @,V@ִX9 @ 0^ 0oƲӼ?>Re׮] nSOv{7e/rBґzc^~uS;CW/<=J5  @{{ @@>͛7 Q;s;6o=V*gϞqozק Y?+Y_/g꥽Kם;w8qbY:'ZS]-&@ Yf)г>{5Ud/֭;կ}8E=o>|)⊬_"ϛ 6$ɛkw(%m۶Plܸ>;v838̠iIhD'?IM^{t5.Ԭ]%\2a҆.ldi{ӭ.ku9?a$N<)̖-[Ç?#;e蜀s!`,^$T+/ږ?Jk5wu2sm'W32.[:t~X]O{n/7 mժUU^zi>~V @Y5B- K=ȵk)]kz/_wLg'V^}*_^LGa?O#\vV\pAңGl @[nKk  0@V/_.1W`d8V6+)@YXg8,zjܹ`?l /蓀O馛+e>\heHG_zø^4~EeU KOKlV\YՒ.t'O H/?  @`dM3 #@>@<{yWKyf_}ȑL+')M!>(UyoZalu_uUU]gHJ^ 'YS/Kn裏֟}VρMG yQPo* T0'C5~-ZHuL+$V"@5v|   뭷zDP=;,Y3> ʴgy" ?uYmXu$:ZǵUEV&@5f\ \LKC@f'N 7O?nOܿR#{tT/%_J>}V%1۶m[R\4 [dz뭋^y`*˫ig9 @ Țf=BG2K.T۾}MBl顇??qUEy~l(-7mڴ,ܼ[\mE3. ki ?2KDyr9뮻JO 2̺C=?-y^y]\cuUR4,iIUN6KuGl?\ZjK-YXkҭT{F7P±cDzUSOJ!},~\oRnd""@< ?y}'@@rd8ȝk:E"ڷo_YJRBUl6ҭd)k.ؒTQ5oJE JeUqᛋrt),5$; @W}M{='@ @`Y8J!@ @`~dM{='@ @`Y8J!@ @`~dM{='@ @`Y8J!@ @`~dM{='@ @`Y8J!@ @`~dM{='@ @`Y8J!@ @`~}-~ٲe-Ԣ  @Y즽gB  @(N\a @$`BVLd8 bW5>q'v=~tQ`ѧ˚L?B>Pά@&~t~2Ѱј:v4p ~A-g]ik{z]xh3 @ ȚڳV @]5u1jL @@{D @@dM]6 @ Оi,Ǐ]vyx㍱JR;Ao!\C=Tq`w~~잋Ö ԏ[lB}(~:3˯)W) T.KU@L9&P"dMc}(֬YQٳ'kܹ3?/bӦM(c J֭K쮿4'˗FӴb\^n }=h('2N(K3n۷zСQ}ѳ+ ȚsZ?3s=uƍyݰaYhեGsZE E|'3Z jժEk]^}뭷9bsT5@ujʕevSILa\ /,qv"˲dM$hNd|^rPw.Vs/\|lL \X4o㕀gcPXW^ye ,o^F[vZiXͬT_|+{ԩ1ge bb9jL|&-u pޗUc'>&g)FvƲirWTŜ.9Ɩa%4W?sS5\SE!S,8:}.JK-՛*zTzU2U?p@g[]fd,zZ(NDZK4JKLQo)_3Wя &("[eED}V+(Z'k|hbr$UDzv‘WWZcYY^VH nJ(kvՏan^hev*pYX]V(UWomov*^q2vCYi۹h#8p T}̦[zu,tT}WLAI(SUΈ7_$p7ϙR`slʤLZxvg2mvΙ%e*3Iߟp8ʟr!zkY9s KU}`k5馛n*yѣGO?v32Wz,ϖݛ䶜ݱcǿBәAQ#Y"܀i_=jiN 9O9ꫯfϐ?\Wfyek8jJ> 7ܐ&W?e%xMSɣfṔkRr[o5ɑr*yȫ}< "a;Y= ~;{PiA̬2/lr) n 1ﯟ$r)ÅY_^~weabWg^鈳rKӊ+n4N{ʗ|11&B9ҮӸi9WXcz\dMgA=k)M~5г(Ū!PY^ͯyq[;ՊKYӢeyytuyrڗjZvy矗~wYr79睗7k,׮][d% \ 7ߜy{))^탳HȪGAI 3 8s^]*޴SjFz2;\2+ԯZϫ6V [(Ʊ|xG*ȴ*^AM=byJG^ՓW2'v;iyCV_3c5(wW#8pXVvL*%F~WGZWׇ:{hj pe?-37,u.=8ɂWe@ZcXQ}LDn x4Z1W.ߗ7Mר c'Sm@AlǹZQ 7,F\Evl[+Y[nւh^sAT2 @}5!@ @@slL @@ྦ>qؠ]·H3}^bB*=GG64Xt=n{DZz`5]ę fyM,Gg̶DŽq3fZ bYӘ @hZ5  @G5O ]`/=b#jC)]#j"(b5,7pGZ6ao |F7PGua 5u!J#hg fӢ  @4( kjW @@@ԃ  @ ȚU4 @=5 @ @@qM @@f"kowڕ__~yf/wᩧJz7JglRP^LJҝ%Y={پv Y9nc v(Z?ò{M:2M=x`9GtNwG'^/JuM7u]?In喼9qƍ'm[xw~%/ҍ7ޘeɝwޙ%yۗ\rI P$ꫯ&^ǎ۱cG~_x뮻. /첼|۶#+۷/G/OS:ƶ,N q ٭Z잷~{|ITʷU;mN]jiB`a Ț]~p|Gy$ݻw՝F[$I}>Ȓ 6$uΉf˗/vfܹsG}G+&?q9l3Isɗg?Y:~fQ5kM~^ha_Cw-P`&sNffׄnb6o޼rz7ۣ \}իVʶ۷o߿eŕf%x\t:uTdO)$4C#GnݚmkזB{~駋(&,Z] .0[YgbI7TOk|!_YTL*_׼"|imΕf矿i& ο wv$7U&;c'☔)2Ƙ4ɓDK"P KRJgA`_|1Rq0T|IYنwsO}?^{혛[mfve[gg7LYΘm̒\nZb+,iRr"<< }ݹX{;ԑynjd9:t(_3,CkNug:F~VG@wvD')snᆜќ|'|2_kf<«C?xw+u?rȜg$P @3&d&gu1foA,EnYڌm#34u1j3 X@5-fShm[J@{a1]p_Shg kE @hP@  @聀A @55h @z kAu @dM * @ȚzD] @ @AYɚz){V\^h=K/}7k<4byZ35[nÆ R/xZ}SN~򓟴_%޽{ٵiy&mY~mܸq͚5G}kbjG G7|sڵ˗/馛vUr8?>;9ȚZ9rd֭C"O?eC w'NrĩqLj77;;zЗyիsXG|&Ѓ~wEдbŊZ{)]XdMIr) .@g?[6}r{?r):M6mrh!bfbjS஻JtgWmV$j_+>㼟J dMym.~}Nv1v 93-O<ٛ[G\9__>7>hdΝ;>z?3;vA5r}G{St&wSLW i_ YSjgFЍ7xi jSVZ5՚~.ȃZzE:kSmI/=I}3z2]rZ?W}|ϙnJleM^ѭPim;/{z7oޜ7]6 !O|r߷~ 0.hy(!OH9HD֔{?4H*s'ye6} bHn-R~[<$Kmf]yK/Z OALs)_orKLs/(.@—ci_d6Cճ k̕7ym8+zfgeAX,%hа8SX\c쌋sq±ƴęִ8#[ @ @YS Ȫ @ @O  @hA@* @谀t @Z5  @:, kp4 @dM-  @ Ț:y h-(ok[n";cs,Q7WQkAl;kjL @̭@Κ'UG0ĮG~ԶYSsMg#]U؃8 b.׃8=Bk{gӢ  @4( kjW @@@ԃ  @ ȚU4 @=5 @ @@qM @@dM=. @ РdM_~C=SOU}AEOU[l9d*l/r]o={NV%NU ]v%vo6&SJaM TM7P xj6P")00,p4gYɚ߿{+o'ycAmVoj)K:ёyn7mtL}ر;va'Zks=|_|]Ŝs`X,CT;sF#_sPkÆ 6u`X,Iݛ8q[9dMw}}cUW]nݺ5ka͍7/DG湑N8Q ,_<C~wG3N~ȑ͛7W Ξ&]w݅^ءsSB /<ҭ=\LZء8 iyRߜHv#:dM=׮][^}՟~]UdO\j$%vir/٨m-^{pрaCロ鲳mX@RߜKENo2Yɓ' `i|2|ל()Sp;3']Y73S2aͥ~޳3v437/~3EhTOdPMLW {^z*5$L|[TES~ӟt*j 2]n;uAՓP%|IhNhtvk'45@/r/l[wө$?秿=Cʌ<%܆޳[wrFxʕ~uҗ+V9ӏ~H͚n\.&hB grwܑ3˫*ٚ@yzU) $k*^˓*i@'pQ7v4|NX.'{ɕÎvDZ~Y@<- }lyGX=@/wIփ%TdFϣV ͵Mc bʩ2fb^ ƬjM ,bX,M*YSS8#wƁa`{fqN#80,=Ttt,d,gj˲YgZgA&7g_-X;q\`,zA\ m'3 bXoV63J$&h N7+7+q @^@4 @Q@B @3 Ț|> @ k @ @b\kZ @Y|Y/  @Xir#@ @`>dMg$@ @`َ @5G @ Ț+g^~-[|ۧzjٲe 寻v_3:ǏO!Y *˫׽_.)s&oaM$e;K(jV(!BbW.rJq?c:E Є;=@9rVN6\X@_dM}+M>\wݎ;Nך|ڵ}~}}]wm߾oyW:tܳgO69vk#,XxW_}w1 ę6lH&hv7O7io(JĮdÑ6LP^z f*5 ?|IhN`xX̒'Nׁ⊁'?/b֭Ѿ}㑭uJ3=ucXALKsѲ0XŎO=|ێ9N;ڵivkAtw)sʄ$Wf͚<˒?^pW5sG}b:/3!r#ӽkw)rPV.SB`VڐWʯeZBV.yyS~&ٰrRZ6߶m_:Rj/ͫLQe`YR~ygR8KBѴjazQd(*ʅDp.ػ8G;%W'\c^f蕐eJd wm14l{Mf\@~\pA>XRγ>ՅjFe6+j|k9W}{26 eTWyjgF}?W:بQ^/ 9T9?:u*?̒'Owye+Vw}7PJ&&˺K{`{0~ȑ 3mɁ9"=z4GRi^9gJXn`e2-wͬ\Dx.LN唔?tUj/%b̒Z+Wfafe},iW.2%:%Ry%vuF1)ߖ@Fل&yT{D'p_O1OhJ!Y'O%k۫١{Z Yy(,IF Po,^3Rl5}:p$,eQ42:Jj#jap_3昜5@d (ݛSp9WiWG{aL9"0YNۖD"=,,YjW_}Uz-?9jjOK2oՌФ1D.YܘX$na1%IVSNNU]F{H|SRIÜ_sr3M$?`[Y2\UlM ˂LMyXpXOϫo0ᰘ|&s,ro2jH*"裏&cɤlrJb9fI3O[o-馛n@a‚"I]30'L/+6RQz2Ezc}z@2?Jc&ers~VWm%GHP<ƺ~5e-1ټ<6)K%PҝRBidϟJ/dײa5;V/×52iU΁՟5TVk8UtIg!U+e}U/3T]},I&t N^Xhӕ*#wŴʪLqX̸SY?!i#au1[ĕ98Ǭj̑>c8M8?iRy m5N7@62bh-'io2TTz lZ;qlZ!66˰؜mk%[n"Alζ[ zTE @tR@ɰi4 @ ȚZV @5u2lM @@k֨UD @@'dM F @ К5We˖$3&CYsΝ6oJ eMP6+˳0ESTf T5N}*p #qXUg˒˰UޔqeۼysfǕ!/+d>?AZ6)v<#iޔBeͬPaۗ%%5*-AJF7=qGZ kM!›)}9sQ97V/19r\}*$K_udRuYr8.s,3sZbEonݚ~~^r%n)y PhLkE\Ifݺu5cYdromݖ1t͚5F޺xeܶm[\ZreY!75D*k.ZfjJ^ Ie _E߈՘ ' kjϺ5y9&00932[ɓ=XEF<9G?O2s\V* O= @@2-#cҒg#Qyr:TၲJKk3߿L+jժipL37s9 is]Z>I9]w]ő)~}<'f`@R"Y\ɩʴ)ڵ9Wu tfF>feկ~Hw_Xϕ(wQ7i6Ւ #mVE=~T5K!IuRua\G(&aՆ9YLe M"/tM5͌hLiivV˴ \ʫ|Ts/1-3/42ܰTU:eu^_<5jFu5<ރ8=Bk{z=t x\njg @v{yt^MfH =3jqk@P ʂ؃ f vFA@ڞZS>-@ @@qM @@dM=. @ РA\E @ YS  @4( kjW @@@ԃ  @ ȚU4 @=5 @ @@qM @@dM=. @ РA\E @ YS  @4( kjW @@@ԃ  @ ȚU4 @=5 @ @@qM @@dM=. @ РA\E @ YS  @4( kjW @@@ԃ  @ ȚU4 @=5 @ @@qM @@dM=. @ РA\E @ YS  @4( kjW @@@ԃ  @ ȚU4 @=5 @ @@qM @@dM=. @ РA\E @ YS  @4( kjW @@@ԃ  @ ȚU4 @=5 @ @@qM @@dM=. @ РA\E @ YS  @4( kjW @@@ԃ  @ ȚU4 @=5 @ @@qM @@dM=. @ РA\E @ YS  @4( kjW @@@ԃ  @ ȚU4 @=5 @ @@qM @@dM=. @ РA\E @ YS  @4( kjW @@`B7-Tќ@cs-,- PEhOl*Qv wDmǹZQ /GRճ:ZT波|kAlǹZQ 7,F\Evl[+Y[nւv  @[FO뻯in?W:N @Xm_k2 Jppm +5%f3Vq,^u3Vq,_}M3i`kFFt :*K>*qڢKS}ʹ4 ҸOւhT0 @z' k]Hu @ Țʩ0 @z' k]Hu @ Țʩ0 @z' k]Hu @ Țʩ0 @z'0+Yӗ_~C=SE8_|?;t-[T}{7JwϽUv1`3WAP?>5AGC=æ怙fB~tVSK:שykpM]2;fZ-7dM߽{wG~'y8p`ʕsu<_˶mVo=K/}7k֡mS3lڴÕ#<}1KP_y}8q/(!ݛ% eڡmSs/n뮻@98];(A8x7Tenۙjxر;v7,Nj-\u|Y> -tx^R;c=I\|y T9W}ĒKpIADW믿>7V缵_L3Ϲ|K:r[u^ /tnu73hr_I_T œwsֳ5e/́30W+=KJȖ1V)jces׏5}盄m bRY bj7򳤜(;@ִ&"Rz;;{y_*Z+dM Nf##f$*S?rg(7,9X+*隗fM`d7 B r.ϫ)2.*(Jk֬?,\y]xO>zC3pH-e"G&׿oyWdD3+WS%l6mڔ_2Y^ (+ڀZ4jEL}6,)̬T0;8]y啥_|q7dy?!'~voO{v샥*~YGɟ.+T[UeNZ50pIyX՚iNe*sߕZvRTPTrШ /pQ(Â3 t|%@VD7}/)kṠ nRYf0^˯g.A,GҶ2֔[y#gN="tc6smݺjO}\+U3vCS:e4MFTZ w}snСC)˟]6QO*Ux9$k#wQݻw)Qg$N0+{g~ر#u@?[oI~ƍlbެ^: yČ+,y/ѣK3w\ s=t"okd'<|5{Jy?I>W0:١J&6掓FUW_-ל+ѪUCg׭[W5Kҩ/<,&مksm2U)`58}W)9N}^6Era'=ܓBp?u]@A+G7=J9|-x\P1q#_yCE9fUM:v駟9r$5oRlSlr+A\p:NV(S`GÙmԕ+WfaN%Lżԕs' ӼP6-9ˎO8,˿K>/bJ˘r%?Sհ*cxzt~ 90Dfe͒<{e󹪟6-|$?>}ZkjiVzNj@=vʬ癔o0e}0Krf啭fׯo[*iO9So2Gڼz_nQTSU{,)_$4>_;2ir#u b;-QˢF1{P5Y.òCRdrx&%f#:0ڿ~Ә;N}:Y{}zUfӼ6S;}e>p%ClʤjǬ,},ulqܢ6Zڰ^~y_a~\-77jd5? fySӅrF#Qse7,- SZŢ>DßuGt;݂U5>Vjȴd`i}O7vƂ{qчk#Z]kC:MߺkrQ(Rr|e͒K/49K#r)i+ri-Αړ} SFVvo2SxΉ$KJ õg# 1_/)+C~͛x ~s}L$}y)'<Ќ\u؜!/KD_jrUy`cBt<e.vM7U].o e[htx1otWHirˏ~ EMXcMr1' ~*>0rp\{G3@OӲI=OVn rw]U u^x~w/|grdR tV㏕ ٪ =!>m΅f,Xpi4:5 e4d@S 3`C|ϼϒ]tQL  eC믿neuG\jJw1)ѥL7ʀ]Y~4k-+_#3p8\u]`{!|<|+oۍJPvto&0#>+ eRN/񩨤c8P3?'@-4솥޼mۖ)%x_d%\T*/Kf7L^JQ9$2zefY%֖}}̒|a8\L ̃FWta*Y d2gjac^2O,f"&g|HOBwUncx}VbO!̡<(g[rt*8a1D%S=4VCd>B%9[̦.8Vn*)&@3ֹn-$'%YW>Y- &d53PeRhYNj@=v Ʊ>_b`gyuL2-lRͷ/?ɷ܆TV.kU}JC}NN_ߗyõWscRqd[Қ'gUaM;lسq4/Ӗc>@ZONWVGd7,ʮg)ReFbSW.<4* NME kqI <l68| *ۦ*FUD`}6]ea nRcf\jnH+'*j8g3[V7pb1Vg;,&C2-@:)\q<ҤL7pC'{2.'Y4>Ț]}#@,{\˾Or3}{z΢9 |v bz46 xN3 txnzcSvٍ-ıfwւZ~ @Y5B @5nl @Y5BІ+-(_czfX'ߧ~Z)dn¼/-/2;]l^=l{iV Cpr(C?/{w^% P5ªK9L wf eTfF*],;gO?4>SV8pߞ$+S9yEw_w n8{yʙrRܔ]w]d<>RvRs4U|ѣGo]Nʎ=ٷz(0%zTK&5ML[LΫ U?O&rRK_czzYo[*կ~|9$yy帿m۶$K91gyfA&ae}6V íޚ'ON4;3%'/ʽ ٿ</;cٹ*78[ݝwYY&we,'8ђDeɈ aIr! R ye y%nݺM:ʩWZb^,̱n+Gɧ%.5f#{f=XfCy e AWY݋a\nΒ+?9|\h睕XN@d0tSښ ɈJ+'3c2_ۑ:6GoYʯ4Z›n8>9]ɚP)YWn(r+dInXʒ,ϯY';wV[%q*%ՓkU~Ƈmcp 6QbvAyjLGΛz^ gIW-U hXA(ϼ3hYRŪ]wծZ] M:,W%9U} }) < F#0udQVX*ւ,=l!?,RQJU1]zq&Q7W 6gfɆ6l b Zk(%@ @'R7 @hH@b  @艀'  @55X @z" kI u @dM * @ȚzH @ @!YSC%@ @'R7 @hH@b  @艀' TǏ衇޺ok׮_~yAu?^ySSOeɖ-[R@QeZ~Vp +P-%@95au <wwo|{()9RW_}oپ}]wݕm7lؐ5cǾniӦM~ႅ'kzG֬Yh/ YYҤCmȆ @t& M'طo_W˗/Ozyzȑ={$̯Y^J 7ng%AobŊ;v`wq$)S}%{?!@5^Ld>[5W^ye/ί S^xaYxUWnTɔ^yʹSȕs*ss0f`7*׋ g&%),$ײU~:< ՛oyWR{)g`,)Iib艀' @:R/=ܲy. Jwɓ'O2 $ך8nݺd/NBRJμk\]vY_3/?㏯]6+do=sB\2%r*rk޽+߿?ᆲ`.% ,Ue`w}ᇳyZx\'@y5s\_3s.eG}jժar_S^[n_O8/3W{Ô0_=z4P~Wyem۶%GJ$'soR29uT,EY1SYkP+Ee$]ɾҞ̰ʯ| @8qC> $_RzkJ%iٹs^澦K/tovII]QҕK}_~*r[nя~F6JFnn P5< @ NK`WsQΟ&f7& ]tE}W߶$UfRTuչOSTnd=Ey^RO.LS()+%RXn3o7/%A)'I?SH_]RauN5&]56Z›X7Wl[+y VKP5z^uy/TVd\I6OuY-ẉ+Ţja2JK,KXY--̯YZTPoXr媴'7&UU˓+K.UUVEm*.a{TqvEk6Mj-7_^*4].P8NFkFy[+ܰusmdAlZ zQ @A@ԇ( @ ȚU2 @}5!@ @@slL @@dM}> @ М9[% @mS<5{wz)+ j/[l) Z^OVelUV_?mz˒^$? i[} 07  0Wo?Td>_aÆNAwܑ7|6mڴ}/;vԵ^{l{СdA>hqojߟuREYR̿Oݛ7Y~wmܸ1661M?+~AxuL@ִd*&@@˗/Çi\uU]tQYusʕ9۶mKu֭']GI?^ J͞yHew}uו+V.\ڹsgZ_ZsժU}iRy]~?p:ԋZ1'@S5MTXz\8\bJS3IQ&-ج?OY~W)yNYLK.馛r)KZPeIrI+;Gy'W<]fճ5fŵz- kuxuy(IN.1୷Jt:'OOk֬9 ɔn$0zk}{W]ʶT_WnR[$r50n ?y1g&@dM-Am $ɹrQ*%jp|urRI~vޝ>2}gʙkhSU5j@ۙr|kRӦ @`dMst]&@`.rGЛoCnn^QKѣuL+yT厦xr+S~}??eMeꦦz- %\JGʥ34f." tW3HQ.O.⋙_dPɈN:֭jI]'or6OQO?t_"W{)6uoPyL_JQyx6,T_4rQWUnw}̍iR @&PAlM*,WoNMc'MP tgbywyw۷/oZ^ѕWk^yh^0#vROQei KɋUTٳ NÍ,[e1MO*STm(GԖNPmւd2M2!TTiFO];q:o; b;΍"Va5*36gZɂusD3  @胀Q @55gd @ kC @dM* @>ȚE} @ @9YSsJ&@ @>DQ @hN@Ԝ  @胀Q @55gd,z{w?p׮]˖-{ody^yS驧ʒ-[|嗩lbSx)v"EسݪӪק(8iF @Țf$A <w΋⊵k~77n5Iэ7?^ySrdjV޾}]w7Ip-|'N7e϶ciMvOӪ7|3%ܱcG5*fG@4;LG'طop^K/}˗/ȑ#{Y׃>_BVNb}gǎo#ׇ~xy ᆵ:+T._}6IzZjÆ w*+ k 0/_L{feYS+'W^yei__se' «sձ[ X[V}U] $m2/KyS&g2)nL,fIV. s*UeRa NS,Ӓ҆k ʜO6 @ Ț/xm:t(WK𔛗k_{Oy__bEYxy|>.Z/φMw}78fa50mt[$եI~i'LUN3ٵO @& _ w\vegܹ> .亲$ C~=s> CYWZUmRZR_7tSfٕ+9￟7\r矟d`R͛7NϖTJkSN RzʕW"P$LꕿIîd~GqY^,9]73ym" kJ$e\8@Y/Kk)\%^澦K/5Ny?hj4 kjRYj:9j3 <# KKW& &#ʃ.F̑Z:! kD4g'PP-dY,Ys7|sl BrDτr񫯾?A##26 hz`ovV`_?^n q̗_O{{u bn]>[ehj)0~8yzc"; + pbM2\HUY`̝jo8\` _}97eϼ_.hAj&5UI??9眓9s׮ZjR^tuV\Es)ԋQ'=s %\bfWp￿iӦud\ ,'s#u晥[}SN}g{nud[C=c e.К3ysz|(z-s,QT#_{؝msrݛo9ݿo^fn܂t_nZoy&^y]ܶ32>3Iz'xbnAjX_KvSa3A} }wXb:leM/bj'*~ӟ O{ v[αu;椸9gzkgvI':y+KsO;֬Yӡ^hj5,cN,^tEA[3"+Ցmm8(ʫ̽/[9 eMy8I+_:TfeI^F|s -gѣGDp fV1 ~ NH}՜+܉kdb%ƣXpXLdo̷t8P4s**_MX9'r*o28:ߡ NԙȚr:-ss:?{r:-LH]-orn7MRƳ噽]xȑ,?k&1nvIs,Mr+Z<ӥ4C- 9!K]vY9?5bgM9&e3r쪶Ywk*3'~Yxy;i5rYL3VzB@=v8]J֨Hmdb eglbMj-3q!D @ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @, kst @dM* @> Ț]}#@ @`rYJ @ @>GW @\@4 @賀7 @&5Mn @,o˖OEyBuhN|`ı9J["q'h(o;;h-(ok#jsME׍YSsi-*YQr>y h-(ok[n";cs,Q7WQkAl;kjL @̭@4+'@ @`,5?VXfx%sg886MǕ3u8l:u8̯侦4is#%@v8mѥ)}MK>ZS\qiܧZkkA4CoqS @5.:D @TdMST @5.:D @TdMST @5.:D @TdMST @驧ׯ__>CY;>w[ls޷7x#{b^voݵkWyݎhyrP3vpjȜ7_wq35;]vYﭷ /߿snu?ǔm۶uZ[7W_}5{cva^{/"; ͎@N#:vvymذ}޽{'35[M⊋/D޷ouH`ƍz˗/_~Ν;?#D]Ȟf͚D뮻 m.9s=i&W IWXs|:uf+kr4geĆ%Y܀~wZ6tZ9f޴JSNɚʃTcZ:*{=&Î/ E1S|GhȚr/Soy3L%-{oÇM-h7QE2r-y?6Q2()< CV> $Tv o<gi|BK/u]툖O.gV*Lt%,P8?qZKX .!6,Ns3.)b.UQq&5-z  @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#dM#@ @\ Ț::O @HYH"+ @ 0 @ 0R@4  @̵iï @5$ @s- k< @#}#W|e4%,@`qrY(!q'B &i N7#:H &i N7;ۖ#jsMEYSs%b^HqF1I3qְ8;XtK쌋 qvb薴D3# @ 0m_k T$@ @]F'Cn0F @@dM] @ Ю@K3 @ 05ךF  @z) keXu @ ȚF  @z) keXu @ ȚF  @z) keXu @ ȚF  @z).XsSg*IENDB`PK](:UDf>f>-Pictures/10000000000002610000007720307C1F.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222wa" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?xMWڼ6lWX2vס ;NRhӵ(b FySr>1!`%`?dHCBLω|]i Nb-HRYqNkgoO#S|K4Up?*^o4bUdD$pz _C$ڋiv,yq(HtSodr`wY h7VO;=mn{$( =*%kg}%?֮ O..Z+a]7nt_ZYEu{smSL\ᛟS{bzE;=OV{jopyzk'ſڗ,SZB6vwwꊱ\C3WW.7~\xPVm\.'q)F= .x^ܿs?[/Q{= |$_PZ -}DwGY}civnoLޟ*|P}V{(սyu=C$]ǫ.~aV2Wmu t$^ZuIoa{knn#hؑj9P=*jz{ꗺCy,iJcׯ(Iso8G*d>gܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= Sitҳk?/8Y膤QE'xfd|@ x ue'fzzk:VWGL-zk%f&yƛk-*網24f2!꩟*w&m-S4$a$nNI 9N_ʅKL[}B:~NA+цy 9 m$K{o=sֽ=TkoMKݿ ak8MOQ$ p;utd3oia}$R`I>-ex`fBeBy5RP{$p^Uӵ)nMΜ ېH޹=o1x~G.eԍБUmNntRe-}x:K[čv1< ;I<ګi౻gng?v*nP{$pzׅ\HUчB-uGKk՞(^|2H?}F_xHlcYigb6*Xw?ԣkKԋQ!"BXwMzuea:WKۭP{$p?洵i &ϼɭ/I,?$s#ho_;5 %G$9a|>u>&$s#hy|񣞿,;cyG_֗$Y94s@s7w_/h|y|K???Ǝzf}McyZ_Y94Ȩ#,@Q񣞷,;cyG_ִ G1dbcƣy|Nא9a|>u>&$s#hy|񣞿,;cyG_֗$Y94s@s7w_/h|y|K???Ǝzf}McyZ_Y94Ig<G_߱ϼɣw_/kKK???ƏI,9 rù;4}}MiIg<G %G=Xw3~u>&ϼɭ/I,?$s#ho_;5 %G$9a|>u>&$s#kV 9=j'Z B/fscyR\,HI%OMEfRjAEW)QEQEQEQEQEQEQEQEQEQEQEW?Qo]s&;M-+ Ut"7yiKrc8Rp5hא_ܷ-' !i 4I,#;6O4_'I7gzi' Sii8piۼo{k핖>,[5[[hUS>Xgv'sIkF e(7J\q< 5T1ܵ܆U<-߷jm ̐s"6}㞤o?^֯5`>EMv;k=D_jS-$ t'q]OI$kD^]f0x4.Yt!v$:10ۿJj5W֦t=KViHB(U 3~3Mdkkˈ('{xƱpy:}sGuvګed-p i8^aƷ&-a`sR~~鳣kkKw[i9hkc#psZui+"s!.T6|qҴ[Ú? њ-jLSLam܏&2u=[NQ7Mm4'ʣW|ZӬ8~m4V1/tr9't57g?̻T"4+MoqowmytrqW.> [ oM50_Sלp)~.&FfHBF6nè-5+v+~xWvWsb=}~=Ѻ?UXahQAvbqp9|oh q.nK(dW*B:w!OriἠDlY>^;㞵<^ >T-u="ԧB1Mx)l>Qd6 c,׳K ZcVgqӮxFNmyĺr5ト<'2q֟wO٩ ӻ 6=0sS*+_Ȣ {}9wsڇ^/]w^{# 0PGyKtk7$Tu zq\[ص 7>6%F0i]#RŎcLGzN[#CؿAougw-VG#p}Er:vV a9qn9n*"5՛QIq\ L# ]_Z y?*6/GJC)GzZ6GX*tc1HKt] g98{y-fH)0qrV7<~aK{8 FA9m9'ؿ,׼cye_}dścma2mMC@@MaleտYZmH~w^hnؿyηj<T{u1#hhvrH!K8Mm4}5ւ %~Q3/6wvuݺ$I'&MFnmd3uG_H=3%x'z8pv鷞#յY9xԚ* yh뷝0zwznֳYje1'^UזH?ZD O"h'֤bk[Zb:qСDpEl7>cH=%mQ?*FbnӤ 3!@69p0>mMյruNBR ;Aɜn\s._ʣy!Ic!!pNHr QdDxn67?{ !FrH^V㋺f%)MƩ.U,4eIQ8yű?*6/G^i w7'k 3B:uɭo j/i62BLFOLtw62Gu4qu/ Y~Ԯ \!#8޹!)GrabO2z+|Uif[ϱ,hZ"!C0lnERNIkȣYd}F$}3Vv/G^e]kⅆ-fYcO[Ef'r.ݻ>a~y5]zyKhy]Z3My,K;bt~U4MG_K{?4Qp>ư-OQėWR0 2S$܁_xJ+kVߠ((((((((((((($B"vR/7i$dgҔ9ɓe?bԿ,ٖ0_?¸95F-2f> рA`$ٝfrrtb(gxɝRק< ̶Rf[ũX ‹Vӧ!a,m*܊p:- vs7n·2-KQmCc+MN)KRHT#rpO{_=7-bԿ,ٖ1j_?¹n5p5#\!r ݐ}j=ZW5#q{h mqp9ZǙKf[ũX ?-bԿ,ak/Z+ N̘c'=2-V˶/ݮch󌎸5Tvo#[UPic%M/ۭ/W u$1~8u9֯+0eaY] ڳku ZxaKu~"sZ*Oy v]1M:H]Z:1 A{fXxr=+֟(uE} $4Ȯn {Ku/(fONIgYj(eu¡6Ma>g_}~"p:gs۠mS|黔^?w1-#k؄1U~y#Z>cuE} >i?B_c|Ȕ4pF n!y 3/XIlhԬdLlĦc8˒~}^>ǡ}~"n\;lpA3±Yz֡-$q]O+Q]pxNs#i<<PnQ\ksm,m+E W_p{XUQ < r=b_wMͨۡ/9ownm9hwhnhƱO/I=k?B=_N'-/"_)fعCT-U^nxxReY"<Þgk?BX&w"-ݤs{T6WRsE<(;}ֿ)E $>a\d]i-iq>|[Yէ6=@хa*mlx!<`cZ\GVF*XqIOTm& H[|!IX-cxzpIqj3,OG/RT!Տ>Ǣ~"m\XԬMXҌYLZ VA JExd8ފo^~z;>wO&t6qgk!q/uX  fm9 ,WSηy7RR-yygqQ񎿇~:hwhۭ/QOZ je٢V,FHTv\w~*j~,ҭ,{A3}7.$~W?DӊcS}O}~"| ߙ?M>:GTrʼI-]uĸTeBU:ds; s)E<5w\xD^V ႘hxg//ώ~d7O9G-/>W kC_/vg;_x7O9G//φ~druv;hs/;U<[\/tM:;{3{Ccf%ꣵ{k dmnyW3?wתUH'ڳδ/ֺ't[ W>WB81eeu # WUa+U4e|̱EW9QEQEQEQEQEQEQEQEQEQEQEQEV'dQʮyPZsMzrF+JSP&JNJI<P3i?j&%A~3g#}?*}By5+㺟l3Ioʇg;G'eTγ>Ɨ:85<ғ/^^^H3ǥuEԬ^% ֳ6gĒ^Z -3$ƒCw^i<Ə_4jz/0L鎒f^9,L Jm#f<<2kDդ_~<B{'m?OxлMx_k/ʲ?-KxлMx_k/ʲ?-KxOᗆZ]拨[Y]sF$ o/*xkzUVW"PfFdzB/UǏ֟ZfOg3]UxA<ƭGƃ VFI8GQEhQEQEQEQEQEQEQEQEQEQEQEQEEC+ # u5m߃wL4t"imoQ L;iZGfaӠkW&_P0\#^m,f%ɗ!IT.3^XYL70" 00V@zWJ*23ዣas`gKCI,-Gm˜Gld֢Rc$qO'oRi `-:*.mfXmuxF&8"| t2 ܃9@O=;V'7);|ĔP`HtNI2Ƭŀ#;Hk7ĚZM$Ь t ۰NGLGj/ p\qz:ܣH ;u k<{xm8c P^xJu?nxQMӬn>p\py6FyU]al]W'zsPAZ|$ѣ `L\_aR,JZhґS!fo< >k~=P7>'խn[Km$XByc+2 E\j6/gtjjA8yޢGm` c ` c;7ڕZfVr|'g͇_-gm߸:{xfxdTbG\|zun\jL@)7.6r:``VYڟi߿)^Qg;xN.㱂4I^[đF_m+p+|?^jSO0LAr,J I, "w_K,:hy%fsovN@=WtU\۴s4)11ŒGvdOj[na;J"V pl;N Esicj\ =롏:4Kx1xX͹8~cO\;xO82`~ ).-{{,^E68=eTtICOf|ݻ8:8RдZ+mкqBwH--ZiZm4gV3G4wzòI or'6vA'u^SP6ڬZ}RJU[0˩Oqc/4y{ c;A9!9pO$6A=sSKii[y(Tb]e ,zԎj_{oj\NN' @z1ۣi>HwG: ^Ta,ڦChn(!/˵tI{e{?չ'py#=?Fk7.d2bI' N $@G^i֗6suwO;F:?j5C^Kt`Tx1xSIf' I*GӣE5BpJ ׈m&h4շtmDpHlֻ V0yC3 Č zALZ]mDB~PH{9Ru4i {Oh4 di?3\=]^-cm2F{ԺGKzR]Wo?  2dڨ!pRpzk~Ӧ-BdCǒ9&@7$g?a%~4Eq*$Mm/?¸}?zG%Q Z `G\Աkbj R56 r n/aa%tހzJ>4۟^i?|4mZaɹ .V>wqGcbK|L"ԐỳyN8x7g]D_9iw(90GQ.}e :Wz^5ڬm4B8d' ѕ^I>ղ#Юե;8vY] vXh'J.K]i/^uܻ 8W)'<" ~bFfFG 3T~$nlRi[+4֠.UV9e T_cuc/vMgqڏ[nv8* aUk tP ~V bz}K͆#!BU'8ca~]Ω,R4ripЌqG-O7oa5w.T9!֙G\. Q^#.?yha?:x#S.=Gs}'Rԏ|n Gp#QJ]LN?)h+?¼0GJ]LY>W/,;?¼0Gꔻ|)e/}'W=E<(.z,I _X}'+ρGZ}LXˤ/,1>K=E<Gi9Y pv_OR0;_”xϼqZxU=xw_9?/\X>EU=xݏ_տ焟qV=οF?O—'2~k z/S/oP?0<_XSV=Σ?krf E<>OΓkO7?¹O}Za{zC 4o)G&?ߘ KoLJd=i[M;빻stPrp+OA,&TIN3G]>\M! ;^vSn6{w3O?zM4vqˀU=e p6XrOs=Xl/ma\,ET2~Η3D8оǑe@ ʬ%$k"X20  ~ $~E+01cwdEt:evof0!MM>w,gE̳Mp =?AK4K,VV *Udy"nO?ȏ 7"I`*8h #Ͱo|IeC-F3晥icKICHYKB*sK[Mq`EFID5#9ae ҮYവ&p{zԟo|}#F+JrgVb|~L08zJa>emd3˵Ԗ mp  |!7.oF~WN@=H}dt=-4gό)3]KݽL $0H.F6kCG;vbĞs1Qw,a#@Y=z-aom Y$y*qsWd.G%P>=+wVW!x*p|ïYk¶H\pޟ /?XS1 MkڃGEYa`Աs<+ר-d0Y$_B\of o,b[ Rvݟb@xJVo>R3c"2%P!pIqN,6_ƏϜ?F +e>pGh 4`v]b8#4}|Ƭ`уEYv+}!ƏϤ_Ռ0h "/{i~i>SуEpA;O>i>SуEpA;O>i>SуEYv GdX6.ȃ얿KK_oh,}h-G4`v]~m>[oOͿƦ!-G٭?6.Õx'G٭~m56 4]*!5_Ɨ.Õ}x/GM5. 4]*"<>_ƥD_gxG+}7Ը4`vȃyƏ*/?.ȏɇyƛ"[ƅ<Ԇj)gA|A8]f}zSi*+`qI[eD-TC?Sc4ѰMV/k(w@gy#Zz~AYrKX@M&k:H#JqjUAkkP^RG7<{j;Bp89RwgJwVA<#y#5%"i [(J"=!?u H 9{w%ڤ;Z] s|#4D?>mwؖ!4KlytD166KJ >ewsn h--9e>Hf UPƝA>Gj֯of8KP`97CܑN x#45mQZ ˟q<!M8bϧ4DƬ"oReDYbaZ W;IQD-JԮ/Z84S]H??'(p2`|/Gj)-&gT 0r1\WZ\2k%qQ !?ÞqCL裇m=Q,v H` ^yN x#4EpFDª)g;B?"ƙ*B%NTԯe-UYr?ATjYdk}h x#5By'"PL4zuS{V8MI]RX"?G4ˏVH vl2\ֱR懑ȃxG/C:DZhв|jZN..Obb!wTͽ?#\ǴͿJzd^E?Go<#-$KJX@_QwBVkg)L DƏ"?N*- A>Gi<ƤjY.ϊ&޶Sߑo<#A>GjBe7ɸgOqVAfoȃxG@y#4Jx"?4M/G;oOan&h}fG2 )$y :V7\+Fp9 dSjq [9˕ Y2[T.dZ6Dy(ྒྷ DpGL{h8bo$u7O:C1Cn7L$6jGЯu[in"v=>\gv ;ʯsOk.^^D t`!"3+x򤌌0TMK!EDx; w"}jOVqLC7A>@2NYĐSH@Sɖ+@I;Ȏ9,RyE݋6JNۑׇǡjIq})~rs`,zj]8fFRkS$uVvӪbm ']XABT<FZc]F KxXĈHHJL++!xL@#63\/\o3);W=IWR<* J+F) erW~(%H{ u 'ҕiwn->YZR$Y 5>24aus8?\:j6Z6}dUI\c܂hh]ՅN,jdKo V~l.j|I\23$Qn>S>$kڤ^R`SJ(ӳ@> XxeNd%`W5/H,-.:戕嘒vdLzW1i}KvyݣIL`7zqUwk\VWoN]6+EGdE##-Y*7?NYi}6MmY˰$=#ۍf0 7$y1G;~\6/jcX0OVMv()NIY3y3z=mV,f=$עpaQ^mܖ#Utf# A99KK6v"EOO$U[A*Z) ef*KEc+]f:3*Y026Y,WyPA< GoʐY܈.[O'INJm\mA_?񩢷i2O88U(Փ^LW/Fo$\ G n̶/ue%嘺f3fDJh‚O_\V+\>]ŧKu0j#$] 47:3AK y!YD<: 4fE9#X]oIo79pb`~P G-!s5>74}o#k5UUDx@mu*?YPeGcxQL=n G}o#k&L=wYG{!53m㚎h!gf)dۻ8H9a?O?V6iǬ;%#lS ;Ē*X6 \S^ҷrذ~a?ƶE72IʏlsdV> ޗ6iZG5ѺF¤icbnA9L|a?>757Nm\I;@$Ɍg v7#ң.tF9N[kCG- G}o#j*H$+m?jFC*,O< 4P\5q~sBǖ=Taj|VX G}o#k*/vwD'k%#03( ]XݰB"DϷ ]?J9)i_/o#i~75 χ~#P 3*9M)7ү->ng{H"S+2:\Þs_3AI ǂE^;74}o#j{(voSGH܏3AWC{z?a?>75z=;ܥ 3AWhC{z?a?>75z=;ܥߑ4}o#j{(voSK3AI ԫ;Q>??Ɲ$ _sT5U)Zbn$إ9 nnx\a\Sr'~G ߑ5 Ppq݌/Scbj |W50""=8?/^sCs_#h63g;(e# *%gb>9vhK&G4sCq>74`~U0KxoOf$NIYYVIJUnOi>HcIԛka>??ƏO?g|U`ְqt~rR; ;szOgƲ_I+A"{:j}?`~Y$K wp:ZᵿYEʎrQ4sCrᱜ#idm-F?ͷP=Y؏pORm`d5MEǙ+5SN憧3`4BbNwVy&HS@sXf$:ybr|T'6H wĠK8= %0xP}׆)O'/ wgrT&Ekak\t5'y +kTY{8摧̓Z$rGoXس6ȸIR.3qGd^܁:葸8(eV[[b"#.jFG'#jfޔInG[gJz^9pP်cdڤ,aBpK£?R{J}V+(ʈa˒rY_9|ʧ{+nv$a>aO Ǵï9_nבFduv`RzCU\uko2O 1.߼(gSWMF.G,(pI9<Ɵ*w1ʑoo"iOȩ'4Q;H(.6ޙ(: *ޥ$pCyfR9ymm.Mm:1ioʍYfC39-<9X{kJ vB OrTkKo7G)Uhi"(u ƱDU)}9mOHHљLk`{a4uK 9 Nce::0qr$G=o2meYmD*ce ʸvGb1Q$B4{hBTn끌ϥ7eC=>yдk*gbK8 ֣֍kowZ|B`rjO_ϭ7G/)cXa)yH.+b\dE?_ɲu脉,.ܲi;x/m Q)cX/ [m#C ySQE= 74tՕU<1߽YeC}}m!=>ym+xTQ DRI2y?IYl[oo"_ϭ7Où?WѢ}>n_ϭ7OC}^cFeC}}m!=;v4h_ϭ7G/C}^cFeC}}m!=;v4h_ϭ7G/C}^cFeC}}m!=;v4iA߶_ϭ7G/[`v(K#Γ>?zVf75YV[DF6W@ں?_ϵGۯ[~Zv{Jr|6И[R1 eiy֡xk|f#&"P|1Һ_ϵGۯ[X+0Y}i,ooQj֓ V;Icҵ~>E*{9U\yCU"n&v%AH[_Dk#vM|mm-Q(*n"rҧ͚͑M9jUl^)ec2I#ARq]Gۯ[o-Tb_96zIݪpA8ϧs9#?Z_nk o"_ϵG-?iWH|/džt'ss7ү˭Gۯ[W2˹eXծH|+2vЎ椙5mZn3 0PQX 'WgEHso~Wy`a!i<ˆ9P[q9j忄|@y̆gۄ( dT/#.Nj狮l5Mee3Yi[ۏ$ YӸxMl2 # *=@×6:⭸K-̹DA csUhKkv+ϴ2᱗$=;UM/ƶڭvRE$02OwȄ!adϭmjZi QDc'8$;-#-CN!y{x 6E|`nt_xX!._y7mGҵDFTWvCzStA<1oFd’o5nByWSK6Omk-)BcR'DЃ$i3c,C; 0FaV};}cAݕyLxr6,Opkvzw5>E7b2}̃aH1WKo,x(F1 V^J<;9ۃ׏,?̿r*R7Q! Un%"9v9*o-Xn%>f| q^= ߙGV`z*7 }ɖ9K ;{<хHaz[ ^|֖V2ğ4*q^r~:xHLr5};R"ѦlAMg$nu"L9dv y*G`(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUmGA^_2 Uz)ͭW|J͡ (W:d+ms-saCJs8=NpRS,lH补~2ycGڰAyFI( ђ|!d9n03ӭfIk\j K0I ܏LGd,ՑŤ!az8ϩa$24j$]9sOg/RKĺau4w. U} \?Fw..X]~GK9oo㴗̇~;#mkKfBѳ]ro hjX<SiYxVKF$Vi EVaWNIh2xkm1g4x}㜀;ӟ0]yO`d.u9'FsVχn`BR= tR,< $|rOI50}kܩ/.+y>XmrFb;?.m6zYRJToSӮF8q^Dd #ZsQO48#I.`>3<ύ7V"DQ Num⫞xo-o%!( ?E{+;շ'V*CAỹ i/\\YC,73 $p9'jUHmh# I1 HKBOٮй?5X\6k.Opar_fBѳ]r h (5'ƍ \?E\EWٮй?4l\,*w.fBf,QUk.Op5'Ƌ0b]r hٮй?4YU} \?Fw..X\6k.Opar_fBѳ]r h (5'ƍ \?E\EWٮй?4l\,*w.fBf,QUk.Op5'Ƌ0b]r hٮй?4YU} \?Fw..X\6k.Opar_fBѳ]r h (5'ƍ \?E\EWٮй?4l\,*w.fBf,U}GA^_2 6.Op.^1vm3\1Pd;SKPgUepJTW;$(`rGiS!Ddዎ÷\#갾b$914z^0=8V//O  ?9?oz/T-lS3Uc1.Tÿ/a@X_*[8^W"@>ֲ39+o-/@UrTQ/oz/G-/@⫒7?+}[  ?9?oz/\da_:[8^Q  ?9䨣# J_q_*[8^W%Eo?jW?~rT_**(yRuq@?~rUQGFڕUq@J?0ԯo-/@UrTQ/oz/G-/@⫒7?+}[  ?9?oz/\da_:[8^Q  ?9䨣# J_q_*[8^W%Eo?jW?~rT_**(yRuq@?~rUQGFڕUq@J?0ԯo-/@UrTQ/oz/G-/@⫒7?+}[  ?9?oz/\da_:[8^Q  ?9䨣# J_qƶ& shޥ&+S%wT,|Ǫ"?5w-k̰a8׋stQEyxW:Q!d2諝o(2o kG!YҮwqV_QE>4(qJaύ!8!B |jQJ/*凿*NzX׵Vx;ũm_$'Q+qϥNV Ko$\[+hzxsfSfx̱K[6'B~$Ġ!pA5<w^E'Tb?pfSfxK)mDq:'#~8>P?7MKo'#3Z)kTHOROA|M@?{1nzgkY7SCk<ʰXNx 1U/ɣݞo/'O/N zc7ZC4p5E\[8$lPo㳰%H&X۷Zk:~?/=GIS"OUz2c0*Gh3Bm` }',akG:9W'(0ʹyyOfe@~?G )D? ?k_U?IS"OU}F5/GGx?_@QG~0ʣ_#@LB䕸UQ?Oz:{9gtBS+mvpj!z&\Cr^dqw.;NEڭC]pX#cg:R#)#>4\Wyn>^U8cY#SLvZag9u6_UyKo;T(P? e'RnZY-I'Hf合) qQK5+u2nsx}vŸ<^(L3s⯲q+[H8ȑ0;tVe^;`Q̯UXN;0iy .sCp$gБP+6%g)@>UuQB|3< kc2s:f7(M'\}JxbXE[$NߛѳVQEQEQEQEQEQEQEQEQEQEs:?\趣O9`xIqڏ>-ZAEP\DkuC`ɿd4֏B?\TW;ES$Xzկ_U|jQJ/* ETQEQEU+A6ֶ^NUGT-'ږ=[N^۪2a UGRA9FԮ!2rF=`#T6$ww0Gl9 "O%gZMFP w֮ YAn3ޚ/o>sNz_^3|)l-+ۘO0"01ԚًMi3is1I-\(pmg߷gUC.=k]j1(!iH 3s4SNͪ_ٱ叽!Di>]K}G@WjuZjVokHBWJVf7`ZL|$<5~5 ۉf gd+ 0j@Q}*(P6!GYVnT4ĀcXOCr}F`[0e1*ÞG'W.4yIt[ۼyX! \("O i_5mr#P e9'lgV9C{.~w:s[4P ]& x&Vk$Ij (A9"4 TP,~Dҡ>t֨eR#ĒB9#CgiO+ YB1xq${( ?DfibiAG^:d真~iQEQEQEQEQEQEQEQEQEQEQEs:?\趣O9`xIqڏ>-ZAEP\DkuC`ɿd4֏B?\TW;ES$Xzկ_U7mhM  1GP;W/ j4:+_qC9?W_&w:+_qC9?W_&PQ\*|] r4r+xv147X.v20'{ቬLHI*DJfO,X9-)?W_&U>a\'VID w 8|dV}w%~h͋}rˏZ?W_&U>.<-Y䱒yeVʺ1o_݀$Rl圤*\D5Ua?U> n\?,4gTwQCm1v I#=Q|'[Fi@wd o40 Xl³??YMP\ZtQK2XDfɄq dSrqŋZ*A.XKqG/ pht.̩%ۈ (og, c}zVw?G+;_?YM&;+gwC84³?/ phVw?G+;_?YM&;+gwC84³?/ phVw?G+;_?YM&;+gwC84³?/ phVw?G+;_?YM&;+gwC84³?/ phVw?G+;_ ?.?[Q?'eZ~wm-ǎY,!HJ"}#MFlt8g⪡A8](uC`ɿd5W:Q!d2@kG!YҮwqV_)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW:Q!d2諝o(2o 4Z(59 Ҥ`v'ZFmQ;-EVEC@6_oWhѲYjG?uAQ6_oWhѲYjG?uAQ6_oWhѲ\Uݴ2@؉qG}izQo ѲGó潄Ix#d>b?uAQ6_oWhѲYjG?uAQ6_oWhѲYjG?uAQ6_oWhѲYjG?uAQ6_oWhѲYjG?uAQ6_oWhѲYjGcCW??P5?le?ƹѦj2I2}r|}iFY.o nN8yE?le?ƱѦe\da| \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲG~W?? \ߨ@ѲX,s|@HY r?CS?uAU++gͼ\<4Ϙ?7W;8+/UQE(.‹p7~px5XjL7J쑅kח$/B:Q{ŚB"fr@g ~U$R GBO]iN7o2,䔻Iqqj<`;,p8w5n}2&32Y),2=}+EPEPEPEPAEk]up$F%P`kXD_73*}0ƹe=FAkiŬ*JNVJu^xnzn,~p|0`T& (4{p!usѣԚk#AuK"V ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( [J$? FC]s%M!*zepJހ (`^!}+VKey eS#9 `VD /Ij2ɦ^]ŵJS2*89_\LW:X <M[(Pm#?j4RtOUvK}㏧V&Ҭ&I&p/f(iq[kۘV/yצj~}+? $L-"m||m#-aXIW 䟩4b((((j-%9$Ye Aw"*ՍAssH;Xt#ހ9 OWK Z^'ܧ $FFGRix{P.dupc%Cl, stHm۬mP{IiqGcc-+OftIHf@$̿G0X3F}2If_?o,v>Ə/7;Lџz̿GٗzOh }Ͻqf_?o='4s>g޸/7e9iz3\_ٗzOh2IcϽ/='4}Ǝ`gތe>̿G0X3F}2If_?o,v>Ə/7;Lџz̿GٗzOh }Ͻqf_?o='4s>g޸/7e9iz3\_ٗzOh2IcϽ/='4}Ǝ`gތe>̿G0X3F}2If_?o,v>Ə/7;Lџz̿GٗzOh }Ͻqf_?o='4s>g޸/7e9iz3\_ٗzOh2IcϽ/='4}Ǝ`gތe>̿G0X3F}2If_?o,v>Ə/7;Lё\_ٗzOjX T<)Qؚ9_\DjI8i,+fF *r?ބ.(U@uUg] .HҺKFk&v%GcFzT?x{:_8\*{4x6A2H?Ο? [?oK8ŽP? 6[Zx{:_-Q26[F+_oK8E=@/ 9BF(ڟok-QG(\ڟoS~-E=@/ ?t( S~-jſG"qs#jſmOt([?.dmO?V"qx{:_r̍?Q? [?oK8ŽP? 6[Zx{:_-Q26[F+_oK8E=@/ 9BF(ڟok-QG(\ڟoS~-E=@/ ?t( S~-jſG"qs#jſmOt([?.dmO?V"qx{:_r̍?Q? [?oK8ŽP? 6[Zx{:_-Q26[F+_oK8E=@/ 9BF(ڟok-QG(\ڟoS~-E=@/ ?t( S~-jſG"qs#jſmOt([?.dmO?V"qx{:_r̍?Q? [?oK8ŽP? 6[Zx{:_-Q26[F+_oK8E=@/ 9BF(ڟok-QG(\ڟo(1I9\z[?oK8ŽPݴ/F@3rsw5.NJԞWM~Nӵo-U=JӦ3Xv^򦐏PK](:X~Nrr-Pictures/10000000000001EF00000181B7973543.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?'.?wndiCA>=jyi[xl(xcgA'N6O['k$P>@r1Z?d2 ny*WxH Ԭ W>? ȟ_<r Q!PT᳔⡛mY"#}_gssWG=+=*t4MWvLşxp _Mki~qjSn)=jA(n߀{:|DW^/&>!/Z?){|7o=^>!x/N|QA?o@lY(n߀^> x/&<} gE/ ?(n߀^<{o p%#kK{?ȣ~LK GӇ|IAZZȥ2ȥݿ{:Lj##i"AZȧk?r"o(x?&:V-mn"#q*I< }Vk%Ug+"b;sQh3\t[P`CS3ZMu:JjaYwnpO$$5,+bq$q*̖P= t}3 f,ha;ܒ\HUy㠤ԴT"aAAl+n玾j6p%*Ω@'˔K4wF].HQ 6Պ?[Ubc7!iXH7z;V~еy$ٔRI8ڻOi2Yf d70 7ؤw9hdd>X.pr3}}sޑ>k}ޑ>k}6oE452h`vg_ǵ8B=]'9I0z????,8x-n׎5{V[$d -F1Aޑ>k}ޑ>k}8HS)pPG=3zf,ݷ<#|o#|o.s E\(.ёv?<oH5hoH5h 7h[so7ko#|o#|o.b|Oom7Ϛm47Ϛm4rOy4|OF_ƏF_ƎP7?Əy5ޑ>k}ޑ>k}1>o7?ƶ???9B'<>o#zGG#zGG(\G<oH5hoH5h 7h[so7ko#|o#|o.b|Oom7Ϛm47Ϛm4rOy4|OF_ƏF_ƎP7?Əy5wPBl`F^i%,c!JH4ro7hm Y  ##98m$RV`>bs#ӭ 6w4o7?ƟmDFmCjf@nr_7hWlt*3`!8֯7Ϛm4rOy4|OF_ƏF_ƎP7?Əy5ޑ>k}ޑ>k}1>o7?ƶ???9B+0VGO- xᔃIǨ-'I07T`*ޕlB,=SQ_[>%+O4W/"FU;ӉY74aLERjP%b E1ێ}k>M+/0gK/<7PWB8NKTOdMNѫ5|1p]^AtؓyPl?7֚[sf'&B}}g(~G~ϳ\ϬfY5 ~Gۯ~ϳ\ϬfY5 ~G~ϳ\ϬfY5 ~G~ϳ\ϬfY5 ~G~ϳ\ϬfY5 ~G~ϳ\ϬfY5 /?Zgٮ⏳\Ϭ}??Zgٮ⏳\Ϭ}??Zgٮ⏳\Ϭ{?׿?Zgٮ⏳\Ϭ{?׿?Zgٮ⏳\Ϭ{?׿?Zgٮ⏳\Ϭ{?׿?Zgٮ⏳\Ϭ{?׿?Zgٮ⏳\Ϭ{?׿?Zgٮ⏳\Ϭ{?׿?Zgٮ⏳\Ϭ{?׿?Zgٮ⏳\ϬΧ:ifY>s>j z0&/?Ik??JGss|3h#4{x:zoٮ⏳\Ϭ=@p::i~{?}}g(5|Qh?׿?Z>{?}}g(5|Qh?׿?Z>{?}}g(5|Qh?׿?Z>{?}}g(5|Qh;헛y˜c89D~+,3Rm8W4YLl]fPˌW?~t+ ɤ1HÏY,s+t9${VܰA +%NbEqӥtA+NGF.T [OE԰6g^3Yy#ڬ#=⫬SnW>zQ`FHTN1==jd  @$p1=;{TH#g(#͆J,aAf*rp|~?U&flY..'IuXP #m5#D< 7+G734lD~9ބ-ȹK\G*j2 8 t#tapʲۮrNn|͌OG1B.u2 T?j6-r#a՗JZtI,e,cr?1Mm]BVc=?/aX es"Gľ0h םY]z_wsy$ZsH9=OsJ蠁q+42ҪB_Κl.I#K/Jm9Pw`g3FSf:9VYLvךFU-3O:4W= ,O|{ӵ?31J6H+ilA\iӯ_GKf*NaLjvt~l&m킷93ZO R.1LN54F6YͧIuػ_9GZ8HH|z<-  9y#fÖ}M9`9=y5* u5-`ozTS%PI#'1PYino}4f_Dp{ѹߝQ=f_D?3\~tno7Gkw?3FeOߝ~CeOљ}5o7F~t}G߇Gy}4f_Dp{ѹߝQ=f_D?3\~tno7Gkw?3FeOߝ~CeOљ}5o7F~t}G߇Gy}4f_Dp{ѹߝQ=f_D?3\~tno7Gkw?3FeOߝ~CeOљ}5o7F~t}G߇Gy}4f_Dp{ѹߝQ=f_D?3\~tno7Gkw?3FeOߝ~CeOљ}5o7F~t}G߇Gy}4f_Dp{ѹߝQ=f_D?3\~tno7Gkw?3FeOߝ~CeOљ}5o7F~t}G߇Gy}4f_Dp{ѹߝQ=Oɻf1&#7gZ3'=GICnk sF䚾K4A&]WT_*(~E~Eq[[N[r8_Ij)(f adkj"^YMAЌ~5ţIR&/@>^JmrF[zRv5^ڿsi~  $۳G Ҝ4z&8fV~^ַf0}G^OI?=hw0Γl#apF_Z>c7d>Q/͟·=$h۴W_\`1/1dګ}ZchҴ c'y?/]ݧv4*%u*yY-wH^VܲF |>^J۴nOm_;?پ X"YU7=Pl~h$as knOOI?=$5$Clj 3 9sj]xj'`~Vݧv4{j,;GN $XyA\8~^>eѵ@a8v|o=pF9=yOI??=$hXw9еbUe̍a~SCLqχ_gb{;yWIi'Gݧ?oPsmY 1[[ve`#hǘ=OӚqua#ܠrֺOI??=$hXw9еrPO,)C|cinɵҺOOI??=$hXw9е'mn1~_֝y|}^V6t?v4mzI|skw|L|7M|dmvmzI|i'G(rùξ>kvُ+=s/-y{ymzI|i'G(rù&ku.O>џ,v~C|ain\IWWҺOOI??=$hXw9еpӅ`0iFL {~mzI|i'G(rù.1gw"9 [W/1}+۴nOoPsm V0[{vU\~7Lm H[۪fF1mzI|i'G(rù.-inωؾ҆fVkoӚ=$h۴?9aAՄܢo?քеrUu&C>WCi'Gݧ64=dƌm-Ù6+zY۱BC~_ֺ?OI??=$hXw9k(ܠpo?wx&ku|~~oҺ/OI??=$hXw9=g K}fҿhҜ<WF<\/]ݧv4{|G,;-y{ymJDеn]3cJ迶=$h۴?9a(-6GUvеpgmn򏟏0mzI|i'G(rù VUL {mMMX+k[u.H}>X/WGi'Gݧ6t=dG# KrMhOm W0[{vUPc>~<~_t?v4mzI|sˠHAn.~v7q5t=d%mՙ";v?OI??=$hXw9mmٕ;xSAՄݕS(~76nOOI?=#C~=/SxJ͒?1^qV֩oslFqdVv#7qל4`Z<9][h嵕CGm$9޳mѯ' w>agtpXѸuBE,*/L"Q(ƭ7i.aY"J7}GU%Z%ܩx$f ws7(/:_ѣΗzjn.TyޡOI2)al L냃Mnod1"ƥ0ֺ:_Ѯ~Tx)7#6b\4+Ef\ Y+_i7n!6 n *kIk.L`dH_ ~q<% fxI|fۛXfhOpIsӚњ̞[+9qrsC.('h4O[`W,7 =(6erBŁQKQ!fxI|>?5gyF.õ9έm}٧O<$ tGFտG֥9'h4OIzh=[4}j]٧O<$ tGFտG֥9'h4OIzjX3rI>)T9oO<$MfxI|h~w9/O<$MfxI|ho{%?4}'ks4Oi焟ɮ>]K ?G٧&(w9/O<$MfxI|ho{%?4}'ks4Oi焟ɮ>]K ?G٧&(w9/O<$MfxI|ho{%?4}'ks4Oi焟ɮ>]K ?G٧&(w9/O<$MfxI|ho{%?4}'ks4Oi焟ɮ>]K ?G٧&(w9/O<$MfxI|ho{%?4}'ksHeBYuO%HRi?1^qV+ICL1V/_쟇Z쟇Z[*eE) .O42zK3]K'/GLd~tcF{lw3lyhtovE Va`{ũ ִQ*@9rH#𦮹Ԭۂx{uR/*@Q0Y߃\"o\<' Ѳ-5?$ [t݀qEh6ec whnY2Y:mF5C+נ_}*Rӭ0L*jZ˘E RӐ={5]%k4 r3UDž4@GD9Av 2;m.RHP_}OtPa$2N=i|Ry΍1`'ٿ*<Ry΍1yo=ߕ.7'ٿ*<Ry΍1yo=Bs7Mjޡ':dmö]MQUt5I`f,g ֵ&w Y+nKCHX?'ڐ&M'9NޭM;RwYZfgto9 ҭIqvZ{9SN۳B#nppKH oGQ*ǕC d6ƪB43\sQ(k&@u~ڳ@n?ʏGU 9Sv#Hy,];I6QZ{PՀT}?ʤ??:7ΐ?ʏGTFh0:OQI1~'eD(,((((((((((((((((((DŽJc&K<%V#7K} 'V7'VJ 9e (AEP~ɥhH\rr6={[zk4+xvry-߰{m<Tf8$ պ c4bb2#9ʢI(身jHB)|A]%h)aA~un`cdnMg[F.y1w4y1w5V$Y˹d3ۚDG9XM2 ar(̓ɏɏpG6?@|chci6?FBUBW݅QT ׵V>c($k mcRn^մ}f8.dcGIlKx#Mvg7A0. fl 4i:{{m)-Y%B8nt$XI&APf:= Z41 sq⴯4tխ-Iw[V`@nk/ElH1l9n.`{Ub1tOZ)#H;汆kx1ʩ„qcK2wPKMM)%-|mݍf 3 8\T(JȽ -4XG8{1HP\G8=IjQ[Fv-N{bB85;Z!Z&iBco 9 E^}CArɣ'|O-??*gRn$ Ig9뎜/y~c^TlaF5BmF;+%GT$C`O$e{櫛=`Ăi20S8=&ii4vP%̂IBs*+neF_5f9ɣw/|Eʊۿ԰"(+QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP]K<%V#7oj_/ҰtI8^^?*Y?*zPQ-QEB CVnw{hZMp$HoɞxnaGud0}%o$vB. +,q_a2%G֯~$[)mabre_#9㐟Fu;A]~'b>&ګjUq=ןv>o0+ m9<,/jk|ږQEsQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@u/X:OpפUDŽJc&{{ZFT6d>I>ZCRZIQ?j{<(˽{:_xsL?j?T?wBgCiGs}]?У.xQy}2s}P˽e} =/9_}֪wBG4}֣xϹC.xQ{<(t<xϹo?Ze} ?·/o?Z>UG]?УÚe>Q?j{<(˽{:_xsL?j?T?wBgCiGs}]?У.xQy}2s}P˽e} =/9_}֪wBG4}֣xϹC.xQ{<(t<xϹo?Ze} ?·/o?Z>UG]?УÚe>Q?j{<(˽{:_xsL?j?T?wBgCiGs}]?У.xQy}2s}P˽e} =/9_}֪wBG4}֣xϹC.xQ{<(t<xϹo?Ze} ?·/o?Z>UG]?УÚe>Q?j{<(˽{:_xsL>.x|٪zOpפTa4DU@99OpפU^0S\mR~!U~!U 0(Q@Q@X7O[E\K1`$ 'U7vu¾ȸnEj0K<{ZG S~J~dF,Dxu9c$xVc?`>r`ڲZ+izKm @;zZ~U8X_;3u?:k4yknf~tfoH5寧h4O΀w_Os7S3u?:QZ~WAOo$gN:Lq%*K ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (*_/ҰtI8{R ~zMRB~!U~!U҇ŽYnŠ(Vt ZM?"̸–xh M6W*Y<;i;Ia5ݤ¡ mGM'kDuK傻N*&knCh%2H;[rM@Y]Z2F0;O-M kkv%Ts9QKMYFjcf%%8 q[+km\$~~X[,Z@ 3η®i \X-PGp#1)#wF{\\9uH~k[g6uh69_ői(,yU8XR1vmq=f<+^vxYZC,F=*H_53DP 2)@#9rÏzt0*ж [ $Z䩍Qa2cyc5`^E% ƻycx{}~߹񥽥3sj"ANv=G#` pDO^ֲOæm"Ok"ˎGsnc͈-JцxM;7I.,cRUGsӃUa2 ݤ7m< |o:9ce8n{v֩?̰v &:z ?SEH?xt&)#D&$XQ"mT"?(ǯ5qɪ#.I+81dt w{6i3U[q5?"(tkdXx?e*Z˟Er~GiHɗ~-v?|"sȿ#4"\gσsȿ#4n\r/3&_F3,jܹ_?.Ə;;yۗ?܋?G"s="Qs="Q r~Ghܹ_?_ ?_ ?qn\r/ۗ?܋?G?G?G<˟Er~Ghù~g(ù~g(ǐ{sȿ#4n\r/w?/w?/|?.Ə˟EzEzEA"sȿ#4aH3aH3~=ܹ_?.Ə;;yۗ?܋?G"s="Qs="Q r~Ghܹ_?_ ?_ ?qn\r/ۗ?܋?G?G?G<˟Er~Ghù~g(ù~g(ǐ{sȿ#4n\r/w?/w?/|?.Ə˟EzEzEA"sȿ#4aH3aH3~=ܹ_?.Ə;;yۗ?܋?G"s="Qs="Q r~Ghܹ_?_ ?_ ?qn\r/ۗ?܋?G?G?G<&=maH=AzMSɥmJPOpפU_rlk uUY h%hrz׳49R2^kYC|?M}rG^zg=OhSÙw/QTM_&e>9rq?T4wp/~kYC|bzɟ )p7+jX<Ln yds:UZw=yaIږ? ڶ? ?o?\HIm\Ds" a=F+(>gx$ yEV(%<>__ZTt{[Qߕ7N]֥-[T42ăPRU/[Qߕ?P)ߕ: ,1wZ<6e|W u=KsZ47[ku*~uyQC n+NHU~?UK+Df~TmoO?G|{/{moF~Uf[ݣ;f­iRvJgߕcEe"moF~UGyv~Tmo]}o=moF~UGyv~Tmo]}o=moF~UGyrR:ej{Uz=cHǕXEVeQ@Q@Q@ekz-qу\ZK w^pj't&9pǦ #ff#P|N$xBGwx$WıjϏ1o[a-S[:_6lmRA20 -hɧGBwp'T>yc֣EXj d)d{s[ȟZ?l.磻}&g3ۛ$1d5ķ2ʚ aNsG/' `\KQcR_s>=>JvKSn>ay4{i8r gs}-V~?#0!]d2|ƥɩ?9Wc%[\YhӴ϶GK/T`rb@\X_I 28~zUoG|<;#(R|@aP>I,/dvnH_䚒oj.wk!f< $v_9|4MW *$#KrO<&}|??ưǃ5_` 1r1S]uJP7ێӯi/,OKMH6c=OO}|[ X5 6?1]Z=!A|JSQ#} tgkr׋sq#FD@ۉ$8:7'UQEAEPEPEPEPEP7߅V\Yv*LfgKXq:?C*шg+&Cg#E@ӌW-(^R[L*{ p{ꊅ$_Co<뒹6efQ 3!QT>VO-Lcm?1^s*߲sT;7*G,q:FHHE2r ~'c>B i{b%c(*sǿzA}K'Oi`$.D< 0TvAKÚx+HˑIL ȑ##(` 5^|6ns_2]|Fp=5!YČVm~F\ÚgBe 2F0N1Կ͜y 뉓^OqIbyvxcNʲ53=P2Be~Úo1>= š-rv`W =֟E_V4xP??}U/BЧC ̳??}U/BУgyTo?d^5G%//2ϸVȽk} ?/BJ_x^eq}Q?節{<d^5yU["y(Ƚk} 9(y}y}GϸE_Q{<rP,o?q}UoУ"y(Y>GE_QC ̳??}U/BУgyTo?d^5G%//2ϸVȽk} ?/BJ_x^eq}Q?節{<d^5yU["y(Ƚk} 9(y}y}GϸE_Q{<rP,o?q}UoУ"y(Y>GE_QC ̳??}U/BУgyTo?d^5G%//2ϸVȽk} ?/BJ_x^eq}Q?節{<d^5yU["y(Ƚk} 9(y}y}GϸE_Q{<rP,o?q}UoУ"y(Z]Ya Vf%ţy"§;kYwJ8 䮠ԣ}ImbmYpqPGڰ ZᶍV4}H8qwTҤDоޫXQq+npIJxw1R cpՕ qygrLՅ]CpNܜCvM ($Hd,P峎=+k>U'7 H$Y/!RrQ ~~r3+c>G|o’V]CɓBKdDAT/\{U{!Qop,[. cp5?[o>G֪g SUPxG֫wg:#s|ӕ#`1Lu^? g(ng^]0 `#Zۨzֶ? g(X˨{8/M$$OTHn >mg(ϟ|7QΈē)ʑw&-hE0I "g& g)}jpq1#MMUD#`g׌Cm<֒1E?u ? 3RjVſGϋŪu ? VEGϋŪu ? ]o}j|oad[ooZ?[o>EY|_->/g(ϟ|7QvEGϋŪu ? ]o}j|oad[ooZ?[o>EY|_->/g(ϟ|7QvEGϋŪu ? ]o}j|oad[ooZ?[o>EY|_->/g(ϟ|7QvEGϋŪu ? ]o}j|oad[ooZ?[o>EY|_->/g(ϟ|7QvCﵙ,0$nGJM5[kK[x,V@,OW? K غO%H=iFQT ((((((((((((((((((((((((((((((PK](:3-Pictures/10000000000001DC00000066A5078228.pngPNG  IHDRfsRGB pHYsut:IDATx^].U=]E dPAYfxNJy*0 OYAP}\^)QJ^=^v$B( .N=K쏵gy?ȼY?{{ܱã &Q8A=hOɏfFr)ioW?Rv `<uN+W}@:,4NMg\];E:#;h#|=7]NO{N>W>w/LS;7~ >s'󶗽HGCg[>ex3IQ^{{1Uq|oQSl _~ziXy}?a{ĹKFFi'CNEQ'GB^` jDy+uQ;Gp?.sEJ{|R\tu\BG;'PPZ o"4y?~qL+]91rp?x$\r^Uۄ 5@3勣ds۾oxc H4;[e>twRGS>l@` jD'NtdMoLioV-ͣs~J=vox|{+|N˫>̚ʲAoeW$jĠ8H5(&q5dʜ}-Z׾7؀~hл۞܊s(FiOC WL  5)7&g}e=ezk j{&,'c=CB=xѿ).6 jF ϫH!~*-C `wLdA'T6-1^{gG!$_8OZ&?2裂 x# ҫcgmdd܊9UYx_Ӟ$)6 ™A@`Ɲ)Ϲr 3$QaSr @{T 0C6),^nQ9`< E(/(@`n sX4ۏAF< E(/(@`ntܒ\|L?d)6*nEߓpۨ@*2ؖiE&:Uw!$c?^OЂQn,{sRKN)I^~sdhu$L]rWK_2cX4 u- ǫtm~B6eQf} TybGcSw@9(;CMOgk~ap=a2u? ,+P-]ֽeQLTghh}U,A=5x Οө8\fܦ`q􀊣$GY?AI>-zf]1*F%ʽtG5lvIvS(d<_D2loV0iT3t(gb-O|젊)0^#$ۜq<6 F(YWFf 8%. [ԺK)wK&#ò=5î NnKd?m˯~mo'N:h=ةo@IEO)Fc:XRWHOBs2 Oܣ%AoG3I ]rNų$Ŷ%. zɕZ"=wGZtGy?XZCl Xdud7Qi8Q lJ^D s3XKrIP+*jH𢴘Ҡki,eXVxVk/_k^v8Tg%{R7Zυ+(c_ɞpW<,QyOѸ(">dzFgG:koce.՜?nqqs@@InGHطg!vRV@@`-YS^R$̟@yb5{qT_  ղPdźсsdPWN \=J(7n;It> :nZ1zΠ`Q5&/>FP5-+4/v[#4y GN3gxz8ѿ6΅D)T>'S%\tNҞ ;4eQe)CK%YHUD'w2gW`ij^mɟ7^TiVR,}Tu%C$;*U}%)FC[{YR~26mӊϾc c;$'d&KiO-v?uVWKX,`Q5Hy6+wG;ռ370ҬYwIsmr9$7FYy%.\^綐W~_PɼjgNy֫7]|?#r+aIΫe4{T}lFUsV@ w:/ w_5`݂ y6ԜZwr2B-$<}٩d͡V׭dh}1@ݒXE !y^v 9oܢGWljf4zK.L~SC qi E[{T"wo7]ͼ[{sxjDl9h  P@jUfJP*m] Ln8'f-9F$Xڱ:Ccfv?3n?9&9k/*xQL;|VEA`EGCKj'&GL.;-!U$xfȯכ=SKÓt~wLnɌAg׏JZ&όZ-ZR[wD{q%nmKfHȳ͉d@oxOf+GgmD~cE*KU}D٨V ;pyx*<}N N+}o} }ޭPv%./FT?伕QfJ/C<:$?OE@P復,Y-R͑w$)+Yq=2F:m?sڪzG7BƐGB ׁ!@At;8/=ɓrʴoI{szU}.m&Y\DR)FKlguh,s5x^,|7l*sNQx! :;mA*Of'B嫄:~Wb>o}2!0VsD{T.h8'ԥŲZJK`}g%rVܢ4/y-H,A:%]xVR|kAtYE^GA:%nU,@91@O,C1* :VH dKṔ  R ,9s @c@KFd@@X"E@HIn @@k$"@Gr  $c @`ts9C@1 0:Dѹ!@ IDD@\ ${}w4Wnj֯?m>ȟr2~NYۙr3%&wC5Ghd:RRU ZTy5۱ʺG'0 &;*Pvx\q\FI(PgPAKm r-b žP\3GNqM6kBkg> ':ʷ!C=喤 N[:9,9e$w 5- rLΩ Y<$%Ry4@BN}8-p'wO`NT\Kϸ,.?]l"ìWM 9wFkեA~' L6$/ 4(E!dSmu:6*GqQA2ˡ6pY#r)R`;n<99ؓV]ue+>l3rt\'e@# 4w-Ȍ<)k)Yh ʛe Bd'TЏN_ȪEdq7m')w::99ĨsO(-LVy-"rԔBH |VVp@@k?x7E2 #wdOﷇ >Q 2 BhzD íucƑNX'V뙁ȓHC٥.˄;rD J0wl@@AI 8`5 qz@ :. @6#m @t @RX;qG8>c1 S@#0}w~ϲ}ߵΐm/ 7#b@HX9{l* !@"q\Z@!@t̡D@ CC4 0.Dqk!@ 1i @`\7B@c%@o DJ q :X @99H@"0} cO,dF C`>KP[=~vL: q|>b@H :qG8>c1 S@#yf;{WwvQŲL3-KE_t]tzIqV̓i (y[E1 (갽*#$@U]LhBrCi^C%i@SJYQy?:B̜9,ZcUUG켸uf3NQI}Gf եd 渱R*0f5!ob~31^ר )҃%!^45f4Q :uFZ 쾓iu5[2L$Ҝuej*<8A zHZvE}Mn8:̻h>L*6uG]zmX38קDl{OxiaEǞ v]ёmvoɪH]n3΢KV#U{eқ"H2z 9+Xg"ͫbc mY-I|d +ݐF1E՛ $bYBfiXLvwɡ3`ȃc5mYr(2Kt0?n,ٺ,B07,sfg.\2mVQۥCUR ՠsi- ]K6R -E[$N ZT.Q",^ٙ%_3%c8`3xjѱYr(F,y8[w8&p8x]9pyƆZ* Yi|-BZ,ICH%Vr7KWπ.ܪ<7Qbހ,ʫ%pZ# gfpd2Xw&jVpOzXdVo*g*YǶ]lP@E˝Qži(ehm}j87@vќ#AAńenrvTE:8dTzS>aTY" 0'p=.|=0z'oG.R3F%4mQ58$~e/5aujL݄ޝC&ps#÷ 5s=:{h98SE<`䳪RO Lnd1< )"z=7Udڀ>&=5rwE~Zb+qY'ӍYOD̊d92f<̑Tc6jrٵY֎v[G lnH>jMՄ+ꮴ69ەLٲhw!MQYYڅpfiV+҄P<8\բcr}l϶۹us[Jc6JkJ3w\˙J6GRUr; KMC[\!rZQJf2(t4xIj5qޯ{aa(ޘyNftUuC)#*T4[WOwxigaqxm:v{ƌ*JÉWz2LxwIC= <$fЙqƶVc:( X.٨ D$B@2W"B:/ @%p}2@S/  qA ̋q^K`T+=wO2-Q-88 g \U`_Jrc!@`|9C@1E 0>D!@ ET{.}<*SWɫ+rUz\{_}C.e‰|^|ߢ )-t^JR-&ӫ`O 39 ͡abzt䐙okU֎O dɼd.zMczu CsvsC@ .O)e7V ╿"87nW\*bvv<_WKKr,2n#v'%mQm7nhT}xƋT^?_CŔ.:ol0O'74kUnҝhiPBvH]-O%1Za5z*k%GbEGzo 5V3Wk5Z̞r5(To`=̨gQ!8TJ? I@k.Li\'i"l uWkѡI8b7`3턐g]vcPV~#afnk[:+̘{A=?5t :_ȼBs{Y]얌M6nI_g$y{OZTժԭۑF$;Iz2Y ~ojQ^W]"x~m5Aݜyêm/N`1SUmnX[C]j4UQh7/yj(L3 h7.+lGfd܃cNg(WFpyG$ {FE_sGs8JT߱"L H|H伅|YDc_ݻ8GzczZN]OjMicl{k\}.ؗ1X%h+@P@M` @4֎4@MH i ֎)B\  :X @)D!Cs, c!@`|9C@1E 0>D!@ E"u@| "tWMIENDB`PK](: hc8c8-Pictures/1000000000000261000000720446512E.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222ra" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?xL7ڼ6lWX ;Hxu{oiڔW0 p}'ڇ$6z4Lil=Pn4 Ŷ[A5 J[2#9ǥtӚ[3=}ѝ¨,IA{Um;WK>n-" Q^o6Oz{Ysysok4.'=*oH}Rվ ?o8?¼GTм?;˛J"g&V,6tR1TXaMФ3 @b181UOOw9ڷ_zj.u@A0K /maX*߇8_|9"h5Hd@&?7OcJU!ks6xTNVӼNu{% "pz.{gysa4-ěTcrNi귑sH&9`@zhsv0gjoq[4-_xvi݀ʖ=zgҠͦkaV&呿*wK9s5?l.5-J;hr}&A\[q xP=J? y/ p{ +e~enz)Լm+i]D[i1y1-ޕ9yWzwQ}=Sj:iZio8*_z%kWw Jmb2}G=?vzTskw6],q @QN+"f7ծ5!io?yq8k]>4le?(S䣲s"?EO1 .{OjoA.M ']OŌ]$#5=gSš.v7;-u"Psޑ78?[/WmrMW8Kr'svvkuaw\+ٳ]):<˰sC}=jopxĺ>}xnvo00nzVηw 6Ih/W⣞wO[/Q}=z޿}t<5_[Mlo5FTux:5 .lƮu.p#\PO[Go gjoq[/VF@77r$>Z8[Cr(սRdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{%y%(eY#h韥gTt_S*p Is+:N;T3xm;^$\1۳k>ַV3>bLOvkh^.Tf&yΝ[-.if$IUL*y.k ok!06'$צQOۯBHALL/z0!V-<Gj-!|޽=Toi :PKtF≝(ȇ5f]j0\5O%8ƻ(U(=<|>GŅЂљHXI9I/:]$".m &nץKۯAN+fUDUP9u?7_x^L'}*W$9S {EJ@HiwViI~ӓ#>fmc ǩ<]$o!5U_'evI&N٤ K|֏$o!5\|g}}h K|֏$o!4sW@s;7/Gn_%3~Chx񣚿,;ai>w>5 -RA {X ?uWn_揰ϴi?L3eIKkw>5 -G$o9a K|Imߐ?%3~Chwn_揰ϴi'D3eƟ?-ฒRIcZXw2w>4}}kG[_7?ƏImߐ9 rù7/Z?!4Kkw>5 -G$o9a K|Imߐ?%3~Chwn_揰ϴhKk4}}kG[_7?ƏImߐ9 rù7/Z?!4Ȩ!,@9a K|rWG)7/]]}n]# K|ֶw+w 4)$NkIX= (MB((((((((((((KF7pZkq0}+ TEOx\Ե}).u+io!bHcPp~5s5o5Ŵ˺P9$ dgȭOCga%崆ː?xd:ۆTv4aoe䅢ރoT($=1kV2n7q~gxQA[ Mi`[U / '0^4^ Q FQ]J-F[U p;qhL]N(Y+F W 0sUJ)l [Ǐq}JO-kS)]Ft$s-: kq5%#/1~OOI?`{S}:lm@r)/| ;wfR[|$Q\g=Gj*c-|ĒѦؾ\i1)<}.hW:/FY d{TzPԞ=V9n ĦI<[yK#—KU^A~j5+uuxRunuǎKxH8T 09 x\\CQ*BQK*0}@>"}`L/4:7dH zj߄EިxC:Tk:M*r8T`ʀ\CQ*J)p}F(?>-Ι*CX=Q_>vQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@*ZuԞyl.p]<`u(XBP:aPy7erypD2͂qkwjQ͌/,H b!PWknU`ez-)g73HQ*bmmXqF  "!z>¼M}j7]sPpOoZmiu˧Ɨ"!H19gw[Hב:ȱ*scqo}qCk%<NxP)* w$ 4ӅQQ\rQ] BļmXSTBM)0auh`&auA &b!\ $5$,ƛ9 d`1 m j;sis\DzGW9G'=|k0Z\]>ɘJ6{wi5 F#R]Ilp:p:W/yxGeX"-"@cih+? QSn IdUq$B>?j#:Ir {7Qk+#Q|d s1ҵC^<]F5BM^F;`:R,9ފno6P:r}mcwú6 &q?2J #p#nP贯pp;J{Gu0@$N8+CoBTy),׶k V}-f!@'Z^A&uwx.2D"o͕H,[cW[]Yn*&քv. I-1{Lc ˽Yq9xj5O[}J{4 cSTDBD7W~fm/e<@b8|p:P#xIY,ČUaB:.ю띧 b>t8?qWP~Wn]a+7_ Q@_7e?u>N:Kvag<8a$P** ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( k-ȨOLՃ9Ri3;MiJ rd\ҳJ~K}oO5jѲD_rOJ]v}?M/iy#nN'-{I%VKXA7@F‚NќqQ^KG&:y2 $9z>%￴(ҳ=Qp6; g\g54FJ_2'@31 '4}^pw?ViYWO=.k{wa[\qӡE[ԵM2yRwe B GNW=%*_:c=kQu72S hm0U[A-F<\昑x2pdUk$ >Ɵ؝Y_+ &ҿ+o* BW}F>*(fR34f[٤{`K>_ d)[̮yw~A]KTg_Կa7\ YD|bylK.qGjMcO0G۲:q3E/{J+ &дtu Τ_͐͝|NN~gu5ơ4[bVdmhՁ>ӵ{[iﭮk kxO#ߊWg_Կa7SZZ\,^.pJxk, r#[QQ}B`qwl.Xź3 ׵/ikƣfH2N+:S=+ʖ܅AB Mz+'kS2pOOƲxhkiYU{/$_h%h`\\zcl.Kb 18qޠoh4 ,o݀n8?S]Mt5!DL#RA`$qԁҳJn-V)e$zJˋz,jʲar8#>O{Iv;6It`C+ b+6WȋwX}hПSx@E`n,5LpЁ lYT\(%8 6n٘;D,O=M/]-ZMX]&XsEpBOix5%=6$PdVT8V*x @8ZufuM5[;%;,YBבMW=a 's۟|f-?4EEƵZ /2GU,6x oizmZd/#`sߥMui.W\?]G"s@t_Mf&e%֫rl 7Ckʉfn%ye۸d oй/&4ݭ{+˴vJ[dg ^1t Es,(򋝡>^[ cXpgr J~+?JǍ5V">/+?J?+[6JQ cX?s}g? @lـ$WǍƿR"?5\j7i;_D۸~TcJNܒQEsQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEEwUX 7 \vkh' ބ)MBWd]X +6/-[xo"6VbdWn`UGGTdm0L/FV>kK ]!UGl#BC(v QtOH`ݒ)7nVݜFC9u_Iywջ@?t}2pH  zguM{ѝQA,a#'j+-b١ nF\ QwW!}FI `|+!{pMzuQg>P}rHD3Z5lrdtMnVB;. CWug>Qg>P]{9}o70) empPGy;QA]:}%n`@r)bi n#am+0Gl  9jl̷B%J]LB[oZyDg?(v XgZ:/y{fW } F2yP L2ƲiIϩ#AZNo}GGv88W[pNC cDll_;asM#ٍ+=ԗ;LwFNЄP~jP QǠտ?*dz|4G q,pԚ_\f1 $ّجyp[T`7x:RijM$&s<"MLM# 5PA6g)6*_?OʏEtafY^[ge.2ځyJo$_v\nt&  g>_\f.Vy%Ż31ix:rd㍼ {̓\<]/ ٧J1,x}רgYϺ~TgYϺ~T}vgF$iTy@.p 33EI!in.'CȘ*1R+K&sO{ Wvv 1$u剋{3sZ˨50I8[_߇˷pPj+R+-nR'r1bNCg-^( j2Xγt{z}$yޓ}]2M{i˒'#9b)5HM٦Ml݀}k?*??*=>9$ykY<ݤ$`B<5%ƅIsu*^Y:{IxXy@ҽ/:}:}ÒG&L}6#2Kj| rd`rOqҶo[T29=k{лˋ}25ȷ!y*ay?0İ<3 D1c P@H 4UgYRF[zQORg`h=<ŞuUMv1J.l.b{20w@Al~Q*=oj1#HY]]7G>N㌌l`sROФai/cYDD"rN7gֵ~H5,,m \c\i7v[Y,12q`2 vaZx}Fܼp[lωݙm;zcrwqtKԶnP0At[^u$"ɸBq}+-WN;Z),3Ў1=࿛ VfOѵX!5+ EMޜҎ..ՎK平Cm 䃂L?*ֻGwe HJsHԒ0+)F,J'4I(V.i+~RNzm$^$+=fwy#!7DQ,x9ZgmOK^G'v;szǏ P ;T%K5mbB`$o䚉{7%2<8[Z "8ҝ(8u=yb^"Oc7[DtI\/E,N298^6X=Ҕ>$ o19ĒE^BNp>pGu?2w# 6OqJE^})WH{~~MO.tR\F =CtI cE T9'5; %;΅i# 0rG^4h$ rs‚qVy-"IaJuiekȖ+̪A`MWDҭ4th #HROx59$K;c#fOlCĺ֐<1KjƮX۞FƄʊE @FzN'"-@/[k~)4:XtY|Jf<| qig+Y2D+ rr =AZE- BpZx:}zsڰoʣİI _{yuu~ƱIv|QdvFVw|uh_ 蓋.dp>i#wejW[>Kf"R2y 7\o-cA)][xuE( _vyk W@m2)JAGu|FN0Ĩ}13%|E}7q7]ŶG&G#瀃R8?ZPW>T8?ZPW>T8?ZPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEPK](: l{!{!-Pictures/100000000000021200000044051821E5.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222D" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?o|A3=i6,Io {V4 fnA. 'GЌpkj_X,]%[˼]T1bwjuқCP_-rp5NkU)uO6wEg8Ǭ^MI0;B2;Wk_[x'Y=+{kֹ6]r 0^c)tpE#qi,]aIA .cܜչ}_'[= L" /V:Ri$T3;u#y Zq7쿚˺`0^ztKwS&{%ȺP-ЪEV0}gԾ<Q|?8?¼OVo ^Gw;-SKCk:tzk.vImg,`㳺i%P7].rTcm3᷇[["f]*}w_ՃGx[단-$i-d ؑկ[opxns:'`U"B6/ϐ=t֞/4#Qaa.n$y̫$)pn(9s|:-/,;A5"i%n5q: 6⇅tr&PdeJ}:e{98#?pڗgW2B3j6WKl3Qh7\jQ}뷒No(煓qZ;z? |:W7iyFv£u9a<-)k(dIei #8Iʃϊڄk'Pqx3R}F K2t`nQ^CixVVŦ̌2qrx 6liqp';yL2˷8Juwx9zy5HFX166ï #ߥ[:78?¼Z^FU*wW-^?u9A]!8{K.Hf6Hߺ&N(9sԾǞ ?/4{q;.MaWF}J47wZ7pBfe69eVn#ާʿڷQ|Wj:֥xR ;iA!1A<RP^h>{kN9kF5?K9>wC(սeYYAZGilǐI&WB|ϹwV{joq©QOògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tòg쨢N\koGooNGϳL8! rbCtw\a֟V(y%dC ]9ӬC1rF97)Xdn U0:W[E?Kj-T/x!xQ]h~c[Nzc޺(Ļ q9)<QYcdֱ0h+)R y7_qں(ļmog,XA$hk}}Vr:(7Z #eg4.|ҹ뎧mT~ign%b.{k$D<gcco4}@ O א^KolVܴy냎3]M=e|o;bC1Oi[[+(n%Y,h@>? q8{3j֧N;M瘶|O}~fnP>q]M}b^ArW>s=͕FG\s҃LV;2lv  uQyȯ-[E9H ǫ5npZ½#m(Xr> it d1 ,T$ }:[h@D WaY֧>Dx`I=1W .TpWfeDžwrcKP)^;Xȥ]Dá^84ؼW4fHi[eV6‚0OӞkg]o/ط~G*%":rir.6Td:LG{[Xb}_v#5/!EYsG&#=-߬_ ?nbUF-ڲu,p}+|k/ط~G*$W݇?G$W݇?G&#=-߬_ ?nbU_HƏHƎLG{[Xb}_v_v _ط~G(Ż?U"?o]Ӱ1FpqIpw-߬_ ?nbUA[vE6Fzdgr.63Oo/ط~G*-; 6Fzdg_HƎLG{[Xb}G73!9sNHk9H"6 GirZ,u|-88G(PUr2+τ1fĆ$#>a}OMcյ uK{ۈRvU@;T~fso=c,zl72C $MNѻOj`d,"$`WҼ >ockp\ՙ2L֚?9_cdiH[KHYA9>ZD]ߘ%-gK~!xj:L,y/qιZJDc=Vt!/gOzrJ+Oi|`>>1i^y76d!ܲ'9³dz?.ޔ%:o.O }HIN }7බdPVa擸kJSl0Y\˪=ocPx( H5#?!Ic1 ےW~RH9e<'sxv <7ȋ>\ mVxY@Z_D۷,}:~]+.j{eZ]յ{_77CM?GX1ot!}+c۷uݻqc9=_Ff iN86ܮKC foOKraQ[?)|?~S4}fc foO4=TV#3Ff YثY?jN$YupZگ;8w7ZQ\ŅQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Eu83;f A4j6Zrֆ40%vװ ?ti 4-I n ayU|=wx-#q$v[ǒF8݀y [ӁY#ʒGhQd PS2$0i.qV`2HM׏4V6Ef2XxkGiYG}yeͽD'a 1IE;;u=DZHUWm̧  ؠn1l /F=kV'I1^%[$s bI; g:KM++na'ٌWs`1I3FO .uj 06c?4 F7֮n#k(vhU\pI8&xgHi-nf2KFcdqpsz=Z  ( ps@_mO s4v۷F\HU<37fmM <cf?6猜sV)f=Ԥ"G 2D`ȩ*As/Y@Ѳj\=E,IK# @i).tʀ WCa=Y_C\I6m-Ҩ%fHN 8$8־5֣Op2,CHŽ2rYcToe}$u=RvHMpCr}mK[9M꧞7`Rxw:wM?Ll`A#:qQI+yMFٮ픲act+b4%4 ]O aU@rOrq@nj"ѵ)"Y-\pP2FB@8mh\biVcE%A1۟i6VuqM#-yysb-h-vQ, uۋMkQO,Z%F_<>Os[ӵ,MR\\LUq .r8{;W: pp,#HO_WHԣݴ#Bc;Q>rsh iI-71ӫ0c9|>!HNCI[?I|C{'m!нrlF?!;7K  ?%o%’BN?vC$! x씿!нrR_^9@G|,u|9]Zc=a$7`(p:Wc\QÍ'Iխ}E_n靇*H<x5PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPPK](:kk-Pictures/100000000000026F0000023322AFD477.pngPNG  IHDRo3iSsRGBjIDATx^g7o{݀`S!BH ! zC|)Gr I Rȥ`66 63WfZ4F̣(XW$ `K$5h@@Ru6oU{4 8  ~/|=TM84D̯S`B1H%D+J;!~32uAzt"f6; 0JS",y:ʚ2JCI2o oGRz0گ1k4l,(Ư¸1˝֒w7<I֧Ӱd&N *iA.&J}3NgSiaai\C!   Fz7eޑ^W~u҇}cRB]-o1 Gt% oΓ>0&4xTrϝ kim_z' ePCPS8IWG U' j. 5ClhW}i   %5ESx 8M~ظA@@I]uմ#ͻм?4)A@@#Ԃ'j5Դ#̺ v؂JՔ.Bق/zMCv)}6^#~L;YzG-.Y|aii> m=^RS?Zw}ۚ߯w@@"TKRJ&)Քzt`rsGgaADzGEs?_qweb`/ 8lLrlLAk=X܎ះ^F^_'Pp`,aUi$ڃp k"oS-E჋#FzZPc48Y9zSB]n=V-j:8Ԯ@#RW 5>kQj.dr3ŋߝxVbc*_ٞ\3wa'YO 5/8UF.5 .ӀE *vJpL(n5GJbޔ O  )΃-ʑor @@ i GMZߴ_7?>)Fz-qC6q3 wտN\n4"?}꩓_*H$rf掦=pjɶӂݔ샢&[mx|R8h?sS/'==73s-(Ust o?s9Vkn0!ͳfs>[Bsw} 猤#9 kۂtՕ힏]j25.999J}냿]59jZ`k.d#Ǫ_r)h` G/[2|CkoڱdOW_rx-yq%֮VڻB$Ԫ;Kw^yood.S| گX1sٲ׿LZZ"p{wjc=j^N૗4̿@'=3'-#;-#클`03oo`"p$ѐ {Co`+=4- uGgz#&n{oOY# pk| gs-_49'+r79Y1j9̮PWO7VS=}˖/CgihlK1o0w܌N+8VYҕ&kozKwz{oz8sRn w_>VXX@jGx+gΜ2 m޼m{mii 9|7p%~Gs~Riߺwokiœ3Cw 2 ; C@8 E‘9DG"_ EtI (/̬LPiY@ CJf uUi"!ADuw(_zxz,Ti5o?pkքOV>^?r#OW\|Ԭ֮w\CפSϞtz)d5_}j\^N[VQ7nhjm`o mK"mM- 453  fG}=m]]- -i-~PtԄI=MKrԭg|U흙 NOOBn[G[-Kkrq`'c#H ! Ń+CU$m:(O5[۟\TKE$^6#w\\\Jx)뚻23nj0}P/7! ST h𡷏 5Bwy>Ʉ{oX| Y Ǖf夥Ψ~D9eo}[O@"9ySo'v:}^~+H;ڻΝo; C0!3HP={)SNvnv^~kC]_^Qy@5VOڪ暪‘Tr"3[,o>uj/tPP]ݴ彂w]SճL;aTN~. c.\dx ]¥9 5Hv~vAk8{Ѭ'4Yznb8q#efM\77vT=&Ir3{@k)0Дikyew{8Yhu/`ƨٳ\}SƷv>z&#7se#JFԯ+//=gQtHfCMbtⵧ) G'Rn矧Z]@[.Fnyɫ>xةSf#2̌t&?MҥVqkqo4J6fy9ɻDHt.5=ƣ7ל-,/ -ʈWdzs*;ZP(QWzz'NdWR0=`FaOd3Y`Vz.UmބF.RH/EE9 V׮6d F>-{îp} e]r$2s}`HkgN4\|ּYsiɅnkĈܱcnj3:Yɳ|p(KBe61[iJR2rYH_.Jf\RZ*42סU{zzHJI_)qnnnEESYF)}ss3ٳ//^zlk꘳rz[RykCzzoQ(a ~vlV,I}F]?5g嚵t4aFcm 4KiNZ;[sh+1|K.2!FkhmM@z1~u4MHWtuKN e?|_[$#DE:|fE+V'4']U 665鍚NZAYgnB6l=MzW%5<ȾΜtspvU'|ᕝK &b?}R9}B Azc*_v*>W , ^d (uIBh*Ϣkmap[ GV,oiɢ^xgs_T^NYitȏ}-K.]\H}]Ds'"9e޵ޜeӃ3Ff Hqvz4OWiA3͔S5H}HfMC{7uC S_:h]0"tzKʌ$魋'e]2,^0ѳg/I)`S*zx%Ȋ GЇɓ-R0{L@}>+G4/:KrH;r{O8sۖGɣNwG֜;MuòSNs##j5]5(7Q1---PL%2eʴiӨJՓ'O3H%X61i 狼 sfGZԂ2r\yAI)ab%Mbpp_猬w⽁@ICuomudxKqA#aP7(dA]\|TEe rEM~#^7J]pgO['eSބbLjcUT?aa^jPߴc7tu׮  KK<|VUQa{ hi.l٢/_6q\y #Bү"~u5%eUgO,qLcf,Zj`!4W00|,JY5Ք-NWQӧO?OK'NSEiת J?uLQAZW P YZ5mIk_|mDӥ[m*_q\+/TGAR(UԷjl쁎Hmɺ:8ZqTm0Pٟyb1G<CDM읅$22wڶ}N|u׍QPx6lzmGxt!aFpEȌ Z+lN1m>fRvC\x$҇{wV?tdggG؉M ծh]7w}t[hE`&AY)'#0PSK#Ɖ}SPbv6[6lĉkkki ŋRszr,Jtoc*^t|j>xݳ?ڳxmO;^jNhnNvLi?5a?}sB}9"\o"4]ڶӍndغz5rAe?j=A_h_3njaq+-܈+5ˍ`/ac?}gƇFgO?=BKC4pNO-!A߲H}=ъˮ5nig/`D񢥗S;`ŕ]4iI3\x&L_0eEg,b EŞ*$웒bӍ iCmFi-uO7eCQloki^~=Y|W۝V_'*yumzg^f8]):][_p%Ҥ@ffSm>:vSUMwX }z풊Vfe(qVVFGg߱ l.C1{@}S /ߗSzjZƏ-'+P@/<֖0=&Hnyk4dfdPs[T`dY 8`)\6+N-U*[_y*i}-/ob/m/TnzN_W|i}Mڬ2Z- ɾ)iBMC7ҍQM;C[h|?oU.Kȼn·~nݪ,zؚyn-V_?iPV9FcEtܽw@zqt \SCVqS^R}4TC^:MhsȶSؽ#3i굽#.SYv&^E`V{t3XDoC?ߘF-N Nz~GL"*yLkC}MvݬA\#5^i~nNvN9Hp8 UfzW$E]zK"e]:کA,[fk)oXFjKx߲g^`;#Ք S^x T(*C J7Wt)}Vv8P_:v "nŞgU'[P1eaGs4놸 VֺK~&;gTWK{J6\__OӥonnyEܕxUMG?z-r-RA{c)1vWv+9=Om#y(ͧ['-߬[#oCzMVM*-֫R֬,*Aa&Ab-BR:Vzjjk 67deggdefjv67hĕ.-S#kzYrؘ-0úCc7J|`=I5Ro(]v]>5Gɴ6:4>]RiL=JCaxdQ#C=-q3ttFmO5ٍ;> ӥU6[[m+n=ُ-GOMX~xS? fo{:*=(Mn "QMI[=%;袚zaQ7 $twmq}FTS`޾޲H҅G ŚTAN,УHe5V!"7m}[Tk[J|moBo}}_l~qkϓG6?usr?nP4D+=yZ^R󲍆 :vÏSN&.rF+z:!`Yi}lsGe3?{S܍^zHi)tz9Ruj=hծpWJ>#mʤg <\  {;GRJTbKbǔM7xu'\n@eISTztjqIiቓg$% ڲe/~ôw/IP|%h?+_vYv5K.,|Ͳt.bU7 icVUt`,e>qPl²v٠_ThPN:[*)]8)xsoʞ:u%no14,fٙs_hq|O7u=״ufMj:B3wˏ~屓,O|J|Οmxi˹׊K펛W^}٢6VeD}3)_x={; ~J_f4B[<~fVR&b-]/_J@ſŒ}= f]G 7kO]h\&/^ @'zQ Mm|՝j;WIAe'|GhY gՑ;vohCN'no~ʷNzַ6/{<(=K8HѯħAK4?Y%(Ř)X=b_sM",8~xsoD4fKܜ5kI>4O ZgϞg^tEwu-N|xý;;F}Gw}z7jcs]]Wsǀf-+?vҼ.ݿ^|B=nݲ}әG^}%?uo|}wQ%^ioJO%@ɞK~ݡ'r8K;fܳ-zgv 'CJ쥮)]]0iaKK{;Kr/9y.!Z2T(-..÷7?˿U~sDKyJIG)%]Q5sn4/?#yQ܋W-JzZˮZR캥R+/F^q7tˮ5+= j^V՟$C#p*Ho9g2 /1b :?PTKڹsưy$؞<"u; 1BN׏ҚpUWU=ZcVo37M}}kob:6K:* Q߳wO!A4X]#ɡ`Ɓwvl>߄ Hӥ̑G]`|#<[ݍ=:[6r5,…CwW'zn$ek23fΜ~UW\{ysf[ i̞Lϧ{Gil^}l*/#lW\-׍!_ك @hlX,$NZV rE*ܷo޽{wMу9r42Ljjj[i&V$bTHta?;޶"NEzDU-R[?rW0Xtfo{i:OI̙4]dN{v,277rMaW%tT|Kᠠ}5Ry*g̜ ߭TJW*I ~/riz-zk`г_7zkP]}Ke8tS'' ]xv9=C~d ?zB7-i G9Ɩw^sϿvdU?o0榭[^#{i)oL|]xbM/VnzA8ڳ[_g*7֗M5||oUiFɄ߂lco >Wt?  ~Mm غgO*FzmJF9`{ 6l6t}˵ҷϫҌHϜ1G;Nݥɴ|U[k[.U˩7^9;JѨ 4MC$ .\n;ݝtL-@J7`F`7A=COUHWvyϿ~hϾ$zd2)7:JEr{/yUxf׍0Lhw3.i) RzhpUk]qu>@JEHsm˯}5wDD}~/^USH*eGXϕ6Tߜܜ1#F*.5~cVu7BMkZ~c_kԕ,9cV02m으s 0:y656766"8Tٞ|zSMc˭tHS6{)KNaD#K|7JĻJ7@䳓N]Iӧc J twff}RamI Ft:z\ii]0~QXx}Sɂч6D/(<Ch4doµŰ) Exi#GOV+44%s"* jN^ұc=mF#wJw7\MDUU0N>,.193SmM3K>Z|FYI*t79(mw봾Bwz~_G)Y z+,ͿK*7~ &:WN[m2eE5e+$%IT+Λ^w,O.ȊL6I苊okg2h$9QLwzb(= a^`U,S1"Kz/@'6#yŇ6l5CHO#[_{n{$a[_yJG7MJY$5M}T__{o/, qSkOVaҤI쁂& nCVī6zXVnIN^QNVZ+˛[;RsOS-gTˊe'=^n0Nϲ ;ZT䵳U+iYoIYq˖,ytZ7RY.+*(-8 I"i;vOR#nTķrN{bk& SN:nⴱ &;IM9v򬱓g4kc>6v\Ytu[Λ7)*ο?<Jyǵs>v)s-?OO_/}zƍ;vuFt/)͌2i7@{DP32ÝޖP{W_,r12aH}ֶ?r45tv w۞} *hFyg0W4}ic[j7֜h 8X{9R]?/]2bU48Û_|l[w(G}U_%gh]ڮg:jutsl^qbP&چg}gzmk =FM Kz8緮 ?x~WGN8ǂۄ$gӳؚ^sz;uZx[8ש]$pW]qFzGfZf@`YqҒBi;gHMlZ*Ǥdbm׮]G;^yR9|p8Aw-g?2?WVx l[}^92WJ?TG>l`WO}|wwTn=ڵ? 2o;BC+/jo-u-ien@=kf|I&I_#[5rLEٲf͚:&/7/}d,3qX"#ۯ{5UUO>}IQ{}9ϿՇxU:Ʊ?K^ʥ|껖ƞސ5ճ,foANZiqnYQ^I /uXzL-m垳FZ/ZRg2<]yyEEYήҒ;PZ:Md+N?#=];˺Y2 df-_kWgd]V17evU{MWWON.\8gėo9([~onn/Nґk:ruAGj:~(i41#,]0.3/jۚۺ~7&f)U*ʷl}4z?+h-]sdUL.ecmT2IAlLCGU RԮW:U2[j6ڌm̨'isLKJ@3?8hfWc\KLn ,Ꟙ8k)c ޫz9Ny.OO5 b_Af[LhJǠdaH=R (X:5WQ0_57.ɠy"Jd)j.lsU4qەF(;N ,ԋ1fNK[!Sm$9^w L/![c`aѼ"VO>VKi.S*TbA6jK'~>KB)L7ԴCﮜh=Sֲ"-/kX|mi6+4* jj2@08ن#sN{ڎ(6:cNk;MCygy)TpD)L鍙\ccF6:d'pێ(6:d'`YHIvD>zۥ # ׮y7oR1&     T?TSe!#,7MA@rC@@R4eCA@rC@@R4eCA@rC@@R4eCA@zzqTnu:VձQ0h:qS=C޷$ j)06m /G|ѷ#>z Z( E iԛS죫 #>z cЅ#L ɂܑj*:'&#fpl^#(;R  rHXaWMIդݫ>.p}5e"w;m (@@.jJ5Saeב5H,ϥe4w ڃvk9@WSgΤzYĬ 4VC .VPZ/ ;wŷduiAv!8(@ TS(zBy68cyZx6@-3YeW3Et_ɍ7p9% |M~DcN|5CۍǞ 5ss:)d6;^#SFʢNow=!i0ft sAS.Y.Yk5y aUXfWBqf )A&AMgvfa43 'h}G˼:1c=V<2XhV$ƾe,z)!5]4L$,qS( @ li"c` ѳ\")M3 +Y.Go3.VܹmhV]mFA35Vj@l)3BB4RbM1K^}_jf 3ӹ7HLd>nxq$")١bT4 \WS*42&u\L3I K5hJt7HlI߹'#ڥ=b#|  '`_M%T)A\ɏI00oʇ#JHePT>|Cjʇ#JHePT>|Cjʇ#JHePT>|Cjʇ#JHePT>|Cjʇ#JHePT>|Cjʇ#JHePT>|Cjʇ#JHePT>|C Ut|PHISn uOaLﮔvwEHa YehP8 I -Z~`6=C5S/4,\y K4kjZ36r$74)A@&37oWĒ%oSV$Afٙ;J%Y馛'  8MIjnyBf4-PStd5%WdF+rM;YW |QÑDE@.OeZTSv״R4[l4j) 5R/\2Y_S%>k^XUM3Ӯ~!(@b0*E^Kjm׼}\8)tH>,3*3ޘ@@ N}q}xVZg2U ;dӖ`O 2> f;כIZ źEC@`č*y7n"2pnHCn)V>j&8M: @G{Trˊbg*8OC_N_[,IИxM=x M-G`նz-ZN3K@FHMI*]0Vy8fHjfΐOBƸX2i6*:c&op,nƍ  ^ ]M `8AjU   Zox   Brj2I t&p7 $`;A7JT  @Mc3B .<{zB$jy$k!p@@PSJ$#5M@M]*A@Tzy|L IV8 YSS@\қPͤWW(_/Ak1,d̓ܫRK B@L qjJogݲG2Ɍ nQ=n!eZ+]b,nR*38nMPrcXdzL'%#%UdaR*O஠5B)AԸ w2j@@ 7Ք AJ>2eHv:fQ=f/65_䗺RMi4 Ռ(J3acFRI>Daܨ KZk:$j*)x1XIʅ\]>dzMfgl-Mh ]XO1DӓbS +f|Λ1|튔n*uFiƔ>x\P9zW:jlf$ D*MSJ41ccA^fF! 3R4m* TScp <USOƀ  ^cM ,xK-?g[E IF)ΒAMpst[Y\ rʼn@ E @MS4p@@#jySAQ  )Jj   @M9DQ  )JR4M dw(>JE |ϛBM8[x5V*%y 0T'5Mz/D6Cb4p /h   /i@@h   /foRS-%Z/@$NM%Q87c(ž6QspWPԆAhHd ĩ)9/"(rqŒd42|kh6lp@BT̥2fyryg)EE.^^R\D]&y2=N(9jfnERRC ~@ *?HWv);V9VXV{3% 7c䲚^vכc |gj72a 1aIqmD?@P.Bį#qfuoCSwٹUZ;KҤziPuS&>"z!f)p@@q $=i҇8Nj8bT  x) C'=/8  wN755 6  Lfqܸ!lr pI)u~S'F   Kjm-oQ/Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  'i5xm`FE   RSIͫ#ܿɒa \P2x@Ԕ@HH<=rf6Q~3  8-\&-[?$c,B$ Q,AjS!$:JNNA@;~SyIS>iWJ(ӫ(Yw$Vw%Us;'oJJ.}k:N^U:nܯfW{ʌ4: =c;d"%<$7婦ԯi ?S8# *>L/Ej*{)zTȳ4+w'h  N0*EՖԔ*,Е/P2G3}ˈVM8Ͷ]/2@j`]>#TW)LKvpKXJS-  &Gz-YSMWGVգb̥i^.*{B4)b@@#QSr^-11W0j,<\5 TY B*$v Tj! HAf4˝UH) K.+FDA@\8n p e#8#P@E  )Fjb  :Ei8@jT   b)p   PQ$@X.^H+eJi|{q) xBM=2=WS>?C-z*(0'tӦM2h(;% jyS'„2A@R4 oA@ 5u*H-PԊ7p@Ք&~c WQ&8D jJnNptulQ\zq)K!6P% X{Uێq  d+$&5lJn 74<pGM5yꔤ>EDčWiN|C1"%)+LҨGYwq'5)18t곞ӓydglBABοsfi ꋛܑ?IvI ʇU,y)Ay@pkj*O.R8OIL;C&OOdzbuQԹbgQ B 8fu6bk3O.C d\SSDTRz1O7J_!EfNO1SzLLofzJ5KVƌzy; R"zA@MM5*sB!ԧ`'$U7P|V]̳%bgƝ|X~Ŧ7^ kj*gin{,:=ɇF4U A=;A˧E>*.$^-duH G55%RA/i9T~Ǔ=˝XZ@LpSMIԏN1I;c5wYؘ .4-33Wt6lɤMSMx6f.͌Sd#F^ $mf^)jI\\[0KGԹ:UU_!3).T}P6[M>y)o%X%`F鑇2sK|/*K`@ pWDLS- )M$ZMmgsH2@@*P |M< /owda0@H*! OM0dQi.,X>p3{eމ 5@@M$-jyӤm+p @@ a C@@4iC @@F0tFE   `jMMoy y儉`! 0bqv) j16( @@ &ԝMpe[,)^E   :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!    {PS߇Njz` @M}B8  :!  '5}!  ]9o{B߮[uCa$͛y!J|f=%?[@@@#G   AoyS&g  $5`P`@M}0   APS&g  $5`P`@M}0   APS&g  $5`P`@M}0   APS&g  $5`P`@M}0   APS&g  $5`P`@M}0   APS&g  $5`P`@M}0   APS&@pyسg\0Mf:m2'| #-HfzjcJb|f͛# nڴk;SMSgtjokC~d%4e4fGM1o/@ PS44^  PS4^  PSxz! @ r'}ȀC%DjPCB HI=cjMdIHqHJONAM>p@ I,q?w&zY^eJB- jy  l45R3Kn)5Nqg-@~P+fbOuy{? ^&Rfg]KezPӘGCS})>.Y/Es|1]55DHK*ϙ僷Vx q" (@  h.^UN&W tO'_YF~I\N@ k?=̦VQRQ *1$ĩy(@D:DH2)94Ysd4иS+#}#=`*ʈN':Dt)Ftۄ:lr}@E6&?fNq~i-#AS?>40RL@Xdt&􌨑&0Uhj U`1ϭxAe3j1c%Mf'77Œ|3IQaƔ-kJD97n߾==:N3P^U-;lƲBʼ罞qgt9 ax]%"V$YRkYZJA9wET $Ph۾p%?k2CmXqP7RSQAҢ  "g% UrT@M@^,Vw\t,J־Bk׾]C}FԺRME3G*С_z?ӳ~s-XBJxKb/?_z5=~r Qjow]nb-$[cPi}@ A@ ;Ԇhj!S^*7|5jKCmC0N:18덠7@YQ U%߉@xxq;w; P^F)XHHwltiཟ? wߏz޾O=?Dva׮tN$ӎ{v|?@ Ш#.цDU JiWGeK_ srW(UJH`ƚoP{KlO0o\|s󜋾3̽ІATE r8W࣐o=뮺Rw%D(n40v Wέ.PHC,z BGjB\? qm` YD@ BTa߼B'WIx׋Lֶ²ҹT=dzR bpc_G*>ob5EFi?Fc))E Z{ 44liϦ}᯿=g)]7|w]~^vA_Q_6xR,XZ (}v4}ѷ4IdP!}J yF뻏v}xϑߺ|C\3V]gƆGNGI3 MgJ4c(> #IRm`cP!HTA<_YI|g%U, .YI[J[]T7# {R / ~kfצRW~ojiwQ 4c0y[ζwwo7S流?]UrVR3jܳg\ո@ƴ$Jb`  @eXnsBWW ca ˆVY/Пo(_bFEAw~OC@Ol**\79w'"j["wG ɝhb_ 7y7*ܨm"#&:eݰb߬)7_]5:,*=WWYE5\I}s`vtSo\e\B)ˆA@@%@ |%<@@ cT' ~2kwf,Ρ ֔]V^Y1L(h1]2aپփ?'SNe(@ omu zHYw-+[\'sh2 m:{W\_\RVPXE̮moG?nVG{_Xr]re;vqɹs'._(HW'U[\84~.'~mwGǭFӃӏt5&n*SnmL\xPP8@P0Зg2ڜC/]Wh1w pp󫶧m~=+z>9FM>95Wm-wt6--oo}4]0nm5-,p8OݼU,2篠?I*nQg@P0xKޟ_7 <yǴ@+'C~ک9W g)q Ga+quyPyimI'\_ ŝfx۹֢@9wszY+?n9oZccl|?: Cܶ~To/YX I?yI[Q}i+7v^xIGK߿OmzL=VJNќY7z{|n՟$U8աm>_t}}MUI&(O@;Z{.Zs{V4$R|IQ_s[ÿo@A@-0%6:ο$0$+M$=WJuTB/Rʫr_XPǸlR7e3ݻfn7C H/[yU- ͠8]];#+?<@@ T) 4c/&U7Pm$ b"+.S¸*k>[7k֬fnm?Q3CC\8mweS"_}:.T]jQYR\KE%02d3uhMʟG,3s:AWi6 EB{6Cf)4X7_{y>\޾_?s߸_x׷ L0@~p+sS M* ! /Pj ^IhpeWB rVei;ls}:t$[T][e'|2uVYs-;_is{.[[ߜy_tÍȇ>r5:w>6r:=lTn/>pBJ}QF 9B@?Y} z@Wӣ̓z/olYxtqō7Y޹{tйL?ؓU/4s[Ε*2M }Wm{5cnyeiMo3Uz ~r>^> le r:X\qN7qasOwz}GWX0g~z|>a +0oWRJ<Dx|^a!)>(v%k)$~ ȒE< Dž?(~-6tR1؀@$ } {ᙟd÷0Kx"I o U-Q^BCx!yYḸj(ނpZ#0Dc IJ1:kDb&%GN_Orق#mbdEslP { {tJl⼷7\[dF~ꀹB\t0`!0&kXmPOח/1r)*!  ?]H}R>3]J1A@@&AXD1FQǠM`mtGsPdƼHf ,N1,ٝYh&d#l O̘* cP=wpS R  \JqT@A vF  L  m3fSJz1g!@>AhAc pA@  Cg d@e{Fa%N$' 2ҕRңOJI\؃@( 3 x7gq`<}^j|YGDg , Rc ^Id/ H׈̇\Cޠ_0IlW ٜc'W1O9< t  ,ᨻg]<@0s 9_uzA{Fݜ%h;ꠌ&c8Sbm./ IQ$_mJR @ (, Cy+/?5^P!.ģf.(Y_T=22&cw5Q}mU%Uxm *5j  }wgN7:l`Hzl: CRJ<"wU3T&fC ڐ38!E4?m\qDooViYAs|0mÏ1RC30W mZ M0(N@qa9Hnwe7Ft:RxG^ta=:nwNP~o|NQ͜6ex$%26Dϒ}B6bS45܂@B0v8~pNT&!)W; z :I3t|+ P^'|1ycx=r#:ҧ!ҿxo ڊPknIn{c|`Io05btSl-,/,=aH 3$t` -y|T)oj YL q^Â*CQPPW`LD;OhR :qgY 2sUOzπ&v0:dvAUb1 R0p=d @!z+jA~or!8P 1fT$^K:Ѓz'L aJ^g*P@I>H KI#P( (, {{Zwtjhpď0ӻ@htLA@y-ΐ稭wtЩs0qM ./?l3C@@`z(/ t`.4]`Џ H<sO oOyG?e$(@M@|_2X*D@'(lU VW79j zI_Q⸚n[UMӹL7RȥK*$mr ,K.E */ Pe-hgfP֩C+1eyfIE3]Ǎ[|݈Lȸe/u&ĕ[Hm@'V1,Wh#ϊP\h(T#.`-fM| OWTtnm0t% ahwOSS\;ʫbIĂ,B.[ZJ_+PE g"RI;yGSh?4^g p=AZeb"}huF)o,j#͒ ]+Iia<SM5 y܁3f~bŃD`Ľ\`h-"[lFٞC')QVM ϑ.lm!I u|lUUSmISPqO8{ՒlF[Bc$؅2ԍg#TJюhƅm22+8'e=yJFx+fIL' PX(Zwd8ZeHB*(+#}Meq1-30VFqE')(N%ㄲ+MU8;XW^ 'W+(4K}2S KMad bTBC={BxI"[V8')Y0DM9xrΥG79J.QGL\G+E,q^ { hEXpfaKFPE\tY'n0HOWM_E9 $*`q(0n0UU ɒEܯZ`A ٽDȒ|Í2II(+E>5@ ICFMlWD I0$A@ 7 @r]$M4:d$?pkf$ƍro"9`}թ":bֿ[v Ñ{S\~frDU#+Q-ٮ, xXJRC5&B%@  C 9Ԙ@ aP"|@0Pc"PA  9DCP@ b<%{fB OŖ G@|?muSgٱ8D@Ӯ0zpuW)!yۏr!QK@ng@k~Ү0HFv(O"'كDZ2N" ,hN# H4e+Z?YѨ0sG7% Ade%Nь$J,dBX}P<> t-% apd agf0mkTˆX0"3J4Flw)Az Dn3yџN! 0!$@0dit-Q^.Hb!e\d9%&^ ΐ9 _Q$0~0fhc0 IF,!ٍM B 7օX"U&6dL [0${\uUfD","2SDKS."kq)e]a|A8SH**,93U6 ?!c~@D|#KMȍh_\UBZrPwZ pkOV`xMpkO5EZxSƴazvu`Ih`az;:JШ0W"_P1H@:IPdfb))3RJBɴN3Bq #uB$=a)iz8JR[i$aF(@H 6oެFNW i+V#:PdcbaoL'UMw jj]*"%ZԊ0#  1b@L  C @r![1@  )CVE\lU )HXTA@@oߞhFGE@Hx))#F  1 @A@@0C@@@@@3@@ `)@@@+ Zii   ` Z!aJK#N`$a`3 VZq##(V@҈@ @A @B F  H f  4FFP00h'000hA+-8A@@@@+ Zii   ` Z!aJK#N`$a`3 VZq##(V@҈@ @A @B F  H f  4FFP00h'000hA+-8A@@@@+ Zii   ` Z!aJK#N`$a`3 VZq##(V@҈@ @A @B F  H f  4FFP00h'000hA+-8A@@@@+ Zii   ` Z!aJK#N`$a`3 VZq##(V@҈@ @A @B F  H f  4FFP00h'000hA+-8A@@@@+ Zii   ` Z!aJK#N`$a`3 VZq##(V@҈@ @A @B F  H f  4FFP00h'000hA+-8A@@@@+ Zii   ` Z!aJK#N`$a`3 VZq##(V@҈@ @A @B F  H f  4FFP00h'000hA+-8A@@@@+ Zii   ` Z!aJK#N`$a`3 VZq##(V@҈@ @A @B F  H f  4FFP00h'000hA+-8A@@@@+ Zii   ` Z!aJK#N`$a`3 VZq##(V@҈@ @A @B F  H f  4FFP00h'000hA+-8A@@@@+t^bݑ{F/xݕq`  6|sss@~*  Hq00 3,%@+C$ cCA@ ] "   Yp6!]d@!Kt0,@0diá  .t_R,m8T@EHƍr8#'@0\j#"AX](6 lwD  q`]@@` :}@@ :B^__edz8yBm o?qhq!w كf pPX#Aِ_8dU=y5z.?U!Uq$ÎYf566Λ7d2Z<=6Lc @!0>S9cN_с3{ 8]r }ZL؇kkk-ZTQQ^1UUUMMMήnD  . Ch(4xf$ęoy4~B@H4 3@ @rjjjh08dw@ (# :<3Zvag\PW<7^TIGOy8Ӌ'KW^H3xpDōE V+b)--%ISw+&*|0PF .}|^/X .,%GӕM뿸CM߾ \5yHd-icYY-"!{ 핕Ftt:Iv2(//$z2Rh$I}D[qkҕ=*VV$\%Eapsg]q7N:lSI\'m[^Xͺ ^tn䟳1<4˪#[c~~>-4Ѳ!#dsuW$ 8~?|`dN׊6LCOY}e K+JV*+~d_=o9ڝ"#K'1g^^ =hɈ$AGFFh~@z}1MJ[/qYR+/g$ĭ$o4::l-A@ UJ8!87HgHW+P"1+[`aEjiO.7 VNbQ擫]ot<#4Ʈ= 4{ #sn  !9h=a㻶x&03`HƒXp"qYYKqD|r%~XB(# ax7 FMx^ y{0Fuo!!? E-+# :̓]?-xq-n.Sv{|@c߻w8<;} ]JE!Riሦ 4QXd }D]R:Bh ҆hǐ\{5WE5(^rGvѠ#񾒾Q!cأ3{qB(;TFFΎ|nߌUnwc\d{w<|aY K{z=IwY~(ƙH⥤KI%#ҎB__)M =떖z6!H6A+H L3T ƼehՐ7 a.\ l&;䄊\,JzJQLG~ZqZh$ z=> .8r_}G E.q`OkicAY4mU!9J*.*f$]]] skk+M&OH3T2'2Q@"AfO/K)Qfp᭫vmbk=O='ǝ`(pw>fz//wAmgߙAY%$6 d!xIMRVVFh~@SvE$ZA%&R:NAtbkiiI* y%ȱ8.gql^Lin8ȎבIb M`mtGB̭=./.MCcݥ>ZסÕzAT=Y9rњ /=8oÜ.jA#8Tag/OL,N<yb6hK֞]}t ~f$ $ ic 50-aؕfaW2^KeF+K|\\\dY6e'FƜ' "%۹|Ŭdě B?%Bx~kh㦌0P NgxՂkU]m WTl&=tc]gh};.-Q rr͕0 >Bg)I/_8!i5L%Ztا4` „+M)D%5}=w5n_\a3/l9Us휲aw>T-WR$-\DE4W' c~BeeJT!H@ (6cࡴ̗ ,[py3TY Lzx׾7oXy╷-+J5Ӿ,iDg |v7҆b%z5-4͞=:ZNJCCs(ȞJfmܟ;VF$ ]'z|`k_j_VS+,"ZDULRK䄁/t (k 4o0夑D}4KIih>1stt.:-J[,eeI\A JBj@P,%BaAA]mٳP_UY͌j@|N`؃AZ0Lz  *!dŔ[M$v͛UtUCĞCT1 t>^^!BQ <^($!!@*31h X$ z hD$u  q 9 AE *2h MA˝h*`Ơ>PAL *`Y}h@\Ub,DUKI*@@UAE4AA nA@ g $j  ʽnÆ y\ MIENDB`PK](:%.-Pictures/10000000000003BE000002EE94F3120E.pngPNG  IHDR]sRGBʮIDATx^ EΖLvo [P "O ħ0DP|.H("  I&+L=$ϝv]Uwk&/[  @$pô"'M(@ @@MMMmmmt^p @ G3f\ @ @^Χ^;?uI$]L9 CW恏>(UGɞlKv{kk]Nhxosa05d @\=XY[]}Tw3H}t53ރCovCôXq$`Q @s=L z$iZޣz]8\\´f `+Ek]Y:=:s /ZO~=3哦ʈy9t:bȷ_{sCAE]s׮ƊF{ͦ6tNup>z_z.WGӊ }=֣ds>,>{X`a>}|!'b }/hXg'VCoH.N Doyd{ԉ-I66yP%ǞrS%}[}qS=~JǠֲ[s]h DB`ʎY+^ﶜs?ZtWvܙ'VJ:㸃>_WJvٵe[GGYЃ$4(Dl{ߗL۽>U}{w/0k齻Ъz^T]t*9]gC7]z'$EBٓ~ }{$罗I;iN2KV%uʗn[b2mʻՒdjIf;o𽷟O&#X!˟UVIFeRFM@ ZߦE=PzW'8i<,S9=:%P))t촃&nݢx^?bvEDn2\|zfy?MH^RxeעϺMl9[4K#ι&ճhe]@ @ s>.g)\ i辍3x1cTW;hIv48Q#F +f)<^J{q|blfn<5)]3+D7Q}_%)d49h?R 0k@U:w{iK0xЫ(Xf{ 9$\yĸ=Z:$Yp'-dXa|mfCVkIZ<{F^ٵTCnq8B4*ƂHC @ 8u˂uH~q'?𙙒tnzGHwMIIqm_IRg>{Æzxdr%Y>l\L=dCrrgWz|Ƙ5It=|jrut7}@ #xFgs(qÒ<[#PR潃ڶW%^WwWm[%%-!ںYy>5ld8 @Hnv|wMh[&ܳc+4Wktm_\gTO3Բ |:y:|ƈwyڥ6F|J%OwQ'~ӿQTH:*guO8|jAYa1&aY#xS AfDGdI2|al9:ir G&wo?:8Ll^:W9}sF:pVv89Brpz ,av{`?6`yr_f#Ǖ/Z*yY΃%U4x{c/޳M?欗4nȎ%ggA 4~DRus"Q0BR!C;I?dعM]6QY9JRS[k!%Œ" # @A 6΢.(;gysYiaTDq=< !m[ܒovqcDY]\J氳ls/ 6Q}`|. rz+%ڳS͎=IoRNT]klK:%>.o ¾ -<v5Ѳr~`Ɓӥ{Wxdp_ۙػ;6 6jjjOZSXoļ`K:g"%g=7~wnME%͞itp:#!ڏP+'NIKuoZj4Ų[!K:ҿHg/ҽN+=þ70wӣƩE K k{k{.r@;L>Lr9~]E燾Q?*9MetA ,CĬZ_kS3!P9E t;puNC/#-N+y&su=t7-ҹrgz<]5=/=]ϳ"#dcyVt ?|COzBAh SS&S  @r@>@ @ Βk^ @Hʏ^ ;Hgm,E @5Ys9? @^&  @rS݁3 @K霻}g @9ES݁3 @ jIA[B:%Fy@ &` @> 4֕O_#,F#?ME7#i-nZab 3@3о\-IZ\[nث㉽ѱng!e 4DejZ]ݱ,:*BbE@D!K: 暓ߌϒVHi5n9ȅWŚѴLu@ y[# ^q6}S7h2$d2Zѻn:4 pMXZ7;z6a$h,cT|scY(@mYY^:ۧN?؅IYs7hn:xᎤM8n [yu1Qdhb  fSF EgA[Z183|c\Dڛ>'-[&S.֭O{ P7\1qܦ^dn.M  @_l_l!hVZKEoI\>]d[otR}bIk151nէ0 @ YLhJmBnd\[vּr[^>Z:5ճc?逃M@@a^LsaP('ڌ`=jtۏC3z)@p[sj.lNո/uuk\ޭnt$fo=b\q҄ ρ)u1^ɣ6!@9K4'>i% yx]7n3B)<7hh 5{ٴ]4n).d3ssfk86aO# m_pr8qkj[aHvC P_43g1I3 @v" % R9~ڣ  @ri]5코"VoYiLcmTgƀ;Y22짯)@,ȝ@ & @5uε@ %tю-@ \#6AYÑk @Hʏ^ ;&(Eh @F@t Oȵ~@_W Kι@79}_w|B#&!tt餋v;(ca t>O` @ @/L @ҙ1@ _ _}sɯy;W4yUů۷e ơ+~pݭRVhgSbohxCXUb鱫ǥ ;x+ػiM+$-\?eG?喯_'sWOKl(sIS־t4<"BC^t}١G9}dZW:ۜ&/n.`gAN: SN>XG{~|?@ʦd:C:eC> Zv^{ڗWYeAFeK.ȣ[ 9Ïʒ~]%Geɋӯrak7lںf= ee6\9.1پc.>_1񨪽}-µ/][ﮩ؜E'Yy:s䐷=9ݺfnQb}Ÿǧ;./?soA1 ʏGg?}݇]m碏vxU`K]#w3Cu?uqϛw6u[_vk 6sưX 7ԯk4x)ӿ>}8yѕHп,/<8\g@3х_]MF>hu;jDN:ƒ;5wn GݸII m/U _}gK1 i-:o-Zv[f羖 oL|纍_[P7d1>̬;ClOu}\3䠃dI"ؿG{Q#KKNdy]72p,hwVm7Gz ^9~]*v yٳ~u/Je4 ycŮ߾x e2c_CgQcg[;~fgvѯ_јa;G/}dr~1ábNP&λWկDAEGwnO)pn\dİ!/.=Xi˿n9-]4MT%۸R_IF;ʅβa+qחmnO|snj]TR&NDg~~hSpH= [+}^ee[mS^^VVjE};va=z 5tyoi{!&T;ZZ[DZջzIO~>la[*@Qwlȇ?aژΦ=-]\A;whmغc֦GگLyw iNuЬia&})/~Uso_ׯݶm}lͼٻnxieSV.^_܏4/Rg֡_5;3'ψo^-灻ն够Vн 'cC:/-FP-mTTQ~@lCv,pwb) KsO1ذ ΚpȘMڳ8!BSf>۞}CٱqA*9:wlm7mN^_dvСŶg+$;wiljy=~h{^mWm-eySKa:bĠ>C H/OeK 9@ӧn8l'CFmn/,*ZakZ^y珟꽾W0wiMcZ|ԏ[}^tʯj9Cy37ߜp*o'?~7<}Ic[mҥ.{˳v酓\{Wo_5ȼA[̋9uʬ?]3L?𰉇'+5$ٗHU/ʫ.<|^^XeOрCۿ#VܷsSq!?{+|Xq+-_մtuǜ1[T ~_gJi42%;H!vӏyѣԶJ}3cG˶L tx۵0ʔ^?Cٴw>WY\ZZܯo9Q7|dC%=R(R/^ybzvvc[[2+ W4tS/zEo-ܚTۓ}55fP4-36!rM)L't%ay(%38de{]+9`UFޮd╯Twή^9򻾴N*V ^CPyu)c$ƥ䱲!ڝsɍ! }wޑ5v(}lܯO逾e+dXHI)TP&zqceY1,Wٶ80+.%z|ގv6>qUz׸> oc>³|ɣG 3RAFrqd׷nnm-+پn֕OwŘ>>Fxt%*:7X5qxT,֨(v3%eֹDQ\&%F NnH*Mȶd[Z\\uGlHRElgq)hOɌ\6[eT7IU'{~oCCUG~? *?P)˒삶Y{~~C4{G^ؤvIzv=+U]RsO{/Z1o{{ZqwI )jvPՆ>t纷UV )3}$$[2kA󬷚ec伞̑ٯM漾VZە'1iZ'_Rr S=e^w=mccNIweGw !0Ly8, R: 7wS(,J2]\nv)#%|O>h':$@Y !YY}M;v54nٱ;~h_l=ťGzߨ~9꠽}{dDM`ogwj L}UN~>ao޲c؊E V/};oY2 h;tdGskےmͭУ.3$D\b~4gG]xǢn_$s6Yߋ7IgȻuC98tdДeNw;lٴ}Cx\G%y Pv'g%FAO6I [$Kj^_WLQժ|uerKXJWN=Ll|~wvߺ~Κ+6lznOM=Yn3xJ*k#U'3_^-I6о3oJ]'}\Z9JIɉ?|\l9+k-d㼓ƫ’/qY:w5/0Ts2j?cxݥsGjשI:er7#I6S&_Cd:vcTʌM{%*Zo65խX%eVv+olOٳGE=oݶCxΊW{vYfu{ O>jhEyݲ|9Q_/Z-~keVo]7Yq^L!\ӷ_sIuo'S1nCswDG4^sPbHDbA C]- Y񡓒ŗ֬vQ*NKx@ʼaΛ'+{Xүǘdp1sE KWYsU.ȯ&]&:vؗί9÷.O{jm%ӎ&ٞ0LU>A Y[l}|mq٤8'"Cy.%"I6ǚqY6شh䢆vNYwVzH6y۲eWWdhjY:wMNNprOmc:\F-^WQ$)c%m$*eސI7ǯQIG+{o>l;5uʔs[_xOc֕uH=|趲Xq2*AysD@ČG.8mɝgtGԡg|G:<-M|yQ/fNҝ;YMy靦e讁W{>pа;>|O߃d hܸc56n;&nO>9(D712X!T<"+6?7Vm< #G"G&k;moW^/i{[[[yiݢS2Ch䐾-*ˮdO .ZwgoggZ;֌β!eeQF|Gl鮕]7{];)n=CM%[:?XIًdC>^}8JReTN%_]5__~t~G~ȻlKp8}J^")QK'I6 y؞*0d ђ/q]69D??{}&2rˈG2*Gw6oظYnijZf kϜrT}6kis/iby4,7w?y:cFX~鏵5';O\1h79fyLI?ʔMW+)*ɶhWݯTK&ݲmw\[ޘ䢚$+tk}|[:wAҽO,o\{B&4,^묤s&s緝|FnU-O UŶ͐tVZںYo2;ַmܐL]m׷K${s%[:J)7^u׮:NI/]yGUI-0oPόs|~FWycAKQ_>IEg?Oߕ$jԆ$\5HxE%Rrޥ:f(i:|ڥLy~8]O^5ʈU+7<67?wߚExhr]?|W]SW|̴ #fpφAr~\хO2c88f-ZZڻRlvm4YJkXv=W_֢./ɼ_c?I UFRֿ?~u. 3z|\˶fL$85514|AvJ,zݻ29+/8j۽n%%{I&k_Bl]4iEe0'_.?Xn[E' 8;x rzeƁs'Mdἴ_+?~ʻ}kd\Oީ]_Zׯ:+,NjԜWYlGu*(k~|uuuQ-1~G3+0mӉTyO-IaPY^r:xC<2HKbtmOJ8qhE"!ܷ&|l7]CwVytIK{Qۘe;vVD:9[c,c読͐t~w\?})vxS;߫YkY1M9rxbAg1@Q4Cx`GϿ6` ԹNʚtN̪'GZg{P|KȟQYHu?˧]iz͠!53$OO}[4L~*2WÇn2:ĹַY%Ŏ>jQ.++?h߿kGsİ;1ǜ0rBiE)s&⓷193*gv.uYiwCc[H!UO1@W+K 'N:8]}]^8KxB: ݞ΁v}c}>8+'ofEO\rǎ]UשƒR.rv"mSRq۞%ﵜw扇t1rc[=4Vs N Y`mٺ'? Pb\t~LԹl(>46\p1M8tNR8%v@F@ok l@:gѠ,[RX90ctl+ڍoSV:փȏe4=1Wt;}zb.J$ngȨ1X?VjN]VBlI!d@X<ۧܔ4QS09Y,)e޸9:i1MdQ{,f7}NI2G1Af3JKd ;HDeDԭ]:fl1rҴ/9>(+?z9)%%#\( @0}3)^n3U͙Mݰ ii:>g[vNP_#-'p(~FRJĴY[:cf7Ry1tIe׈q*sBt>Lٹ~H3qm1nLKR۞V9nbf\6p;٦e~rnײGD&=V؜9pC] 5g#L{8<-R#tDnMX0/vNL H/dBx$p!sKTB oÝR2bٖsjRF .a)o/`Žgu !Y̔}vYؑ%٘x cN2mߥdQ^h:ga|.>sc9~FNOKgGex3lq_ܦܮQ@Զmx{n$LK,);H11o]@33E&Hz0}~:G ?gާ̇R*eFGRtNYDr~NIR _b~ʤ!epgfZ |w)ab\@`!+T EsbTqS:azk1Zw4 ,3:ӊ~i\N.α23Q+ )gGLX n3vYq<]GM2cGh=m}<>c3wΎާܧ}.bƀ)LJF,u I2SbIHЅ&IdOqve'*- UhFJ ?pkCDh(L߲r]^7ĵ&е,T5!sLN ʝ#9rylZ9^2sxpLJ$tLX"88YhQ6hvnN )19r0yF'쎽[sxX PMak-tSxU͠Fރ~9a]ձ{@h~%!>wxTt2;^E׸|gKg 55TƆw@͙ $v}wQ). Hq =y[fr~6Jq0ㆽ9p$ǂ┒S)mϚˊgB$ZbaA-̙bıL'Q%]=;^kiR= I,Y8/s'pߗJչ0CɊ!L_a9%$]%bn4ƃ5 m;^-sׄ=82S2VhlPM@r@rjNGs!@+V!@c3yܽ @@aH-},̞O!@97g'ɱOﳔ46&"-9v,u9?JB  >h LK6gC7忏uTGN0_<(-9o7nWR &/Gk-*N:a9gg}UE6I1nfi7{g_eO[|.%g^]q?]$ِ)Y1cc>Ӂc$ ǁZ K^/vYj/J%[z˞;s?u_Y9|3yFlK[JĚT{#w%o~qR)&Z nޭɆ|Loe,fŸ+Hz_ *ɶ7dW$>c9c'slϏA?eچ\_vec>_rɥ_G{nymQkF~$H4K[wbɇ%Ɇʑ]R eЎ*x'$7tRr DH2ӡ,O)ctˤ}%ɃQ(kfP#qgec?'s<–'ii'=SUu믿~5׌;Fe[r$E7K~*Ko,_6:duWֿ\lGK h)ҊEI oX7DE۬i^a.c* }*p#*#9pq=J@me酹.KW8!C̞=3!ymɑ|Kv,4[?yy=7ؓ[n߾]0\F>|)Vױ!q@ܸK)+%n<6)-P%r4gpi.&,vܢp2cmzovRKg>EUEs- )Ύ?bnN.j@:y/*Y~eÆbVeۮc]~G۶gz{r6Ux2QKWԐ8 nwg|*BLF >  ssӹ( .%vQy? H{8:?Z:k>FnCb'k!,!DݚݦYxfVeXl W>ŗ>~W׿OXþFI!UQ AiT q&e o|з@ ( _̓8R҈Tu6>J-5gsv0^EX$T@9']IrdHh {ermr8yLWG5- @ Tnb=ey?ym(/j~/R賘? N'`ᏅvrBO@ ;Igߢ$ܭE*y8R eo n͋[R7QU @@^ЕonYL⴯yHtc5vBx*>cϼc@@0lL%?doLfkLǭKc~,B @ Ig/{KS k>8^Tt̮-R8%w3krY!P `h0L4z2BonQ%飆exP0^O@Awo3%-CC>0`"Q Fo#vy$D,57niuZd~@&%/RP ݻUta__z93vP5/6M2_g:-_âfi}:=6aڧ cʖ#; #fCuiCSyYqj"2_2,ju~ZC&\3ՑΡE\qw"0,_Ғo>y4g53s0 vx9C0 8v;$Q^I)..KE>aH ?ʙeL[s#U2M@]8%~8MLG]{@|4k1)%1pƵ6lʿ+t0+TJ~eŎ+28-#HFv 󴐏"r+_0*J>g Yc>,lHM/ c@v̙j;)?vRnq *B;v^}@ˈ#[+ 0L?aJ  P.C5g X:2җƞ1pv,NJ RJ#J7 d)i, F^w͔9ǜXޒZ}8,X+uLeM3p3 c'%W(Ry`fSSৌGr֏5ƜJz|-v,QٱĮXCo CJ))(%rmxl_n-n-:޲f2e՝4)E"94@ s!&Q:ۭ!G;fÜnc_B -@a(BasZujIBxzp"9݄@@k~WѲeX) ) -\lc|' )?&zYkz @M p4ԗblǏC:;cҠ?dn۔t<9}9{ ! J_t}mhh`h NU@3ĉ5Ķ#FĖf>]Y93azHLҫI$SCIOD:` $ìuq @SH<8܆ @4s @@|`ƉQ^papْ#ew9soF9!jhQ Pʸ KZ:@ۡOk;jm_o!i嘙$kS"RnVw~9t|&n(\V-'lXx8t+1j K /c}P:خU&Y"f\6 $Y>U ԋnNm.~%R]{P1 zfV7g,*3ʎF4אJLG#ն};?dkniCLE@M@iYN)o ;s3B!3}r,HW#Yײ cLSPj 457J4k.z֒ΡcW)U#'d @jЩr,z놻 y:;[,H(Nr< m^1cx8@_fya `x�ǯe3#LLAB}>ye@5f϶3OKۧyPgUޘ~p1sz֬CBA`C O$F]K7B:9*SHި@ztTuΑ $l(5:hJ G.XueA* U;u!@9Bσ8rBu#鬏"rjTՇȍc 0Kgc(-NpZ=sֱh dLv'LGشZhO:z.*Z{B։ȱA+b}v430COP tWUUi$*++L@3z5kjj佺zy n]1cZYg٬GَfP2AcmgT @"5+R1 Y w:V@M:~:u֤'ՙudYgM/@ <"`#U@ h@:k: @@\^鏀yjT* #ЊD\:.I@:O:~y†C:Г:λwyJ3q\z5t3t!5+NѿtfgB Ĉ9FM @:: @ #ᥳ.Kunn= d*}v u1 n; @`Jlumg~9Q٧Cd{ӥq 8[hgӭ @J t+- F>%b ˛yic|jp(@ F:C-pFSDv @@Z B:DcA9cK`4/wQ @ tD]Ɲ>lYhQ+);y4q (pn6UkRHP` )Bι#OnC  tYfʇ\ʟ8 &X`S,'qʆ=ݻw[2-͘@5}NMiю]b#M4b)OY<\CMMMuu05clɑC:.uBO~UUUF\].q&{}}s,unvR6ttBҫ $SCIO^!u0, @ H& @>s @@yF'~Ux-#&b&[PNu=mY Z Mr%?;b(Mg^yԤj&ҫ $SCIO#5,DMu@ @:ǥ @@Y !@B t֝|$4"?hk.Gf~~IۃdhȎ4]Mɍ @ VHg,D _hZZ46"X.*ɶQ/^.7#77mm1+P8njpw @1$F:+RNJ ݎFu#Uyz6t}odū :잛Kޝ> @@|FǘlΑ<v8#q @w%9 4͜.L~!.á4%!@@^:pke:̦vOI:꧹Ӱ؅nN  @ 4sh?W:f˳IGX. n.!~2 @; NW ~P|HiO\~R8%;(*|Xsk%5t3tI]nZgM:YlWJї2O7RڱDJqCgDyΥ7(1KyPNu=&=td_:^r4hV,@M)R7GrLdV6/R>ߟ> @@t(OB+*֏a* @:YUQ)PlQWÎ5H|Ӂ0 @Ysts5lx栢'KE>Wh8Hsv @ 7,OT1!ofƼyP!f}K1@ Ga]_Z%?rJz7{c$.cNLa @ 1s$C69cf㳟2~z%;E*f)@ @:E%Ǐ|Kdczռ+;)()pRюžKn_: і#j 5 TgГ$&@ sKgMϨG,.@M:~:Κ:YxgT @@@:i6 @@ 3M @@yn@MMMuu 3fΖ( v` @jЩӡ'uMP k5FywD/͐@ `Fv: @@@:MW( @@v ˟!@@,?Ag${AIl駟$'>fvFm&u#A!@@,կR, *ExZbJHD?! kP Đ@`, *1QK߂S5=1WWB^07U z:IOѿt :s@)@ 9E8@ ιx@ 9E8@ ιx@ 9E8@ ιx@ 9E@:s; @@ 3 @9{!@2HA4@ {@ AH NgS5553f!@@@:B0PB @@$'3&Md&X.$SCOMW!W:̂ MT @ s\z8!@4 5R @ .qi @$tHu@ @:ǥ @@Y !@B&N@ MHgMT @ s\z8!@4 5R @ .qi @$tHu@ @:ǥ @@Y !@B&N@ MHgMT @ s\z8!@4 5R @ .qi @$tHu@ @:ǥ @@Y !@B&N@ MHgMT @ s\z8!@4 5R @ .qi @$tHu@ @:ǥ @@@JDK36z֢ ; @E t~啭?KI=Wx& @@['ٓ;UrbN*Ӌ @0Ykh{c [])B]@ B%^:7~R2l.&UyBZ}2,*nuU,M{4Dxr @);::~IN8,M7;w(֍+JB-@ &R:766%9H\fZ1jiN C $YkӞ$?r4zbw !@@< H:KijY"c%p 뱔Rς ssy?s5 @@JasJ :fCR[$v9KyH-@ &9\ @  @ Hh8b @  @ Hh8b @  @  NĹ,(/H8(bO/u|Ztw~HC:uk hg%9yϬbBffTu 0Fb!xI,Y8OɆQY|-eZZZO3r-:C+Ue/0 ecXg(*1-5"!u#;VuO;9[VFf̜-9QWW7b s^sV߾}O8rPsT/eЌ~5fh)yzPU%-}r 6c q  s,unvR6t>KJ׭[/&F%??y^s5*^x%M"WYmȻ㶇4Oi yTx?eqg_i?sOPA! @M:~:.#tQ]}J 6JKKe+x߶{}f:E7<<Jq!eٿKmv%o\Qb{IEG ߽۸@r@`\^V6`/\7WVO_p7xdgY.DeA԰zcm'ƌi+}ߩE{J:>ּ[E@ _KҲҲқniԩyS9)s*~5^9XVٺeeE^m^c}V>h kE2Yj\z',+'Tk k^Pa^ mQƝk-nΣ/;>/]'7|Dֹҏ80Z'MPTqSC@.:Ӹ9l:y]IĉGQs)'ZRܕ|I]Gseqs!fa[\zKX>g9|k}nwάsuά |@ &xFkk&jkKfg,vV/}hs1qޭVV⊶?3r+( d@`\^ާbʺ^>K/tW}٥奙B[4W΢Ylz;~ZIe{i{i@ /Kgtnii+~mmm{߬Y?kfAe++v5o{w[aΏ[:=W^9ARQQwo|7@ PK\~岸꧟~ .^V&;#Xݾ`CZh۸1cڊvww*~uyQ޲ν5V` @@`\ZVZVVzM7M:u7:{_7BtsR6's.7h,ƈԲ^*n]VXhzڊJ:Ə۷a9S ē@pܥGկ^%_}ՇzXIii/uV93wuxQE=\IE-?rib @ KCqt%%'qG|jIqsW^ JYIaO<Tqa/cYݯ}Z996sO @%X:mdvP`٭ N]UwEϸhi/=%g\ WV. @f|O3ݞf<̌*rbSjBxWe4\QQv @@ $/;i% IC@MMMuu05clɑ@(l&P___UUd04=u04@F*P `%Xt1K|੭ <u!@ wx@ QH1@ %^<>Ss@ &I?)& @ VIgA3أ>>~DaJ [߾ [LY @@`ܿ?'޲qȃit{ @ G=}_ Dj!Snl_N>yϬ&qA h ΥWgG^{,*dن2۴gx9UZQEa;;J;|yڜn|f[W>ah )ҹOEE;$u|^z+O;g9:g{κ{8@r@`* :ڒi XlL|u_ꎷ'5L??tU->esq3.\*^9+ @Gf|O3ݞf<ԧ4 eqQIv[an(lmwX @L xI,Y8O"!PSSS]]z͘9[rd2Vi*G@ theи;fsô~ xYg Cc94sfI@:O>@fu2C @p 39 @qsҵ~Rnj{ @A t&{w ᄥʱǟoD,hѬI @sSĆ' @@`{N$_x9?aؘ @@Ps9}^+-) [yY/oV^Uq,aQu+v @@,TTTl߾CRY|饗ʳ>4"UgU2Vs2r+o攅=,]ą@ %X:ˤsKKW\ÿmkkf͚u_s5*/+YMZնEdUCIb ҹl_~,n駟 nÇlD׿5qّ@ <%X:tMSN?ͳΞz׍ݜIS ,3CԆ*zNE3 @ \:wi#F|_|W_}!VRZZ&˫$)5G @K tN>NGWR2qwqɧ'?w%_c,/bv/0Wt4f{ @  έr㫭- c-j|zQQϑt(F @@,4cS)4d>efl^oyEjۍr ϧY,@ &L:WsdY2e>+R  @Ig{/з@ H4yʒl@ jjjՀQ3gKlUVV04թ(#:!YKC,:G옥 n]J٬B @@Yu!@bD&T@ Hgzԅ @s:P!@t uQ @ F1lB @!t֡G]@ @:Ǩ  @@Yu!@bD&T@ Hgzԅ @s'Md< Z6b:"PSSS]]z͘9[rd.I*A ,DȻY0ߥOmm-9w{K#F]D9p߾}'N#P0tubh qطOES~oht%84Fu )Y3!@E&Z@ ΡQ @ ^o @MCiEn rw~_ՒmKuc x~c|4f @n,*fǫnPM}P'r#@ )/Wa#S@ " G:qk>>-6كq0$]Fzhc/EZِ˒tEFΖvjU'@]xe9i@n0T%t6شʱ[WSl+5o4e%0e7_:hf9CXE4׼ضWQ9nfMJq*vSfT|g7wKc`ڕҙ@VƔ<؜sѭIrbƶ*lo/i䘫H.y7gyv˷dk5켢'T;d>vm|bJi=mrm͉)16k`Z<7=FY臞Hg?(@ ^gq М$>eСr-+4Ħ-cT7݈Yg3ִmֹT* ZqվX9ЬQ06U.*R9N(W6 A6!6YGzHdy7d)/]j#D[Fι2*I^wEgҹ%^%|eW*Hv힢ִs6& & oo՟`io3}q7[0o;[xG]=Ik'`܍ҙ@VJG9~t)e[rR0Uw˷,04WWp^XfG#of褅@K>&BcWoɶ$ZTν| N-o.4cANa(/)AC&l|seE:VX0zHgU>lX|pWvܶK(;?;Jc4%ɍ]>$IۺK\\-H8Qƻ\2~`) E[iO* lH,^0w)KΓe#>f>VFf̜-9QWWWYYO䘯UUU9T>##:850Lbt֎n[<n= /KJ阊GݮXn%XߍK1e:7Lw)S[[Q5! q[\S(`BHꇸ3ǒ]xe9i@n薼]A 1o^е&A o{8G:u< TwE$?>P?k=[esΚlYμB`sh*H!kuQ @ufX#s0^AJ3CYf"feMS_J:kv:ǯ>@fuuF:pc]szɖKo |Ik<8֍i$\0y.B:ky8&@ҙ5QS@!P7w?#L=)ԛ 3Hu8BC rų2i /@ f1p… @JdXu5 @:Ǭ Jv2Erm|s)c/2=R6k9ôdhVkZxA1#tY. ?:Z)9Zї$uvͳ$|KNW)iT1@ݢ"3Kns{7?,)s!&@"[ڟ(_/Cӡ@Mz@.IKÔМ@ /Hx7B &t @"tW- @@h&]L+r[w}KEk6A;믿|eۜv|yqѠ@?~~i׍#+o&hx v.MT@C[<Nqk 2Hg#Jfa>Z2Ց15j Ѝ[~T @.ޗ`r ̂ 0B>vH7(?EG<ˇR?HzwcJ0 #5{\5-Ku>C,@ ˷5)E@$@C@  ҙ029kcOfbɾ4e"`O035scb'FƛOPbrU)Ihs"RƑ,+B%6t04:O -OFoJ~얒Q@J^mF@}55c`CiB梏7z|I[1G94:*B@!nG4a^z:Ԅ=: SLY@4+x8O2sIU<؃!}JBI*_6ed[r7[S Sj٥QRX5d[jm@Y!t v @E::5屷[WSr̓۴dUƮUd.9"&C'tvUud{ѭT9-ޜV,>HфjNq3k1bTQF,uY sV( @K^h t[e(UfUmFr3lH`Q@\6Arx]8-wQ:rhlx(~ʶl.G:AtN%@@| oL)gaCu[sJ8vm@:`#9i ߜ ?:(#ےc݊yWwOUQb׭E Θ1KgKM0 9i +t>qPm(IZ(5ıcus"v;Fsam~%Mb񂹓&OYp8!Yt@MMMuu05clɑʼ"7M+)BOf]crR'$UKp*d)`9R,unvRѩ DICwqoGP:|@:FEA@O[ wCw-8@:3, @%2JC :->9>}Mu:ke.5 TgГF: YC @p 3"f RY 2k@M:~:z:DT]643Yu#HgMhjЩӡg·^- 5-`DIQ[c2u!#`ҙ#B@"! YRGɕB+٠N @4{Rs6& @ҹU~(/! HlPM@gen'\mΔ|])˨nuwy7dw/L1E-+X= @@GKQ2%'K>d[b8}x`GAY!t v @mZ4͒c݊yWw篻JTk0Zf?v̳Ζp:Hq@,?;JcF׮_R%v=݊yU7[~Dy޺fW&O%Q\y=(A @ɞo )l1ڋ]|G#ʬYvOmYU,m6>H챧e@uOq`׷ ^ tuڄ @@†5 $ l@:g:mB *;:I>0A xI,Y8OZl@DZ 1sF]]]eee>cWUUS䎌@tC@.O `%Xt1K|੭eY3u!@bD&T@ Hgzԅ @s:P!@t uQ @ F1lB @!t֡G]@ @:Ǩ  @@Yu!@bD&T@ Hgzԅ @s:P!@t uQ @ F1lB @!t֡G]@ @:Ǩ  @@Yu!@bD&T@ Hgzԅ @s:P!@t uQ @ F1lB @!t֡G]@ @:Ǩ  @@Yu!@bD&T@ Hgzԅ @s:P!@t uQ @ F1lB @!t֡G]@ H,^0w)KΓe#Fj(555j׌%G6B @2*@t n]J"Oy׼t1bDE#۷,G;7`CCCwCӡ@Mz Ô }X @s, !@ b @ αf @'tg!p-; /Rzas]*@m/d8( ͱ /ITA:Oł" b;o$C:り<<ߐAbהt%^ \xI_Ζ!0UshtT,("Qb#TkcV(oɶ.( -WxOS\ku:z:JDb #D tFq&; J&`3`"vɯ#%C0#tc{1lrvV~ ܈a*")|`i\zC.(1Kyj Bd9y,ZgP=n=ԴLu&/@VjB鐤n  xU[n=,h$ +^9|K ? /oyً8m(~پΦ#<0;`Y$Pu 0Fb!xI,Y8OF$F1RjjjՀQ3gKlՍ1"c[GI8l٘6lZ}o߾eee 0eks(?GPSNY~5h0%=)`hC\r,'@FOPnżVUUIE9n:7Lw)S[[Z:'tvvXZƆ s?{C(t_~*ǥ7z:.I@>sJ͡kTdGudd @jlnU@˻^cf(l4ګessvA  @1$L:+m*3Ff;DcZղQe IؖL?Ű 9zht.8 tKS? z,YveXa^Kϧ#'ֹ2cPn8p`|H-1*| @@Α#  @@aH,^0w)KΓf̜]QUՀQ/6#uuu6/cW̑F@ͺ ?jЬ.#JȻY0ߥOmmm/,Za<RH42Y,^jЩӡ'u@MCJgf5Ǥ:9Mt˥t3t!50afBP3XF:kREPNu=&=FЧt6A}X @s, !@ b @ αf @'tY'{Xn x>6 j>-jЩӡ'u@MC>NE]wBWJőǛ2(9}ؑΚlPNu=&=F'lc @`3 @ }aн?UiУNwَ&F @2F _6E"gѾoz/*\6mُTe[e^ho B DB _sggiƚƝ%!rN$FWwǟx%oyyaIe}WxWWʨRkg" @ <۠)tttlN% ǽM-RI%GNN۱f!'vGnJI_`L+eTᾉ  @@$H>hE{')#%|$.:K΢ז5e%7?~#N-9o.\Ѽgy͛w<_6M^W$%yԜ$GJcI"1 @%@:2Ҳ~.|)4٬ҔlKUҺlӲ`CМ3~D_l˟M%ٖ`#Y䢋I?⢟ 푒ϟvX$p@ RH5l~%e}w7=ܒ2RRʛG Bn+.N1QsokcK6d[rbMXt!7 7+Rӯ|᳒d\@aFk @ B)s{[۵?[H[{/G?IJJysSU$!rNEm]﷽xlH—v/~/I6TJeԍ+ B hH!Vn嫦sQtݧS՛[Z5Tuz\.zuv=5ǟ.%ڵ1|Tҹn@ O tnǷIz{Cݷ~mC')/Tֶ]C/ק2d[r$cQJǬyƒϼu?lwNzP-ϸ?o/1|Tj; -,@ ҹUQ#'II)ommip>#i=EI%ٖ7eX){ƭ~-Œ^#~=Rt~Ia  ę@*"ϊ0u}$)itr@#7awɧIr$\LzQۓˆe<`NmgUmrE @H![Z"?R9:Dbu$9 pȂ4=a#!/yG~z~ِVIU$)-/8 @@ }!CS:-:;_]Hnhl`N#bRQN%}JKeuG{xzgV.%?uWHZ<9  @@ \_Q#MPZy`#1a_H0,h(//OD+jR7|/{~sɗRE5@"' m=P;u]('7 ~I.s"E"KJJIZ|uOxHm{dr-(A DE xI,Y8/*!̘9k=37sFyݚX1y#Og]k_σߜx5@M#Gw_9t9z?>v_+%ͱ񤮮2.L,p2HCCuz:42I@*1RSS#fsô~d੭M1GZ3 #goEwmɑ|s1QagGז]r9ZR7.a @@@K3,z @&`mȷ28v}@ cٱZ$gK{d=R;D%eRˑfOS @@@0XF]#S)i]02 xX!@ @NK炡L  @@\H @ teڀ @(HDB @\#GϯΡ @ \"M @@ x&Ȃ, MC  @9B ƴ6K>r_q @TuJ+?zAƏpB4J@ xXH @@`X @3ҹq;߸cܻWC ē@ Ҹ_6oY'|o_KӾx"j@ H!-yS;ti}%*:K_-2 @'ҹoꁇ(.lֺߝA#+ ۱& @ &HSH璒=J-<1AF @1$ &tnѼmMW\ڧcX 2 @@8f <Ŭ󀱧xq۾E{:u4uzwsѧŁ1B čB:3a{oۻ}mYacD @(x9ԅiݽu][= B čE7MPxj?l-;߶~geeqH @M&j=3pgˠ¦Ft @q#G7 ?ĭw”Np D"n( @ *F%9wvv&0W]W3sl¯㝡Uq>4|>jgH-UH rG ZӼ!pYگTIone+ևBn=Ci@:_^6 8Դ=GK qk,QyԗA՘mU灑t2Gib ~q4X"бl tж9w6wZ2>6Z^q Zh 31Kϲ޹9+O-G)vo3?j>7?/-HO1G)vo3iFO;?¼S/Rgџs)G?q}'W xꔻ}.? _Y+>Ib)}R`= :Ϭ/,eY5 O}V`;X}f)G o¸!O}V`;X˴ߚ8x?7\(_U=w_ϼqB(>v/K kƊxG?5 _MxW )թ2o'N_LTSo3/s,_-7+GթkJd?5 L= *H\*''V6 LAEZnIw~ ud2F7‡[./>c-J pFsVV Ei,"yuVv9o}N [#,^0웷[Η%]n7Ps~sMkD{;^w bmg8K۱4vӺv:1ª:ږiH 29z1ڬK\G!@#s.Tɻgq]'%_ lCG—-( 2(: CEF Uڿ}A\]ιymsdGaL獾y4k"q|m?#5IխI?#kTR?q461u.$.pU2ri#i7e\I`<<=8⏮*Kߐn-UvjZt,a 3ޚ|Q ;Wv7/_ؒ0r]=;v?ߐu?1km:oE0u2A 9ۀ;/²ᦢ?⫪[{k}?po}?dAهpVGQ&K[J,%)u>}/w땻ZqZ mi/D'$ӥi(n 2Be@9}땻^?p~?XեNkFK(_q['_Oie$څޓȬ*$8땻<?P~U(A* 5{\OG\s`M-׉"ki œ9G+w< |?T^a]-|ċUhK.xj0Yi*GsX6##+'>[ a/c^xUj[;Maq,k, Mwgv%H z{;T{ءLr㏨$zKu{@G/T/q$*!G$+;k۸hHh`' N9u{@~kRhkv:qr[˨$1|T7Aw1q[~q{-biG._񮢊>W{_9w(u{~?ƜSh?8X?ТTWb4k8j}jp;YCCw尅2@^2W>8tRxYPO\G?IO[\ӟCd&$݃т1Fh0!żH.RGJP]䓟[b I댊=:nTU ڋi8Kb I\qS.uRŁs~#ѐށmM dJdK [o N;Z` ǠWy![TI7 -n63$;[ːP3{*ѴČFkNՎ@q[5i8\!d|qap \uܽQRt(4eDP-tnEsm;p "á`U|Q\qϠTj,.<+Ȋ1FsI ;RcibtTv3ׁksTsVt#4>[vY"0yI$.{(H\B{ }k*]$L܅9'MFIfOۿByuro aeT 2N>H4/!'s@ܒ#幫hwD`YzVe`ӬRcbcCOnҫI'YI YDq A;Ar<<֜sE+:6;TcYEy%WiLTsH3>yMyO~[)N-.dݺɼM\q{ WDbKU*3Bz(ڤ]NDe|d $ *F9E-\/T|H gͫ^qbm w2l7 E#[ weXH 9u#.i4nͿz{~Hq[+OP, `&d2EFy# k][4(R]LGg]>`̻7m\=T1UE* ?*#ğHdxy_"Cvȏuqc#R; q/ yd儮!H3;Xĺ~H?aij#O;iAw.ІQJh{HA^%y-H ;n\W2WaFxqW}xsј&ӛNr)KŨkyq񟘟ZMG#Mx0˳rz?Ҷ'LpnLoe+==+(FrmX Ր OYV0xa{aU p <7~_"i$z=#4[Cuog[1}3ͱbWh7P>?RK3:]`U)𥶖7z[Im+ؙn,f@kcŲU%P0`hr잺icѴV-n/lUR%u8Oj{}Aql,@Ns\}.HZdJQӉ^EŰ$bHa/mؠ zZE^]"\}/i8>~l&p"* X)G-K79+ai\>I2 ٩h;^7}V}S\XtI#f_*.ppz[2 n`2?c 3I2hg摺HJ5a#6ekP5Xoʯ$"H>{sHr6F B z j;hVcQ(E}jkqrYAc}hRiifh-gX̘ךtt26QUW#47+4REHa\^ kx٣Bwu;+T($dہ\՞4ffen+ܩ̶Zk~ۚS+>,Ǭ⿟΁e ,g,䓅8t )O'Q^X4VE{Y3*NҤ;gsTүnV[`1'ج| H1_1@=E`C[~п.zgxmJDg>p9lṠnۜy|HrNFy է#ϟ)#ȡ6RϠ>}B(4kк@'w^$X+uYFc&p79EcK\Ë@I3&>82;ˠJԲCڴ$"qПS@doΏ1ߝGf8#QJ/oΏ1ߝ&>c}:<~t>`P`Q@ ?IF/oΏ1ߝ&>c}:<~t>`P`Q@ ?IF/oΏ1ߝ&>c}:<~t>`P`Q@ ?IF/oΏ1ߝ&>c}:<~t>`P`Q@ ?IF/oΏ1ߝ&>c}:<~t>`P`Q@ ?IF/oΏ1ߝ&>c}:<~t>`P`Q@ ?IF/oΏ1ߝ&>c}:nI$?_ .:[: 5%ޥ"B@u!2lmb%s*m4=Fգ=ʉSrPHdqXGV%scvE't_r8JAErg$ldf*B?w8k(O露U$y8ˑc6:fPGvo&3Г`?b|uȠnJVH1pfןm Z3I?DIn;ɧhIkhШClsw2b8VE%2I$NyՇ ʲ3~Fہ?E#ǡ ?jU4PelAV|z (_FiI,$!R#8"mMR:Tk쭔z<,FP@.G=x& )lt O*k9c煟}C?Km̠v㐼6[hjʠݷ/3"$C4Ƒl= kZTkTzWbrFXmawW.Ky2 I9OW6ϱZ̟V Ց-@$P*iSUt8VTbI?>Hg߱LL"Ǚij@)ֲzk}<~w{="`A1Kgs/f|hjC=xY+UQ9R IYʂPsFqʑ5[Y"+9ݷ ;G@*H.}C=xY+T$ eA$5V;W_]M1ŖM28'=xe߱Z|zf(vDՑ!0b e䌎0!F8#?^(9SGM (r3KYbm7|-ثPm7|-أM *GM (EQ?bQ@bm7|-ثPm7|-أM *GM (EQ?bQ@bm7|-ثPm7|-أM *GM (EQ?bQ@bm7|-ثPm7|-أM *GM (EQiZ|v+3]K};|Vܹm8-R`qjηqB۠y` ԎE;,[ōC=m༃Rt-ݜկoƶ,;hWpNs5nPNCE$o噕I=~QRONVʞ)w$-YO5g;J :f\N `a Q ?:֥qW8w&Δn +m nW9fs}<ٿb'C?ON_sk͛}(fs}Q ?:֣Þ=ͯ6o?أ͛}+t?G$ZU_x6ٿb6o?ج_Iӡj>W9fs}<ٿb'C?ON_sk͛}(fs}Q ?:֣Þ=ͯ6o?أ͛}+t?G$ZU_x6ٿb6o?ج_Iӡj>W9fs}<ٿb'C?ON_sk͛}(fs}Q ?:֣Þ=ͯ6o?أ͛}+t?G$ZU_x6ٿb6o?ج_Iӡj>W9fs}h(0y,cT?'C?<)loDT[qŽXY~O/|5޳?tp^@4]I K"߹N*'H2Pa/ ?r{@G )4 ,^kJ54RJBșSjJ\2F!ԥڈѐ\tm,.$o7psϡ1b nlΣŌKۤ&vF%I3MtX_۝M[  *9霃Y9#ĻNwc \1!t10 o,kF!1$7n6>f񮒊>[rGx+MٮuXĐ];`ca[i۵Σx.10_@iF÷jStXq֬Ò=rZm6s" ی|rhVm s"o7]!8}f0cVo -s"o7EBbkFFxٸG^a}ac )S"kFʩc2p')}fL9#<0\05[|uF7QkF+xtu[L6O&9P:1|)-`*B o*2G=)MerG+MԣQ [#J5麒ĭs-cJ߹K8cR ˲%Z{i@BPh>H8bk/Ò=HDQ򳏳][(|^VF>vn>:-&#Iĥ cžnH9GZnm[]A)uisg :gXAUjƵאJ| 8=?,MerG+MdQ:Ѩx+MeF`1t[k7?Zڊ $-ۢ<nCOJGk/Ò=sPVO sbo9EBQm5nsִY{;i[rGiVuX}=kh}Q<>OL}Ξ^kfsZhՎGqk'>O 5uc}Q,偻'>OttQÒ=q|ڇu?7nacס<ڇuܵۘ͟G:WGEY9#ZlziY?k0p+MT{s>rnb: Ò=r/ij_EsϢtC6RKs>rnbN:(oa9u9/΢&s ݻDN<|.ui3dvs臁]}f0cVoKz.ui3vs臁P Yi7WZ*gACǥu5KT&,EY&R{z}>$rG\ܶvR_?©&w 58&HRdCĒq:.!I gd Y 1%xRZ ȑ$s4$w ştmn( q4[Y"Ir6Nמnznz}Z{Hj ,noKJ9`s ެ25?.ז9la]A@ĨC@rCrEu?۷?.۷?.V$:n{g_ fI1bB: w>i!MrHZgCr@PP/ 0ݹ1t=hݹ1t֏Tiց\:Icjn)iOnW8"蚅-ޠmG"+HTxcs!vCN9=h@9FncJePnQ1kOi[r1os@aW8ny1tփb'V&M54mIYX}epO$ rp.#Ρ<7Mu,lEYPT!us!s!ۓGժMͷ;KuXXq`^.}wjMo^|tr}]?-Sa X)껻Z']ɠ<4}Z{H>kXn^ty-eAe dAռ)_:u-XbS728t5u۞q ^ܚs!$j"2djtTK8C!q@5$<7Z.]Ku9f.x06  b4vC&Ti6? jQ^HmnaH[)۸4v  H"9!y>2r+ xll`޽:8/nM]׎MV&}i=7AK!gN1+Տq]i&@iny1u҃b'V&u۞q ]x<GժE`nb'۷<.V&sP=M+kTtKQ& XapH4_'QƧhZ~5=Fex桵N"Ij(G>;>x:("m<qQ]4q v-fsIJw_xqRxR{';[uV)(+p9ʯIw pj:RMlSw+.FrWImtKdYViw!Sٖ[N>FW]w<J|_x[4CR48;vy峃r ]C:yzojsx67$q &<ŃϧG-A+c=Wu"IgxAWk2$s@I4R_xY9+VQ[к(0eh9Ryjqs%0, )8较wZKR,؛oI+jDQ^5zD p]ȡrn8|]-o/-- ۉcY9jүTm[lˌ{sҗ.sy>tO+TeϹ돼Z?_ϭR}>>}h˾s}>{Hw_xr˱R}>>}h˾sy>{Hw_xrJ*].sy>{HwA.J*]>}h˾qGtR4?'}xh]9R4r2q׏ցCÕ*QVƗ|qF^?Z|qF^?Z=;9_bliwgiwgCÕ*QVƗ|qF^?Z|qF^?Z=;9_bliwgiwgCÕ*QVƗ|qFG׏ց~{Hw_xrJ*?^?Z}9gR}9g֏?L!+Teqzg/֏=3GtTeϹ韼Z?_˭TeϹ韾Z?_˭R}>~]h˾s?y.{Hw_xrJ*]?~]h˾_˭RXqO:]?灟$76j#vy8Y՜\PEζkF|l2Γq[f;N#X‡6 (ϖd]9 c#ajԯg0ߴ&5` rth@$BdL0򷯙s=q\%W#29ES #@ěNxFj~{G?oK`iR% 2GR Aiku1Sm(Ua0\1ۗ 6:< {=$t7/?='?dnPqw4-0ڬn3?մw0]C$2'0ˌ\sl.Nq+[ć'z0RV6Wh `$H?~q@z6]3$"#`H$gj΋ho16;3c[?_KjM͎b* `ʙV$c9j[\ܤe[O:$LVA؜o|chgT d'ҲWc #s#(>2A gȪ>WHLOK-)>3p4M9d#+(ٗseè[y$Z&G²rOLǨbh3 .r:\G!2-vV7R\NOjxzSiI%# p>qD&"+0RU6g_(Xn9WxRUˆ8dĜ|ӧv^n|+k gk#D2.8%'2ez")E JuY.YiQX qڹY]ĭ|或?2RN~P=s m-7693 2I suDws;3css ,HU8QҸ\ܤe[Oީ2$eج4;2uk@wpA@5 Ȭn@Gi|_1c+=aJ嬼ymf-K-%H61"}zn%ݙd2Dܱu1rX:H?N #Ny8ЏZ,5K]GKPC"ĸRct\i=Dm )/<ti~e1"Nn=^>C}^9&E[w9@{*H1pҰO5؏ ${kOj"x̯"?Mг(1O`>sv:͕ri1F#ג+®uؼ{%.^ya'G@h ș >4KANkO% ,24'|dvMH2YK 6rqr=j20Xn\ 4K XcZvi@)h(F pO?{jї÷^-(i,vYv!W ? vۼԠPhӵ->R3늙cLlڌ2y}k6uڵ̈́GM4Nq!4>}f]&0҆۱ 0=h3.ੇ;/u+[ 8 7 UP{_/)cr2LyNsSIik 41+rw.ӻ'eS"o7 }sz'{u8&_ #*eT@e=FG?Z(((((((((׿f^PY>[6o hu FCR3v? KUʧ%s*4"i$Ե[$N@OR)VcijZmY Uz(ѦuXZ[9Er G=@4=ú5ۂ#FrI5B1]=7;`(!Pc(TOCFz`L@N>_2&3V{|\(ݻ? q@i,U l[ )KcpA5zLc$6@2RM9ހ,KPKڢ$&-*8׮;V~94RfH$}+R_aj($\L/K}X\*}~vNy5XaHX`E#ր4Ui!{RX$FpԎѬ8$·4cz9inݮoJj[~Ir>PF9+žg@ : +n0 t"u;A#UO9rą#<@4 J5S+y>ek-̺N6S6Q\dAb7QN֙D2#/Bm?ń1~;P֗S 1K, QϧCT iIڕVĤʿ39JD-,w3U[< 7$c83j[[7+ 9#P^H.%.$IK A$RZM͖R-?hG0p2#@%K+d$J2FO>gxB->K{kg{f"X8~''&%mPnFѻ!j#Pd-$F|_ltcs+bق~r 0fnT-<_.42͇}: k{T?ѕY}hӾ/'qq犩s+( ݹdU, /t$R[xȸK*V@8 䚯'SW61D%+8"E~1.]xE1j6gD&@rHfwj|h# +˾UO@c)\gZr VGke;sCˌ rXTdb }0OZ)Ṑ$Bi)b'ԃZVĔV+`AqZɗ.Cjyp c'4j"omFd_(p"/@` Ћ *Z3 rUl5[˛gd{9]7I(;Ai߲jVkxD`]ى?˒c2sׄ༖MrR^H;;mTW?22\maos*q=Ʃi)vO׊YAzf   sL>$&w&CrUBzbyx&6V1)2sҙsijj2EGbf :{Ļ=tMo X(ِTO]>Q}ukD^řaa,qy\gހxNҍkYyT=qV__㕢mR:|'>RcEQ,KE*\I#e?Xcpi$,ZE\*(۾8 @oZ*8#h㍛{",2@%QEQEQEQEQEQEQEQEQEZHzkY>[6 hu FCR3v? KUʧ%s*4#'ľ#6%Cs|q5'/vƞd6 ̋b# Mi6݃jv]ZAhRAE;Nl4h!Gc $4կAoCiLPyDIr_jOW+K]4HɄ$ 8{-oonFC"$ev ݕ'#:`u`rP!C&69f` :> 󥶽Vx淅P7;A8hi9eqVapq%p<՛(O4$;$mp Ń e7 p#Heub0q@)EհFlhI X @sVpK#,sc[ nrxg82xfἅ..bhСU%6S$ U/2xv2Is=@$\ҴVI'me=qL|eAkpsG&qKsQNj~R-k"P 9J.3kvn\!ɘ(zN6zmgo>IĩG X%wc Fy⤋ĺYi/cex<1#`v y *UjsE!ÏF>t m\]X.Րޣzp2X]P#N"_%I A#nB#`k:dMV '&NӎW9"7m$1QO OqБYvg[egDddv58K!y?%r*>e|ֳ?ŧ)iy NFfw6T {J<9leK)b2Ʌ( (ެ5C0dm:%U{9iV4I'avaI@jcw+BmrqXZq C+[Ls}HsjZ1CnC*CrA"2mAUnu@$dr2@LUjL8h@J6`N @NS*[-WfKEdYKV`Xiڏu=VQ{ܡEFPF,:y8# ź7f7,JSsz I23UeK# #rҫnBG'n<OPKG }NcJ$*ۜ<2; Gqd(ZIQ%E>C:dv涬53SIm"*rG}A[5GB\ >_Ãۓ3ZZveV-TXu$sP( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( {Vj m#fѐ֍g[o`d5#7c\qR_?¸b!YWUcTF*0p[ 4#(Ɠo㷊yiv,W'ҟjMz%6o X goEsz߈Jվ̢ůmf*`0sI{yt}:%gq"B%A r -,ۏ=nqM;SO^񵽞 hI(.1d@:+Tu002T>bH'查뺂M.+9D'k&Xö8w:N{\ŇfЯuY-b{}np22:FTS"A372HSsI=@㞠ej>$.EhQ.nCv~]Bk;ۘ+y淶f.Ha H\;z+T-Mp#nDdn ˜sY$ cmotEOI>eD*0~Ps֊u/)kXn.f28+### WLfmv+HcrA"^71ew,e,-%ckh C)e #g]˧4I$8¶9znaflS%a y8hi=ܙb?e)1*$ޢ>vebǸ|HO<.jh& #(R$pK* c(1ivHayR)˻:+!YUx8xSń@C32ѹF9)=2(>o]è7:3wȔg`LorzU&eՄd#M$*c8du@m$pc[2KWX/,##y֣O ^jQ-Wv>oإq鑑@E\xPdBDc`5Do)`vۑ8$5m%U?g ;Ȓs 2u+Ӛ(-|} 3*vPij.R|a} Yrc$G;Fdž9#h돗 EpxE}Waoa3%FШ{ppz>8yY,%\Uܥؐ< 2p w4Wuimu,Jٶr AR]yB-%4@ W=YyR+{KkKo' xd`'[x%gy9 @hoNEmmJd,#O Ɨ2gm"ZKf uJm1و˻=3֞91d>.sy< m!X |Þ1qX)ާ,7S4)BAU \G^x,k;[}2[z { RHL26JQjZYY$b32ΪP`x#9I{V(+7$!%_0xH:9^T5 'ڙ+Q+Kh|NFOҰoOq6P82e)sw0K52;)+ LyӀ;dlm kU(=@Ic!89F`+:OuF;[ƶ7ljlg'F3X4'=ڰUL7rVVQ#pZ[GpEA\zb-S,pƲ PtzYЖw R{UI8D6di7-m ue0Bqc$ur0uOM[h2f2Ttڹc7]4vSiK+ %@aD '^gKSn!ɭ7Uìh)c4lq?'89}2[@ʀr1SU,U@,rp: X5>,;m* #x]}Ku{XX OA?Jݎ#4̟*\/Fh_ުB<-uԺ]êiqW]FX$+ Hx}ct>wY۶XJr`HO%_Ň8>`@>?Tnu7$I% 7#9=8{߲[IZa9UGumstt#dQF2B= Ee?c˒XC$s< 䵿'ͧHܬF+s5=muKY^b!ĸ>cy<R<#grPJQ\^V.`y'aphw2Yo4qfӼm!f1r3~({xd7ՔQސ@(88.>wi,|3o\i%wS/gnI3MRK*"nrtA$wgvD3dSGSқca+LrO@+ -TUcżR)P[p^@#{M uIld%5h1`:h[hv t'ҭ) !\.@8qL)m˃y2Y/ 2@alLpFT ըX_o0cI+EX^qϵt^T{yi$h<,c`B(PV00AxE""s.eh2j,]Ak FЉRYuo(5*N1ր:Щ9$MխŹDe9NspgL,F4LczRi,.,ݶ%192ȣ'Sg8Yڨ!m9ۏˏ!m`1 Ө+?N+uKy4YEfWl9# =hmg 9 LM(8qPvC*$zu(gnH`J0Fpzv_fikd<J?`v~RױM$JFQSmp68!($@@y8Ж$ P7ԟS\ͿtLa$$93ImzW|1}u}o$ 47P: arp3gךEASzqґlm [XE(|z paxS3īH6fIl'7sM d9ًGK92#`Pz) q=*PZ>11q޹<[- ˈθ [n0GNzⅇWES\,inıSlG\t~;?n-xwd_zH-Ri*u0Y[6 H)/LҖKkkQrm".$g{{qac iN.Ѧ5ɿ_s =:4# cgh`逨^pj+m3J[+1aRF:xbP?\+\nhn 6gOeks,Rm BwF>q={iV! h0 GNMm@4nԚ}*[޸BGӊO]+b'mԍQ(*ZM:[!e% j(JqFIgRNQq*(h[3i֌a&|\3idG*` PbxwD٤X&-oN>S#ǰn8Z#x`I Rfh ش;-'.O<`qTWtz~gx`"F48ڝ( 4L-9#hLdi Z -Ӯ P=&'gLFe(̰(%HCP&mdTU&ʅ9P8y~mfO)wARIYi5A%@{ ERuZNvfXU_NGNM"h\nu!\u ER7XZpD8UL=}M6EӬD An;WjEPDҦYtGvN *pr8})]?1ONjТ3BcM2cp \0_A҉4-"U+&fc0. :աETJ$ImycgItLMK&jD+w\^QE kh P:J@zk#+:G!ζjFn!I 㚧%s*4!YRqM230o/OkYxJWBgYvIJ69Z)%&͌g2'~aG0jZEu YEqT61ӯzaF-&:C,gʎx~ǥ>H;t:v< p%1spFԗNS{A"*Fz}9\UkN r_0FrK9pE9cc6 Hb`F>|7e5os̈]2Hl:UA[]M% of@zڎE9ccxu͏z'\}͟vhs$$Is=vЩ;`ynQr./Nc{siMFOMN\% ;qϮ)z].hmmĂA`~{QȻ:_6?q%#m6}+R+w—7!ROlUc%!~ 28cc{l:k2 [ݮmIF?'֭j8,fɷY𻘖b9p}͏z'\}֏6?qrR55}*8/Yv!HsOAx>HD A$ ]>c؎Msw"4$Sxač@x+cix@WVmN]Ý:63'<Qq+4`F<;zSh^њ"X1"s c8ĉOVv{4q0K$Nz|³=(٠3HX1"sF4DbD(c8ĉO=(٠3Hlg9 ҏf>lg9|63'#?xVv{4cyD韼+;ҌJ=hhD韼:Q=~Y`zQ{CG͏z'Lҏ6?3Jҏf>l:gyD韼:Vv{4c?xt͏z'Lҳ=(٠Nål:g ҏf>l861'?xVv{4cqlc98 ҏf>lc98 [6 hu FCXR_?®U4 jsprOUbN<Z֞Qp$ЋןꗑTq6goVhBcQpktIo j!ŷs bq<5`c LGza!0:\c}+ '9yĜh+8^%:as4RAuG协(8ֹ3i.b6o,$GV۔ɗlMz{b Xc>~ `c@]c$n`1p2?1G4C|3荪)9b,6`@wwk3@%֓Zj7yWW7R"F<$kͼ'9yA1''9sӥj*gMy݁P =3]Fj csc<_E$HgFh$@9#O;h^k Q <(I> דsD9YE˳筨/o83XBܓTyq>>uX&ha"EIX;q穯L<'?^Nzwz9}Sž&}VT{o۰aIfVlˎ5r7l1éZE|\qq8 Ӷ[d(lw ci #$qM!A!=۶ ]8W-۽c]ǥ;5랝꽢f}xN ۴M yP{6U$V",l+.>.0y#z=ftVkNcY"Bz###{6S>׃ݯ#=f+@[1׃Fr8 lϢ#8Dthٳ>g# IH%~(c8 lϢ#xFѧh3F0F ;=ftVc/8 [ak}e:*mM,8I,G~ip10;Q{6P>gcIhٳ><#^:Qxx1ӵf}xtN}1ӵf}xtN}1ӵf}xN}1ӵf}xtN}1ӵf}xyr1ӵgkN{D͙ǯ>xNttשQ ( qb&ӹR|l2?_5*iu='X#S@SHJ]:k H %6ͪZ<q558o)ݹ(5i\|  -oZ&"Ȋ$c(I!,?$5^'y4}B(iDvsxpHػwq`W>תq?r?Ƒ(sX^90s ) E|Fppp%WkkdiUF! d;p=(Q`YHHԳbNZrꌊoe@Qs 麢 Qȝh(P mZ}f}J[)ītۆ Ng#z_z>תG + kLYcUwwSĨ=iKe| ʌd7[k?#G5ΤU)*fd+xv}JΡql){H--xv N2r_Jӧ^* 7A7uqfpp=@ϵtSoO#S|S֮I5.E<کh.m{JRsm.v"U<GWxvʷ:dV:L5,JFCGOx[KNNNۏ&9V`7>jD%2qy^z_j̚~[$h?)1<쏈:nD3 j~o(K>Zd=f{{k˭Eoe6My:11Pz@Q,V.kv\<:…b3vO6W0ݤƒD'աM'we&%Ddff>$@tC~)= #*.O#$~(9{?W)??W+{H9^23yH<ҹ=2x*!j`c"n 'ʵwkgڿK{= qϨx[^\W(-_:UɄ\#$~/5ը#ԅȺ-gvT{Hu@}cֽ|]k^q|W__iew8;K+͹r>n@#xOJ;9"kh^i;\W;rjoq[/U*+og|ϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{joq©QGdϹwV{%y%(eY#h韥gTt_S*p Is+:NkPw> m],kn Ä+j>H/no"KfAc]k$4.>ǥZADXx=AY2=4&, '$ƻz(Dnaȴ]`N``d{ }Vm7 HdF:/Ӂ]}b]{(]-m!ʁCE[ՋNA|I].=N&OZMŧKZ=CO, SmnHb*0@뵢d'?ck$hL +sι=='OXюw1רJUH=NB«ic}:+LaPH>G: %m?Ki\-]_Xd'!}Ei\y.?0EEuknIc($H=NkyKe ]BO|sֻ(x=e]u>o%ydczEΟ>i%#lQ0 vRĻ Q9kognֱC *F@W>Gy꥙HmE7Ѥ'7-.4I,ޕa|. Lm01WSm4DV!&z1O_[CMsF('ffGH4Dd yá0j0€0?&}Q 4ZGb>d^5K <ZIEU|{<d^5/$ҏt_>}'aj}Ƚk}?/by?>}'W S'E_Q{<>}O_E?ʿZq?/bإO_Sc2;.1RX]ܯ{<d^5/$Ϣg(O_N؞{<d^5/$Ϫj?&}?E= S'E_Q{<>}O_E?ʿZq?/bإO_G$Ϣj-쿯Zq?/bإO_G$Ϫj-U|{<d^5/$Ϫj?'}WQlOOأ"y)'}WQ <Zb_0>d^5K <ZIU["y(Ƚk}/qu&T;)IWAjkҗEe|hw{<d^5/$Ϣg(O_N؞{<d^5/$Ϣj?'}WQlOe|{<d^5/$Ϫj?'}WQlOOأ"y)'}WQ <Zb_0>d^5K <ZIU["y(Ƚk}_IUO'֢؟_-OGE_RO'֣y?*aj}Ƚk}?/by?>}'W S'E_Q{<>}O_E?ʿZq?/bإO_VtqoRn>Wi_1ԫ{<%wNѨUpO:f +Ջh(4 ( ( ( ( ( ( ( ( ( ( (0|K.7-ğ.iO!݅g czWx{mD,Nӥy ,gSPɏO8&*q]zM{収/&ݡӢҭ/gy! @$|ӓ^'ίmylH3$x3ֺ>Yi%^TY0|2 u$]g[`f@?j_xq^?Ԯ|;uIn$m2#JFIZ?7Q<PvV 4}:="AvfF,6}ͭ^Ѽ!i-ЎYZg2vg ry*2rmۛ? ^x=NY X<.H'}W@{궐[?7SC3.ӎ_5Aŷcy(X$n-DK>81lS85)8ђǻﭵkmy紋{RFBex{VkO;{[m%HCTq\,777WieO& ob<zwdmlgQqp2n9̎r{UMJ򒰚D-o2}%̾I*C&̩WA632}%ܖv-W%q銉7ZgzUriq\_nbXc=q_񦧭xGRE[`N&A87Zc).YZMm6ws-Ӕ;˱PUt+2o2}%̾I*=;*QV/_ʏC 1w:>%=JcZ atbcyw#ixz}3OmƧtkMWKChٗ/GeKV6eJ*eKQ}>T{HwAfTf_Ϥٗ/GteJ*eKQ}>T{HwAfTf_Ϥٗ/GteJ*eKQ}>T{HwAfTf_Ϥٗ/GteJ/5rKo" #iӖ( ( ( ( ( ( ( ( ( ( ( ( (Ws3XV#Ezlql4 ~^G f8\kƹ[I/I{h6rH($#%N8{ִw*)3{Yc qrOzmj})E%@`\6c5֝/ 7Wuv<0#߽MƝ.,#eXc4JT*nsԑV+o}Gc9.!y$H2_j-4+=Ko #h61?zm#7 K{H V!у CS*J6lhŬ^5ͣ]EI+Ke9N}N*έ&z2Ty g9>Յu;꺅sIn夔ި*~eqҲ.FyH.ʛmln,L2`H'v14ھʎ#GhJ#kgi>'d $8QzlWظX;{{3'ht^){%}ÔM5$eH|=ppZơwfPCmxKX%_qNF&Qz JEVdd+=&NW2" E'/c#ҷ-nmƲ's x~h\ }:,Xf';9F1[yP/FH0Zto=!H&XD̄I%SÁC ˷v\=[RIӞDi0" ;E< {u  V:zMhd301OAwsS[ $ZydKR`g:%j|Guj${9!=r0zWAYе/G}@:I74hw2Bx3ͧip}W6P[uIHڀ3yPE-4+ʯ4x mw琍gnnkգ\=IHF?,(b@`H/@Ðy$Q"],\#wm N6N3p( ԊЃ^qa᫋Tִ\q*:<8;'l-(Cޥ-Jl %mW9][yKMۖUnYº6sY^ IHdL@uh\qӊmUwojD"Fd0cճhA.yq> Α\Ow hn&d1L ;{j2L&{7-]d;s `5uy1L{b,\`@9^Az^eoEYT B1p?.n+irWeeyO8R>|W4O}Bᤞ26AeA8ǭo"?+E 7zcTlu]FC,mbc o\^}x{Y፴B56JJ.E&E$`n|9<~)t>BRGIHFn21@dgҔzoHo5ȴX`~P6r: YdRKFG9%@[vrPudңwiV]l'Wۮ#K[tfѣ#HCT|8=u5 V6 /LGo+G$rm  &=r4װ?D :_ }oD3 v;Gn%׆5w((/ u.|n$yʘQ@'e_xbV_i9N9~r0LW7hڭ^^q7ȈIcIrr1+=5=KE{8y#Xldu7 ~[9#' ?#_vދ _-#/1B\A(t?7r,IQ"^I( O%A850n~&Gx׏@ o;G4w?߉x0n~&Gx׏@k;%狼 כ Rm`OE먯?%$B( ( ( ( ( ( ( ( ( ( ( ( ( (*Eh&Fu#.cz#w=+ͦoQ[X.\ htc(&E{&w<=@K_%XMRWXdfG8ڧxܦt|>hE|ܷrCk05ŭv/Eb׎4ؼH%It4>Z;xaߵ'Wwۖ_=x&)&b`gƹ`访ua5qta+JaHܷrChܷrCkm7#mʨ@b8# 旲=ryry25๴AiH_=6v1󑏛9jDQfAI" Z3R ʐsglnaxgibqI2 jb( ?궺eAtTH軇*֓V['4)|9Iq/a#ܷrChܷrCkct}Rn] y'AckR?n04PDm.#B9!CHl?GP?[RUjb(i-(? G a Z(05o2;; ;!%$ OWmXnX$ s#BQTFݎ(p((((((((((((QYjf9d_& X fQnȠq0N?C]tWPf< }}g%08$Hw$SP~gbktetC) 9PzI&[z+YX ti: ʣqVI1ةRP~g>l֦7h7K2Npsv8F]B$xM͎w`d1]t ^J+yvq aԁJ>=xz-5wiKky!6d srx=hr@%f ;UW? ½%/Y\SyFeRaJrSsڬᘥYR,H~!?wgi&* A#}b?8 "=9[b1¤F,r:eAc(kr8o+I Wsf>ĜiOuK#G, rx'^o$3aaNc_aBQs3/vZIlڡ$U$rv&2m]X f !Vl:J(Q7\mmh$ۡ,VPq9<)V<1 c-Z92Yn\cgZRsE S@+((((((((((((dybK$w6{˝;R{h.ac?+?Hn 6&J>ojIlƥvUv4S2/TcpxF8gY9!ELEh~Zaп>šz.nWB?M1m 2^FYmYI F² 2]Q&,u YA;]ЇK:u|?:+rH-^j%D2G/w f .o%q]F"0-.>8ϰ}?t}C_ Gm`n/I-oyO2Ŏ3Ec?\51 姕I̅CVát  tsѻ7[o KKx"y!Yn bI)lkKdCF QB`qB&~~átԚ᪑]H\yfD+ml`zo9WMXhqH-`u P[SZC0Āpy"dd9: G:iq=dQp3v$pwNY+;[ibu9$DU@ 6GjYq|R{Gf.exo,5qEq9v*81ja>Q+yV(cY Wme=K/?{9a̻9AHA~ zu243?6t|RdI($Qrf+J؏P+Բ?G =0]?MFB.}]/:IB`R.|psKzu&5+9Rɹ|v6CcjYq|R{}s.Yrj$օ^x+*!;@$~  qsAW3I 1Y0QȐ3 ppNMvږ_'(Բ?Gf˹iϩk7v0&!6`cc9 1/}yy-0rң9s'tk~B50G,fI*ܟ^q=yé\jӴz46i)Y^9pff~axLpK/?jYq|ϳe<ګ7/jsKWTM.qz_O# ?g{_g=7!1Բ?G =0]w /YߛR≮ M%e:H$Fl>Dԭ$uDc0jh:7w =;R ٝx8ϰs.^kFuw7&ȟgkA#*xw6 F!RA c;k,OQe=g>9s}K^oI(K],_8f3\̺#[(xmo>Qqkѿ,OQe=g>9sԮnMu mUDE$}(ye0lhծ糗Pu{D&k6kZ4ed?;s28>U-c.+WHVP# # zs _jg>9s+OPηcT…uϳeS/3|AoƨsÙw>kiOZ|Aoƫ=Y/on+cfcj/s:s[](QEQEQEQEQEQEQEQEQEQEQEQEcw`tkE"TH&|ms;һpN7p?gܺfrД>3w j0F_iܑ/nYM@-̐Y sZf4j,-xݺ99 "4;kx5h%34cb'9bj弐oȋf6?$f1ϙ?Z,l̲oT0b[;H Mm]!yFWyy!vj y!yo19ϙ9=1ҭ}i^XfRÒ3ditzj~&!|pm2qךџYkx$2+pL13޳%:Aam;v9 ڙs@Xj #bo6dmeI?)tb M+|"\3\w 3g5IY2dG$w q+9K{\K;k d˞NK)$tu.ЖޠVR䑵Qd&xLDgew!F`~#J?.icn6ۼl{V5[y$A ;ͧ6/8Sӓc[3YW1,UV4[fو%d{ ~5Hq[=Vs$Vm_VӤԴĶ [g\9\] :1ךu[W)ϗlP60[87PnP.I0wUKKFo5  >PT ;Q4)Yx,[j%4XlǙ_J_tʘ\)%v9a)}3Q.ymy} \^amW[ ˕dqDy~ (c 3 9\mS_ h%29ᷟlFFVl!8ҵaLp H2>^ M.ՙj^3QMdY!1^1?9U\@ BО_(m'U|0@|GT 4ӝ pMx~w%Ŋ'-o8qqڴ!=[0в-789ڲ.#}<- z$GJ֛9*65p-յ>p q})^/i]kgr$0X`2ϸTlR%$BǢU4m$ cUT|][X\dnwʛv"dw9yAo5{Et<=\(ǖsڎ ;Ku#B(YT ӀO> :_kqw'.x#q,iŴ{۸HH<BR^iq\X<y)Ts}G֛:l&YdW9)CqӚmി+?eWgUpC$gik3s N[VES~Woyj h""^ FHت#1d`硢Zf30mE/e.Lw᛻QŤv |\՘cq׾UjS%iuJEn% }K` d擔Y-ψAq`hՁ匀m@== G4妒H߻$dP9J|+:GW] O&D[ϼ_]ȇ)Ec*Z)s>dCKo(%| |D?dxG-/TQ.dCKo}}MED?dxG-/TQ.dCKo}}MED?dxNKxc` +@5%p (Š(PK](:9"9"-Pictures/10000000000001BF0000016450CDB1E1.pngPNG  IHDRd?sRGB!IDATx^[-GYٖP C2䐋AN)*cQhȋVY!!$&̍K$yM)BB\4'$f1`!~uo3=o2ff'>"~ @`˯~Ǩ92VMСC>;j$@ ݿO=_'7ί 7of?L<:N"rLE&o%^^{(<.ɧ)4b2DXw-{?+'']<@sοȼ0-Y={O1?~m{_x[}V?9k'##ۼ\/[o~f__ڜ}_ޗSԧ?|S>'߼O>m^O_k^2O]y}r1]ڼ>~Ǯ4o_~ yW:MYi)ᱻ/=._;)pU/;ꗝw?G\ 1_W^xy փ';P#?O ~Fʶ-ooS{[cٜ iYfy ea1x(!ӛx`ꙟ[xhYC`0 p@)?9 չ9pz z1!y%$;.9}N+6{rU̳/ pLNz A`7C!0[̒"\s%IX s1$@`R礸q,깘R 0)sR8C\L)IG<缃;wz ?|z~ƙ !d@xg}? %`Փj H@SgS8@=Ֆ!PϦq%z-CM MPKT[:@=9 ꩶt4%z6ŏs@@-SmhJlZS_T\,3`zNbhHv|N`9cʼ3+M|٬EbiժL^]l7B5iA55XpfIյ2lK"B؀_ݜg]=tr]9FfWi:"!9cFeh]BKloaʾF{wp-cFr\KWC]Fh J9dF[N~.YF[Tg(p.6o^wJ]lj^!(ѹ!hʳL͊01d҅%^n ZԳ<ۥD0m~`{$Pz{i3 O=5ǞN.[f^33Z>ę+ʳʄ0 "0wY6w '{pCiN_ L0eq٥\| cOzFۑŽd_q]P2=L=`5bɊ*]V #S-ϥ/ !0)n^Xw32z9R]̆x済?N= hb,80@CԳzC j,WZY%zR K,yA@=u@`PϥV q : TR+K^PqbX*sLͱb z֯HԜNt`K$zV<*#Q( M:gjԌ*fּp}J/)oZڲm军C39PJmm+ p9B8~5-oyKyA  "z3{M35UGPl-^[X Գ~ 4M#Ed٨.ٹ2k$SƭgjKL[=sS^z: Ђ=[P' ꩿd zO@@?S hAlA~ Ђق:>!PO5$@Գu|B cՐgjEԳ~Fzf@UY,{h٬i4g/cruQpv{ԟ ;' -D{y:7ZEs#LRbvʒbpK9虚 J>SFяM 28%ΖªJLq^35]Ӊgj?Ƚ{Dr{oLft7л6W{a}/NWI1L)p4S;G?w1@=/h;]crq!9Tͯ+svx5=C|Ca sKh([{~iA9wz}VtL^0]ӻjeXBksQX IL%<63"KK=r0E&]:imjZSPϚk{k:L͚tز]RqKk-笢{:Cf=u\#Aio=ht-n z/gj\x.w371& &ںaV@Ś~XX%&iwib!%; fi WNX}Lt/ 9Vnv~tq˟Eϊ6=Y pը3!5@=\}r ; PN,gL@`opaLn%s+w !g{cܹA=+T$q; 1uh{o{Z~ !ph;~̆J\k؎`NE5r]Gј'p!~2eNT|L%zߠ ka{kK(`5;<~xN4,f::-ǫQmkVS]= RJLɹ=x]XHrٟ^Y>kUDzGt 0ȤRQ ѦkTe&]W{7^x29]Ɋw/hwn^_EU)f]@nQbvW@:ɑT/tVjv]e.Z7e>Q(=JPSnpV1nC׺ŝ]wmzL2u3ݫqv6S8]U-3DɊe^QIwQGsZà2A91M{G;mpw"5SB s5FZ=UE$o$ySw Z҂YwQTmP*/M=ݾREvpɺ#Jxػ$0ЯLO3?rh{թe6ӎ|48XA26ȦKSϊܛ_%cDvC i~xjXT@BلG~g60#@=#qޣs ^qi%gAg9\ki~=Epջq;d60Qޏ #.CkQͺH-MFJyydmZZ=#^lFu&KH>E{zj%dվ^r9b1zRE.:풪VdbJ,ȑ.B$turlb+O{J-zc" jO@1L4W.L0&0k<š5`@7k փk{ROZ次]mNƴY' 㺓fT:eGzݨL!n[}F꠼n2q&ul=B@.:{&t^)("W|UYL'4{h$r=/m)_]930g.)MI@. khoxO{kLnS:(AһPb@ׅuG#[lcuqȕ9)o3MoR]knilƸٰu&fJxm=i!'z,N-O:侙[ē z<pھWpݫC^i. \gؖ-AC$zd lKkd~sYСCT$kjkgj.co_y|YJ[[zA=@̀ pk`' @!c rCPBpLVN\ }@Yi +_@= 1 X9s !Bg!8A+'z|> PH,4@`6w ηr(@ M%d/  %Ǖ"IENDB`PK](:ezXX-Pictures/10000000000001EF0000016A5C83815C.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222j" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?mXBܸPkmv:?𭏊Z}RhnH.f,.wCיAM5MOYg!r #@c"}yeQ.Ӳgr~;F#Y~9t=DE_HRDb~ ˧[\zfX";uNU,0T|CYiQk[*[.Iny99Ukx${Iw; þ۷vw1gLo/{]¹+*O[ͬh!Vijyzc8xObei X|x_'h.HQDό(q_;H=Cпgӌfo¼C/4 OZAjHY7K '?/\_'i)&թ#NrK1?/\ O'i)?&RkPb_Dˤp9?&#yh |@o_}/W#yi9?&թ#=_?I}/W#ɧ|>H=O'o>KN_}_<#qNGթ#7—Y¹ M<#q#Gթ#O(X\G~Fߕ/RmSGS 5 QOosS[T[/o(dY7?¹ߕ<+tTH=O%S6S&?ߘ BOOUoʏ#o7?—Y1tTG釶#txsK ? }Oʗ釶#lx)ɮ\ʪ3GV(ԑ8Eq 2x vR?3qs*ڡ5=r46sYM0G,g7\?}Vs?-㹉bfW =t{j c$HaH{df:b@$mۧ+ۼFҵB}=*ux,72s9 RZ^A lހ4b"=3TPzhKa=ɐFEj5 EvYqG >?1A"3L9 uР=2u]Q2vY x$s۵/K.J@A9oHrۋ'h;Uw-wsҫi7-IPNkMMl~IqiԞ1=y%rER3h[d}O~zVw H!v!jcNsLUR[ ;ǺIvlyz.OZb\wW?d#m`Lf'St?Q9&_*q%cOi4m>?47Q9&_*i>g<?47Q`4CFk3NsLUwe⨰{Oi59&_*IirS?)9"$ET;#w(YO/͍*X4-i_J9nrzl.dl` #t 04@WaB8یcNjKӞy{kQuԙ8ݱP%JZywoo4re洴&-C[0s砱nLn 7R9#-JPW!p ?kbqWoQ$KmeYLL 8aHRyr:),A*r0kb.)济g\/J,t7:mʈvǓyVMBIisi @}`wlYweӿ/Eb{K弻Wk!RY1$Jmޏ{~j/;y2T`io ;l \om )45.#ѐvPYYYCIOV$Ԛ_Vѐзؿ=P~VcO 1W%aƉ(o?4}~!Q}~!66}~!QQ~!6H ho?Gm?ƘQ}~!i~o?@QQ~!?P?{K*<_0wJ4LJ6pI$GL7g8k- p9TM~T0 s܎ X9c_sU`H'O8=KYi;p8>Ȳd ld^SDp08ޓɷfERw{¡B͍0'<Kz (]AxZf,Owc?8;a$ 95U|e~fV0([+,d0PxAm@qXL#p mlYSNHA?.8lUdS$Ƿ⭛{S~anONE$jobG`1#[V(bEm1#*AV6D?ƔCl6֋Yج5,2OMۙ2h?oʷGpI$oO^ 6pȨ6M/$gGCQ?) ?Z[)ݿAۭE9" w:l&5Dosf<Rm>I,ێ\r}zac@ `cz\žnd2O?S,p##))3׽ .{od6+/=TS$L2qH㎵!ث/0$ow$?Q1Cc8'8ǯJ\ 2]<pjD C U mq&Imlgo\Y^_i[*KrHc"zhh-XD'=~q4(E.lw8^Oh-l#͒Fȧ=O=*و'89:"l6W~Z!;qLqQZI Bs#8+rIc\yYqv9h}B8( Fl 6i '8V#ϥ][-sv} H @ q !h3)\}~=q*ij]v*Q*A z?:jo]! ,qI.Rapv`xרG @r_Z_@p @2L.D{茲/\0?j Q&20sƤX |㯯Z>m9ƀ{WJJQ;S?څ ڛm`d4-п=eh:{k:m]G #CZ~APP9USrDɨF@oyH?6q9]6hۖҬ3vt*%%akec $%p`:5+Hp+ $+ىӝ5iu9fǢGaU'ҭ+&i X@HaW;Ha.Hװh-٠7 Aa͒8&&}NtCI`` 9> PҭoНޕ6-cu/+GyGsS'gbsN`=W۶EH:_.̼` HЬB;|&G:VhZV! 5EPÕB:\q :AdXV%g@@=bќUH?f@yk=&|2qal&t~$x?`Ο(\hğ?gOiZ3+0ҠU+,|G^ 1sc9z~4xzVlțP/E'j9BN`bI*q׎K1m&@ݛ)Z.]`Y;,-0HuA/bUo<{-մ7 |ED3]L%6a@~U@%vQ`72Tt]%-2]ȷA[ԕozk}ɗ?3…4%}G_Xor+O[C (NcvO?2Z7?vgy?=>-6 V[͗;{S>`gy잟J@Ok>-i<xW kWuWR3Hٞ6*8d Z>OJl??¼Nj:h,L[ kԊOҔw*3Rإ&*8= Εc]V;L7ݽO̢@O HeXhd>ա?揘22MH*=hmo~Ə25- F)]*;Muo-=|SaG'S2\Umv03˺{{TZ?l??­F>=vzGU6wOQOakkyS>`gKJ~˲zj GM'UUo|4-? d H0:U;G'VVj8Uvo-6 L]H2?z'Ҵ6b+yoj>`Ua,c*ǜ˲z}+Ck:ڏ2G6*8d j9zQд|&(atgmo|0C5X8YVoykԗbyܳくj ՅYR!h:&ع38?Z+2^C{)?U{z_{Zag6xR|?[@Zt? ?iť1k[u渍q9P6u8穮Rie.@ 8<?*PJ\k^Mw˦B*j>ּ9/GKLAC8p̈́#'nzto_΀>^uhO7I ѿn޿_΍gou|;3_ xM/4-m|\`[ѽ7o'4yϒx=jc Ե4چsuX8>Wʻiflӿsl0} G"w,5;ntcX})V_6A`9`Xj}h)gb!ry ڷ+8<LCW⬑Rg?SlˆtI98lVD+`Rިpӎ/՗ǬY`g$S\H9jybIe)X lsph]:O/Mmb͊al9i@8<r.xhw:O/H͛#(v}} (#QȻ :5l€]>ڲ >EsMbwebGڝe+ Ih]ksسCol#w՗ot=i0}G"5We;u4/\= &vB/Ֆ~{4Td CJAȻթsڲ,ûol1Os>G" Ol}M:řtm~S\Ȼ]Nj|Sd6P1ʚ0}JȻStVY|Qe+4`ʎE> ntiYu'4/k9CIh]a:1Y OӿooC֓TrS+DT>9U?]O6#ѐv:Qm"T~EhbUI~Ha*M_?Ϡ&cձ!_?%%cؿ7ɏy)6I=yo=BG<yQ4E7dٿF?"G<yQ4E7dٿF?"G<yQ4E7dٿF?"G<yQ5E7dٿGٿ@i|<"Oȣdٿ@k|<"=l{7( F4]:P|C#xEW{#>IY(?{*Lhܨ/?EOP^ǹ)uԫ֒}>g1EV3EQ QG.QE0QE|EQ QG.QE0QE|EQ QG.QE0QE|EQ QG.QE0QE|EQ QG.I.?Q9[: I.?Q9[: p/}E6ae`?.T~tX`̣&Oc$-@QE (QG(EQ(QE|(>@QE (QG ?*=/G+oO!?*=/G+oO!n.T^U1j&T^Bjؑ&GGG3o'yM= Oʙ7 <~@Oʙ7 <~@Oʙ7 <~@Oʙ7 <?Oʏ-??*gO({I?Oʏ-??*gOo'4g=GBPpLGx8 "Щ1rs=Ay*V_ 3GZJUZ|S^(g`QE|(>`QE0 (QG(EQ(QE|(>`QE0 (QG(EQ(QE|(>`I.?Q9[: I.?Q9[: qt/}C6q=A?*m_?Ϡ'"$zgP%5=|yxRD|_?T!7<F<)|B>/Р/Dž?} <B|ox—ϋz'(} MxQK<K=yD&<(/Dž/OQ=dox—ϋz'(} 5袊vQG(EQ(QE|(>@QE (QG(EQ(QE|(>@QE (QG(#ѐԟ#ѐзBS<#+V O qV;`)a)t{QG'G笟P8j?OΏ(Y?:j8=d 8j?OΏ(Y?:j8=d 8j?OΏ(Y?:8=du,f3^w]49"Щ1{ ?QRSYJx}i)WhrQEg;(EQ(QE|(>`QE0 (QG(EQ(QE|(>`QE0 (QG(EQOvJKjOvJKh[W*/ zh?V%K#Ճ8A: 5ny֥D?:>_Ϊtk}~_ΏC=&j7M<R违hz/EM5ny֥D?:>_΋k}7_Kt}违7M<QoZED?:,ny֣t/!tX @;+GBP&Ӯ]I13\ ?=ׄ_&4nU{?QV*{RYJ>R>#ע+?QE;yQE[(@QE(QE(V)(@QE)[(o (yQE[(o ((-EQo $o?o?>Z_@J~T>tZ&=ߓߓ5B%GGZ*/$~O$~O%GGZ*/$~O$~OT^HHKEE}kE)i(NQEw(ӸQF(4EQp (;QEi(NQEw(ӸQF(4EQp (;QEi(NI.?Q9[: I.?Q9[: 5>EmU#A{T~APNTH`A:q?n}{4}/~Ao'q?}/~Eo'q?}/~Eo'q?}/~Eo'q?}/~Eo'q?}/~Eo'q?}/~Em@tʀyg$1 "Ы'kGBnU{?QV* ?QI^Q֒}5袊N)jEQQFQE(װQFQEQEk(^QE((P ({QEk(P (@(5(װ˷Tz_VFCR˷Tz_VFCB] ~AL[/%?W*/ -X~G%5=_W䯫gi_W䯫ghJ*?%}_?G} (Jƀ$W4y+_W䯫ghJ*?%}_?G}u/3^}w]pAlV&({*ѹU?EX/?EJJ_ 3W%(Wsע*,EREQe(˸QEp (.QE](,QEYw(EQe(˸QEp (.QE](,QEYw(EQe ?*=/G+oO!?*=/G+oO!BT><[fh?_ r*G?E'Ag?L3K'_OT!?L3Gi|k4yh?L3Gi|k4yh?L3Gi|k4yh?L3Gi|k4yh?L3Gi|k4yh?L3Gi|k4yhgnُ,w]*pgMpP^TѹU?EX/?E%{)|,Υx}i)W^S^(ױQE-{QEk(^QE(װQF(5EQ` ({QEk(^QE(װQF(5EQ` ({QEk ?*=/G+oO!?*=/G+oO!n._?ϠxGVaWLhts1I``Mnӏyq#t+3rӏyq#,+N?34i<Ƌ7(?8?.ܢG?Ggh 3rӏyq#,+N?34i<Ƌ4/3^}w]M֣ZL<#w>ZĴI_<6[?'^=UKKxg2wPss1Vn4,ERA$-RZm-TM c/jrK=?o=<j4:H(?L7w7p *1*0K.9QW~ŸտaO^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~Ÿտa_^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~Ÿտa_^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~ŸտaO^ )QW~ŸտC4V|f 2O~$d?*=/G+oO!?lkΑو%qӴq!n._?O**6e"䜖e\J*aH<ۨvdmU_<_:̢NWQptIE?)Ѣ\7SS5Egl Ƭx~Rnu[a&2t`Yhz-|?k2ƟZ<e?C=C=(,iEE( ~|?hD?k2Ɵ!GZ̢=(,iEχz-fQJcOχz-|?kP&oOyn9FsZֺ\lMs+>i1=)=>皯/+xh.v5arxnqtzx5wb6<'~bpHQZ<~SR=7CDW,V_bۆ0׳)՛ݛ:w0dS*ҫu!B1dsOӳnv6%gwԜOc wT_3vB@ r |܏JsY]Y\* d~{Ti7t;s1 g%}pI#= EzpSixRjQH!s;["mFe ݾZv$?_&k/Y_x̨ҌabX,b2>POKs@SehYEKs@Sek"֌BGruxMj8whKi%a`g<֓@+=n.V)Jd7^n훸Ǚj R-;QX-u`s8^ܹaýIIm}&F4غi 9{P$ MF?L׌ME`F%A=s)W5;j;W&1,8Q7ҝX -O,wͤapm&SbEaK俛~^ӿp1y^uŻ~μy5u6#K[g3ÿ| wIhѮi寢LR9[: Gm6&#ѐ[_².cBqw;cp}_?O*}(^5O i эSua 3?!@_5?-?gZ>O i7Vo>c9R [y> Amso0OSua 3?!@X?-?gF5O i֮}(ϰecT!]QiǷgZ>N"~1{ gt_?T>~t_?QE=Ia 3?!E΋{G}<ة3?!F}(hG&}(ϰ?:/(bϰGE=t_?T>Xأ΋{G}>g~ByhRg~BQ`#b:/*LQa ,~t_?QE=Ia 3?!E΋{G}<ة3?!F}(hG&}(ϰ?:/(bϰGE=t_?T>X{L"Fِ`]}j7$>At%I\ǥSϰpr]j9h]` ت>]|~?Q?*}(ϰ`_ߏo}yd&zn g~-ﵢ45?d_ ;p:*~-ﵣVo}N4e'Vƒ  ,.ncL c5ڭZ͹8IhS|~?Q?*8 vkp\ bTvF( "֮.Vȡd“M'McRdu*Qܭ]|Q(4h$p)*( *v#?d4g>_VFCBW{ W?簪0AERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE[Gh[.7(8LL?Yڅut۵oCQp8hTOGz5;AOtUm`d5GFHt;FI 0T㡫_VFCB{X-u7Qer<0ȬH4_ Y@*?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4_ Y _k(?EZ? -e9P\H4o Y _k(.y$/ Ak/Q< _hEZ (  Ak/AZ-zr?EZ? -e9BAZ-h^Es -e`%4yNgM+gPK](: J-Pictures/1000000000000149000000B186CB1242.pngPNG  IHDRI^?sRGBvIDATx^}\UK iA@B@B.ENPFi$0PA$D}B_?;㎳gϞ=kfZzSGGq1F1`Ͻ#b͘oCߕV`6c0F9 o~W[1F!ی90d]ol3c#wec͘oCߕV`6c0F9 o~W[1F!ی90d]oDA~3>&c#M-M~ᦶf*R㋜w[пf#gI}+άʡ0Q>/xqOi|!ߜpKiuŨƶ%[dv ]]Uxٹ:7%+T͖LJFK t-z]-ۏ!xj'|iS^[(uv%X3tLh^dAN3Ӫ>01]{^erbϢObOK_hq򸙟S4K*NϮɳ7!yAi*Ejeo߽o9D'==4oэ w !"J[Do/76(IsM,4q[绒 Ⱦ03O [㋪́}' j–X1W^@xp~ymkȳ^ᬬlRN;FR':[IH:6u xXT ^bWUq;Ro_[>+|uck3?yG:9lZ?\PCWlmhkd|TFFeWof}|7Mmuc)%EԽ2f9X޼`+Tkf&Ȃɡ:ZY^OZ'.ʨx]T=y!-mm3"VpP>4T^39j 5cBBAv~uae;BBbb~MaQ#c r e 6~sQ%jw6lHsؘmiI~6~*a`QTo&vg3}mߔMV?i OœCr |*BΨSMÖ~y7']S9 1,ix /mRN {NF@>ݣ#z[-]ڛn-#~ow{uqq ؙxָS6lT(psnL,|[y|ú[{]N?NrЕ.T.'nhj8}ڤHO<ڎz :fCkC_hKi{~9m#5[;XXWlx[cd{6pxny&~דtAn`;\ؽ6'򍅼lx&031\9OOj 'Hq(^v{o Bΰ#2S_v]>*#irY}hEUFnl-p {oP;_gRU.+ϫފB\ G6A e<,U 5aycVjfkU{ۏ?n;:yq!Q>rZ hbLm2Fw@/ҾX 08`o)*{FcefXX35}Zbyx゚[ҰmĊZ3*rryj}5n,pMc}vjq]kwtlO9/|^ARQW/uIroBVB'폏<%w Z}-#K4A}_Sֱ.vJF_z ]u.|! 'w]zA4E>q1FξPˀB9E<ك\P QKyyҕ#/sȼ6D}KN)M3>hs\mќ_G qnda偑5a~qQa(lBA\l~V9;ă&y5}lơ0,cfĊKMʍB >9{3?ow?9=_ȝg:e+eYԶ/ȏee;տQaoiָmBt&+<.L |I99( aæZTo? F2r m ǀyiNN:Ɩ&6^y*φy nm}rrKڨUE!p [yǧR[&.?-/qI}&_;f0vOF sz=-8/o.9!4age}1aF"$xhclmhݨy  _Vd:ύxHIDn vϘ=MAeVfږOSKӘYh-@+ ~CS*Q {C88)U^MމgW'aㆥM_>07\NPA&|켢l,lW_tU"Է6{%?TV-+aOZr/vH㯿H6.]S?|Btr"@6P_U D-[0h+r4L9ĦɈ I]ߝcrͪᜭ1؃)Fkm|tG..kw]ad7U9|&ɍ"=0rps<һOr_sQՙ?꫻7LNHt^-]]t0Щ4g UAbba2| 5gr_ϸ_1>2RB v澓d2i6ּ"fӲNJ]9gJjo!՗W_fbfjFm69@wKJhwQqX=B5+|Mfu3_N|ϰ~)Lx />dFGGC̳KM6<-v̂/HB'N~)}O,LBJ ce!{By9RX__c{qntvM~o~r,w<񱕱[a`|8֗H>?yCuIy.4D3偨BR܂ xޞreV4|QZ,,[b>.0TƊ>q{փ;9XA@ -Ň}q?78sW[Jww!#ʚ* [q`eN)PVu0q[h^} Bq@`a#GSs4 rBj{iuڀuPZ)EN畯)l˽s@qPX)LmMEy bn{XA"矉XKj 'n"'|%*%FyX}ON495Nv R&f3`!r/B@7mɍnX}ɇ^We˯$ћ1hO JSxD}wʉrǤAȼڂVrb?$?)MAgȏm`DyW Kr#^U'Xəp SKCp#!ҟaC!ya2|R[F/NF q/UZޔB%מ^LLw@#5JAPA{tA TU*(6 %E3{y 1!q 78Cu*~׵[z6f9 '3Z&3)|L{ufs`6!"`)Ҽk-9^@hsao -7[\3}]dmJrr f ؅6In齪]s>fW7}ĹWQPܢ[ۛUD9%A9a9elQ)!x?5}Toh! 1?`*f.B@"rm j, 2&lZ$)~qd!zlbB(0G6=dRʲ8f@[O,^ِo4 ꘞObm 0Ӗխ<*"^la@CQ5nav;$. xcENW/jcl|t]m`Hg<(LB\B)Jnђڤ3]e\)XņFפ A ZC,l/tuĢ#g #9;/;Q训 ]+7ݘ/c[ [E՗8o.kHPq٭x#$$eG*ވϯp ?;ߗa鐙änezqcsmWGJN=֢Y?arUq$=dbfm,|؅פ. Ui&7n~Sx#8wbfI.M%p==w]]QʔCO$N>eUOn0j!q-#X}$­p6} %"XN*K'4@[ܷ!oLz|M>eZ~S= E- /]-~8oJaMҗ 1IsLvbb)Tu]Z}"r`00]1qAlBEJɳ┣c( JRlwbZg@'eݱO8l C>5d5(4|Q)Go6| }xef-A51oRg#VFmDx94-G.9EWas [3P{d.8q#V(/f9{|BY=җ88+Y.^.(Ω|4 zśRPˇ[S[k KU;oQz}h(9lx @JBL4LրN]a.y&'`/ fC'SK,In y3:j̫,;i *&7s^MH~dq}i?,(QMBH!#ZD5}d;O_8 ԷC;`#B}Cy\Yj$k(q;jćSڛh` گ4 [A@ILL-nqW<D_7~V +:;EqCIw۟̈́m|DpPNvJLs 4 M]c%+%!P zhMUW$:s>*E_|bmQOF`P#sH7l)+E {Y~+.qZDT#¯>ӛ=|xSd`u|Cz;y%b9Lд0nvE@2!Mx 9Fl2oy/3\02;NI8 UK+ ?  5GBB7.f6VZ';NK=^.݁^'$qi6znz33Ӳgn_ k4ZOd1'Ӯ w5ySV)KdU K>-P՝IF> 4^ƢʬW'ş68\9om)b<ׁ4a b0'kl_p1{g[ꇉbz`^y?)M )F$5c?,/fg1~VO BPLefP4\8vQ%$O՗/ڜT^@i@sk>!Y &ڣ>$U^='8/`su R^1{*{XGp%NlW擆B~rKVmEecf[2hJ .&UWU5%~CuxV{ Cd0KFQqTU >Q[^TUR^X"ATŹofG|z0i#0ف/G::짉0!ztUv7WQkhTDϢGt, ?|"]dpvH]&hB\6 ݛ;߹:9f|pnn 6wS)p+'@rnONi4MSg)kz|$QReTd=X-t}Ms6popNhGf7"wŭϫ@;&@SA3fk->{zYUU'5PSQ~.?`Rz˪ 8Cx=)yAH JD7A͖_:̖XNEE`@|7]xGdgeCC?fahMPt1lMy>܏[(c.Q5Z }s/>US8-vޔGy aQowUqx6%|8y^Cz{G#hn--L s A.AA¢ogv9SQs )7%`qm@g% ܜ$/v=1b&t[1t"A6Ff9/DM˿PUYL̈ҋ#lÄ1,nL.@At` w fe8ubծ9hGU/Xҍ;G PH\: CAiD!? eU1j(D zW/7(/IܚS{$< Vw9m'Emg5o8K<ʍD'E[WaſxzvM.)kV `s pH6W} lnFoN)Dwb:jrpt p!mf2DEMķڹas2'U5ck)+9ɥ-@[_Kݦ~V%^7=v 鼘[Zj~佇aoisEP~*I_:%7%'ϥŃz]וnϰ1~V7Oٳ/~Ǫa`M-TjZkcKDξ, mܖx9XHsMCu J=r 'BDb&N Ҽ5w:'춑73o^\}tV(ɠmy[|Kw!\xƂ}OO@ )xnFe[ۛ!+X@GU{1fH$Bx S ('|/+Jν+v֮,Odf-zD?^9tܼizZ[ ^f60(_5fxѓ\PRwZn *0#4Ekbn"+o{#A[=}soQ'5WUg0u:5q ͋!1QALNH!b-06m\ A~0ZK[ b6(N!l]@H]3K̭m4?lwqv z|:>J)NAuyE>)}7s|n<uCYʘ,k='n>I*ߙ;:)Ii<=fNԁN]_7%6{Zvnï0dnFR0 __8lɣu;ɘsP'aWWt;`F d΁}$L&1}veI˰C\sBJ# a0q?qg<\ '9HDkE&)^܆kBuK{f4@8.|YFoL PP1>(!# {a~Mdu=Z9a3@&BP#zxS9@O6we , 9 QD`VCigW{p#uM03ڗȜ.*Sมssx~7]nȿ:D<ku{`# Jg54}K<=(y mnM<,/ fǠ.ffR̘d0rw&鰾Z HB!Xn_.i(O-{~\q($Ċ䆂aH:!xAa{ cWdU4AG+ImK=畍ۀݭ/XK\?=tOq(+{qa}.N A"Aq;J< {zϯz]8!&e50Ӱ,טCrLK=*I;cf}QF4O6^0+$Y.>[֞cR΢0c!s!.A8 IcI=c ȋTT ʂ :ޠ:΄%ovE#mSJݭC3mD[L[@"FICFi _7AP KW &wIl&d~Ir6lG>ڄ+L:#,d=X7ykʄPZ=LX:kv^O s @)f$/ "= 'd,YDޱW$=|+ZbZ%./=YWUA/]}t&fP!BOz^[F?bf~*a]!xH.&-'+;L 0 J9pPN=gs^ chiXzZct `$6pBcŌH=gФrU_?kx`}T,zRà?--N>h~ρS >󲙬Xc W BC\5_{ى}è\0=>\\5l)X8W^ݶTqN(NI,I:-S^ް1v`MyZ٫ysb+^ٺ0g3w9]Y9OK_Y}z`&sޓ/D*OVfHJw|ުɄd [gL;lkŦl"}{˼-z.koz*~_q: F?J j W@%*~²*NVnO]f~c}[CvpqQR:_9 7&@BG>p†-m'Ү"I ]bsi3P>!4 Q.g)܂QA Gyh!/+B8WN9 N,)2ܱgzh鳂@T0( =cĚ1<\=HD#RTcVږ8~TRYQ#6'tK,5 ^]!c#~Ql6<tchͩM CW\g%P&j]}zط_? .lN ڹ&t@e㰚Ya~W:BA5 ?=E&NLq B+G$0}iЂyv7M2ur'c~t5KtjjoŊsОkgD,|z[:dWظHѻ?b놌 ZFxUwTVFtQ YW2Z%)8A-GLsV7TC6 9ĵg e7B#/W͐Xd gO\5Q5:q48)z#Q$iM3enIޯ68dmHDYC9Dt@M$Wՙ5TW_ml8m‹;Y%6.n/1[33|.qV^}ao}dk?`>1f˖F gVŌ;Vʎyaȥf o怞u`"xrHosa@29CGK=eqN*טzUrFvE_w,4vb@7mei&>.!hsBnq]O˞JuL#)&G q'>#4Kc}ŸU1ֆ-(po nB$Nu,lZ"DeOF=55p:n&|SRgk%z{$xoTTi7sf@&=hoyWbk̊-y$z9drp GH2RB3$/jZ'JrmOOy}Zr~@ANn7C$C(ҧDaY Gxj!jLtvqNp'tLWUoG߷ɤH<s#j%wMq 2s*; ̞#>e 8 @T09h!DObdo8>f(\@+GEɭ-@hW}XF|Cb=-Mٙ]W_y`(uFr;++Bkl1EI`7vCo_躢Q[ '"DE #1"gN%"Y]Z_XNgOf+1.p #7z#Ù6,?';!h,4GoX(r}ESxqvw^"0k7!ѹ_grH4R7i/=cqWTwVZٹ3G ~@քsnLu z"԰ C,2ḱ,bh@32e9lIV@!?bC+,ztkűH;h O SkL0lOhm:\]T\,U%HxiVoҀl̩Nf$#MG * 0Yqx93ڡ6 alc&@䊘⼢ܷFaGةNSsؙx| H[QZ#YD|񶼼JsL:y<O C[-.O;3)xl+"LS`ițEC®>JK}wAK# / %o|g^a'7H) |i>L ZnY~ ma0#L-oC?9H̤-:|%th0_{8bLa?@`;/cr?'>h:pVV,-rZ/gy.yiDV7D"s8ZG{_n1lrA `6c:RjC]UGEK`˦.Ym&g_g` Px9sbFr6U@3N ObCǴS[mL@#8iEdDYߴSxXD9OnNJ[.++ۆ @4+)~ҏGtIf6b<ֻ, lrfBvʯBT4Um' /y]ޯve\FcQR㊓"[ϲM>#,/UI]/F4 fTfe|rZ㉁  \#^ܙr/Th8;CNL~悴I?6J kM7h)^{Gm) 7;rF;xg1؝f™-"/D8{#}爻 Q`PZucSWWZ7lxyc?9ug%{C/[d43!`Bч#|qf |01#)nӈ%o}~majg"vLoǼsMV.@.ݻ}P'}^:2oG7FXON.?z-@!V8DƖ:zHe#:yt2a&7,/+_ח2}+&ATp[OK,J`&אe?zym3Q ξ@z ʶ+l<0'rЅH<S89yū#O/}{wY cf8]zyIٳ&yc؏QRܓ|Zhc1)p;ɱU2E;kw0lQ{t/{jn-o98ޅH<_WJ{^p!:p-2ؘhm[aD"tG3ijb|ǒ&vGl )!֣v=;w1ʊ_Q.]i>yJD]&P}Meg @3z|Lć~01 ^ z=a?חHwR6LWsӛwS22M:Z"=̫EY f\0<1H<Uُ<gqn蠱./ܲ`0Y@Kx@Ȭ-6!F+qp.$nq.GyXp<?!h!' ' ]8 #9Nihzt0Gĺ8b (~5#ݣyeKryq>B8xuNySڹElh. lC 9&)-/(?1`x9c_N8Fޥue"Xe[zo`f-͇uϻjƜ:cڢ>4[::` B\Khx_Mw/Hr?+ao'{tSf|ey#@C{o. Ӯ!Kov1rCМh‘i}!>Mqм(SoZ p-_hbÛ] ~<&BSp5뵗`n<W㔎/srVʃ7A^I̪\wl ;3h N)y䉊ȩ]#6{%3H>[ۛPmΊ`[>9tqECErSkj3s<,~ӈ5b*p3io?#,cm#FLb'mweyإ_9vwA"Ω˃~ImjD Mr Elt/LLI%i BQb{ ~n⃺p} ń'ӯC1H|Q䦙a˱[ʎE6 ". ' :o?}WS_De0" Ζꓐrx7sAZsa`wUq+zm<sIK745Gd )Jt41I+,5`PIXqnt Yag_9jwFef蜖S,!6 =Dn@<9MmȜ5lswO-mzk3r}gpb++?+ly(*W+7JؑfbMxztwcNC@w8Eۙ^.! M;f0Hy >1Lb>#<@;lZ2խq'#cCg ݶ%܇k,m^'}uY m_NAAMNX8 0{ڻ  . #dm)DQdrDwڡ`q{G?~]m^pv%htp֬w˴fbǩdYkG{wjyFYc%,||AsA#nMxdYڸ]ؐo f'M?ZN33 |zF_,.C`QK ~)KN`f.c ' þ ]k),Rbv ^2,4̆llkcwz) wZ]X9rz|zƶKST೽:@_;'`rD!{EsX|(2SmµǬ=\>pQaqIs]{mMNp^d8X8PZ1g x>nXogű{Ϯ}ޙKw!z{B„9zJ'xG>p!akj*#ίO3Rlhх$][:Z<\Vz;Zl`FJ;YHUy_3#fVaus`g}-)XBxw~V7!Ötyx=Y{aEmZ=k/( 8 sϮ.c𥰖DHM|& 4SQPN |ׁP. lJ|8{Y!&,I(NN}}:d3g oy }I OH$rWi}f\'\2<>QL'JpQTO+tVb@Wcb@˿?5HsPwQ?#/8c۸~\q8*o^g:l@Ŧ0oy'g oO'?D^[`e6`6lnàWi0:%Y`\_WnF6$PZ [w3}H( w\;5|Ƹ}Gw=T$<6سqRi/ߔ4k>ں!pZsORH)3BZ-= ݃(].Ȍ76{T,+-kkjGlI:7b &J,OSc%G|E tHr2Nym#V-xTFPk/'; 7V;(t<<Z'ɫsbJD jo/p4T~ \ txeu }F#ޓNԂv !ۤjogy~} cOؗVqya1jnVp{gv\Pt~q ]2-t+NX$"I[عfLeνHBqn)W E{ţ8ot 1HWOY2xLxDl̎p7;#'h}g_{SNL Xh3Z|8Y#P}*+0gu: nÛf'@7V%H& ZΏ2x/70bI'0~z!%+ν2@ZXkq0cjho ȏkvkˢg>};|_u3,jEHBt^pLYչPh9:ha+ ) yΎ6,9x YMafWf6ZG6: b$t'.xZ\z2›>y3{Rd} wD_]{ETcb?΋g%!w͚=xҺa)>4v?1>Yv=BJM7 ev6L rŴaZ AepM[|pS`% ={`Ga1d]h3= <=mvgF1=.}SZtMB&o"Ej0O5quc)O,EM!Zv&+ J`٤*l%`ȮʤĄDB*$}zH|2accհeW' d06o]='.<.1΍=s=t7٧aIԖ'z9KtVtwcl=E. :JgjȻ>6W@[k}9wp` ~[t~\ =#=" cn߁]Ɗw_@ o@~f}oNRq:xXx/t7gyޯC洵e%oB?6:*[/N(zā3@㩗n{13?fJ ύm6#Օ/nGm˧zdDk̎+~r@oB5# tחKw1¹ԅ|q|/c$?]`B  X]|-1"vșF!1'!d/쬜2qq߮۱kCOJ?iM7n|{o&%fm"ּ[wx~,gBӊ[:yeL%cͭy'FU _Wf% ƫAai>4a4SCM Yۚ&n~[7W3wдKI&9Iwc]&`}RSB9Eh3yBFG@!vF`]}aX2tQ&+uFܭ3瀫;o^{!YtR|cbPQE|88]LK6B{['Ge!5yT}p#Aa=1فJ "|}f T֊slMoc֟{}4L US!@5fNV7dp L6<;OlND^u?^1 l%BmT]`Zwx_Wg@!!swcJV3 6px:1 p r}}ˋb|f*Q^2RE/l̔h2O/?!s ^!\7tWoRiY ~1( F^NwQq "?';= >pv]k +[zۙ7>2f@ŁeȵO|&|*0P'GTAeլ[\ܝv|sqgfkM=BPr[XG_Xrg~Օ`{ovX;gox2u;MGQbdWe'z3u_݂a&BMzVOUDoNI6Uw.Ԏ} -=,xYx"Df[~4VA[VXf${ZGNA"yДSߩjظOTA૰(Q\zSzh'u̺A1B]9Ѝ髌'/Hod1mvc`$( Q < ;|"*Ҽ; q:}kǃ os'𓃥 \bHij >//HKNތzQDGK@˦g,/C47M)etB#煦R@h+zeZDOf$Ww3H4)5?+͸g}L Ń1(< 4֏lS΁)ʎ<= Y cƘ8à sUVucMVyZ6'1î~Dw,(H*nПXa P l0ERlJm4cvAseoyaѰeRώp7.L@|;֣ mCWJEN[RL8*CqCDv \Bxj8AZ@~G^'`KV`m/M2wZ"atZCA$]P:ʷ:9di3aexRFEnu/#Wa*8z-Z*BiѻFi tB2ޅu]q5MIPָsfjQ83dG;aoT/\YF@G I8Y:'콖qS[#HQC?4: ϱ X( ~R$ "aOCtPQCѡoF 3Ml|YI m{ .x6fc~h(hXft7ӏ*I,!q 0*3W ϐU2|{Q 4o)}=D_o$B$z2S`N Q_nXZ8Xy dǝ0>e2qDYHPs,cT&-lPm33']_Y$rv|;qB(/$$zvxMQcOZ˛;@X''ncvqӰBqqq!y#40M?-y!GS9ug |!6lbCօ- r\|HgR0–rBl9.`aNb EJE}$wl8+`u->= %ÆzR#|=z; lK86~QX2fxYDiF61aSX#NJю>d ЈLnxMll)'_5wf`z  ΍[_Dru ~z(?"T4}8lsxoqPaƣSV\ _Ӛ҈L;}~ -Q쪼>Cž!ouhXn8Ś1Lبc j"H w&H#ٱR:b'΍\Zz2#*꫘@#j`KoͫXvVTrX315ŠvZd%qLH)z2fjC>яI= ^?wKA8^+ۆD\4w-5BCWG 2 ?rEg@n/fEg#8?7>vb@L0yoR<80e2:$d?ǥEǛM F`gጰГ"/3G{Z׵tu:龮O\/xwX+3+AN]S=D;YqҖΗ0=BcÊpIYLNb<qO"tףUОCo_E}] F!M޳(%#b ,gF`W)]0>~3\0:N88lw>FYJQ/1Y$ZɚtA-gf.7''N&UUvN10vଁ_@r4 >r%0Utbėb~w*ל5d"n{L] Ͽn*~>aN;6=l {|sD6,СĸD|(bf33 N3c)?1pOMx)2:LWvF0 ] N3/}T54+'[pLs7Ocx16?}( P7u1u1YBޮq2;CYx790!1y£<\J#W9+ N-;oD CP NưM^NR?z /7E~'m 'ϥ/Y "͈X4WW*qB*(x`Ia 'k|c 6[G,m,-Caym#W7~M0n$\5(6mLaN,~b5y)qГ#hE,"7=sA{5a% !2xV;msS[g9 eqw< qĴJQ~:`FM#ޮwق ׃A+捗8d&FZML o{u {DAi@t'XcUT0AA,N!Tj"pQb޶ٸ6}t~yaT'66 mc/oO?j8iL-8I..ɡ`hv3 _0@n߷9q?x`"R;! /_1=kgwu9~EOKuCw &JYCeZBC`0uaš ~'$Bp\C%m:ɻ(PWnJs"n;#0~Wbp$%zc.aB==Խo4eҐ.BGe`Zg{~EYH@W)b7g+GWopR 0д*3;GO$QSfz#k7N.P1MC$!R(f ̯jBӒD4'Ej .l|-ӑ<ӯfx)`(Dޤ`"'{28K^R:q5q{OI1%1=m aU}&lI]8,teY,^:Zlcqbccۻs"ZxRA j3 q(E[lʂ髆F1U#ć"(l,=snu͞x9ݭ!oS!樺&Jq#<7m=da; \;VORwh Σ޵r=ڸUl88u ) :f<2co! li gs:}וoQMw CO.n# |1P' k1PqS65ַ $`ꈾIY:ұ'#}RDmד5"PHGg}\%.uevnQۘo a&1FyD+(a쬉^fz~~+Xf;(wUsfr` t&h*@GO2=˗Ki۰Ӈ-?07Uy(>1o1a>T "ɡ;2b`44L\?hU+oˡ&DnYVBzϪ72n(1(UYK 75pRi. y!DS1񲸤.>zʴno< ;3kԅ~B1{0kR&&X7~'F )Y鵨116"3::ѱPtP4/¤=R^in/(tc}ᣍ# T*rQ ~7`){[, $]̩Gl~Sǘz,'7/'!Z!"ݲJ꾯}//$HLP>YQJfu6V PG| f-$`yyXY^^6cs7Q>KRښVk-ctA֊&$zIEXwRn& 8c4il$ڄQ爛I)KC8~}OD4k̉77>"w\`L,4Y}sBk~vBaqVs%m.7ÂT  Y [SPT}q J?Bil nؓ&v ̬R_r"6;&gRɗ,z phAF!lN 2QO^[(LD90zL8̉&M,p簹-C;* ʢ'HL5Y'-t-}{QIXU cIK"5'1iN:2l!g xİ>iZ- {yAHB_<ޝIr7Z f㜠h݅Yjsa^-V@Ÿ_vMu ޾_R Nd%j93kzyxz,ڝ9F4w"8do 1j[iV Xi2%uj4-L&uۚH*F:Z39Ja٘}$m<.=solAbG@Z*P YV6la{GM8hn(̶Bs{ 2LL lՕh%7oGBQ(/ 'hAmzbySׁXX z1fD76]VEi`&V`z!0e[3'[^ZzUfm.v5D} c_9.OPCunAm(=: ؈L !qPϮxc81Zɮ ! oMA,P'cr!C={/N%tY Q)Cw'{R@oD!Xb ÇJ$uiSxG'9YNWy_4~?~\}ɟW_v.tQխs{]!s8aMG3F*44a/\~e#`k $ă*3Z :v m_\+/&m-Hht9S?T|]2R~:nr2>y%䦗~N 74vVǹ 0cq?qrCC#2qH 6* AE?lƎDr5yzUyMXn,%O߽^eufޯvxRFAnrKDsP҄ %MJ)_` p]"ᑻClBm6L] ~&"8?5,FSq!ixҬhL !! y9y) aABz_X#RQv~D&Xp/A63ۃ(]|t]K;M;n3ގA."X}OqDΠ~Iad YVyKA$N{0Ʊ1;ZcD s &=$oG:i_^' DK_D=|עRv~r k(ZG?YI'ȼUɟ!sNdfAi{u.O- #1I+ $e]1qފ|%CfX"`:Фy%& 1@T %: V5o|rJ>"M^ n y fpV#jZ+Óh4"zz@ aKuw־a4֤p/goQ[i0}E#:!ku|r PE 5,+2B0-~,k̏. S;y_bL q}8q^T-Jh@scfld=$J*Ji?F it:IazhHKI Y5 F- bΓI=pR7vXҠwτG/x=H'ji&Q8jk?nQOTGBW:07E"yĴ+B?}BDH՗@wB>@CCe^Cgo)%a#>! 2# aAIUVOe:|f2Ӌ" )SxKtӶ{k B;0jN`Oi:@ZԜ,i0Ƅ 8/֓KӚOXOVqp |K+mq ~^-SA屛^:dw6QCMh/np35,<<VG[!I(xfNBl] Wlx"l|Q_2^}2oM<(Yq}GʙE=@Fw0Q &;q,"k^U2}k?`'ˉK`Qw`Hg`6Ui`QsP]s";7C2c¬*6&]#ĢT5r)P 2d#TG@PlfTe&)@TڶD{>/*DZ {oVUX5]ua+²}.?s#q`xEH< <1Ge$#ƈZz~r/.`WN.YUڿORegGOo?3HF㘘k@uP:A*DmzVPJQcA1v>+&/[Gtn})nvXBVBMq"I sm9@k_5:mqcv!emKfp$F!l$VP֤饯h*9g2:l\OF-zx[\|$;3—adžVi3m F:`C܂+\- 7m3h$?h=C|22xUW<5XFX *A^LabٴRFk/G.!%J%nKH@;gJ1.]IGP$,1|+ qRފJAE/3nOΑM}NmJb&4p<6)r(d2ԅm9#uŲ|QR!iZtohBzqgK[A3YC$?!%3 y ؀aPϪZAMoPɮ8Td{c{w:fgWwy\q'!dՅ1[␋sq2rܳMl00"RvY1OdH:?6[Z 6 Y*>vÐ!11(x|nI>peX_jŅm@@[Cu'4{B9ב"@L,NԘ,dց3B/ڎ f >D$^7>Q{Y7375y#ኧ қ2۵+'W6hcePWH]q8l+G Τc$F;`jVMb.#]2 O_8d !U_e}ZFudBB3F@mዂ-G&j/_jWq* FObiUxf;"΃Z2FHs;"wP#|0QX]!,48/EedD0^Xs񱝕-/ץ>8"_Zurڔg)k=^fѯ3=.~5vΡm@+r#a:[Iy}&TA?b h׻ρ'̏ !@7~[D=*eɪhy)FҺ'vYɚəP2{RC } +3hGҡa}BaK($7)Nnrꆏds(p'NQ!6M6gy^59{qRɍGaw鬀S>Zा OKb~_Uű )i{t0fbFdg_G9T!bW } RZo>+=C}:fz_Sh0HJ8Lqɰ(D^ Vl!Ւdi`VXhʄIG(X2`zd>_P\B>4wB̒Z#8Eh| ?L }]h6npx:W2 LNX1j,9 "IY /:Cw*P)\}4pDq4xւAr>?sUʂ>B 񥙜8Dli`b0|%xH6IJJlrh@8$MВ͜LB^pz_W8)x᫊"o( +KT$h(zp?8/}dcdfÊ3CNmI Y Cn\\*ڜ}ۨUc#KP/``~x+3Q#\悢p/jk;gZg,?@a ff48YTSXB9k'f9g}`<:z}ײhqS/hq;]G; toMsQ =G^uq[ist\.V!%(\,L}8ێN}aܵf$FAH$!r/ԜyoFr࢈l ue. ן{@ۚ=ÂHT&ƸB*޷}RBĊD}zIQ G^DG+ ?J|B3 ֝ 6ִ U5mMFk1ӌt 3uiʼn)Ʌq ;v5&떌޴!aHn4n.^`zEA9"CSRPwy3=z 7=,$x\-A9-diezxeLUxPH^4"OA$Q0/锐YKƇ]ᛡ86`VSkn r8`<ߙp, _Iu<;'N+1G aHBׯ"ϗR8fc;¯S77dž H9NXS37J&}τ+.k"UA?8"AlX~|!NHK( #A)p:*[4ڽA{w B+gFws\lغ+>Ί 2ű!0idr4v+Рu7,Ԙ߸Bk~ 4I/3VV/yJ Yh$W%lqpO Z̙1=yFҎГh_OVάIX[jܲ] p2Ad?0Mՙ+|w>0Q&3oQmRG!Qr"ol}MÈ <<ȘW[2upf +/֌'+R\[ @_}\D8y>fuְ2soҩIG;0's'zz sTk>)~S 7^{lh]UO<(/ =0HHpVko&iq])|H%^*]oU]/SB[?RC N:=|#d}AN.z<bC*a^i%AY:v WGCpD?=el!ěJjjk\}PߡG.xy&"^GK@Բq^$oi6#+TRIi0J#wh./^ia0_3hak8I>7"79<}ХA&oƩ=eF:x,Ҙم@ 1ѪQFz_@#C ;FfZm`CTuDu%x;Fsq UV@Mab=VlEell6Z%71ᾋ/@rI+|{LMKipS*͒Ds%GS_5:~v [C$8=C\NWgæKM ϏAEfM-hlk>hrgݴ3Ĝ͂Cw x?/L=y7aIb-]`|&2z H#m _=B tY~&—,aq{<_ws>we۶m=hÍH/(p_A2p UL '+Ѣ*4`4gUs<3(Un:;FT6 <)?U<'t5hRA~ͩ63XDxECݷB!`[9){r{.0nA #e(́]u];o16VMTA0f~MabnI֩* m"ByR5=1ZJy Nv b.=x󢌎Λn1r7pV(*'8+.6UM`GF褢ܠ:j^5'3'7`խPKЎBGy9!+x勇 Qo@ɾSؓLG8'> ѢO%#Y69z5N 2PD]c{|Sx:odb4mЮW˙Y*d@v!:N>2i*,$fHVڲQG]gװ_1=un:*`lrXNrC; -9XCTmfSO+]5TI'ʦ9!x޵ 7.9 asiCiv=|U/ Td}Z+3pȅ¼}*>U^ S2[=QfըyO'Mw֖DTAk:+͟KĢ#̃n-&v7 IP8Y0Nɧ 68i?ȷ-E!6y0^={W_͗W!}F~.|!<a"! 4ڂ81wN|">w;NVjFKtP"܏B02Hp D~/tdeZ=3]=Og|OCEA3v]zP?Sy74PL?K=4dԗAf8>2*3F:lWǝ^#ԯ}0FWF!۽2F#ǍCOcze+h10d$1FWF!۽2F#ǍCOcze+h10d$1FWF!۽2F#ǍCOcze+h10d$1FWF!۽2F#ǍCOcze+h10d$1FWF!۽2F#ǍCOcze+h10d$1FWF!۽2F#ǍCOcze+h10d$1FWF!۽2F#ǍCOcze+h10d$1FWF!۽2F#ǍCOcze+h10d$1FWF!۽2F#ǍCOcze+h10d$1FWF!۽2F#ǍCOcze+h10d$1FWFBgO>IENDB`PK](:KU-Pictures/10000000000001C40000015793AA9DE6.pngPNG  IHDRWϩsRGB pHYs+ٽIDATx^]`Nޛ%4Ʀ@ BL`)6ދdޥ~7.ٸ{C̷ۛo޼y B E"45E"@xdZU/S|́e({ߨ~<#lIGz/K}O:Ͼʫ&Ӗ`0r8BS? !` xBAܠ9<GH88j4Yapd ҧ3ɴjw-vF(1|I U\l4ɥHqlB!yo/H\*.zܙ_aأ58\hjg{VWf}jףJK|lLލ@fu̮c Zw ѢNz@˾v=hλncwz4;Ow]1zw/|Hu:Էiհvvý7>]Y=PW nwRys AңI ;#z#G]{~Zܻ}`gݳuֶwRYװ ރ#ϭΆ,|A7xp"|~/'~ ~/ >I!W"SߗlJR7wA6mޯVƸj~?Yno~?VJ?[/p'# W5=G> A2C$[gW !B]n/+db{Wcp`/z1bw;A0WŨFW"Ary2q0x~LG0z< ITg/L3b[qeT":LrE"D,txGd"vK2qaajxYw"z@qyRNI yOFj痵.!wAzaz @HxKȴ-~ˑiٟL{7G48V=Zzz=ȩ[hȴz/Y{Ty=fJ(Sn9 pT X/V޹pp7gϿIᮛu{v8`\R}QR~_'Fjɴd Q $yf~c0 i+^ܑ˷۝ 6gv܇@|%N_#&~IDtB.5%'wHkᬌSRnjtA2qy׆K2&3&%k2Rz@0j |ކrD$A;yl9GNdV [dEuyF^(5v'Aݴas jjyݻ`BJ ڈ3SܿwII|?F_zo?wzGFP ۇLRHyYjbĥ IK5[# 1A1?*V?~>xeŻ{_/ D@h <'{ϿZs:b\()ZOf@cOseS-b~{ 7GtzQW^<=+E;_ZR?\nf.xtŬ9掾鳦BN|͟firO\[U1oz9_˹W\4zu@Os!P|E3,O>xI2.X0fzcWx_Nm̅<R)&$M^\9sul7_9 tUJ%S`}ጉɑ,tպiіDBD "G5ѪܺLav͜9SS&Dz&\tjzRDt HB@~CLKj [U w_@UIn0'& /~Qn'oϮ{ӧGٷ_3+\PRnsFO9[i@|*vJ='\~^y^!&#L2!ƨBMtJ[V^ [oruWxM-3O)+p"O_ϛ.^rAkKk~Y]ԅӞTdJ%Xn(vLqBG{՟g!(7yDG[;>zU]A"C/9oT*pḥO|΋Ғ"".=5 >kb4KϛpŒ)i1;T ۋв%l1# rh\K. Iǫy±`iZR.4}b%߾xފuΘhȿ3rQGB4xVo@` pؿ}nK3_-ܼύP` M {ſz8»[͜]P--i2>a;J&dBhhBP7LJFxbJ.F)U+$s&'M{1 -/1el|BFG]ѻ?X4}B"rA@DJE"p*6 J35qVPn4vgee*27/ Ss+$䇊y?n Y 1i_\o|T%UxhH5tyQJJn, q??y"cꂅ㮻lF[9;~Vhnv76RyRY$W^2>&Ux냅 &/2;ܐ 6!-BQIB>&Jw]hsz'⣶olC~[TgVWֶ'(JH@F o~۸ "T=?8;RA~_׭^LЌ fLLiȖ{fjNeR124Z\~ʇ8y^86Z[R)$0LMq#r%O{Ͻ( gqh4 ɊYDBh2xg~bw_lڲ=7/^/*L_خ5g+\N?1I"+ib'7>ޞfynņcUն$ɮJK}Ov4&E&&FTյUbE| FNZX hj3}j_blXu~Οh Z%˿KO -h+h5lnq4^O9mf˪uMH_鲼}WVOo2$%D@?ܛs b*ѕWL%뵟0B8d"!Ѹ<c9B~3*WUvTul[YՠW˳ [+iԶ^f)lŲ^|#aq.1352@AdAAڵâ;iWϢ(0!: 8\6m]^QhjƦԔIǃYmy'/la_mXJkL{F]ORN}Sq$Z  -NR ) ebK$5.`Z&<~&T `Y?fPYB~p b4&p V[@FVCUn^h },8i7V xr cXZ[,Lu"d@rhGMwRhCI>h]"Båwqv^/8j4QަQ}GٔMf8e|7 }gzkסRΡQ#>NC84p8q; Y( +YA;{'s/,"n\JL[kN}N< 쮕?w~|Q([q{׸׷*s!~)~Ovĝ$a#CԹGN3\[:=>~ߪ C\~=~݃9y<u11\ޅvtﮧߐ_~} (.. GTjWߏW,&ȧb!K nFl#*/@[ Fe퓺W#HÚMGնTozz8F ՏoYwks|ٳjǦˎQT;R){=rdu8 |ɇFRAJE"@8X4bvoL.f;J$`"iR,cZXi $`tT cWEEF"rWpC>|>)JcPI.7\WC*HɵquQ1h8<%JS2ʂ*:GTJ`+L&%ۭ06gh,p`øL^O4Y$Bk|d64l4EB"d S+7LXeLCA%uu{8nR(WڨP--ľC m)n:hXI~ڰ#7ALG xkUu-̾"5??c~0$L>\dOd .gav%1[-DlFLvaP F؝d(&wAȓ#_D\ bR_ *+jswW0.-"rq_ME CL.!hf o۾HV޳dౝ^֖"0,\n2\&uX`19ϾS UW۟WYD!.ѡw\U!ӵT䗜}PLá"zB̳Ͻ[PDPlݺ#--)2/**d2N[P[**.%?`7cQi7mMn;rmv;ALʪj.jj M&3NXlE%>0 `o %6@9NՆRt69+VۉF!#6`Cԡ.,Lڦ/p ˅927999y{8wP(ݚ'H̖žo|@/ů}Sa,@85I;B =0$t,&؂}c v@(pbcWԂF|]U55:8w,NDYa= Y--mzojje;j[557#ꛘ_WHBAűquU5ͭ(t7 ֧+t:U-wjӵo۱+?hhcڂau_= LVUwՖ(}(Jz͏ ]9\)'1 y4 XLu F_}g_ٸy+^QS&ODPp:Se*Rsu.VuRRR{~^=&(k9V}fgo y?%%&p8a\Y6L77~NHx,^oԔh!3-Pd1¾c\@nӆ-Ǝcd%K/Yd}z$ơpcq 80dVTV_t srt qr{ƌ΀. @1ܸi ȉ;vC),.6%9 -<@[}33 b½&$脄8쥝0~\Yi9@%JS csc$<<W&">`˯\^UY  ! Ȁ-۠7B` h5H|}\B!s̵ΈkZԩXbBс=mn{tf&}dPw斅BR>P޽hX< 1[MO:Iwرq|08`9yK.6AxbwXaf(8,5Shݎ"~B"S{\@\rD );#vsQݫc.ImArr$&hdR &HV GVB$ȭr08 b#&1Ek5apVUUMdpbLt4ԯwrnc}F_,g _4 f(BQs#@s >4==;n=%91\:gM%ڠQa `.L;߭r"Xq M&M@SHCU$Mf  o -r!b71/+zMƋ!-5rCẫ̞ M1ݕQ[0uCԾS&MD|"J3BwQ@Xi3&t  ×v)~DF+0!L7<&Լjd^o@>Ї|An041v- 60́WY \N/E6P"(3Xԇ Zc-XAd rk֜%W!qLDžBtM-Ǝvx D\1F0%BB!,XK l+`gŭ#Հ|n5lqXXchÁ{-Aaɵ %8qJ/ /8*+0YT~#S-jԠfNtXٞ 3 ~: E`Dxi՝j(2[-p)?b.Õ{_ũJڠSleXG;gx\f-: &\ PZOr#>X3&5AP($^ mBFaX8ynBG d2׿;r nQ$?hTCh?ĺ9%=Ȕ8gXr:ja5LPN>Ʋg= R*\xo>1g=93\B]yqR{حG'E#w0vRžeLB$_7]VV*N5:>C>~E:G&P('  6=V.]{'480|FaҹdE\jXJ(9#73L:*BK8#h潬A'yPXqqB0cIАV8*}t&K!QAȬXᕈ%THf^,.Nz UC-9`X:?tye –a$.TؐOǖ:`cr9 wVYK* FLd˳8c=F$zH2uڡ4L n˖iiܟ{Db?nZU_.2bbl1W bKEfKE!!0>C=`LTX1+w?)̂"n2\83 ]X]>; !—\t~}ˊ>JJNFDVVxoB83 0k:1D=(AXEEh/<]k#Pdv9Q j`c!P!U[qBbo"sG-KG_pq"瀰֘`8f==bे5ȈL'1V{0Q)ɱ a ȧ(VS <և0vy~- M'6E8eৃ[Y+f(^[ vhO+)Q[#!#ԿeYmj:3"HpЀS1Ԇ63$S8g:Mى%oe95`PN8GG3k v;ܪ!m& ӷ7.=` ~[n]SIm0^/2ew!=\im¤u1cZa-+p |߃? m|gJૠ+42"NB\Dց"1' Zߗʂ#*+"+C>|JsA[1}up7M%efB`G7~z㨫I'$08A;ma_͸7+|-)3 0(8|8C QW&Xfr%MTj"2,ژ*x#zKMզsH>hNHU4ⱪ*?ܯ.ݥwju) 9Kʚ@dʺ@7R83,*B,Sgbӟ/t.0luz_{8u+$hVڡH|GI5O¥].;)Lu>ř}8@;*Gnl3C!_(ÞN:Z'+/xg)D۔ݺ#{3P̛CSΙat}q.'ύ1.rrr6n܈釨{EE<|me:Iˋ u㙱cUo3^dO6Cgr۬mgnz0-{v85SCE4ܦzKC 䇢xfbiZZ|s. $"1|hzyIN6WB{.بh?otX,i{'ֿ@RT ,L [E''%`54 OTw;H^? FJшio<`۾y{_G>OmmW^A>:*|9yO&aR L 22rҥ?s 贶 t7o&i{PpTv8^7RxnPKX3%'@,f{n *:*j"̶VflkDK`A`CcD0g!V2坷xD*?on\l49 PIIfgP,"y45W.LPz5)֠aQdVbNOs7]ݞ(תʚ|w_G['MLȼNW*5B`be.hEΠC d (rׂ^Z`ɡ^P(6;%զ]ve K/X3 E޽.B\ 1nNV(ߴj u:[eljD, ,Ly3S/^+PrT!hFm}/y€D!*%RT$dLtX\,DwP=z4ª*=I9&+@p>s̱c666N6 ׸binn.555u޼y L *yIZV=&m֯;.#:35J"'^}Kv;JPT@v}Z.חu,.J#A zhF` A2X⼎:h(jK}A9F66,;!Rw(`Tz*r)J L^`@E"I||?d"RFƩF IvDh[8m}sO[;CT`U㪤MّSBaX%CۦPcbG#S, k9P}XPd!&CF؀mWB[8^p@i2}DL"VkrnF1Kx)Ef(?f'n쯍3 &?À#x$}t[!{=Ks0C6GaFCp-4mEjB|Jdq jX8(#ӷ;& W%Ld5 xӧMwDdÏ!n`/QqF{|vD˛mA e{;H_EQlkhhI8aMLŹ#edu;~yľ+B-qPCGyU%?([L=BhjnA\#p= R@+/BNJe.tk%ً,た${QҐiFp` v , Y"FDe %C ٶ)*"5DY=V3K='iJ ] n3&<Ϝ>rҡ8U wJkKj#eL݉D^(dIR0q1{B^!#P1(T xaT˫IP, 9P(/ S|Tum=~o9;R%a=@?_ʪ>iP(g#]͈p g@Aosوm3E"@yw bs?_;I^F;E"@8 `CC[{Z34 H5"~xap.6"@8YH*BB璪kWWzg^s>H8CbZE"@8 @0 HWeSEzЁӟvŦLֆ=ckv_p;k§LZE"@8#SXzVlߘS~T83a*LJr|?nhjj|jXy{f bc%|DjB*|jjkq!LJvBa;rab{|͝"@8&P N*kM4q s55%N"=tśSRUfoڼMQϜ1@Al7vtxx8n&&''%r~::pmcC\L4᧟7/:u2ƉV"@F`H) x-C*$ Dž],X3U` 0)OP!$A,)?>k11!ݹk{gaaiӦAPMII^ɓ'^urx?gr㶝 DPNkN=Ax00ݨ@.?fEp;U$ժo޸>[sbbWJocǎNJLZSShhhLIIw +99v@PN{Nf$䅤B'8]zaj eޠPp Z,vڋ9;;LM 85kT8Irh)@O6Vwp8Uv^Z|)2Q(>TWTghmnmmoi(X;@N(E"PcjJ%N)}l(.CPA o{7}2(Ng.Gr6#cs⑁QZF0rIl݃#8JBhrnFob\jQ FF(`Tr&&Ggg.FE0-m0f=C*f5LDy}&JĆ3:'$cd"&*]ǡ,Ou&}0Ͻ~5A%=N&)IDZV3O']^/c1*13.o~qL=ngGkL!'Gý~(h4YXis;`dⓈu3!890񉘐[Q1Llakv;HĀG@&'=|!.a+Tz0}] OSfl%7uLH:\TD=Q/ΌIe$]/_LD[ E4-ۙ gbb ~}tΡ33qZLqK}qR"vF&HGUgtmLju8¤VOD >1";[4bh~.1Q4h4#v `Z[[l )uFJnSP%-@6njk}dO]CyZFpg3͌6TU Ob  Z-clRutm1G%am*A&ֶ$2)bښdJxZqL1MLKnj֮r˄q# lnfTbg:c"\PO9)ѷ6h£RҴ!(1S3:;' LUf5DOHԄi5ր>I g%*SPxV[t5 &)cT(C=:LV&#{O ?m:&A$WQ4;>Xsʼnh~{ͯQ}32B1r8V PĄpA=U$&$ābpPd迠.*mtSMILb:>E8fR!pDcUq0|JHvpHR d d~gd_B"pFH"32QJ(ΚD+TLkW%'S&fZvjYJ Ձ e|0xMVSK-͵ͨ9-+#\8Tz!y^"ET<>{< di8R MNgf4&*.Z (UJY4DF@KYsEpPtmܐ'dmXH5V+4 `k]yxL@$Ҳ7V!OԐE'"3'2&"8*1565$kl'D\lG/`Y9^r\*WW$gDD &mm;hWhw#?>C{~`ݰV7Q EJ#NxR@ X]T\Sc]NgsM5 b4V].KiUDb)1я :]MIH1e؋e5  ,f+VfW8,FRomiA2q0ۭzRYP\[B!.;rR7NH)e+&NIQ'&*D"~Rbܸ\m[}{ [GHres,P ~o \G=$DHJ09u>${BKv ՗A| nU_^`h1w[Ѩ"$)9Px2]-[1vq<dR+,9\\ 5T#FMqͤ5մVm0 ohr:8xr_Qn@B) ʚz]]vzVSt " OXPtu&Ί[[+qڀCvj"s; 2h~GKa@h>_T=!*>U*SVf&0t;mxQBA?ĬhO_T1H0(v+Z.0i/pL z3ŧdocfXd,xi(‰Byƥd-FP"Cw`L*11;:1X Y ´1|- zv 9)ڨ8LN8((.90T$19XCZ y](K KUqG(zcc6TP `_/S wsu(Ez:3S%2%b̨t15B]JH;xnK*(]aSk#d2TUB|^!D"!1"beGd*5~u:lڨQQTq]@Lf #*!%*KkXQ1 (O=}ِ,P<ɣSbvJpZKHvaҁ݀bp}P\ַħշ֣[E@AZC4>m [ڄB!=y>b-r4VUaPz#6:!#0m H"FA׌H*,bjoo4ȵqd7AXӷ4`|VR]8tU` BU@ylr u8Z.Z_c^?ǰ("寻.}„)SbwP1[[UU3.ٻMn}YE}E^6) (ABs*eB83FMI0>R0@p"EK]3fhm 5c1f@jyndUFu`>j_oF˕䌦B-)lfoS)[Z 9+5B|7`dLl'ȲDR-x"0i~# cNFev+H1JpaA1D)ZUxc{ Y 8 ¡ F>LxXO9Fn|>=Tn $$4B(L V`|F$ դ``xC V4ĀrQ7TI<:hzdL M eTñw^l4cx aXdp@H$ġP`>^<*=/H h8y̴m In(8} !;SD`^F%cՌDeZ0rxcDNYe&g r֣0uۙ $d $d\#bAwi8c9'ecSt |Yq>ި҄9ɼMkLf&_{/y`i72flQ,3UX:"R!-B͵u\43%B;!~\97*#2Qn-i$ٺYBA }/KBbv> tض#f j% A4. acnrf%uy\n/0ٗnn%!SX'~N  w5E8'*!Z8]ܣlr6vI }NE6TkZyn%]=vۈɔrr:O 4Wd0Ұz@CPlD@-!SLŒ%c/ mL.:Xkky.09NLAv'w\0o1CZ[ ZV`G;$Mz bDEqx@UEY L\W?FСgaqٗ:Y4*]cIh&'YR^)vD2O*F+}<@ze;حЬ}E^ݧ`TIfQI$wFuw FP]>,u"⇁Wy;X8ٖ xJ9&D?A?1iO6Ǥhɩͪw;G,rNRz` ׌tueqUqT9&n.Q=C%CƄȩ HFHN#cFZ܊ Y2!/˧ȋ1)g G3k.tY51BU0)xsaʌLtJ›Tr4 +In߈$dn$oH#QN[1BW#v_# # vKg`I a-^f|j/}pWHhnS#3HnTvXOic2Z|wh`@p1˾Ӷ8^&Z[`0xgLciC(C#0B2h-Ca|a;|Xx0& u?}dG,o|Tj$0ɈLih `W '7Dz8/p&=jY AB:T|RcEЋRpa?9'F> /]Ǽ2+nX ԯ$S$ 7fH8Mbv/;5{ˁMו6ё Pc dW$J=Sk/GE.I.!gG/mm_;Ah6Ut#`;{@*eV-ئԪ1l)F⍉ ?2>6v Gb뭷Y 7ї]3_PSj(6VP/^X fX4D[`6<S JI 76$k,zȸhXbv7X+*,b* o93jbayY*gƌڥf}7BKM^V fבpVس7O6.wqi㳲sjrsX,8 'Ex4\g ,ڷq%b3SC'!5;S oƆT\V8SGREv^/| 6Y"-~ްRL3W,6ZP 1 mF|hp.Bs 1:g-q/[cطO!=Zenow=ŘY_siӰ/Ő8%x#ksۗ,I?b׿4<2 7W[6_vY C}-;%暍pZXh?ylxʞ Lx wݵkx- yMqWv~>,LBnO?Hpk;l(gÓi7 co2v"6G$Gʜ2[D]0ku#,%͵ 58@r>/#ZmtBĖ}3pf$DXm!DȞxILR* C->q: -Wx'B)X&Öm8oto堘>=`pyelF %~tf= /L_,88}XwFD=;FMe'܁L b_?qŒرaw1R*Be5b =\-dIbXɕWO2QZ-E['uƊ|бHcӟ&`^050ffhs6 FB`dژڛk=0E妛2>_յ MALAmZS3!.[\UeT;wB [\lB)y_x@?XSXhd:eJܹ1. B \ĄmȤd "^uuw~( kTG'\r)IPp;~H s;8UOepJLT˙C^sLQ cfe^9ȹo opKX63q. PiùQ BA" DNE!:9.a;ugJR!R4Q8=q@Y8BlG!A4_\ IG.$8_(^q@!{`Z/JAE^c">PCT SQn?7=T.V+̇VT*R\0ࢤ1.ى9:ᶓFĤoMpWN(t$V}.z~9cgS]Xr[N6@R:r>%h5𴖐6Y29Wm5pژD5!S\tP@Je 4ݾ,"p!zjhkGtynwXj sBQip. b$Nd}Z.sGukr9tI'`Z E@jpd9ɩ.Z E"pB8{OhiaE4DiTNö*S(c`D4Jɮ@P(,dOS#4V41Ch/P(`mm4j;(ED`vLȔVD?E"Ѝ_!H M9+A0)$,x"&=!hB{` 3<΅Z%W3>jrqwdb ӧE GUC@uw4$â]WBnMĨ1Lr H 8-3u4IXL U`z>;B%.O!u*7hg0ǖ9(Y4pDkɑ9eɹ1iDk30221Ӭ')q;-Bn @>2 HLPL7&8X8&7H"q$ 8" CGҙ)4"u =D1$(uy]6:#sTL.cZ;H0rZ$:3k< YRg$4 wzILzpF*jx8؃&BN!EPTi$RmȤ&+ibd1VR&fT*V9!ǥ(IL^d>EݐІ^d4u=>(b'JId@-#4 $ȶ zt`td.FnT@EL1*PD|Dʠ p !Ϙwr Q8d&Z)B,?|p iVQˉ7Eѳ  4Hxj TxCV'TQmp^HvdڢPO-d^ r%m$H49Gidـvp "?BfyG8Qε9{̠62dgِ!v/Xҩ H@[[XlH@=`"w'YLwnHR>1 o%gQI>h 1!Ё ȴe#` Bqh#5Auvyh!& p>n"\ PzS#pZ J+gZ;O{Otjcsm&78%i]vh빐3pe7#sGy 0i탒cG 'acڎy7d7"@BN"~!1Wbv Yg܄1JG YHs{4@"A)z ^qBJ* DN7GAm3ȄQU4B1$epKȤh&`gNT' >%i. 6Ր.P  x:e`½/'DZMjF_=WԄ#M.g 4Bh`7'r ^Fs,Ah|œ%iPv@pf ,=A~ @EZ121 brz@2:Nr0Szk unV7^ڔHp8]SARIħ*6HMd%Ht^%3YCdCLI5ad;!bn  =$7 C!jcqcY8H5|6BTD>Qz  ͭb/@&GdPOCO88 Y>)@.C8Tܻ r0E$PUY qt@no~ASLd2g9q@-"w H nnMlA`Un[ELD#HZ5q,(wIHřp8Ef>܄g%Ep2uw[7S] Q| JTz7Bd9-a.V, j‰D*ϊV y0@;ݝ'Ug!xlp:_9'0p ,rUQBۻ` wA@7ɢ,Lxl&oDE"!@G3|  n+"n4X@6>nG*=!nB쇳F"'r?QȶcA"iWt.{Hga4J7Y+"NEy2hڽ7  !r1 *80& Y5jUPE 50 k2m `)P CKˀsuCtn1Lq5k:(j{U+ ~.Nˡ3#pq} E,u׶ݿF+Ohi}jBrjRwW`M'%0 NMe7ۻ #R;sN̅Zq3,4+ Zd? Py6N0N)kPK2k^XQ,fj\0PSQFM$SFÏ! ]lB!(&DU؉\IjId)>~L.fv'tt6;Tɬ7_ SHnHٓ É#i56yVs[2EW= EV@ UBHBQ"wj7\h ٫]p n*l.nUpe Aqb. m$VKI3:[ݧ@]'xCGIh@c'91Nyns :I7!Iݝ80KPR"m:~K( U~ˍ׼|)؋Ls=A9C-&3jtlrk-5m WN;vЁ3H؃sld:ʌD.76 Sc@"'b+1/ǻop$DFˑɈ;q c'D΢f2esRXS}^V1eFRV ,׵̸5jl85ˊ[PyR:mv2x fNV{SxhNPzFLJzrhV"NXbtQÇCA?cnTFx(`BHzd4l45uZ<ٍ#V|9pաF=ӎ I*mTIxSg&iH')kӷ[ysB^ ikLYڒZyDR<`bDcudo9LHZ,myCK$K.JF`*$&KIP%9;۲*X4d0JK*|]֡#yuJo=S/4dneo!/J3b,[l%O3+"9^ \|Ws w4K^[l ɑ˗'&џC$^sbĨҚ"Pcg. U.aƘeޚ E"хGF j `z4%AEj_;ii˖ƢNB!DcMJWY[hڡwppi#TK&I<+TLx9M'\6f)ER/@V؄e˒ ~,EN(DqWuECzFb-X_bZ|!ӎ6ߡ~^lLm\ST]UqLfwzeš7[G".Y.e|[LFEpL$/13d^4& ˖&7TrTI̮M;JpRD.csgb˖% Ō[lglx_AVSS'oܦ S/ODMΎB/K: ZӚw sR!C2O9.qxߚD,(!:$HYu:nhL~Ijl]D)D eCƱDԜE=gŗDMgux˒$R P jЗIp˚C*лdrꅤZ%F`h U&vN2mnv\uقV蓴ֶ#NJ=Y-"@1#֙BAH!.{ q0zzz5?^àc?S Z䀓AԊ8iE"p !&SD^^' 8f`xJqpŝT8ݛ9^l5+oқ+[' !vesDt΂7.K=`wMS%jp˝LEE"@88L2{+ii)톦|$t'xCuX2xb[@Ȍiw9z%{|7orJ!.}>_\n *~s~nԤLNA#>pJM+C"QP8V=vU{Xg{Ofs=Zk~=mO Eҷ~޿޽ ^{֏7W|t_~Ӟ|Pl49DH%֖޺\Sr[=S mE"p!0ѾBZO?yloJwm~la޷V6sL_Ɋm쨤Q Nv ?|s%;^_ ]hUӧ-[sJ'=۟ͯg%%;u BxK_(zGf>INW;ZE"p* ЋL!cb 2)8J8@IMi6VEv|4M-%۳3"ǥϼpȸq.߇أۥ!ngZZʶ@,HHN;s۶MmUq 5퍕Jv%6 }ց"@V1 ӬP0 2s%ƷǢ6+Q,y0~tމlMY3MŚ$˦D_g~FZȘ>yG}Vw ڻ~w^z|Kf߹+~Cai/PN 6nQXʸ7~N>~avQs%͹'z.]tPEilI2lqR[=q|ׯ8wQZхnp<ܲ]MZ\uNW7Y1(ºf ׅee/;Wo޽%w$MhU#ւ"@!hmw4*yRNt\Gic"c#{}O(mKg]NɎ)| >nL)&)!f0[/ݼ!Y2ۮxn'MR)冦]"%v_\愘t4Q t 3S&c//{> *څ)S^I"Kb!':ads|Onbatӏ#alŬzCAL Ԋ_gYv_"QD s( r@2G;8X\1 W*ntF3TOv^dZeLk )g;#*n5iwkws1pY_+Y#C>eO"@8L"S8/NNPN 牂zڡרj5*#OFzP(SEoZMGBt!FN%{XOVMhM5O Gl;VɴvB!)O!&105DS㉋ ?ÛJwv#p4dj3>2L0p1Io'\ @`dz4s4.q~iۏ1N.?VTp%%>0"Xl491n@Q`LAbu͍6W7aې+}4Ճ iq(ry:(\bgnO6"@8iT_ߦ7~QBƨX0_/[O݂a$$$FINnElWpb\5 -nJDeT"!>txq_)")[+\(k\Tz"EFȔk*#q. ~ӟyWckx^%lŁr) :ݎ~ e5y~xޗosey멢b4ުwz MۇS_f{&R)޻s@cn|pxy}Q?b>YYCy{5 9$NGO+OKBmSYJ%2An1sJϾ_z[VD~)Pp0u'k^mZ;V~Ç;zҊ>}OgWW Cj7%~ )dWVrZ쫂ZT+)n?qҎSV}^XÚi3_W]d}@P!SrRb.J~siSSb,6k\loy4&2ޞ, .J!SN;ww\gD1n}s\qS2opyԪxf~i1+a9G\|trrм{X d2H$P(NwX[oSDO3nB9$z=n_, E8b26{[?@S*UܲjjBt *96ӳZ`C͟ 7Ιr^xBn^WbVLI,VxWTy`nt!X[v9X51q;rtB! 4=Y=~bT#$Rl>MNE"@8zO>$R,&ihVԃo'%:,ωk2uKwJ0*i4LA!Mοr̨bK~k˘1a BMIK) 26W?nzJ!TTHEcEQ$Mt2%U;yj鏋S]8e_V6\Xo p;6#19%,}T823.J.%>RbJjm E7n7Yv9uN|YٹW]}5nv9:aw@hg2bc =\d$^+?V2ELb=>z$ΨHOrw>DF4D(Fqp%{XU)>)B8[֪5{n2~š'D"~bpD࡛ &QB"pz!ph;`40섌p7qBı;ɯ *qb/\*X`+BPs@ Q4ZKg?'3z"]ɽl&s="ZKǭ&#U.$H=xxyto@F㞞P2=3bphS 7 í:):0e_8Li3@P)8s)9 6"@8;8 dmn6 ]ˁ ZB#i))'Ag &I^q5+r{*(]ZM}3> '< LhPgzN~-{{?ӗ޴{znOΦ4ʿ; +~]Rybt)6SP"f9'Mv"#""Nb5h)Mwf%Q*k*^Wr/95mӞ.={Vp;})<{1DF&YwSOcLOcq3j uuX/ ۚ[V]o+rόC, d"g0*Zu8 d &g(m<쵛BqTx'_<_X^8fۚ/m *2ӎK_*%eN8w cI4{ҹ㮽.8H0yi̜u rNd*$Sɗ XF*`|<^^J#$טCZ LlrlVT /WSo嶯glnmue9o[n[fr~/ U۾|];{<F |8&N.B' |5CE"@8J~^\*8J8G: (pΡ%JL(?9ouE+/tگn:vB/9'Nh&LEEfDsf͈C(̻b/çޏtXј5#ԙ4uw>~gW\~~?J\8T"evr3\E4|BRātiΜf80<{u)t T-8i3R2ѭ0gVt0āY.?9$>-rz<\4qgf|?Zz'FeV Ly]Շ_muvd/+jyVȳ_5yk6T\UjYg@1 t!5΃iZݦ#; -1zSN߲pHU9˾অ{Vkaof;4Av"1'k:sLMoltV=ՠES7[e A߾|)p:Siy]o]h9ο趉svOI=Y7fn{1IcuW>o1\(F&F$~ὍlYͺ4hI GN%IEvYED 33ce.%^K.h{>zɴOAkXBR `RXXB21{GbHetKXIC|rL#Qfq8V3m-MLWIb0l_, 0O0+MXԃI;ɱ]=>E"p p$`N2U |r IJB1tZb.A>4t銋<ՠES7g2O|gd\Sp*d|.id=ZA`02v֦{t#1* jqQ2r3쫎B$J~ Css3i)>Go5`@YWhU$J0upϾHBE"@88d a"ǗcweICk#"U);OOy'^_C[sK (;`auk|vZܵDDaD\w )pK8tޛi)'cF &E;o~bW%Fpo~nVbzgV< V[)WkTaqQkn~۸ꥏk]ey[0BoӇ#W|טM׭Z~֬yOk'rI+>|=vcĞH;2%g2Ucӧ*ϬׄS.j--}]UMNKSSR[T#=)vo~ߎuY;jVoRgqO%Ɨkڜ>ں/?_uk]{kӺn޼{{EТ3aW_ѱicǏ $4~܋.RKn<'O>(v,iD2 , ؂*Pj$*1'^Oaa2MO| I⇌iQu!"@ 32:w\op3+M\~LM3q³jp{]kw.znYr3vb3md<>ЛpΨR&xzG_]u}|BW2wNJE"@8*>NWC^Q[Yxw_8o^En>o΢7xs}T&dvR@ l׷\u5~2)2g4C]4LxNiG~]6b}SCdKk;wcWXqkQ?]:.D=\41ڇ,yG>J3p[fp%{#pҐgAaNT$x|XHpI0NL&Is@˥NL*'P2=VKF㏋;ՠES7g,BM x<|oy닊Pg=33L?=&$ @8 PГ؅1E ZGjТ)3L1e6E R:=hnF{LQR+^NDW 5h(u- 0B2=J;S^0 `{=./,c h4},>Hv (\ࠔcEAw){; a t hQ)}?wW붯(ؙbhYM_3ϿlckSiu&B o_#.j 1F 5#09t9:9ԏ#R#8ܠp1q͝ -!{ݙ8uEF*` ($>>2>^WcB*G=|eH#P Lbf֕-UFty>R,+X1i0hm7Pzjw@;os: 2B.d UCYr3 2ǔjR .+|A7<&ke_0r9͍vר?*>j+oZ]mA`86\A6gIiNDP}M&DlόB[A 'Ds HOM]y6Z' 2̽v5+>_=[_0m}Y=kމ >M޴zc` ۹jEǏW[c.73uݏ_/3/5!?YBaRr{_|fjޱvM[#[7D(m۽6TVD|ޗ_Vd2ݹfӵ^xfAܻ1k@(L̗7Zw?)xy]QqB:լQJԪ%'d48i晐9@O_yE$>O0+ٓ_tA%jPEDz@9+)|\GbLT {齿Zl&[`)R4zL;xLt"Fxymu\6K2lS%%A^) ڮOʱIJր@ЁB0f\p(GHyr&ʾoWe55XD">oqJrJXvN&\JIӂ3D2q giPxkhc1ׂ\Dkf]&5 e2 |07QS':jTJ%r2v%biѪZ;R\Ug}'̓רPR;A!`N%Nǀ<lYMP_RģJ֐3u[Anp Ą3A|C/nj>lT20؂j%#+=#uF>Vڨtң$S?0dpPzxR᱔p$rgz '`B'ui;Yvd ]y6leG6{䏵=H$Jb8WYVg\gdʒEwS}J@g6ǗLO"v:ud4z>)u RMC,jDkI鄴KGE>c uyN&xh4a wB 3ȴ_[s27Vޛn#Ey7DzUtXI:ipoѓꓣ ^!,&n ?iuJ`6UB945Eܦuzή]cn=] P8n WD斒m ]цzM/`8˔20`g(J?pLQfFEЧ!"Dv16ݳ7 bH!ͤ[ _s:w"pz cg)kɫkUuMܗfR;oeT*P`M*gO=Ր{<|rDF>z\#@~2J:pg&^Np)L~"5_~V0mzqQyw_ ǓPN(=dN8d ^ڂۯrǵ`kSuIqNɞ\n0ܒBƏM^X3  ivvR ۶nK:5nm #丿sO_Ia]_m]ym{Fnϻpf4P(~;9~U?ۏ%fԉS'y} :%}ٻ_?Tz4P(a8d #d7_YT( UxXl_0 vSh\0/Y 1Ujz72yFkGk&\vŘz36 |\,.jmjvM.'pޅW_7V[xf%e:rQXxn&+:V1ybgZ 2@2qQIϾ~MhTژIg^0ibRN[nj Q8TQj?D%tҌi3ONMΜx͓+ ue321瞛:mz\i!%5| dMeůW^3Vcھ=P]Q2©3R'h)\FAf,^,>\Jp X{ t{)Q8#K ^b8JͺsB, Ěƛ&n/@%2bLnq0棇 цELٜtFhgzHΜ8}N춴>bvi@ɔ"qp Mu@{3,먙>:$?[JWGณo-4C`MY{huR/DP`8CW:h1Ҡ766vhLiDؙs`5Ǻk 0G&fbF"f:@Z l&?_!EtDณ)z`0 9CnpStozt >NkwPnkiĀ\ kn JDRk{4E@ณB3-FL>aU6Ԧo׊MLJl&XzB0}0Y6fc-flXI0t@Sol7C-(0s*qlH *~< 21q ~$F~lZs.`w2B - ck`LZ^[lBNxl%^f| Y*){O$,&i~u,ZISjٲmq<]]_oMtb+ڰ{^rϓ7c+犕|3/5!?0^JЅV?ޅ\rΚ.SkD$8TOپf”~Wԡsk+/9"zkb"-QvI%>/kTiS5e۶ԄG*l߭*˦ E ʊ;싉SƁ;Ǐ ?3]OAvR9cёhz}د!ͺg_5\_܁2shlk2|.丘E.=K w7>x[ʳ"In^4I*646FFFۏ=&,,C' U&\F!'1|.(ӗuTeRS©c 7)wɾ10ij^f5jg}SY4ѿ~Ipr߃e5i PaG#P((^/$́me>’Ս-9qѓT(#uQIc&ݷqą F\1< $APoK/I$`s>&*PTԚ+LZT f ?o]uݴ~=56N ݬ 83*.Z3Lgd&/#:ZB^館4,nΖ 5 m헅B"7:U!QS=C;ECB;G2"RMS?=gz+l+]O^IdMuū7~,soK mh 1pgX햡-T*{ѿmݶm-[p-TgTZWſ TkWckmy]ߗCiX> 2u5&xAݺLwÈM6BD^㚲[룴Zr(:ߪ KG_zXw~[ݷer1: 1E`XKG5jؒǸ<ܙ)L}EW2!7 s%YnѮpm,)mKMm茩24{<|zK 65V{}n1bS}N&j{*${8a&ZPxV/V]9D?Σ ^[a\n͡ 5BSr)tubK$`>b^vՔGLM]W*e\.B=H >!PqX-␏/`vv{ {pBe>7{~'.3!pC4JSu< HP0L^|mQq/8\/X"CX VTkW0,b[c>2L#~B E0 iz^i@ >7{~'`ju 1͂"p"pBu (e9{^G[9@̇A/}iNs>8:na35pΡShDE:/,2bb*&i8ib ur- p&)u}B-"@ dEȣ^NhOڰ0LvBkB XX2L]N:2:> (SࡦO9Bas*L\\-"p8d FY;,FzSB -}شØv{Vɯ"ۗv7̑)猈vv\;OnպOq<U: M^+ {kn[#ZE"0B2=J;S޽Mnw`S ̕.wAg3(tm޵q΍VDn⋅m7txeB!2Gp_9CF RqBAb]H\kϲ,GFpqt3DLnjwZ4ʁ ״0)Qlnc>}JѨU S1Ͽם7DhO#,#d=YqӯKwXl?@}PHfoΦ^S.!*(zhF/[?ɗ19sklRWkq- 6SqdBuՕ 1_,<_j$\A*SŅ|oWz?ez=uq\v 7Ѡ"@%;>o|lG'튍{~W o`{ֺO~$8H]_&RlcKCt8īj( S Om!yk`0{&k Nzp!F)qm8ڽ-*\c[Oko5*TӴ1_Lu^7OISyj'vbV^3;~͚rC3.-<%J❜1rZ,Lxs:u@h*.D+/y98i]Cnݳ;Ya&8y?ogLMK{^o&n{j2iO([GE#_& HT]>{TV7}lT8V]8#"RZPԡH9E /PH*V&NyY&Ŗq?!Af]?y芢i-v'0w^5#'=?oE _Z+4P(]kUK,E8$O$N6y͖OPDMC*E|>^H&Xk˳+.[Wݴ^hQT"ݎ{V雸Xrؽ:blvf`[UV L)\Q 7՛}XKHR'$(染 KpEiA\Ti\kuu4ԙ[U!Kx/-nW) gT_ܳ ΌhbYx[+t9'J#g9f na6v}uaьL3G!S/fgL0͟1:''mV}ZJF[GkU}ѽ> 2sC >%Aq|9΀ ss[ [&eK3;ddxˇWIScmmWS,OscsP:V=wV|xrC #3Bg@R-v_U@=ZTڱhARVVcjKMB Nv5\sӤH8(4[~}CmVgޜ>^*AK ^X(::? lhπ:JG' ,HXv: 'jts0ܟN /||yv0MMg/ⶫ~_|R1cTJfg*|ٙx E'@fp-Dn/\ ߐq?<rX7ܱ`d䘚K [({ned5՚cϸ| ֯~t7nq uUc33Qj Έ"q=Y/ӷuaQŏ$dզ&ciPp:̑)4IYgІ ɡz#X7[8)*R̝_vTUiw}9cb&) 1IqRzZcwn߼Y*lo(K7kԈ{xZ"p)1Ǯ'HvD6)xa&B>&6!"c *a0Ha OhP,yDRmfBȣh~9]#!E~pk GJzUCy,ǪHE#pƒ)s ޝh3LGń|g -ƧFeh-(3L1mFJC|p|@/)_{}j(::W@8i2 +IV%/[pL΋^w/|Xc{=muw?dڂ!(dv#<A/k'O >4ϽOּQ<=k4 OpWRy|pPD O!A>^ә\N2V8aK+^Zq+KY)f@wV=sا@+wM=sG!lG{}L H)"V#p)ذfA`Қƺ?zk ٻveq:1a;vflmoݺlyFw\?gvZuO& յũ 'j1ÈM kjzݮ!{b]"qЇݘsUG))0b`݉2h}N"G邏А V8obwSWTY7۲2..k@]wQUi{2IYKYEu#JAKB $JBzdz;bHA @Br3t >!uĩw`ȓb1 r?o?]rGbH >Z D,I^zYreEaIA/pbN3C"M<,F7#FBhh4dD.](^ɨwAdUO~AbɅS#{~#N7|ÇW>5oI ge>cgN]8. J)d0AN)aY.p9|ܷ хD7R&V5mDp%eCw%'%g6,Sc"BU~:}/۸re%ڙ"1NHbyrrzJe):lr8քnΎ=*TG}^Q(U+/n--ܵ7/$NZr]L뼎(#C(o Jy;QC#ܝC dhOT@@d\.2zRՓ wnp#z`(#iac2D1m=~؁=9<^3&8|p!"LFQ"H9*(R0F Tޣp5Cr5MKoDG@r'O/D:Dd ?ĿZ_5왡PPF!ɔ$6Ab-, {d0 &G-GD /L,&9,NJ[dTɉ25/LiN[.use~}֭33J٭qpd2Y대ܕ HhduC GyǺ TY]1===;l;M)4_p/+)Zt֭IK=aPH,>Ї]ڢxBm" : ~dENp"iSCa( L;Vx\Wto!`LaWkUoߌi2{+rfSkgg)C `8TrᏖXyK'h޸{ rͧNFϗ/p2.g\bm X#mY~ZU`:Ns1jI/OzsX_N,(9QY>JSSR5SD?x$B+dόܜw-:|e֨Rc*O .ms ,P%䋯d%$\ɽ=^};e\=~~O>]^sOVV\LW!w@F[|2.s"hɺ|:4Do$zm,SE%b'GP 폰zWgOP_ׁ=e祔U5:R ɯFr!*R>Oy4 ʪ}-HD dj=jܰg Fv%RV^u/ҩklUҮ 7FƠ$^|>5zoU=]ev/RyH#-ҙb~+>9b?G*vEN>]twaC0Yl7/(a:0o]IgL!9DF@ Y3&?rvWyNH#m5ZeUJT$U+!W&7:5RHEΊ*G P")XT(Ѩ4Jj+(rgO[Qm2$D+hhɷ7L[DIE7C Y>Hфwf:zV;Q  T=YB)uEgbo c2m@(xDd(r=@DB=uwHUMBFC ~[24ae0y=Gu&utr6! nhd$2+n_]21@B.ɴ;OP}6H %) CTTM"Sme#!ZdXJ++]b-,SiԬ惛`}V*Tj58Fsjj\.AlVTP*)))mT~o~*++mW?==}  GqAʕ+555":Q2p3?S(C^(g'YL+~]w )JSrLHn"QXmQk$⦟2Kٵ3**j˖-4;Ǐv||<gSN=Z?~'Ob'uVl߸qlm3(~@Xo3k֬'NԱZRRR78o=۶m-vw׈L GcL٬!E~v~_T;D:֪ U[VD!؊J>[yJ 6d(;u2"?cϡC%:z;vwߕJ~~~AAA^hh={8sρAGqww_p!A}ݥKiPwu"-h.ȹ en߾;@ň#w-2e@GFࡐ)Lț4/Ym ~NVP[侕V ~Kb  }pznnnii)x|D7ܷ_~"s't@ ^^#9"lni~b1_HMw˯;P( ]"ުB|gW:u@5vZh;!.i+5;DL<2bo-~a*B*r }PjrńRjM Ӯƒ"aqnJIEs|?y wCrl6"V4!3EC>}wZ.6P@,Egȶ[ݛ`d___[AÆ @i)^v?*2kѢEFKuyˁ7F?s`=5Z$ڹc!XV?YKOO>#r\"B;!ƴACgƑQ%eOp:aCA ;3f 4NNN֭{Wjun<<<` 2e $Y):\|7yժU9ǍWPpGI^qmff&43ʁ@3p fo9 @[@d4  L?mjU'Oq46ɩR:Sϣ!C!å5A݉ЇRnt Ô.Ub2QS8x2$@skS#Lelw@[x3{B.>e> D K# Nx|M i:=YHnxֻ{⣱3+5cC!Szg6EsϪYיIb @hyg!A @ &[:WaN7EWKU~"8~@E)J֕ߏB(Ӳ Qu]y0 #I5īI`^{BhѨR/M6J'k\v KƍJwJHHFLLʕ+8}Ę ?Iw;z(moڴކYٲeuNN\>Xu%"2/`$_5bdQW'o;YJ͎W6en=*BX.aB<:%OQ{U PJ! A^" ~VWW{p?NG("էѢwԸ8: 6>#`/ ]b"% 5=02/}|-63*K"xzv{㎞s15蹸{ۋ_4jcuZ׌˱.͙ K,X@{#^;vlRR~BTիAm<HV(O8!l)99!pE8h>?<|q8k EEEDT8 W|#*O8Ν˂!_\\&#!"ip#M\`ldţfi Ҋn\K#sӊ R]ɉšfmM+>qFg˩l'+?ZQ&prTkUp7-zd/\;Qm:9 k#y'@9>s]?~<=ADÇR7o6aB(!߿?Ba˗/XC 6`+`j:a==r]Ahc Ys_[D.Y& 1g0?#EL3'u %'tA] }_~=ÇH%.<;Хq1g滈B.Hf=@EaPsH!!)t )TXt"Q:&M".K+t$UcM-}_a|җ6O>:*^ehtT7eQEC_^rN Z3m< ې3I#i]Scȉv&N:"S$(-%;OG{|6#A 2P}Qh"ř Dt)s!%~{G3}p+z'LOJ(zUۓO#d/GA @x 2{3.' 3ޣh)9Bkv|ujVZZYvJRly0iV~Vxd|L YN)jsc!vLP'a>2'H6OaYꚝ_\x'zr'8JO]kՃi6.$b̌_w/JvC(iAu@9Nm7p)^DJ'{kQg*QoZlVH$EDLzo0Xf'@}ؠt+4 BiI*C5p>R"-5Sz&᤭n:Ue 7^+=q&ˡJzڿOjϛlv;c#l " ~ۢ硘36|!v GS-&z&C$*ZikbVY%@'^pm)S ܺ3h`Rw)CLy69d2(A1F@2 cN'x\ܸ1"+S'XLoiэ\^F Bk>]I5Znmw}2m8y( @ P},xeK_A  !7@2<8%md PG̑ @ = ƢҲEٹEegܦ3uB9*-#(O:A(ۃ;?ғ @h+0Y,8\]ոA7 fQ 8JW* 8i[ojjU8b!`d9s63+s?JGm2A p#;ZoƆ1,T d߱qTlvvfĤtrL&˒+n݊Fi4ժQHZUǰ=oޛyֻ?H \vӌ$ZLFkԪfX{i/Mhn  Sd*ILFbr~H*:zJΝ3;/!6jAM_rdj6P;OQ}/OˀF= TXL\G -N<3$'_?h @ u|m6* Zod!nΣ4$S_:ZyJA @82K{AhL|Zz HfJ gB,311Nbcr jr5Z-E>;fg0tcKzmԼfW^pÂ'l %l Q*FgzLK ]외LJ@ZXRȪUīMd tpM:t8#3O`0XlV~~a/NTXA SNql6 w^OVF2LC.Dh݅Ack:`E)1 > DjL|.u%?EANK tt}f6+zK:}FΜԓ׎(*lΝYkj=˺M)[B;i5Uk~Juo;߃C V󋿘!ɘK[p)1*pReġvBI 07:;;ᨯwXXhxx VNN^ӳCV{},d^c<}55eZ_A.!vrdRLT tQNFEY6 &F(H 2݉vyQfL]ŢAKH{Ȁ ǟ׹F90mm5~nz?_mI]^%~()@zRP{6>߷J xa!ZjU%.)W^ݫlOe@p+w%upg{&dFc]ϿѳGHi e,6sc !& E>\d~&Ngse>4BLDГx)kTB!l8 ,7$Sx?O812;W`D~QSMIH#("Uѯ:y͘LQRsڴiK./)5 4yY>scѦlʽRmCYU*5 ;P4P:U8$7?p?ҏfSݨS.AcQ|rPMQo s,DwNj0((Ջ;5)?2%7%d_$3:.{2LyrF$#d.ʝ*~FzBQ =֐fF$}iEI0L~.NJM$$PIM9Y)>a 3%S    D94Y0@@@@ 4DsRJ973lH/Gmɗ;pܬri/Ik1$M>=c r㴓/(~J=K;{v&ۿmlQ @@@|$0lx;8%WP$>tvA%˖m<~bqCem?u[оteYRvѤ.Kh<٩]ѮhnRyÎv6lw~g:h4> tCzh_=xh?SڻYMIT͹ 7}Řڻe94vo嵮8Ziv,zรJiH;p[3!SMEݬNksލR4uy5 ʡ\Z!uȹ0'u*VYTPA4/l-޲#?׃^g>iDkw}EGVTXH0ew=9#Cjf==Cպ^kU<\OQMON7=u|@6Ol$BՆU{dG֝Y2Wg{s+io8|Ŗhh uL0,.q"< ccf Fe% Q̊ih%pݬhb;ёqƉ܌>,ﴒM'W8g⍀Yf6,g@@@ : (nVͶ]9Sܡmuhw(Ҝ^aG**~`lI!.QLO6ao$d q=l 䜼2 PӬ-l49]I.uZxnk3ȖusGfz[rzsIhF\v:3qUO[j& ; ht:6&yN%ζSKOۚSDo/+7GNZ_:Non ۸F[z'SoO9Uu$twℴDdŒv'{;Q_2j';ZvrM%;w^7O2\=I$$s%ZnWg4R:Mkn;wϮr%î5ݔwag:,PZԇҚ$~uPN8;˸%iJn!IͧL;8~r)\)&~^)1ԅh& sPbGUX&>edVdXN7;[$XcEoD/⧁HxW#y*FS_3P@v(\"QN%)@A, '>?;]-r嗈 ?AF8Th>·U9'Q+\[䖤vzfA]Mz@fiO_=XB2hĈ"в-ې`Ǡ   EuF݋f^~WQg}Dޖҧww=b=K*w\FJWm@{SH75A@@ 徽 :uv/ǭW;+;w(CQ@;Wԯ^K+moNg%o~)C&@rKgԂ|@gu,c`:frYR(e%xW8.[]QPnKbq-.tۧQǡ%uʩ)]` t  " FEvz)%1v_"GsE}ɇ4/&4ځᒏDPwg1eY)f&4.8/GD]fn3uf1ЫcK>dKK^̷ )o#jjv&Kzs;Û01jYxź.$rqZ=A@@ 6 ZSGh4K(Q$ _ij0M˘ߎ%iN >>qņ:/BTP#K4VU!<+ӯ%0L*FE7yeIT{#`tk 3|jc:D=YzG4Gܠ hFJаN7    '{hH+yTU;}U~![G׫"1 GPe08:Oі=2rOW/QΝgؓgP;袄hg ))3;Aw    !3@fp8NgFA@BYH H55 v# q   zz@(?xc--6 ȟOx  #u`7@>^]@=F\  +kZ o7sӕ._ۭ"\ݑ}vofj;ώ_-qɱMkjh9rnF;X;lxj後߶o yo!f[6;3GG>EWT|faxD y~o>5 88G{]ye%zMEغuWoh3%fӭ{^~Fr%!իoݲ_T^r"kĐ #dS)Yu8]`OWIIR*k;,6fhJ:-:Ұ3+ On79'ϷOkqaX衽fwk\n;ιwC;Lr]۰ %%e6䂫W:κgU\-/ՔZ[][#;n*iWE}ah ޘ ,gfo3umnnٸieg;x XV3]#F7:@g-pO/;-LJ4`z CGGٕt:lv[Mp_0Yu;w/ȑ#qh#O9XBJ9P$6r&*}ו/hC֒ڵkrJO7}=v|νuu C ׷7eDbMII!F!py J)X>VuU?pb5fs*ƦV!ZC.: cUmE) 7l3zxȜ% m]қI"w}'a#Ŧv37Ս́O󨟐WfNW,v⨭vړ`tc6Y|!zſiֿKDbiC͚bFLf_b6Ky/سHQ:E僇4651 ?/>y!i#9xaI#G:Ϛxy=ۭΊ#凎_^~pmmb?V TmѣKR}Jhm oj^d?yAGaEg#D3#339HfٳgQQQffVLE+u{{kK'NkQD3!>@~'"E&Vyh=頵cS}9r1c'L'˃TNLKT ,g^+GNjp= `u&wqnj$ +[nZDFwfe?55eGz ճ@LI@\K`4n@JZJBrb|RbBb)1o4Ä=K_(3̰bCu@Mt ̞ˈjr)JtUBjh)l$Z ƨlALaLZM1_Dks]}{kJJ2ivsx wmѣGO5,b %PFFFLZYS\HUչR¨wAN)!tUƸ gCJNX,tL-Yz}y[ MܹsL_]ɦə'&9H;4nU;6֔oı[μdJÐ7Y]yt$ 3'D QY-dyŷtD΍ I4|G!rE$VHdDI*Ku1 )Hiz +Nw|4D3uڶmvN CŻ#Eauuu~~NnǫkVwرc{Uw=0|H ʲH3)fAo#6ң:++RՆ sTQSѼ0%*3RPx4obm%^P$ʧKt3}o9R+x`yҥŸowj?nT9}e$'ޥeLqe 5q;}umƺƚvUO^V]mÛߊCi1.Y!^5^' zD3Ř(1#7C4/Zh֭qfo"N4{M A < h;-5I@#UjZ5baNYƦ$.~#IJY$-@A&;$//^Nyy9աB)Ӳ}{KOO3lrr>ꟾuY,\oH1'Ɛ˴T.aC-puD/; m<ih2sLLSCK+ gzÞ1p`KΝx3ƎLAڣ5 6W4=\nWM_?,X {~Xc]] Ҳѕ\$rкΝ\]Wsp#}<^2le;S$ ʁ/tiM#y*0ВDtC޽bBCh((Rl1;"Gn%R,ŏMul6|Sn%BL)ܻw/)> 8A)Ihd241i2-$g̘Aց%(vNa~f|JJrK)zA"ZOE ?7N^ggO>er[$>=}KKM鞟ݯw-;=p~~]ߕuu߲krcFa|gzƱFm֕f]dپRiU檪!3IGlbr8)fcAJ:ޱ[mg^Hj|wD!5tFZoNn$,q-9n!g`ǝ +)XuO!CPfC+IIm hv; Fek2I)18TfY)$nm7g]# |\d$yDW^3&[n\tyz^uyB>A6 T.{dKE3o e4岆f~k]1c -|1!;+2(O3 @d{4Ujij޽{=WXmW1-lw*Jq aCK2sݳ3ܲ_'(gy3yO"o$}4JׯH<0={v6$ #0ێTN”+fvjڵ~:f`ik z ͻvحMjOɿYs^Q^p}j <e9 'q-?* bfR^ f6O^+VamߵwgTչNN&ɩ)ɔ0Sx"ȨYI\͗_D'kԭ| 5)=C4&1yF4{ow3_Wm*ʲv9叏?xvp)-caռkQQ.7 R1v1i\rm鎅ݱ)ae<8m`?ހ~}%=ߤ_޴<=4Q"Z֍=$<cimmWTKlhq^rd~ 6^)dnnܭ ϕQw"ĭ)jqFғ|ɾ +m49/7;ռ -'#af=>)t}cIJL%霜@WGKg{SºmM%x%jlh~xZV9MI I= ӽgA6=ZR5\jT'=r@.=O蟞frdAl^M ]ϜqezfG&EPesSckkrڜUVZFN4_JbGF;7/wg; Cj$#ҴǠ KJWP,S!H*?tDȑ#YȜfv ΂RN? -{r<:&qaúgZ( ͢$⌎iU϶>ZlpťK{\qkSK3T ɦZZO9=;PxU z`vI莡|rsԌQ=&Tor#: Bu]IwJމI׮s1YW6V]S$~>|Z{/Uzܿ=瀲mcĄɳŊMw]Nr.35Nf}詰|@ NmOI :_< Em7nH?K)z)rfG1@vFQά}?~ǎf@vѧp~#=rXiB1SoJ+f/]G HS-LX )ہVT1xupiԝw}O쒖c6W?PX>K%L_f[.݊Wu!σjm|Qӊ\v[j|#J~v߻Q}j?KذuSK|k+:qTO͕7dZwLT>ϗYq7~aU>]~]}zڦ-Cja@x(*Y2eB86^سfnhycA&o>#ܜ$ӵ{An̴榺-ڲeMs3x8H rbzkO{ -h"yq۶mb*ΦX펪c5.ꜳ6Cfd#_Zzl_K':jfHtJQAQ-4sK@@$TiA~N[Էw]3=IUE ?H=3}&M:[A~8,H"΋?FM+I?㔉DD3O~ tU_s\_1"7-9Fn@ #)f [KլLjK:j3%j~؉q坸VS5\j=/Wgext~Y=fbϪKlĆu.SbftX=Cgq[=#܌gk .ˮJ=}^GqWd'oHd \BVM~b}Q3^)mca-iE9+{)<[a \z, hfJ)V.WLw+)?] =@7fv5rUk72?Z I%bA>1+Z=p/;| UЊ Z5#1$f"m5Hz*ܮ^'k,9]ysOEzЭyiZJ~ж_~V$6MtSM-X"^u0`Z`X\;Sf=:Xw_rb+=GOOM򱾆&pVDkhGI )(Van^b?^q*ǿ 423D=$T[y*jC5E /Lu=Q*ȻR,NM}K$=gܭmnsb7I`}2<ƭjKΉvrpM@@\=kzz<2=+aB1%)QCH"t6&mypl1nDui*!EKѯV}MB^Ye~yHbu4U^m֗_)?zG~="@K4s$V4KhVQ>Z#>& ^MJBKj}>N@PWϹyj9"IP='YO hvŦƆ]CDs{֖P%RT`,aރ0DpaZ=cQ+|FQ yah"8{kRQc4ܧUy ܋jYu >%jTG乩jn%|\NΣkA.PcgbPM=uhZWTe&iO[f!pjW:B,pD@QNI0c[3xW˴OPi9^ئm8XS^*7^DG 6j_HA$DO>_Sb>xsuPS+ުr_sve3}ғ,+k@ʏy;`;S$$ie6r u^4G{< @4G@@ >CE@hmbyz\S    FXp/ztn}הd{B HsLLU4oO =Z     N+.4qA gqXv􌰜.X=AE3vE?H9B@44P"ь"FR!!M぀nP7*T#CB #CX#pF@٧F?>51 d^refffnn.&$$!H4/ 0Y)7]y4 ̛7oܹnA4NhA=Z ka%jȆh֋~yA^222Liiix"@ x}fW|'@!B    (.pO=#q1~"0l2րthfԚ-> е!< C#?\!   r~:W 5[7wr   %S2##iH'_rZ^=H.Evq>onPO ˃1VjχP#'P݈Q6p@@<"iZDG&U߲_B҉ۯCn+*djq[DP投̺ù]Q@@bNN)[ZG@s]}A@@ G4k)/V^[%a_$Ch@*F]mVk(MECVftdԴ}&: v|eIZl=u1yMrŞ5YD `t:6}:۽{?߬5)֟Y풌bWJlfwwϜh @@ < }پS\{Iɬ|ӦM<@@@.F@ @ ˾ثW/k׮~c\vxV~Ѝ\r oH>k͋T"Qb)zR5fnYe;,}! !$@fv3K:RΒs2#3UW]ŌȞgpEf͚` 'ycu-a%d~`@=/ؙkxѼwѣG(L*sݺuM-//dkP5\*=z4??Vt...f%W_SpFėfm_xcǎcǖ,Y­_^<hB-X@P@ ijN3ŘC,L0HU.%5 KqYQ17S!bLR:fqԡ 椕ƚPiQ\:Eښyfv$wr5A͔k|_̙37uW ӂtߩ[C;T n̙=~btL~ֆk~m\ފ-(AS:&-$GK݉ xnuZj C@5=yS$[3nڿSxC;6eg6~JO2/NH"ng@/0">-vȻb0x-/T !5{[CqP5n Ƨyt< *H$bkkM#JU,pO?_ xG[^7}嗼\\тewP ?+t;4eVFib!;[FC$,L$nT"ibz5ʗ?| GN~7tdկŠ_&FԡKJ_A'ГhQ4rKz \zgFd:vT(_QVRu]t^c|9ORDjڝh%(h=FmO;4֖n h+_"*K V ;Es[[-/nT ;.ŐmZ=h :}z CS47d}~ЬP;CCs3$JTb}Ł@c!խ}Yn=4"@jt&Z \yK|5kp Drܵs=kIosԾQ`D$uxѭ.!@TP͔yw?[b)[koY@ŅGH7d͊։Y=DrAv8֕GuBpk$*6lV'@_q_cO .=mE%ʹFq!.0'v.kghPGʕ]:e6lb`.X@$c̘1u[4Vʢ=F%rƮ9q{Zۭfy Y"[ hzwׄ~V@Qfj؉K+Th>`֭jPm Jn[zXTP}m ).kBwyNHR[>kEx I!\a7]clӾҨl B BEEEOLiii&)8Cc$B'J=~oiiiII %Vuf=yZAV"^6   !'T̼e1f_Ћ^2K (mt  C rH@z/@@g c@@@@@ :9=#зFtx    Y,i釵    zY4*l4x:     ?<~c* ylKo@@@@<%3H%+-[SU۠ahjR8G@¢mOzF@t/V^  SzDb' 11Q.I1_[n)NK76jsXܶkeBEıufbZR.Qؼ>/l"= ݂@Ohy O DsccH*v[_PuH1'L$I1[mN;|cw2KM4SEE58>,E4GA9T'@LhCN3qw87*9rbi-,;3sՍ_يb'nO/,*ھ{n\i<-Qj:1uY=#vި{d[O74$oغo*ʨ m6{uucǏwIHHaö &cunΖ}    #fsKJD4\}Qɨ!X}r7tY3嗗OS~ˎ r2"+&7*1mxSb)=%s2{d]8!%9+**;kDo+ @@@@ A4O7~|r0MF'H=ǹضmI#}Ǔ.$Km((@@@@ a9=D7-V=|,#LԖ<K陔QVψ֙_ A#^guo|[3L mX2/Xs~:    1H H$ Dq%/(\׭ol2|mA X4%"́A@@@@ p#`MD (^ /׳IjƄ^FChf ԿU۫ ftrj75)!q[X(6v/6rZ ] f@[CĤ)nX+fZgik9gݏr> $5c p !L  A ĢYeojz=fnmַ5mucv? (qiViP֗Ԥ̊?%2ZhuL c4 \H7{mLB?  aH ĢmR^fnk9rh_k{1*fY \!y47S5{hk\$^ 7{&n!,,o]w*ֶ;뚇L%)9ջL:AАk M*9{+#-.)޴%n]Q+eA@"@E34_JǒR4T;|ض :sĵ݊[!G銫"brX=JwIқ,#r-筼wmO OF} Z#bۦd+6Y.QYcCY&%ض|疊}-S2m-qqr[Meb ?V,T"C6cFHA@'{imVPзoozMII6:T$0t丨 NTD)----))aކEY]sWW(?^{}mY+m%@hX=b1;ƺUeWwC-0 :כSMO/,D 쫑rc0@dhؽyƽvؑq:Mtm盰.[et I޹wM@q@hֈ4ر.Ze +[q-ojD.fH]ۯ׭W    Q@ ĢY#|]}2\h!_.g ƃ@EF9$80( X4#Ҍ@@@@ X4#,hV45o?s_ӘHfH<{O=?Ocثo{\1Wfn<;|xw"=06_a qCe+ X4Ev;=itjpZt;aSn[6|jc7_k(V.x y }iW>zt9.D fHt0 e*%vf!l;N@vC{> 4kV,G$֬!Bֆ܆g{DOrak   B,5",L vV\[zﻭ:)Ҭ1Ob%iVt6\W;)jqNӱ!9{וZ[BLEBNX}(LG?Wn6.V_! j@E34_I;]Ab2WTBriovrHJrV>eD]O1+K5!cs;%6j[y65%.afJ@#ґ6fY5ߔ[>]ptʾ}؎C8O(f&%숛L߈b۴4o]>(bb*QZDTtm@Wa C  #bѬzEmVnr\B\BK"'ʂbr&R[`N 9S}C*zch%:G(xڹ/  1E ĢY5:.W_җ?,y/>ݿ=|gYFS8g⍀@,r{ 1u}DbD~WQϔT͞F"nL@GT~PM^mii5b(i-eWڋ fBôųS>+-n)`.^TvbQÇ|:E%-/Hj–nyE49.X&@}<0/ Q"2F~h֭#Ds^=kv*?xh)/hhV<ٸ<G\'s @4):5a2W6+9dIͺ=znS; @@@@ < X4kE7uhe.;AY1&(vqWS; @@@@ < X4kb1x3<;6=7~ȗ 5A@@@$B,Df[Nhe`Pag@ggM׵`)ȜSbY\O\p    Q@ ĢY;Ҝدoo24_Gn<()1Qm$7aieu$ 1+9%R'n`(À    h֎4{~X~݆55ܤ6cE N$Z"YPw@7 @@@@Ev@ǛfLp٬sqwWkΟ1%>>>3fpf@@@@b@EHsLg!͈4@@@@fDq!Qn5z XAs HX4kD7/z|s~O_ѽ+޿gw?K߼sw,zo܍ WQ {   "bѬiYͣ/̬]:MW?:'9f]sε[EA?&ME`a`1,C1cyZҡvA@@D ĢY#LO218;lJ9Q"yA(d!]Kgڙ ^/<ͺ k@@@ hB,5"ͮٛ$`u:సT&>_b+ E߁D-k%xX e@@@œ@EV"Fn0Xvf5tvf484bvJZb[c0>`h֌4;F'"oL43,> Bj=s߇%     !,,B $;m-np ^3lH}ZV!3 ˡ{5zpBH     H ĢE.L9n\Y"N-7?oO(zf/ ˽ i>:zCH5o &POsO!ګg8fqTʲ]8ֆIM>Z-V/BnS^tې綦(mrju9Q@@"@EVN3gXĝ Zry3Y`Kqt\Ҋ'/W[gA@@D Ģ٣HK4]6ZlεS,<%UFTXg|Dt[4fH$XPnFA~NAk?q/!q7[xB5%-Ql8) y%bm/@EF|X ,r_׾|ς/~"#tzEX{*,){rW@'c/P5>m7?7vج5s'yZfUhH@@@@ X4kD7/z|s~O_ѽ+޿gw?K߼sw,zoAaj 5>#ʇӰN~ķf9fHj}cf=8ҹg]>oOѩ=)0sG@z ZΏ@"+[7 [AwMN"z`<D f'M`w顀H?$ps8wQtu-+ᯒ~$~Wl`*F(|t  M ĢY뉀v$ IvAOv(W{ Kgfк\/԰S9f3:ݔ#G[EbC\FB:=B5!Zf$%`qm@YİTmYŰPR»nuvhv'q Xg[YiKaDbGmӡ{d*@h֌4;F'"oV4K=o*D=,,D34[nJqgH7;o?jLcy ̋z%咨Dv{T90:hVt%fq,ʲ]8ֆIM>Z]ӯ{y;GT<%OlXYRśY$ Y+K:ᝫUvk3*?0͔amwr3hɹuZs&F01 FDm zLE!ƢYivf F͹vp+af5lN!1#|. []tp   cL7ui&)7 ? ϵsyڱM,#YTjnhTR0#|X ,r_׾|ς/~"wP-Y Lr]~& &Q<Н =@߾x_^z+~}o^[Νo|kZa#sem1-Ѿnbz%qSA@@ h2p'hbԙ/9')POSv* f`D'aG@~3+L'oX"w]Ymc@@@d qQ͸DOP<*W @ x/ׯ_3;~~rʭ[k|?_ ~_}_|>,}D<}B      ?6NէWN8'ƋwϬqכSk%)OAD4@@@@Dk|r>j_Yu@VCUhxɞ%[ֽ{ Es@#K?)"@՘w~Yh`YgV\~̶ʲr[N/š兒FGoʊtF%n^`D0RPvۦׇ.;w.Pb833n죃 VFݸq?cF|r!!i2s 6nYkjٺӺ̚5KeKv-9fE䅊I2Q3[BfMe rjeɼyb8:U"} <^L&SSA@ H 9N"zL"RZZZRR2gL^E4Xl۟zj_}?~TBR)1ޔ`2őv8\ޡ͖ =qۄǫO^hP!䒚)Z k %G[[hXtȑ={kKK f %A#ХKt0`h[l   V47Șݻuq_F^$LqH3U#MmVf3[׾'~]\\G̻A\sc U ,\#p%mDu_$aQGF@W(b>`DHII),,NNNh9 $X|-***ȿ#GnڴzU\4?7W̦ kbW{rN|jfBj4䠠4fڶ_K.))/SY#jf=b' [1.v(5Q4-)YF?7hRSS)Is||Kx좁  @`Euu0~ͤ]=ZYYYQqd=U7٬񙤡I΄L͑W J;5Bgℶ/(ٴ_~yyy[o%Xu$ZR쐫XQ{SWmP}qdDn<5JQpfZy>|8Dm\{]w]D8#A@@@@@_E3c\ve?|z;ot=cD_EsD8 #A@@@@>}^uffOB    D{LѢ\r_ObƤI6l@b=hD yժU|"ƞY5vX*@@@@@y֭C /Nkٳ'ju?K~-*D/E3=Әq[[{1SNwLTbX"     n x)M&=Ǥl޼yŊڵk>Oq{D:/E׬YCB믿~UW]|W\qLϧ8I:D,>-&,W,㊶&ji#h. V~~^aÆQr0HŘG9z8WC-^XQ&暕D˲D\ސKds&Kl+N'EvYE7    ͌KAA%1/\СCzr8<-%=ӧLQ1mGI}5ũVJɓ˫ITZc\E5.#ɿZD}KA#h&GxճgϦ?v_ ieJ% j4T۶ϐ~Lc)]nz&/E3)Jz 7ܐOt/ mLtBo$fA菪Jjgxdż 8(r~dԩSW\YױѭhSK,'nQ eGr5U‹~@@@@ x)/z&LXl)A8ݱceh 0@'}y1Wb4&yK% -KlUHCc894:٢͒!i=n-++r6-ZD4۷f㺐bg5iPC*di_8ʾѤ28*ݶi5QӅsJh裏zw[n_ݢ @ y޼yt]kmn4Ao  D`q| tx.H̙=E%~R#H ?~`sEGněcf@8h&Iޝ}?OWg^!͏Y(!@hg$_A@@@  @4Gfh*n      #qbںa. x   DA|&pp؇݇@(   J q]D͕$O`+@Dhmc[Z^k"zKMރDs0(c ؿ#UG^wr>]mTVzcj"M!/^ U4J;^b1{$0:P#ьk#bٷzΎy!w䌙uσKK¹+ob=+S>TRw}1IdRyAfGRԐGٙ=Gn;A @4̓G"lȐAg> bVn+PDY*ě=r^[BmKuJV/rp    G~H@׷g|0?_U+oݸjtVظq3>E镗g=ߢ~eɧeT.FoN3whxS3P@@@ ^@CؿZXؓvVdۣ lhq)dk-xD#\      cq3G =…    H9g>xD#\     Ns,z0}b`@@@iw    aDa40@@@@ < @4*0"FS@@@@“Dsx #a40@@@@ < @4*0"FS@@@@“Dsx #a40@@@@ < @4*0"FS@@@@“Dsx #a40@@@@ < @4*0"FS `U W=kxp1^XQybz9#ь+! <ZpJƧ_,^Pdqڗ~zh)~ 3[~viCK=Vb%l8rݶ痤[| (p-5%g   1F9&<ݻ[6|ߏ32\h6[k(?t暺6sp8))÷?ZO{{|@@@ H @qa.\talԱuu͛kjh:cX >߰} =tHlhnQs':}hFF}zF~@@@DsOq98a~nw;6ǶeuSƝ6䤄Ji(1K=w7MW ;;84qh@@@I9tѷ X,.zIҾi%)L|Jf oM҅4n>VҊ==@@DsmyFO0y<ןz_T\\hw>4lPa^^ɔ .L*ٵw(Ԭ.t+ z;<E @@@4+:/#UIɗ]vYgwϨkH%;"ʝF W!S$mvَ4Jۯxcǎ0Ĥ$5D 標hv`оl&쒿6{ő,nptv|tw޽jUcxpmeeG0hf@@@AG \t$ݶkMm9$6v47O)dҘs\ VBeH+&n>zxFj嗔v    #~ cǁYLnъVsձy)lmVϿF>Vn2a9㺵nLOH0nwrs2)y8aV.)]35Qϴg    cp#셗?Lqt_\\\bvEۭ[>} z:[FTJJOLO=D1洔 .?iD~_$KS Y*C&7ION&^W[jm%SS Ů! f\@}23l6͔AR/mvky~WPWL'&ijxsR:e\a^cL[g%,6Zj~wn]g+TPhyS\ݷG2dʠ1\6^[$&?bJNNNHJLHL4%Nw+mD*5t2__ %Y ;0fC5x@Q-^   Q|"[.ٳs뚚ZlVד%4n6Y];(c^Ů'fZrغki\zz~}tL%TNggqz^_}v|x+::}ڨUV3M[Xsک᎝yCűxR/k"'@R)D{-^XS<;Y>(Ac^Ά 8ZSy`IN˩{|§@!U\e974iys6~pܹ`%0o<56G7Ͽ`Z6dpKN<ϵݦ+o"1fϙp:j@57nxӍ}{x/I˯ٳO?v籆$nޏ{ÙWo@2Hx'}z&?,GnuIvW4<|KcILꁛΙ>Ub_:k:E_CN4̓ԗX\L_E7J1CS _-ƈgw$g\mvt,T4Q ƣ?sT2$B'J=\)---))3{&S/4:aA`O; @&c]}[=ҚieZKn1o546Ѿh%\ ͮf-7j&%%Θ1i2Si2341+7RƤ;ILt_kaORUj.WǒӣBr-D4,9'eR̔s%mvXѣ[[vB l3746[(l;׮gXݏMٙGթ=APedj1L)vJꠧFʴZ}RsRU <0mcQ.o+mt\cyzg.P.1[Y_-'धI=#8@Y Z95EiUlj.FCL(FM54ڌ_G_}*w?fXn/c\wLx)ٴ^@ Gral6ۊ[Tdw[]+aQG9#cWh   Hs  @i/n=bX.i)ndÇ)I[Zڞx7tcΦ֌. (ӍP~iR}x*m/}O0<Vipױ$ub4n߱HE_-?;W?#KK󳛚Z|.o^`ja;ŘibJ6e] D,@j,Y2=.=/3=[[) RL{ʣɉ ;ʵD^/%@@I91 h[|S    hچ/7߲,aA}w漭UI2gh~ugBo.,L͑9o`hlmzS{;VS$h/c\Ӡ9%#9KrBjR1Pu/,݈:D$ʏ7qˏ͉]3SҲRS&' IKLO땻ĔĸVg?gTԆX   Q #j`lݕk Z>xtmh6 ќ0 /sRZbbjb|R)!vӡu˾`     @4gaAXÆiE[3sLnP'M$3GΨNN39]9.>>d}W޺ a10@@"DsDLnqYfFsE]a괂:I@*#L*`^i4+ܡ۬Vr;ݹi1jw89ZZ,vK5էV֥m#v{E[=>owWT3yDS.T'S%)%mraK1[s\^l;bj5YZTnnn:TFfhvfzM-V;LoLfB;wxν>ݒ~罓]A    i #mb^kּ~ {[R=1`VO̭ m6̍]b#v%1kOƐO)7$%%%УQto-TGܼnh_Sw   y #ob⬴.}4jk7fo.UA=KLH1ջֺLoiwf3ehkK7ӞoQzomۭq΄ĸ$SJFr~km2I䫮4==5ӻ֛> W^Or9|Zr<ֲy[vGnZHnƸrI.?12jfr*U̯ڎ+N5A@ڶi59 Ν}£7o]WcwWK||_ZjBjJRjrRJJbJRbrbu˜JOV_\eÕܱ3lkwIgCX)ƌ̄ܔ+uH>Z&(@SY镔{7\򿟝^2Y^N]ifXzvk30¢6.SKaW=wjfw |g~ SpjY9q;o 7U ,S"A5"@"dqcɕҒ9gR}zHnzƖܖ63-榖6c|D)`n37*Ys;)L;tvoo;H'Xgwr),sJHYb7X"IL*d2+OǬ\RAj=y:nh]EA+I}~pmhhWVAqS3"܄T/:kW|Gi0ԃF9g镎DkO)&@ThiBe hi5bnh,oli;^pe[|7Vs{k2[ֶڑL*wHHKt,k}A%fnY:dv RÒ@ $& GnY[J/XxxҫƸ {R6C4o޲7+ǔ\Ȣ99˯2*CtV5E"Se :jnnmk2{ӏC׭P]:ɝtK:Slo&lko*sĥu!Ŝԧ[nz0驸QÝw?pۯnOkTcmVgm5%EKety}hEECUq6<]6رG7@@ @4GlF/F h=#1lu'ߵpC^Wh3[X\iffGh]). Yٹi-U3 Oś41L +SEt7gƥDkSؘDAigp[Z(AOg P@@|$#@4!}s'qSN$47ӃM7'jp)fvflҒH蚝nb{SAJ=9QNT纫稉lAX quяG=k;=nB{g%hJ %=dij=kdž?)F9kc?h#LtpWN9pM=fkl176qGUn ?%m3 hkK1;,$!rN/˔Ԭܴ.yn5SǞZr*h4V)/Yi VMhƖ=y/9CO؝Ig_tE5#%"n"`-9޼?^a6phzBθc+[C7KLƸD19NKT%w?s`KƬƌP]A2 g_-W1q&_Rp,TGb#DgI}X.jj2,)=.P4GߜG~436<ڢo3WY MVN3q:NxLH?6=QhJNJH=%!=5Kj1ɼyKKU9i UA]sP5Yх 3zfIE]{teY3?g^Fyy]Ӫ~t(.n Yhw07\h<6QVqե3(+h0-kܵaʙny\9.Phy}Ի.blUZ o<\і~eg?X^@@@"DsO =˅%p//)wԡ T~em|dd"!ޅ!/T*t 51昚vvϾ́vv oꮽ>J_Nym;eWS.-]OQl !{Ip|˯ oKxKAyGu$P?T+xV;_YmL|o*+qk'dj ھ@@bDsLMwd;ܐ!}:s(%Ug~}xOubŮH-=P SN$aSpZn oGPZ9V\=C1cv Vc_.nzf\A@LcЯoݹ⩍7ysc~Y!I+daU`ǒ/ϻuVNJ(P͎/V,.H6pӦ-Xw^Ot20QSNFdi~YV  L9g?|' {έOiS'y(fh޽W\N#-k2|ܻ @@D3. @M1EU)x U@h<iu noy5S@U4$CCָW( >d Sf5Q(Sn:itA S EP>(ٝyb:mvk'-?z'}YrDm  3.~.0#005a:10 @@@@  =#D;#}s @@@@L@@h9G    ~&g@@@@ `ȋuX   Ns$l(Hψ邱      @@@@ @4GtXPhu     Q #j`,@(@4:(5]0@@@@  CAcD戚.      ͡1A@@@"DsDMPPǘ    E9 ƂDs(cL"QcA@@@BA91&@Dh邱      @@@@ @4GtX 8p୷޺_?뮻^z饍7:N{Bu&777_zɿWVQr2zR[y䑊(vDy P]]W4M;2ڮ⒋?dZigOrdwcm߾=,̅   aO9zHbrs_}@@@B/IT;}˜vYSWb2:sk‰}-m۶m a@hי]^ذaCfv}S[,Ά涶xS\PWCM"AAgH>71рjVZA!MFieIC߳!}OoH;vT87e0XJl6 RG+:hZ .|#I:48aYgi呪1ϹGX|OξZ     #q` y$&OuHΓUmis8NfefviT٧ۼnhwN=&@$hY.$i3pݻw~a'y! ʬvg|7tG4e祧 qss_}C9CwwNYT’:`媵+?1eYWfM4NY2 YE <5M[d'OGQ+Ws D1W[XM*(mZM?tܹs A@yb|h+VP>ǡCKt33 ϜZٵu:grh\^ۯ~yLғR2֮.'GAvVx'}zSɬSYC ]ӫ*ƏWO1ϿX(PO~)Q+pN=y^؀?:pKDБD) +YRR2gLf=P'\իW)))SL)..>~5k/_l2:x ?/>le6556*/+]ɿ>sۦSLnZz<%@2RԖG6~X~KƎXΞ6{1Qwz= 9nhҲRTEC0vJJƿTJ,E\Ybo5s㽰!\K  iI~4۷yMr0v@e 0mϞ=u~)U{|ȑqǎJff& S^S!QK:ux x9Ӆxfeey5?#뇇yW,r,֤F@@k \˛ۏrO9v'&Zi<*PL 40hUW\@HRvǤi/ j>: a&D+h٨r*%t\=z,Zii'ֲl v_EUaVRdnxa<@jRȜYX,w6Ff\@`ڵK,5b{y睾}Zpb>nֱc{WOt뛨 8vhLZILZ->j]zqqwG\Y{&26Vp# .ˍҥK)[~׿NHHJWZD@q=5R>2ߜG%K)2H]F@ !{"5UtnpTfC/  qp#`M W^9qDͣF?D13}L,JsLo7 Yz^ $A ۣ,(*P?lZ{%EzS3\kޑkd [Y\YrP0#G<묳Mv^r%W_}_WΜ93==#1?O@@@i3PtAZ[[x≟~iРAFڵQ;tk~~IHR޽B<   @zh(tp KTt3VԱk?MfݨP19r$))4E-112!e4ʈ]l6;6DZ:6JƠF5999vs14؄]7߼w^Lc&Nn\=>p~34DM=zH+Sbn3ʹ1|rZ)))C իDcd2?D0jн}}߿?-@@+@;F7o]EJ6tYRζHu`"ii|GSLW )'3 +uRhk֎rW?65TvW_VmEm+ =}TLas_E{I7;Z3]xmoZ[s3zǁjg'b}|zeT$2݂ أeE3Qx4T[rvΨ 'h{9TqhF# :nV2{X|vhyɓ'9rX쥈j`Œ۷yyUň.+;ZIYoϨ EuX^Qq*YѶZsqTxϻ{\|?ܴN(6s֣q[l-[3}#%SlIFܞ!oƛ4~  @YG̪pwJМ)BPVPp|a%<ÂM6M: 7V~k_תgJBza\$}N{Rֹ0Ձk֮n>Pb_ڮ~9^"q*}y]Ƹ-6`mݺᚑ4qjewe>myO39 @jPͶ*1i1 4+b֊}QنO扊tfև.~cZLfǁ'-zģVS#NT݈rj{."#T̈@ 01-}i޲e˴i%Uؠ,*U,8Og$YhK;-NHg<>I[VjKЫCm%k;84SM3#XvF[L´T1vC)|AUk :ԏ  !eYaUJ ;OwMU Iڎ}bF:gѲjKbn*ȨÕ\Fn/M9STZ@.@94l%LZSzYxXYYßaʂw\['lUT7c;x޽{ p>Sm/IfĘj͒ @K +̒s-y֊XraݻwouumVSS~I&Ew\زvϜYc9P1XkIKciŜF@%@9_@KfUSO͘1C+V̞=jV+{{v;YL(d2ͅ|v[^:XZx.%K5Su+@.`' .L37)2p@F{+ǬEU-]5~\fFwgW @.fAs𯕢-[[o 2$xWS`VtFKIgW @2ͬgג5ͭ?[F &K3 d2@@i<ßC   K=|8 @@2*  @4d2@@4J   T@@ +" HLsN&SA@GL?   2:L@@2*  @4d2@@4J   T@@ +" HLsN&SA@GL?   2:L@@2*  @4d2@@4J   T@@ +" HLsN&SA@GL?   2:L@@2*  @4d2@@4J/=};fۛwn<'jl+3@@h2ͭN еgK#]::Vfʝシ%;7,ٶpc!1  @k in-ymeHL+{C~vȎ^}\:ˆ|xa}/Xޥġ/woڵqcl_sp֒H'@  Ђd[ I  DJGz~p=/5m:6.kxkb+*_v]ejl(0@WL^rŊC%=;]9 U;O:P_W_w̉ƺ#35SD|ҩݱ v^ @PYfq̏& áHXs,nF ֣1w|H(rc}Ht; G %ds%˪ lÊ1ٸ4:4w1S¡{GBN\=P{B@P9w"As]4m}.G4+eKڪ<#pB@2 h܌#ZU)d5Gsh"fUhCh{kfUO# І+Ρ+[Mvʚr4p+ ~gk8f @>H-(K0U6G"Z++k.9-܈V?jXv<🃆|G?Enzfq=s8 @ \ѩ#!hn3Ew gψfcpcXgAwc <ؽgIsنwxgZ@'/l)@h[KK-pv"fH>p$n4<٤i9=G0Q?>%yhXYub٢]wKuK? @b|lĬA4c Ėєb>WĬ(zŘ]KΝzF4Ӝk96օ _rEK1_=F[=Zrl[a @pGDm3`,7-ՅꎄUanz;h>wh]G)=?Νl޽gbPmtOK }p2_[U Վ5kGIwUy:q>{0k:nTðϽQ7!nk,G'mӾM< I|+~M c^iFڳTa*Oz9sI(0o<]Wv++ŏ ҲҲve'9kY ]J Y_;vٳGSe"]vf7g ;T̴as_{I7;Z3]xmo$~ߍ=@}O?8rPK/8 qቍ?g|wO-aMSx뭣nsOň.+~gJ}W}FUV(oÊr;PFE ԚӠxE̯,~+ Xdj\Qi~곶ĕn53aT5޺H:0+zqdgJdw/5ocShM<7ug;}ysh+6n 0rI@Bژ 1ΉK;ٱuSpycƺȩʻt}]xN̯Jk\КnJB`\$}N{Rֹ0Ձk֮n>Pb_ڮ~9^+4-toԬ>>;G~Ȭ1}"ˈwk:A"T'Kyzgsz{b6)wf{؜ǩS ݗPANua"& !x 4s1X9`Goݕlsoy"]!QY?5mFjxhpr mϨSnqجð\ȱUƠܹ4:-@3U6TɗLbO@8f.6&P7ee%h}+߬P^lifUb(bSjad}5.hEV|G/W>ǓG9)Ã1,&! @4ι`$i ԝ(&V.fEĮh>Ǫ]H(OEG?'t%2='qj[3qpwf>Ď|:RUHl}ZŹ;ms6EGӗG##'m$/2͑@.e t'_F)4ˠػ7z׮4-B[9cV>gɹ"ho5'amݴt^VVV_Xgk"WM^[WF}PEu:jI~*mݶhݯahOݡ04`j D Mgm;hvQHRiq6_\;{I9qf (fzD`dCcɹbZbIk@YYr96i@@ NsO*SB@Ȼ9ٵC{Y# p+hnW.+ G»ߡE.ܣ}p`1M@@"P ]Rх#J~Z\f@D/r}+N2|&F#4~C$#9;` =x=D2$R1z)8FЍ<(ݎQmRyWL襞[1L:2z4كxy H b$-.#mbOMH#~1|i~VB]bL˗/߸qc_wkxm+z܂sJ~E͞vJ*?8cr><Ӗ\rk닳퇟l?dZ?޼T  0̜RLO|?vW~WiTE6m@ ^;~JhmI-b['>{(:Gsc{8MI5B #͚VOgUKOI  % =N[Ρ;¡͔m|gk%PZ:;rNIV5Ҫss(,'ǟ=)E?D|k;UL#'ZZ<+=̵;Dxfv%ӖMsfN3/vkP* *P?DvFTd%:fOimg|_@J`@!Ela8w,*JqgFN}.v&VM_TPhy#B{RHU {ê0TzHz̓  0ȕ )UQB*O])efY)=gų9]N$tBħH]I"gݼ&J~׸wIΌ>Dqf \cHmf-]:m}÷:v }~v FM,dpVժQ9m) >Wti*(]HOlc/|'R&  ^WHUI_pvG~]֯|kX^c_HMRJ>ڐʫ=Sa0@0CW,W{g6,A  **n0cBV]$5 .u`-l'pNjT\`:"0Mtx` <nS3qXL}}ia'3M^i0_ї-k EݚvxQa#Bqj>dk5&ʘ-\XÏ\ <{1;qZ_I,<ÙsnE*>Oڂ!._ת64{ڵj==R>א% XV8s'_RX4;?sw+wc G;Ӫ@ۺk_š=wZa4 CCXɪVÊ޵sڜּѣB`0ʳs//$R%F gCC*>|I#OzCOќ[g7@qq gC]ֲ2-Ydg7k[翯F/\~}# .8UTZ_'UgCΠJZ[Иa O`Q!UIBQ{^U~bg#Ua -$k'쵷lJ8}>ܱe+;ݡ?ޝ`hnɓf.:u4 <ں$qV ܤ@Po2tSKKKid{U|Uwܦ;aןnΜ i-;-/<5` [u?VYCp*JSmqCªpPlp}/OiΎ_}/"ubf]lj:ns%wOUU`4L mAtjn Oⳳy^ڧx|gպZ*s'3ޗ{_ySLnpf?zԟWtg-]Wͼh9;ouo6 ZUx6Zؤ;Z}{:͖8N7>|`*Ζ6PwvkWΜ+ c]zmO ²/Zx%#M.?91dCf]`bѴM6I5S6T'pmڵm73ٔޙS{7L};7_^: MF멪zv<% 0 ! ~Aі{T oXwH9!7o6k4 ƢVgUjMZqz#WL.@Kl^Oce_w*)S~M2⦩^'WV]ی漠'ȹ|\ۘ-jFߨI rFcyv\Z_ϙL͈WF0r3FpSFp)ək|3Sg5 >׍5rҸVugq %0/xե>2,-2suW?iT*Q2\&ϙT\gޠv+(T]'fji(`Zh`W^sN^]JNUDكϞб]\v7gHhfפi_ʫIMh4a%o^֝eT2vpkg ϴlf[l(V0gϧ{3&_;R61;F;&Nl= ( .C7ѕ4DRq( +Fީ %<Ѻ}R_Z[2Mtf͚i4f65ͽpV Wܱ}3q `HPgh@@?Wf~/X`4\o玜<]8x`V#/wN@`aœWT:E3Y;Hc\_\q h80o9ANIa@s'%~X TAL2Wѷ^7ZSI6D ]ĉ㯽nlZ+l.;,c!fg|_,rw+߻™h-GC_*%EJ\E!.'aMN6Sm]peuԾY~zgsŁ\Ɗ61p྾X }$0,}yx˟ĂOwx(d4 _×+q<]տvFEV5=k/^2nƪ&]pPBJ ,UPhv4{Tx/&]8awiޞШ#gtCklsCIfp١ׇSvCw_Kx@L75ï|[~&nF>$PWӥGA5z&tD?Cͧ:5jf1.YyG6k[4z܍QU>ܷn~MWɻ;־r, m jc5#:R'Zs5nYwղ%taRFM1ќYw\3\ܒ2iGccgE;8MfOFSLtRW0 6!ĩ34cMSlmVehtש';l-J{MT 3@sG ^jclz5W%5f%y??l}[7UU[t.Yt篹/tm O4iOU3V?x+V\i0xO!Zj5Qjq[59|*M34:E㫗#=zV.=N6#E7aPsׯ i 3rӴ4ΓÇ#|-AoSfxOgba uEEE#dlNW)o’99aݮ?ztpŵ4g m!+ovMZosr8_>w׏/ePDBРG|$IkGqĉs!]#LJ3JRLl `EFi%Zx]Dg5sPTb,%G(NOq)+|n*,fsA{ow/1櫖g3nYR쨉0-;#h>UF~[&rǯvcg:;tej' ܱd0-La1 /M6'g'ez&e:'%zy5[*HOTtvt'1 WlƦ΄&Ln՗xkߺ$tFfrWC5sڷO>a4؀^F]buZ= #Gf>O?<'0eB騙.> 93IhG;ˮ\^A@#;>v?z_򫋯PrYyo0_4JP`r-L VSWH>Fgk?PF/|vXi֒]@SaӧMPOy(-*$F7y&7nMdEk੆cOW>mtL/.Bŝm| O% 5N{';"/hD!0}hڷ7.,Ob9rdCZyj/?і$A#ayOyfH@~=R]BoVoԨ4q3e[+Zo=uw`'_{ʜԌS"cՌD|'SkFqaH W%e/DH7PXxuxҵh?Wju5١CO?:C"_E'<ĥ"bH-HM$"c 0 (}UR( ;?lܵibz~7сMx}.K Ԑ>Dq<ĝcPUsp% GRQmA rZ4ۿٿ_aiHr( 0[4G놪]&AVW#&}}|O}/}Բgެڴ]V5fc0sgUF}0}1#b@K~ɭ35Q @`xH0@;\?o{c_ݱ{CP`sGVi[m<6S|mjþ~ 8O9ĿTꔓ:JĆ^fX 4<z 2!na޷dm}n;:N'g[uC^^P|Spfok pKgեbOqS *L#d[A~ i?F_㩷}vļe ` A'M*e̪LWd֮ph#)DՂ!Jfx4#~BG it+&-,..6L|wx/6n*5gH@R&/UB&2 hZ)[BrnΓ0♾"Qd E|G @z:_f9''`0wB;lm\@s.U m08J=*$ALEr9_SI f:NFH [n(} S*T!_ 08CHԔoRhyF, {}Kj_:y#@htt 즫Zó=;61(M`$fahhk*7ZoQ7)h7? {xOg`G:řICPŀE  i$faBB9+-{5֠.49d yr]}Xd<ӫO8x>ݟ;m%_{}ˮ?xMEMD5h S&󶅼MAWSmBߧ1=}-bz?Nێ߿FNa$H6N$NjK~͖i| P${-*AG kN=r,+_u}s~9wl+^vY|w>:n.)9 -F""OZ(uxlH LTi$naYy_ق-lx\|8&[ǘIiߤ!TsiA/fG6:T0fqy=;G6>ur{2/fLJ!1%78t>".)8Egi ElH0h3矶)#ѭݞ|y?zA+ 6 џ4= uѥB"Rh-Pߢ,~Y4F~?͘ť5;~~1]KgGMNy8+TLh1mcV@՞dVeee(~gM>A{]T٥Ft?Dѥbn"4I&sO#Zo-~1#g`a)XFsK܆8O$P՞]+ AMpDdUA)Wbf,;>RiJч,I$O"^tkhG3( $K SIɶY@!z%湰4qg &DХI"mũOp4S @0HFqb/c#f3^k- 0tA)G& ęOB Y%JܒA@opWP9@Hz* B  0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 0(s ̅ G  s!A  ,:0G\H`(K , 00 1c#vj5nUfC$ϗ%! T/k $8HNl@@)"a "a/@) "a/@) "a/@) "a/@) "#1  0ldS˗/G@,7M n'b0`*iA  @pDt#a  a1  3pt&Q=,˲(ݼ3G3=4CHI)Y+Fe.7TƷuWnZ$[!./X N$ 3,gG|{nM7O`~}ݼ  =5aP=Z*аz.)0hT38kWugi8o\~(  i*@`h(I^j܄FE[fX}qYZrL:՝u{M@`>s~2>>}C?Ȝn~&ڼZ s>_j/^TllY@Ӳ? EI<"./fcnXj$[*m"N~Ca*hsO3;g'd4H5?WV8S3Τ}b;>䖐20SA G 5gT7-PU|: o&JOvmuzuN! Nۥl{D-)KDE!KmɭX$k=/wGj1:sRn&uA… 0d .Rz xᰮ8f/*9{Nj/`RP;LDϗlb=v#$bZ׮x|{r-I`aHA|~ht:??17+V^\ʯB Ӡ=h $qm؁ơӷ1}%bɩGT"5ZJ/])!]$Q r>v?g6=~BSvlfj :5 CL*`&rH6SFFa`<@0_Qcs |Wn1Mҵy-_'j'Zt,z ڃd|(L8 ("ih'i03`T x7 CKCԆ,Ig wF c W^f)A~7 + `ޚZ}|6lk~vCBFmsk/* iʇ> RJ\fl)qZ/)Tثw13@RR 0 |q5VPΒWOzkaó5Rq o4{e t)4/\ݨVkW%bXGܤ1ٕ^$e;g 0m5wM5\(52sbnY;qb7 wNn( S2 -OxxzqsCgs 9*gĘܜQ9PEڃ*,S^4/0/XQ) ^3rJonr|!kr6Ss'^iU ?dʈT>7ybVc*iX΂*ItT?7sB|wJ͍ @>N%AX"l#0AHvhkyA2y,FKH@TL% r4F),S2z1buQ * aHʀ&ak  C*P@Zy\.=r Z7}᪤l aH 2'p?>{ I' ġ!' Y 0dC@@ hU2Cp# aw@aaN Z"G0 # /0 cނ g=B|waD AUap@`8 X||zU,>> [ɪAU!bJD nPBv#a7E e˖H?Q,4B~ IENDB`PK](:,C-Pictures/100000000000020E000000464A8ECCB3.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222F" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?|YAchvZE7HSz֧мvuZ=aEVKƺMX56Q[A~R}GXb7kŨ+ 2I1 0=tSmjG,+ҵ3W mwe;ɼc *s:+גvH E\/`-љ]yEx:UyZKڴ |}8r[s~!ZϨ|&Ӵ.p O=*[5ցwu&pHӵy={J\sɎV邞 j-<_UJKlKmv\g J ]\qiܺ[Jclrz}i([֙mu;y'aJNVycw$DsC}E /RKi#CemSic07cRƒGwaOlG #0'S~ ŮW+kfGC&<emN>6m,C O+e-ZeX ߩzRs˹v;%𻺂-n$hH8O5ko,iA:$1`:ze oD@+uVj*׮l"џM,&PNBFIr.gȵeV#&F+j>?ҵ]*QHnF@eP9c2Fp^ !+{i)ga~8ͧ,/'o95wN+~cO}RoXd[MPk1P))gc@&euMK9ēhanIdޤH =gqyb: <0,G.dV.?-~/"[ ϶qP_I \Ũ夫,jN@?ApT6zi$:e7@<\? P"0 "5Viw=x5{Sz:7U-߉4PhPzZ88Ҡ&kw V/^`ml|zi)Fr}QhJ .bY ,QQZeXVݵ#dbv=ȺjV2ۮ 9/v[ -/ L'7 ldc)4P)˹ڷ_V{Jpo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8G*{8vAo8ZZE^wzVl?xESm"&XEgeݏlT?K?/|ֽȫJɛrD\/h_w$L%h\/k^=N# ?KcעoSrD_%~v9Mw~ R|s:$ܷZRӽ=%=n_ GZS;$L%>vEkG*wHJzܿG5Eާp䉑_ȭz(;$L%?JzܿZQwHK}5Eާp䉏ȣ[k };QO$"/?3F5)UݥbdCȣ\X}oFeLPc֒2=jS!'{Hc]ʷ/OȣX?7^ޫ7eMI4%o c&0v1k:hv:E+? |ǖic6/cC8TT=o`7(_oV3W{ o`7(_oV}Tqk[\=܈+'$Ҭl`7(_oW_5TM0vUC-ڄsuȌ/ev Vt+? |?W~\ٴ qIO( ˹߃RXVq_M$d`pH<Pi*׷:4;7 "E`i_?jZ} tq=,QX(w&Fh9W~`7+^['vі`Wto`7(_oV}Qo7WZFʥH IӬ "EpDӧ=nS jcqXd. ~mvԯ4}JW*."yS DZ`7(_oW#U|!c 9ԁ|j.55Jӝ E+? |Ӿ?_꟰ "E`iܿw/G "E`iܿw/G "E`iܿw/G "E`iܿw/G "E`iܿw/G "EPon%ЫxN)rJ1W~rXu35rU%fPKTQEfPQEQEQEQEQEQEQEQEQEQEQEW|E2}]ksrO*[Ddp>N57IZY;8#]'ߛMxyk2^]iz0x$o;B0qW>Z=j mg4Vmس忇yO??F? ui=#K\(o[ۥ W 0p 眓E?W'lgK4pWc18tnzO??’I4]-45.o&|q䁸>lJM7RCìJ=ɼ&q9TnFs^էG#v7V[zKrڈMZ71x8Һsi_[\d:[`$cInzO??ª5W4i<0QʪI$6O7?¥A8P()UJJA*r>|57KVNÂ;g֒\29p2iad 3D0UdP~ln澀nzO??±{eON}FTxȝVl-Yb[=2EK5,m0AٸZ_6{#ھnz}O??iG Ke?8gLw3Y0i6k-'}7 6S {#vY1N9dxPխV(}aCv cFvh (2%+q+ +"u$axz}Vc$ )U)*vǚx:x6&YH=^?~c(jz딃H讣O7?F?ߘ >H=^?~c(jz딃H讣O7?F?ߘ >H=B*6E$# F9+J15#Rw8Š(rŠ((((((((((((,}M"ª1g:Zk']ю/?۞0F^xm)&ƕh# e"Q .ʩqd::lШɷyv.O xR{Xm1(6uaIr8#xj-&ImmeV*?q=}nje">(OX#r\eIFBjj ǟ!y#ՙ%k~]1X,ZEs.֜- qMfA⫹Y[IIf[k(QX7 s[PWDKB`;(A3x?AtDm9H!vryz ŃZ4i4n"pJѕ xb%4P|ev VA\so s鰶 8'9ٻv3\& iGLH8pq3@mBMk)i  r3sQ \ T1ב]6iSJV ͷa[}xgE=:ĀQp=jG"Hg?LդXSɖ=לں*{cmڵBXH#}r729RMAWYaFU$r?x;c mJi9/.fGInɆ1XFyn&/<_ s#Q#!$  ]K-2:<$`ŔaH pHq@9=%nJZ/*| *F(\@~]è$ܳIn?hycȻNA9xW .331;azC3fiO8 }kTⰹM!rK!H`#8;oonlvZGqq Heec^rWq[!\=>6|C9[f_he)8]a+7T,RկSoMEQz_3/MM2@Ok>-eyD a@Xךx4msV2qvQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEPK](:cc-Pictures/10000000000000200000002008D4F69B.pngPNG  IHDR sRGBIDATHKV=hG~.fHq1k.tJU* )R%E WPyQ+Rlyim9YH1盙ݻI8v}}{Ç0QX}JܻRs7y;<><+ߒn49Oy9,<nE;Ic$^V˥&R/w?qK4"Ү{`<9y=Z4VkgP&㽂%{1>%ry 5E[݆wEgFg-ǜ+ ɉ)ˠ7dS6qx'N&xx[x\յY,KR`+M2_v^UN[uޚ~ ~9X`dޒmkFN.h)\x<4&,pƍ"Oa)& N `swk:vuƱ!&nU9ړ_<:e U> inIͶ`B`&ckxAP '<9jfdJb<ܪCԶ!nH`$ N)Lr Ye&dnqXȔJc!m{."nIGO΃?D[M;/$qLe4u6BP &k6uR-m!?".%d﯇o(bЋn[i+9*Hů1AғL> C%4Dw/g|oq{,S^?-{]B)$$AN8Bdg^8mt{՟U `I<`?IrQvupxHmPp8>/?bh WqIJ"Ak_'PW?Ƶ֩~o2OG~? ?5*?C}_?ujC[/KE^Gr|P[tFس$d*Y\! O}+/Q.C[8- UȮ5ݳjw[8LLyFF0c%N_KͫOyu5zK$WgO-|?'&YW-$ #xp~d%6}3G6D;l}}9 zyܪ1w<J#}TwsssQqG~? 'PW?ƏC}_<o?2OG~? ?5*?C}_?uh//?2OG~? ?5*?C}_?uh//?2OG~? ?5*?C}_?uh//?2OG~? ?5*?C}_?uh//?2OG~? ?5*?C}_?uh//?1gk啖@(8&?!E[g7ڥWxPƸRN~`%A8:׻6ʖnxlA{PqZ4/|rJ|c4vvQk QIl,$joG~? Ҽujw7p$9H%TH Oa޶?ukX-jK$_sQq£?O'PW?ƪ<^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚnj?/T:4dj_^~dۚ5-VT'Uuj{=2;w{g )'jdr[QE%X#qժn?Z@3w6 ]TH[fӣT^j=1h$q\F<7VS*D1 ?# ~/7~*[ho&cSi+1 ^Ymd]Y&5MĠ,S۠(oNoQQ-p 7xnFƦkk,R5hhX4BI##? ͯެ ,cl 8lD6MɁW. 991gE faw̒2bso(?{}S\Imj)^v <՟deAnXm_99 {%X`T Tas4Y3FF< GD #si<Ջ)Dvg%0s{}FfyK3Yky Q 62 qcX+kƖ) U[` xo$$T74oh{_#}>(VeqPi,.hoT2[M2M-RKv@Y~r}74}S=Q\~Fz3fy9z+oѽѣbGaEq}74}S=Q\~fT; +oѽѣbGaEqֶܶ~Y&IDj̗YKo/Ts\~~?v+*qA=(`GQ^n|QjحT w4dî{`>֟;AELr(;!(`GQ^q7a{r/TU#' ^08u׷[i&I\IdBۇ<8#G՗="bӽH|H-[cXİ*n3ۧ4}Y0{O#3Zm"0HPxܒPːw|jV"ڡYy#T^9Rq22h`G^mmh扤kr YzKfo4 Z)6W ޚ'y -:/&q[ מt~Sc7#rW | _Η՗= 5Kxˎc$(\͏2q>Sem+tVHai##yyEyxV^'?L 8d# x'kgVF)*aIǖIb1G՗=:5~3a@#Zeg I޼{{e7#c#}dIĆ!(!+cp=(`GQ^o/`FGzN O: qj26{w(-! d >=\%`0;8Frsk>s}A&Mǒ&BNp>R3^)Y0{O#7o۫Hvm#_,C98?Սx`I.bjHByi}Y0{O#?~{5Cr & Y3ڵvXϭ?{:( L]W^>\d=ݹf~Q'zQr%86|mz8O̦#6SMryӣcx`Ԓ3ӯ5i|5*$TF$sQfϕ_Ƒi$hD¨ռ"ޣicek)U 4>0, K}ޣ}EJcN>@lҺI(g9Jt gKϽG+M~T2QQ%"|c݅7sOЮn{.VDe$G%ǘvd}79zW}S01S_0[ npqg%Hszmr*Ş˚)$+o!U|>#U' 2@@kގ}T$KMGQ+hḚI)dmϞd ӣ r#@:ԼWP5;lϓsi -_NI{pyJlR@;r&zyVM !^9vϞ~-%ψ%r'c͗3WQA;R=-)Z4vFdVd9BW%OLJX^g{*Vw>sSO0G5&zG]>iPrɔ1F=̒8涂)UY[+^&B Ǔ$=k"C$s38Yӿ үmCsq*<`JyrïߥV:6\܉DDA#2p}N(ՓIͼhL ݆`R>Kd]3WY-K"4W  M**}p2s}x~Tkmy0wb@9 V-m.n g9GmͿ$duAЮ`H72L<]ϻv: #|'"dvQ&#r /.:lӞ96H]F)EO['.h}7Un=-Wduˍׯ{ ܇JAEf)O\nE{iilpYDB>c<~<;4--,i* GPd{pڒhw/,/-J,ؒ22y!|k2{th-h?$ QO^Fj_&m`s@IӊmA@$o%>e͢jkIb{ai98%XCJ:yt]6iyl!i1^H㏧׵{ w-$\y@ d/u#"Ŏigb.{7Ѽ7xpX[G֞B;NO9ޝ`PZ#e I>ll7 3]x=}it2ElD($_1`j=VL.T!YUW''鴛gIu$3wcڟ* r33Fţ#[]N;x̡D{ 뜒sִF=AvUL4Q8Xs$hNi-њgHNrU{Qj,t1M FFwugڣScGLcc_ǵCdcX*q<ӚtZ]Q,ďRX{Qj9P\Uv[%g?8<zG4%3$ /ڌ{QʂyۍDi/ OV݃LӜg {Nf-ٯ# $\yw>k%zjA=s_-ܱ;$4 +oʐxKLVO5k&Bs~l`zs[{tRH] q̼4^խ51p.Lgh{UtmfS1v8!B\tsK^#,[q?s8Jo-> F dWUv]&t]zg _jQ[sgqNRhdXoryIv r^s^jXV6V·{(PH]'jQ{j2dQ.td+ xYg&ͷn13sR'TX*S\ 'qMEs$&)0 Ι ΢N.\.v~ۺz`vrK]e.C. [tudO#ܿ7NEFxfmV$y!7,p]̡"45%ԋ䂱T8?tm^=2 /E`;I4kpF8'h`m ow,1vyaHA@6 <Lj[OX˧Kwu%g`p2GQqQ6J7M*F㟘 5x<)" ؒKy^a,i$WeTdpCx}Ke6?kP}=*};8-ͪ] B@@ )g 1? n}*{$gvhJfᤉUсX-؝6bQ[v_v_?EoaI1aI1}f{9r* SG0<:9#~;/?’SEoaI1aI1L^Fo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YF=ou@^OvG}=v_%9VGO4`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Q[v_v_YFo=%Qo=%Qa`Tt_[?v_:-Id߅)b)arEWnT'U< bi"x5pz54Ip9V _h&ޒȅ ^ӡu5݃)'(sN-o`XH[- +護+@x ҹHoIeC`0sk]i_kY(TAkҩ(iDh~"6;2* y9ۓ1"h#n--nD ry8.=:+ҼTݴs3p89<,Pʸ|Eop除eTeN7(3tmj}IS팥>UO#yxl6,*F}h6۽Ě~Z':R"ƙ4'k#z "*6NzVеͶY3۹$\|$}3 eme>R9tQ\̚+) ZV}{D2@.tk_YQGlrs٠+9OZ&jLlm$)W-:r=;OK$,D)$CvgGwErku, +vȨT9*+oWeGQEsjlECy? Ywj?!i^~C)R}н:+ҼQy? ڣ+oWߐ >>=:+ҼQy? ڣ+oWߐ >>=:+ҼQy? ڣ+oWߐ >>=:+PT'ɨ?!O:+ҼQy? IB(_J~G7?Oj?!i^~C((_J~G7?Oj?!i^~C((_J~G7?Oj?!i^~C((_J~G7?Oj?!i^~C((_J~G7?Oj?!i^~C((_J~G7?Oj?!i^~C((_J~G7?Oj?!i^~C((_J~G7?Oj?!i^~C((_J~G7?Oj?!i^~C((_J~Rjou 4UAxY%{ڣ+!cw?@+ kr wCm%i #re/ c޻x#q=s^—H/WS("$g$vH[g8̙3LgvщjʓS 5m߮1w NxكơTDUAa,9|2ѭef;27qVVPNIZbPY<)pWt"0ȿ<|aAޫ},K"j 0pbGߚӼY%֭sJ;bE'-O[mhV #Jncsn&>!4QH7AtTZ9^Ch>-m{,<ϴ~K {v08}ZºrzE,6'+ר5 h.xTiAdrr+=DŽ縆x3sKu#s*)-#]fm7S ]j[S4%Uo l^܌Tq3שxkfń?i1s:ASu׷bkV@vY #̄)j$YdJ{O7ޏ+#mcO8ϽE?v92}5sAyu% dDD8 (`{`3%ZmrT`r8-G%E / MarD(6gzwB5Ot}̏,>:r vR-f dXMb HŇNT4$nrr*]=rԶLڧ;hJ ߕc}hEG]?Ъ /o;"ƥYr'$/[s4w Z663zA.xQ{<*h>==.xQ{<+]a+7I  ?%o Hg.xQ{<+]a+7ZKz[]j Uas#G]?Ю>>=9HIXy.xWOE%]?У.xWOE?ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xQ{<+ϲdc.xTu]B O6`H(43gKk1R~^1})3_goeZ .I8&k9h"h()r=z?Z=[F5$;Gm+n췧j[j֐Z99O#6UO0WGEusRsn7Uԕ6lEW0_y6x<L?}s8m,"b0cz{xhiVVEzzk\?T=4H [DH>x fKlNCg1/nj~-Cإeom/a=* +eM2 1IP`smGNf c_R44`F$P=k nqs ĭ"@/*EL\p"; j7}}k>\ARH7Y98Kۥ99^1ݻVE_VFkRٔI:w# !|'EVF:rcm\F#Q:&?X+[O'ɢSi"\y;qaPH+ԼcPPf\n̼ [Qja$s?KdrOetTQja$sг/O*Ň߇fmgc&1AS&kj>L=?甿Si#}f2c]çқȸWm\*VCu$onL=?甿Si#{v/4nL=?甿Si#{v/4nL=?甿Si#{v/4nL=?甿Si#{v/4n$_ܑv8˥3yt<@mWPs^ч]&E5M1!ZH o()>jÕxYGhU\fiZM:E ʕ aC}r;UƓHFe#82=zbSSVlmK (V^ɔۺ<k]do\OZcϖ< վ{Uϰϼ_ȮvvY.0hXcAjw/p |Qgl`0zr΍Q.dsqk:|G0.>\H=qZ$lY5<1pHfO$#߰3ߨc&Kym1vQy&iw #X6({2Jy_什:4dXEށJ=G`ږ;n$eP &pݿzO+Fk1*Krlf09\}_^9,j|m"3\=f%ϝj_c( })%$4V=RҨU?[[FH.oӭGE=Ɖml3KffBGS*ZYH ,2Gyi$%Ҵ$9r6coDŽP>Q.dF, d`EaGir:Ȉ@r@q]+_ E +;N"29#*9G4Fܵ^X=B!U^͋.}Gen; [r .v:p@Q~M8[U]aD@qO(p7].cڹw Rpl$[_[|Xh'}X; zZOݤ^_`Awq׎}k?7^v$q$h̅6]higdޘl09i[{f[5Q/q~}nޮ>khԜʮ7di$VDy Æ{}x]ȱ{r eK*ۓ$pi>"ϼ_ȩ/ܾ]Ȅ00>^6*}Q}GG4m?/QO>~tsKY}}EaxS_Qѹ}GG4m?/QO>~tsKY}}EaxS_Qѹ}GG4m?/QO>~tsKY}}EaxS_Qѹ}GG4m?/QO>~tsKY}}EaxS_Qѹ}GG4m?/QO>~tsKY}}EaxS_Qѹ}GG4m?/QO>~tsKY}}EaxS_Qѹ}GG4m?/QO>~tsKY}}EaxS_Qѹ}GG4m?/QO>~tsKY}}EaxS_Qѹ}GG4m?/QO>~tsKY}}EaxS_Qѹ}GG4m?/QO>~tsKY}}E*+X# A ҦܾpsKY ETqyKY$v69>Os};_WS0S]j-&g(cquA^-BpNyZLpH< e-LLL|z{Z5ǘ.@`kFO#8]3Z4_Gs1)5Bp>b?$FG-Fnz]T~aXLAaFO]gʵڙ*<\}jUh.Guy{ 㑎䊺$K,v\=O\u++d{Kap(nlɨ D" *$B3,/. e 0#Gh[0xpA C FQ8P8sSǣ:$޻~NAN-%}Z $om b v[}r8䶙_zFT\CdG7mn$y&GuXz{x^'._b#rbr>*?9cVӛ{ Ao0]@<ȩ5 Bw6qo$ `W =kM8 䍪jr=jV N'tJaCcGZ9c[Ʊe{4Awč y>%RGcJ$uI*ʁ2?_–o޶8;pz[7>gGϞ?[xH,jHd*݁FpyXoF;n|p۾Mtb[m<ۄ~@۞ hGL]cH@łF} W#Eo.bWezQ`/תU.IV ?z?_~˱Ek`/ףޟprdQZ/? |_G=V ?z?_~g.E^{z}˱Ek`/ףޟprdQZ/? |_G=j ۗFwXbmy'ޣ_J5qHȢ_~^^]+_/? |c"_G?z=>Ȣ_~^oO{9v2('`/ף]+_/? |c"_G ?z=>Ȣ_~^oO{9v2(`/ף]+_/? |c"_G ?z=>Ȣ_~^oO{9v2(`/ף]+_O? |c"_G?z=>Ȣ_~^oO{9v2(`/ף]+_/? |c"_G ?z=>ȩδ_~^)Χc޸?ZRM%sb(4*!VZf q"Dlң'*h:Ř2dxPcl>A8?kFIM @Asu$YX8x#)O\`ϵk2hh(pH8<(H|C sj+6{p?k]ݴ4wvJ Xy{syx-ٺ[J'R#Hɒ8R?py$=ik! 5yyɖ9^2IH}M~#r)Q 8 QEdI"` ,`7'ϱ\Q\JtnIgy%'@F )xJf14Wv0e.nv* =N1w g#ir=k)B[yXXJl=0NNI7$Wv6?q.HHy/ 9/^hv_)&In6Ah@Ems/#\mBk-&(G-݅fgQ`\2DB3U'(?9(V )k>gB5;4ϖ?Et&i,KIhT(ڠI hNŬYOo.F?iHl2ɻp9}ׯj\\ Y^YvR>ˇG9`tؼᛜ|84gsF dd?$@=zT]33f]qK p8Q@EmF;6[;Qu8sW3Rvuii\vʞ?T7~la аۗ-|1?_ ]kZ>n-R(C ._ z.߇0ny9+?R_^9G)//tH=HW’BN?I|C{'m}oa}oryQ$о7#T2V+v7gt; ]>p;]cP#Jؠ(( vk-+o0#þk6[ [I ^Z/8##mjZin D*[`e9YKEֳ@"#19ݸH+;\>'k{[["&0.sБ'9ztjzӡq6B 1'<'VK.$}GEpV h&Y㐰mY.\Ϲ>=0/xPk͜Tl ! dmێ38Po't(B́F'O9>Ʀ[ɨ[n3=ӡ@!vY>+ڻ`n3q@v?mA2[ u 'E6ӐGsȢPDj)gϱ(nݸvTP1GK{80PrO +[4Hγ{cQ5%|B,x㴣94czkQH+QFSvWs1c rxS5cVW0E? 0 GqV<,3]#*7(89 aik.qڈGF=kRXw۵B9 bSp-$*=>\=GR{hԲ-_VeBȡ>yc}9wHN FNJ9RA`4u_ږ_#J+0!FO\Oo‡[΃R{e=5\v^  TA'`>SPC.JJɂPΥ vl}>9zR{ך7Vյp܇Ky<@Kv2$w5OIBu4s?^Nppq0B9z_e=kmN!7w=e~RIF3ږ_~FK/-}ZN!qn))r߽\y{Rv|>DmѬF>b86On?0?ږ_#G_לɨ^Y_jD+M>l`EnFI>B\g8ajbzeuu~Ÿ{Ie=hԲ5̱ETy3^Azi ڠqO$@1,[FO$N IWjYuږ_#__o 1j'X̯xoR{hԲ5/%&W?OKLH?j?dߘ{ږ_#G_i<=t_ MDm*&0[{U9M)s"VU1|+l{3J-7+L1NIl( |Ĝ8=){ ~a$wi >0mA6 8*o$wkxW 9'H%GW&"ԇo*,Rg;U OP[ꓽ*ƍ"Xۜ{J ~a#pgr(84Zy];W; B~=ϡu)g*c`JR$ ;$3Nu2%yQeg\xWQ)a#,ږ_~F[fi~Sțpr<~WP54HZH%ti6LqGўe=4jYqu C)EME zF[H+:\۠ ,r4mN0ZoO=QԲ?,pIsoKwF8wV]Χz\\<+(ڧi9 rO =݇ږ_#G_לwhW7o b #)ܪQ*)]譝5] W`;z}{Ie=hԲMZ-gOl$p3vZ[;e?j1OF~3HK/?#G_טCuAws*#QbUs{(G$5"뚝˲[[ƸH0:>}^{Ie=4jYuye| 3 !Ie' jIH$R2#?=>9z_e=k]F+9k#"pn5 $w'1@ŀPleS]3,ږ_#^eQŦ{ir9V؍r*IuJ8Db9\dc09= >=IԲ?yz-3Gin#g"ƙ X1JFx<Ãx=E?åHoK/N{יǭ R+w/hn6Ȥ~unⷞ弽E4b]B'NCGjYuږ_#^d5J#y`x\$tzp\R}3@IzdZE( ˃5K2s4E+a+%#<&CŬ,<~.&?)8@^Nќd=${mȗșHc}:*B-'LHicYb}zp e7u弎X`L3PT) N3Ct-69YdU~RUytpcI4)cY#wtae jw5cu->ȃbJ'206|AmÒN:UHm53sw4m",Qp39=,{ֿUEڧpbi u~nՑݝK \&snֺjwI4dJ9Hؑ ;AWFxϵ}Õv6h2ƢN23d1HL` +6 U[9#xg]/8@㞤Ug/";Ič'ҍ .B9ϸrDZCq$K͖=՘)Ybwtqe Z}Th\$J'`,pJ^7QG4:mבdX*1/lxGpc]4RΪ_{zˠ}l6eتlwU |?6FxPB'wܞv`y}-ڍLJO-ɋhf2 rĻ989}Ö=X}wQ#& Y)n/ \.+$,IG9’KOF4!FHWcɯ? h*k.]ʏ4 5VF,|?~# d4pHSvqpzm494-cD[Jߏ78qWQ%9Qx#QF4;UT bOhw,{_Iphg?֛k'ZQg9Wc?tcZO(ϸrDZiM??OB=${־t@:*ZTQg9cƵ_(ϸrDZh:y֟ (;,{־t]ːp[# ~E}Ö=Y~O(ϸrGkOk_i}օ{YX3GO3uE}Ö=[Oi}S%l'H۪?iGpc?t??}eB=${֙35+'۽]˖*(gcZO[Oi}օ{YH2m Cf(aQ@*OkLcz(ϸrDZiM??}dB=${ֿtY>ZQg9cŴض(;${ضUEڧpc;TbOhTgbOk"ܤ0zU(QEF># lȮfO^I'ʛ| ơ<^_[s%p_#'_ZÉ=%iX0? @`WlcQJIɣFvy>DbK 9=~9{qņ0IHҳO}lQʔ<>x[z5嶖-pV\=2OoZXnUBR1 r䤜d x2M7kwt +1c8m)9=1Is-0$nl=ONs U͐0T0#Ђ2k>EYq]h5&`2UILs'U`s[]I"U<%v>?/bJ[ ~$h/.Z;g#0"y*XtpQrw?ҔJ)PYVf3#D CsxhUSo2Sw '?K]B!\P$ms&9,q}͚\̄xɥ 2' :Jrx{+i$B>@$)= =6btO 8 a<+"Y-F.|I'!u?sC,_NVW/F\2ZONc!^}qZ2x2jR/*0CdIFFqI'VWg\3!9lsJ4V *prI\RRY"ԧ$+xC+w?TZ~h1ā|82{WKVAyr>g#-V1ɪ}ï8yH+KE2/QwȬ{b+}=K.aCOTgmI$~csϵW٬M"jr)"%f?1ל3V{Rd1I K}w?U7E_Q{<sR H'GۮOȽk}?/bj^Ai~$uI}TGE_QK-"]ğn?瀞"y(Ƚk}9yC'Sd^5G5/ ~w?T}~$oأ"y(ۮOꏷ]ğM{<d^5Լ!uI}Q/bأZD?n?>w?U7E_Q{<sR H'GۮOȽk}?/bj^Ai~$uI}TGE_QK-"]ğn?瀞"y(Ƚk}9yC'Sd^5G5/ ~w?U-]­h' rqJtV1m{, `~UУy?ݿQzs} =idYaw}i:Au,;(ԤB ,fByDl8 ▷׼ s}Nq#mwg[|_5xCQ2=GO >i]78T0\\bᱹ3F@ۜ~d*MgZk3E[Yn$q`Uou?ݿGϳBv<{/إ~3Xb$/=F->Ͷ6s0>nyi2+oy?ݿTӢkȸl t dz=5Xi%0"4[~i6ۻh,qS ԵHUO6x 2*Xc*ǣVϻBvW9خ+P6)4{!i0ǿ b w/ǭ,!lM{ ZgϻB|2m&V,-XhlF[8m5Yqq {k&q S`@nd ϻBwIs>^TFsW\PJ]ͽF3\*r>c8(E>\CjmibR\3J#%J]r mo'(OoQz=PxH$[޲h|G2y; z ffm=f6[p,3yGßNs3TwW>Ь?G+?+7z=ϝ; z f51?X|9Y>.VVo;<{Edo'(OoQz=z+#y?ݿGϻBMM4*3FEY^FOۯjI1ԠyP$Ԏջ&gcw}*?v/aQ} W\d?nLr,"NiaB:N2x[*La-ɗy G¯v>} >Ssǹ7y趠uE;ҪmLDZ5krSR7#Hr9ewƺo?ШX)`{ >Ssǹ湰U-DoBc͑pHsȖO-!.n18y9R;uУy?ݿGvx(xX}ܶ{O*aAaqz?‘lHĬ 6>G;>} ?}}^`s>MĐg;D qeF`R ꐼF ȧ "GvppxQШխb.0ȣ;<{]2MųbȷA8{C$m jViըاk 6I#0E˴ٹ6IO;u?ٿGvx3|Y%Άoj.yi[nxsyImof<$_eۿ} Z!6e#†9⏫g{X& -.!%?}qrG$vаk),UFNУy?ݿGvx0n'Tנഁp9<" D*WIjOoQУ;<{嗋66`w|M ǣcZݤ(4J@$% q>^N8{YyVm$YW?\uS[kH-#\oSrzyW9ܣoInT)$8C.ZV(\{~5KfY$,>RF KУ;<{VGϻBvW9ע?}o'(NУy?ݿGvx5謏v>} >SsǹEdo'(OoQz=z+#y?ݿNZYfH.wtE|5hģTW/.[O9}bp#ss]>\S9u7#o.VAg 8޽\bw9D$fYɇN d\ZNFʢeBqzOIm >k}X T&Ww#?^+`D"Z[mY^?66y[}[OtHodi# 2dž- YR,A\.M|3m&YT1* Pۜg(+41Es ETEya@rR+óеʀf,m  EFI=qpmV^ÂCvAE4%I:64ii?@kjh-dT=CH`5KxgYķNg,rOƷtoYOD Uܸ^:ߚ^PV2ZZxH &0ͳ@A*i_Gue t3~JρE}6WYFnTo!6}K=KwWİ4M ;#JXyO)JW+[/E ydMmSv6I'<N2IRi~"'G$PA b 9'Y$;fHHۅ$p8u9NI M+TI7JQ>ŠNNֵ05G1(a: ;U)+3V($\#f_[{? Gҷ?1X)5̲i2)#J]øg'qQ݊XXnL$&VU*A'Ju;$?mMB%iYZT?\OPuq=>(۵ז,cp$/ u,ge1Y>P \x3(?CO}s,chGrjxJڼ su˻, p g#>^A#.&ϗߎ@Η#MF՝sFOW%YJH;;v9P@vsPz~+ңo?̟r^^&#(o?nQ&#I{ ߙ?M>:GQ 7?|M?G0?/=oMA]QT ((((((((((((((((((ΡΦ_ (֟3wSעgh\S?!Aygg}被}E?yz?!袏T!O?G<?Q?!H]*;o>QG$HO:&.xwP_5d-xP۹>}QwH< \0(Q* x|կE-<& WnﳮvϦ8ǥR>H<%f:-:[/chvJmG9!Fx}MS;%yz?!袏T#|};o>yz(yz?!袏T!O?G<?Q?!ע>S{8<??QG*wgף^(N?`CEX=C^yz(;$/cbmy'ޣעzrD?!ע>S{8<??QG*wgף^(N?`CEX=C^yz(;`CO?E}bpqyz?!袏T!O?G<?Q?!ע>S{8<??QG*wgף^(N?`CEX=C^yz(;`CO?E}bpqyz?!袏T!O?G<?Q?!ע>S{8<??QG*wgף^(N?t_*xFv0llzrD֢+PK](:O?)-Pictures/10000000000002F7000001AF99A941CE.pngPNG  IHDRP(msRGB pHYsttfxIDATx^xTEǷd{$PCQET^@i**H(* U$@ !lل-޽}y 3gfghf_    ::Ս -r9x@@!^z8p1̤%гgKzTS@C@k&&K1(uQbT   P9x@@@I*GQ@P'u+F   g@@@@r9%ti.RԺ3q @@:P9ұG j#@l%Jhݓ)"1 X4u)kr~!֦< &SzC.LOh\㬻,:AsuX_I%C4;rxG35vFE-qḞ@"+d ,կtY*x){1ԩrdž@@ѵ~Ȓ5]J8֕6sh, juQ†-iQqMP,#-LChg}Q;3zQD'x'% DenO!$M#$`>j]ԩp)yvkzzŊEEXakBϞ=!#x=zO즞Oz<QCwA@@@r;x7_WY6u2=s'LZtiM3a@@@@^rn lS)"{;bSt!5PЉ\+!FTC <<\&g# hTa xʱb9V]fGpt; 8]5NNqv`{K s<%P~!I( YBG$HI_W'qBSL͖tmً\4Ste^}(mLQs˭z j.1Ͼfjka˭4lonqz< V  #e˖nIaA#\̊.ՓTIiW/IEF;a48,VAÛ:#_r9w+)ƘYuA4HXX/tE8n_qWUذaѣU=Dgͺ`{ˆY */jc+Fʑ$鴞j^ۂeE&\EYV5ڛȲAeK\⊴[?P4ZJLLT(D"f϶}[k.iS{#Cfzʩ]\WZJSndYjbeYhi'8P/duf$U*}9)EޖQبE2a99JO_,4MI4jl[Ssmcu6%ցgWI= CQ٪ O)OZ*j+4-X-SU[R :k.ouUs`PNEN*U5fzʱj7qS.c|Ԯ(%:oF4_75͡d s_ТI+Sʔwqz/ <$M=-ɔJ! AQ6ye17˷ =gCVP$׬2H;k`z3cSBR"s귥}HptZmiAAgCy-h8pUsiW5TmNTP;?j2$Een"$ SǘeNJ2&%eFSQ}+[j}tz_.'Ġ 1 z4Eٳg L^(9vli)m~9ˮ۶^-XLk[/JY7?nB9e2_`A1]PȭġXHdRȕ(IJ0-D)-Q+NeSZf6w: ;QC*#ř"O J \PEر\VeB,D9\N?$َuVmc}㯚M)5+O@q;+2@ [0Ruۋ| r3 [&q֬Л+D%&%KoވF6cA*񡹠*|Qy *}Տ`޽{0v(d3KBwZIAGGlg8trSV-Ȝ$RTE˺܉Uj(̈́ʑwzk0)Z+5Io55%fP'f:4٤V@+Ꙏ<ٳ'<Ó$*O^U\h]7u5=4QWq nъ;+.Eii;=nݵkW||+Vc;Sfkj7oX~Z[<==۟kk˖5~-Z\C(W86Y_DDD~~>N'W]VYClRyyq@pQ%#ՖL0ѣ${Y"џKi%k(wghVܞ>̣@y LB&K͵;pԥ:UpEF/7IIIo֌3Dݹ&Y'Dh"z[x͚5#; w{ee-ӹ3T{·N/= kpHK@hӫW/Xe#]0yd챲q>6\@y7:111Wij ʄ3*k;aJ1衵*eqЂ2@Xp~g|js#g]ټy3w :Ot\zE٨7A¹5ejMUUj*u1~!M -|C@0,Xc7=VH!ۀp~ge5 0fB\@0+3k\FgP)Spp~g6h繀QsEː֡N~CSMҮ(yGTH5r uyluB_;C{ua5'ШL@n!Z!)'wVYs i#/\^i5ʺ&%VHsO͝59ꗲ; d- T~z6bβy.rV-ϙ323I6ִ C̤ l@_$nrtrFU! nӢO+;B%*Ĺ5wVf ~l8T"SRGIq+g+"bE? И@.?'$ :i5;6gծL3fs>N*G>(-vmݞeEFç*n0z`$$듙?_u7Jι8 ЮO-Z\D>!</2J*GP8̙3t }()FI+ J.H&p EC5贑CauAR6sΥK/DE*jg ҅u9 DA:S!YC6oh+,cDPEM]]I*vwЩCHlOW"+Vϥf=zИr:q׆NTa05mRb`"JިFS[m>8uTw7D5V}C"irggRU0fn|ncTys@gx? f߄ᦨ``_d,"7q P9P=2U=t/LVeC57Wh*]s E6UE6En|9!`-.ްa-N͘1Û'@aA`\0]9D,/}r׿k~Kϵ{`X۱yKtulN6 0XVBԱ'^W)C[HK* y}Qd պ|ޓbM+0><+"72׿2߷įI+6U=>!eQE{9Cb^nsZ])ǿW.^j;v'̘'z@:<}=g){Cp55|ehi0\=tq摼ӅnCqr q+psM#Z1Cu7B]2Vl uB| ġ5֓jjCf*~K)C&sZ:WUt۔l -M-Zrl'sIA- [uB[Pġ*#lK\<ΫozgZx+C=҆A2_ƢST\LFΛ9xD;Q0߽{7mqSUBKJ/z_VAiK"< _m4jJ'sLЫ57_I:z0f#e,:d7tr1{CFLV`̙Tgt kH;s a:`n)܄*<)qs匒ܹ1?8=\ПM7Zv^_I[63Sٗ_Xkޟչ71-cu:emmB iTT% swgVQ 9p0#MVI@y&>/MNh;,j^x&_w0nuxu>_^,12꧷5o*}3c+nb}Iz ;g剔!}Cy֓EbF Ka0@׮] @e:tR6d)DΕEjs)%6`PE6r_*?Z[Tѩ/Ҭ?^/' 4Z3nf #zawއ zH+xEW4co)qx ZjwD>5 )gwe,bPǰTJqnsKb]޺+kH٪k@OHҡ=#i7В=Jh՞b͂ x֧l[= mI*G"lTDihʖu\PҝS' :>֤k/'lNrhbVDg= p$ppPwT^õ~O-FӎM!2['w#@ӂu)}&-[=}ң){V͡r?GDHZ:Sm+ի6٨?7T|s80C1y^|Í2duɈI$'pIapr[^t&x.f?n3FqYcVt%u(Y되߿?Yu$n}Q2AwFCnѓ~)Czl7_.q(qB2["gwJbEt1}^rO kKN)1r[tqtx:(Xv>|?_Uljdo{rg\tA/k@o8VKpRʚ/Ub*ʳ :uw7?_,L-v¡Yxρ۝\YT~/Z/`]=Ͼje4@`>~=$MXYhs̱z ?9NYC;:_)ZB޽{퍫F#N1fPfXR$z4zEk J|-gV3o^r X=7v*مczdtO?|;^ۼcm>HFqƴzEKT%.3TC`h`k`hؼ ~ NBf -TR ƹ24QuDZ[-P$q폌!oET]< C LZOT>Du9jMvccpMia8tD']ήqKUt2tiU*,_ۿ_eἴu ыϸ/\)CèЫt~>Feu CbkFWvh͙gu{@.G3t\t͗;vHI9^UQѪSooO5-L®@A`b *:>Mu9BĖlz혆;&Ec; gLF_=&3Xwb#:7(?'(f:Qy7mX8SB.35cƇF7пm6IԘBnSRw(Oz5Qdl,q$9xcE7uً飒y>&Yw搮ƫІVh s{GsʑVؗSBY_Tی^Q9sM5Xx Th+=88 =G+Ml@p&t2 αI x<4p"! K5mܕUS蒮KQIa#{eDC$D\Kфai{Sw0bk,ş #@aDZǰXE|,G䄴;״?NIʏvfi>]YߠǙڥۄwt{aO#~(*,$ܗ{<'Rʑ-*&dB܉GgbБp)sN}9GϞ|ࠛٷu^ۋ1řCVz': X̡;7GUV.- %N qz,J/؎E@2qMhܞNq`?*k7̽ek/?sKUЧoRsKyۼ€ RmH*U2#~JYHlT~}zp%i_뒆w&<`r֔CDej8H:*,',Mzѡy7hd:7 Z.Ts5'xLd>(&)<*G8:¡*c)r7Vv<_u1\sǟ>]_~[.__yd O_M^lY΃et:cqT$d7ʷ>9VlByLsK1$N @MHWI/aNH;:T8K,U텭R8o|P 9"t5' q(qVEl5`8r:! }"F1&>cEmw MGJ ]fxrx(phs~ϹYyzy9G\QR>{+I_5^ҹ53NiS_-W|~J5E5 tp? [ ŭ R)fU i=CCd m {J )&&O: %N:TCz?-/bTk׌  ۊmH_p^;\njT3Nr:W|^Q]*c9xpֶkV9i7f6l徖;ξmlpcUyZZxȌ _3c06˦C~F ?ig\Ff"WL>Lj@(i*ijZⰗ~cYl>F>|P˗qlaua+ڣcf7ݒh$ZFqpe#`4WUr@I~ewgspb/3VoNETJjjjm ,80p)tH135ZfvÃI_rM;Y{Figs8?&e<' ʨR —+C;:i6ZF`ۊ%\X%Hű !rX9&# +5k$',$j$4\wr)#a sc9Ca=ԮKEGyaK5KVtZ{bFjܸ-teϞ=mj%cKkHe~'oe>(X2!p,a9LBFwe <>oPl/3WִE\al.9"Hb:t@2ݻ#Â8%X+I 2"/Dse QcD]+vI+XK*]ʑcSa))a6Ȉlo0 m͚5._]/8(:S[97X2!7W&ろ8jL:t^x$+a*◌J#9e.xX>rfC;cTNKYq-\81t{,)qzd;'o)d m"$c_mo9{XBp \PtDrf!EZXбxsr8t"tbOCWg2ݥ bxP C[B :z1-Zl$M*YN#=lX}JB:C#ˑݬoR!x[JQ?~]0~yg I׫[K/1;v+<M{ 81NJxcs_211Ͼº:6n _*뛇QjG/sP9Y nI'o`g7 >J1ni} ]C BBTÉ:tЛkO³nI}CNq-*GroExNiǗ @ez-|pe1aD.,Є1'rdOEfZS8W±%u۴{[^kúJr'tVQ~l&T u98s蟳b1Тs:9 ]k|XxA]NowLzgb!PMp[el:cy fjT:c\ r P9Ok͎:…PvPY/ݞȃl )9Zhq|/ucP~H c;޵A&h:%bAs@ǖg8K"pax mO&c;&Ȼ~i[LL PΖߟ{Ӊ[2PIs%Sz> TSCߥ/Ae%(PKft ӦaiakO9 M0eބvo>G ZƏWv:͛Y]b?ޕlqcoOxqO-T4yHE9}xsJsHH󌪮m%*996Z~}MWq jԼN;;[4Tplz>]XN_+phȯ]?ň- HB 1D_e5ٗ]|0DY1;Z7./fY؃D(iQq_Q&%"tL;HBas&H1 *D/z $qtcql(P!^Onc7@m,j~]8VxC U+{cF\Y ,L g79Ui\Uo[))!t8!VxkY1&>f}Ӟ'sF1Y73a֗"r _=i%-nd%+1cDzr=8\kʰ;՘Qq(G\ՌHA.GY+6}-ZCnn/z/^zt|LSn0ku:M1ҪfϪrʪ}ml4dC['s2~.S31vhkЋssE7FGROi*GX8U&fCω|eS| J}9y7y2Wܡ9upltnd8_g,xrL&V&=` =_iշ_6ss7 1oO&(1~agmۅӅra)oTZ*0FܟkR[Z=R z欨RFFvM_DߵSe@qTyPP9΁?쀙k/X!ڞ wKir^d?R_z+H#>{m9$qv0Jҵ:80jҊʩL(lNPhWVVUz'.^Wi?< t9P?aހW $N*7H;0ӿYh T x "l$qgKXs*If^{/y:m/"A3;{U2n?CC4qAb:mQ imo_@Լbx\T+ JfNrqbceTzYMUmKHwS'yNˡAw.^W/qWS/x퇻Ixx8Zg>Bh_#;%bSĵ/M0fᚇ꣺G8oPr{8DFX ^>R8^]k_{$sǞ}w&9$u Mw>|O~aTAk6^H\Hꨢ^ O3wGηT+_:sOe#FM +G޻/lpU_{+ ^0CGr̒x]jG~ m6<ѯҌn^Q@x42 drYa uVG;5__GbӠ(,A3D.79ou'lP!N'p%'rM<mr3?]PvX1Uc1& \u駋qMA;vH8c!9j*#uVsST+^3K> y"փQ/ m%D=:';~<3˵˗/a@7!b3(GxUU r|tꚹ4('a$0㑀^rh\_qMBb=|(p5xYEgC&͡r8NĞKϏ"ބ|2(/_>t@b6.6z,a@:> z7{ɋā'B]HhCX|c'oǿEkh74,{8Tb>_Jgsy(tRi~v[P9ޣ8w3<'''S?~VBofMn~ ێLxEVgE@v24@~/3.fߵvr#goa6AW-"nW0E r9\PRuתy?ݻY\u"O|Np{Ql;sz(ɿw>WG;5J9,+ 5/L օw #C!hx dz9ɦAS?Uk7-7kdO|aSU+zzRdx0npY.6ϼkX J|^Ujǒ yc?z1; :4nc q =&66n Qc= 6iD:k$㏤]]f̀tːRdXЃ h]ee܎9fs^n&E!gtv׀<{hx;GQYg.Ŧx]*T%nt rMAZak#3벐T{Ph׌JmzCwfh,m۽5[wݨ~n)7fe (Ld`Q #{ և_z0bE.{5>Zon hr%Xx*H\?tC+F#gfޣ{q[󴴴\݇ZJkoӥ8 PYw޻Yc26mrXYU=;$tro{='Vͣyw~ҐCE]xBX|PK#;5 3~{W@nWfwY'q6@ֿ+eZ€_ݢ קza:Yuׯ}iI7<<Nk)-=WQ9Z#x pM%ﭨF|9x]rͣZ5}3C㖭|&Ƭl⇠1SڣKP 32r8>2. Rʅp&V}iQ 'ZnAdq*Nlrw ˾n:?g^^VUL2+V* n!n-0k M ~J bx/ r9 UhqdH\I}aI\];-q]i_+W!g5Xwr$8avv}82稭*TL帡](':ܢoqB#:GbUA帡r!x'BGƜ 7Rv V}v*}3 ?vX8kz[ VXWT]邔 5DD#}}(Pst^w_|QFoF[!q3G틥=5jjMUIT^frO௳\wEh|Ơa59{:5Ǣyq*12nB'fźds$68 M`2'ڵqтǗ~qa8BV\c+j J@UxJ3\pky`CI:vhÞ,eq qRYao:}G%(~9R i*,=0q<J9NuxE_nw;RP%,^**yxoF#=MNLBZfvS'9ET(-*\: >5aѨ#8e޾vjr*œԀ Ք ̎L{>d`Ow>vVl,)-7k}FG{fhT`{[P9],)gK(?Q,J,:ᷔ*lMC@̼ظ;&=áw{yA.3C .DIj@-q8piuÝ׍X3vLaR'}b3S0,  :TbXtQR'¦iuƭ7G%fvWԤ3?z`o5@oB8<@([1:|3آN{}eqĹ?nCEPV؟hLզMPmmtNm {y- \ [Fa?9s8`U=L!opvYo-ELۨŎMv:ltiC`H费-z>zSX1vV\[BⰣkfp3NVP9pa9gΥ%^q)I:vomIh{][[W:Fq* CU2J!arbVhS˻Yyx\aL/7nҽ-}DŽ$zht>—_-!>71|Jӂ.(Е-QK" xj3&6kV.CSeMI >AIQOǥ1 *1'`9f`垀oIuSu;h,-H(H(XuT}}5[ߴ#g>ڡo?#5;;63:Dx*r*מ̐$: /- _(Q(+2#OzS6.\55"25'&no6P9x2#_Wth5"nBZV5_,HQgi Ӯxi@^BݢCd*1Y{2=ĊLT)4JxHTFVǖ5 g67EL\ 'J=u Ez#HrB9EB2ohI˷$PEPS.TͲUTFUTGz p:ˊ @gҫi9&0S1oϿѲcgE U@UH*Ci yy"G P6J} ed5 %Iǘzj0!/_/`f^:O}{ݲRgӯc3BU:iQ?TNc?>_"}mPGŕ&T)iw[D+m_~YB},IQM<\zS pg嫕^? @QtZM&(c4g&_F?ԿJr?ڤWaQi hbf )ҧoFoL,}8X&ma}C4fU%'t^I\ZΉHHgK?ާC3[Lot22hȟpzgJ>xr 4 Ə =&@tK`hz$&2a9;xbBjÜ,A@I- N @)Gug ИKz7q`s *xyhT@t؎-p\Nchz0 fߢoN[=uY{ WpO1LJwt` m;VmUn% 1;A@.rDA.8iy{ٸ;ܽ[~8p|g[# ֡7TNcdP9#4uc\ή~8LOzSsFBʵ^*X&3熫IjT[vԡ ~IH0gu]}X qJ8 ⛶ &iL)&Ol A3p]dGoM LJX9koKY 8*=b,>{驑<#`8ާi̊j͊K鍓$qюl(C[{@WtFL|( |tʄrP@8`,]ŽkW "=]߭Ep[t1v3d2 yoĐO>o- tܢO.0WD! )ڛ7#GJ_׮j }B[nbsc?:?w篟8(K wxw! DXqfl~x?@ZEԙq0i%g.)r1wvlt4Jl_<R9"ϫ|Ot]34"Ztt؉ r&pm˨nMbq0FӲCi'#[{lܾjj57C'3e,A`\b˨t2rZ{,=)Ey5ũc }bߛF iA"a&(^8m=Gwxw|Y%,abˉD#ObDۘV'#qr ?<*v~?~ꦑC< t,oYqvVMEL3c?Z.8&pox qk˙K%hXS?XLá.EO?I7C[gj:}Vou0OtmИ-;AL&su٬7UZ\?RG&` DMl 8@8USŊ&NlRFQcYAA>|W^LEg u>yZIHͰtSUk6awce3<'!}wM|;y @@}c#Q5TSbtjgGҌ&3[W"ZSDE }\`zdeo"k t|&DPUQg|yNN-/"0SYdEr\t:|a)[Wʋ>!0t}D79p:`ZSJe}3JհJ{KBtх&<F ѺSMGP9VyЯ-N!CR3<[O oD5on,e^̍FW*b[RSἇ?Z9˨D\mr\qâJJS'NV3T\C߫2醀F01.DСI 0H ~D-iD* M2aJQ^hqʊw,4*7p=m{pV7g-}CY; [p]7?H>E![oݵhݩ#7yA %$AScS MM`$lU%TtqEɼ_Cz8P9Bל 4 }sͽ!T ⛣`!*S3sd0H2UE+>yb5OGR]ޢ֡yS? sFb&&!uʹ/F H"A8I1jԮ hy¡[%ԙa4%g2H\$kv]5tT?YL)q7:'oa%D KѵYT_/}9Yƈ@=k[FwoN@0z4Ҩ5D!@S-nf{ӈt+Y'>g}~#@MGwn\S6A!`A@%9,!OKy/0`bߖMW)8j^H%8aNP|;,wyw|IaMiyEa?OdHf /.ayu0{zZ 3\SVllS8O}~JdO\wgq]b^ S_\|ystoIDNjXA.`0u Â=s{hbũ߯۱zۚ4{nX*нR8HoY+;={0\NjlvRծL2p%ؔԩ,A\Ɔ6 '[ǃqA%`t+ Wʁ^|z5'~x ?tVS1k94҂_cCrR<,_~?hÚHaRU*FzPKkZMҷʮr̓V"O|[s0-[S >v\@V]!k(ӫYs{X +֏~2fh]M?} ]55pxx!0!?7DZӢՂ髞^ю 7+V_qޟj^}nпd(/X3Ҁ|9׶*~&*5G9GRqvkpNUt Io }U{$T*eߖ}֒|MY#?7[r饷c0oVK GQ7F}::X酤[z;:;!t<'  l\EE%]Z:׾q)v,.yѶwkZvp< o v'N2}Cv{8"4k[b_rn@pgJ+V]^-pZzeœ'Kh Gnp>~|)|ۋΒ_|vnWXsDM~>bL @@\Wƾ*!CxDcȅ[da-N} ]{Ԅg^k$=_yO?ϯ[Yb#rl$C94DFticn[S1RQNF]Gk>SWΜNW$ {ẘg IKfh])H9܂=˲@z(p^dnO2]okg%MdO2 |N_(T۝~A3kzxWsO| vMF1bt i:dl_zruX{ckY|gy3:, al |nlöY@..WƗJʿ;~nͣkukh]Ȑ4~rhTbiDTV+R*y{GOeJKo\ I~ޝ9%ﳯ٬u+nSV kלN%A ^*Bt'oW:nO?1hko' qX=:>&qiʋ|jESLCHJ!3ce,G)ZZZ:$ȡ{^|e_aq3d652i}MSE[dZ0igh[8c 3iE7,Yʡ\.~[vu;/~ޙYIW⍳ٿ2*F Ak+&(D##3sΫ_0˹xa>H9;yt(c{6/ fM pCn1PЁ3t^UXޑ1@Jt#%r@FLP9N>u!5X{1Qڸf~˩Jyܒ) xV+?ØNq؛9v*=WZU-l7޸,Uf,N1&'x"s Ŷ'9pLաU%t<өutBW~P92D&YC↾ũeQ 8zi;Vt'~*Y6gCqCWd600$[ڵHWQlYTH8~. ck6;;ڿ?P ʹX09Nq XޡTgy!p]f]B’.89]=5CCnMj. e$0f/XrlCű<}Frd33ҿѥHFr;XA*D [N0EUͣBBP9GН hYjmwFhu%aUcooRGΪ3{L$i4UELոJZCٯeawwrݝ~WhMNCWM)X,g&n>A2ȲCdQeѪ VyE0+*AB=?]B6Қ휢ũ:S<'`jHKHy֒^B7L'; \UU|DRm.UמToq,2-Nٽi={3;`0CHV :0?۝sgobhnڵɡM̺ʂ;$]*@\X-qL *G~&t8MS;Ksݩ)$iH{C Y:˟v_s[O!B<>f"*7,Y9Zeڮ2BtL[1mx>*P8ςN]@pʠr*aXs) %oHX. gz6Rƍ]?>H9?~ٟMʅ=U=z lTٮ/VW1vQCbP%)ʑxF}ծ}[Srf04=qW]}_hPMd˦Ъbyt<<#yh讫>^mJYI8SrqnWG\ZTh*E8K6N>ҦGKn9bN׆rv½9h$h JEkUj#fffXܭ[QwZcB ި{@ML_޶G-[ @8_>W.f\\yW%:E0UQTe<-n.^uz3vv=uN:]ti׮]~'Ek]D|D9X&Xsok^C$h|n}[hŁTh6)//MI\}^||< 3ҺEhFcƷb =}DzB IV?3Z۲8$q?N D޹5FC1 `JLZ)8~OM]'+OO?k9<9>m I`V^C=MlzƲPe86@K}".]%zz"肪8GBD.G(L0W/=ƴ8zjg WhP|̀f"nx&-VT3[i݊ +năz4{ׯU;\*b}:Y%N]F^f4V5ݩ5$rfA?qɋ/STy3cƌ0I|R@DԿ^&j1_DO\tgJ0U\$(@ZQ(9xf???8<<ܺ8śG3swTI&g>3S;p;؆y9nhF?z= eg=ߒ+׸$q$I6y,MU94D< ^IR=85sL:fϞ=TVLżKGLmZVsF|0re{~v[Ly&N=<&q( %>P;G%đx*#6l>|xRRR֭=J7={ȣ͂@:u<0MA<p޿gUk.yǟ郝$=8hJ+DYZQ6>tZ)q,12(8!zأM\ +VQZɐ8yd!27io炈6R85B7_lղ1&%t~{A}Ζ:P^82ձKWg U7ˇE%*gEP9&رc-R8lTY_*.vb^Y.7Zq~1vzq- }5iBCϯh)ęjnxE5?Q#t|l5:5gTkRz\cʰ1i)N'!9P9tr݁kr7#e3u&rq" BAH8QZ?ZaNJZ^}&2A (Bu 8s5 $@Sq8b2/8V tZ q({ۧw4-wTg%eNřY"(.p@Qq8r9TSTJj6Fi 2_pHE-[l1A?`FCr*G6t|BB$,܂lXXC:[ tZw;:0Y9xɥ p謿]"~] ^N&B[tlJ1obd>#;qhMtjRSΤ{7 FСr3W"Nj3WuҘBeM7i'NT\NvaτܡpR XlB XUM_w2hMZ5Z.I[^ɩX^zſv`&m3WgGlU-,%Ν1#9CҖ4e)Ojݙx -Bӯڶf%ơ:Su'9>nS +L_PczG"% ]^*HyLQpQ9L_W9;jХ5'SĊ'隱Ck#0-ѬZ /[?m &KZ9}Ft"޽kżw[4M@akFh;BGrN 6,y Bʦc^ܙE$YjڡIIXxԉ cIu"1mddNMtĞ<d+cc Zd^_|I;04ƈ%=]ELaySRЈUTNM c,6I[:w9s_uºcK M,j=V\ww1F>L*@%8c&@x7Uu8ǺZe,d&,; h>*^Ӳ)u\ZKfa}?8cݲc3ǫ AުjAվGYDhjs)Z\S ~eɲˡ%SHoKQZ֮r1:( kK$拹yӨtMWZw֡ ޝaUWMT?gi_g/gOh%4HXs·AI݊eɍʩ_Z7&zNX]9Y 6EՖXOmuҙ RE~am9I:Z zՠXεP5PEc{kX *1vőc|INdrՈ&E5ImRsʔ%xRUթ]FAZcH51긼RSƶV)n-B6OXev),[֎*m $$&n t9]1c1%ix"Ek{f[:#`m֟yКbՃFE%jg{yr8aMJ^{ɂA8 wnh9ۭ ^YcnfY 1@BG?󩄥hT]B$4jU Օ@*}rXI4"W6CmZs8PC'KjOh%u _r?.ʱUTQu0#ȥ\{яɤaLk8ZZ 8Be3IDt060rtr*2sdVUc3tug }8$`ҙCHttEMpʮrT9TXt-`]TQfͤ#nYeh5G+6t:S?9MC iDfBP\OxqA*G͏*J*ue.Yϥ-0$`қh5 a Z%&7&rPRT*Ƌh7֥R,nQ۬='YXiHlo)mCJ%zP9j~$W9Vrh9>j&v?Vrsiә̝x gN uX#"! ޵LTu"7kMڃ&M*&tFR8zUZs@sJ5?R96TLU;GP3i2L`hFNKgn2BK&& aJfT96gr ijw Wܠ͚JI{ZnЛN3j]Di8 +TNDDD~~D0)Zɲ)S0YSd$I!{2R&GӃ;yi0;[/ze/4ۦGJT@b&ZsЬQNӒ/xaϏQ>7 'Ӭu['`OjnHDOyQrd;5XvI9UPr!npPFǨ=h6zh2אXC[0 %lDYVZv< y(/PjLnAi%.u4";Qk5zsg'7Rf\|iF0o1ƻf´OnOo怱+Tgb>WT#w `fsQ{uzm&*&rHX4g_Dv&2̚q KP9:8c9\GsYS OV)N8_4ȇKm!$tm@lBe8%eTCWLJvLt6ݬQgKgnӶiZqK4#cuӲ}G+*(܄&[-3q9C; Hu\U+wڳ\=ȫҴSL:-W-y΃Y=5`8eސkFDbv@@r<;M t|Y()!qAU xsdLP U,W.\+uj/Z M-4xD Tm[GJ'DBKP=Tǃ%45{-ᘐ E[i ╘TBG)3%B5{B-aхH$'M:sǷ{bJC(pb@(f XDOey+ȲM5=r,b-߾E+-ښcli):P|MP9x,@rH9=Õǯ}0'7-ɚ &%9D,*' @DO^YyM tOe1a^A @@z5]UM&5ۺ5cP7mذ۵kWLL\@@xݔc^Bl+. MиiWoW$tnAXa B$ulmj6r[I FKkH%2̙3333ׯ_ϼ ,A##[x:T{n:40HA@'E@I֪V^h"uE@.GQӅ`A@{˕0K+ ӌAI >>JsNz1E_ @ o…TC{Gfrq$0zYf >JY69?PGxHH ku+б*F##9AD "@{SRR\](V1O@@\ӇK*GsADvS%2-WҜ!VQb !ЫW/#`HϞ=ϢLB*G!0A@@ŋ1q6A$(T' !0 L@@@H*GA@@a &    $IC    @0Q!d%t78,F×9JyRދ)lQS@;F"#@0 @KW| -/R>;$ElnCK4kor#x&#6q "t; vU暯5;<ͪ@J4XȩbؒԺ 'I]!sUQ4b J'`TXWl,I5_cQ<f犎Ҷ,yȦq⊭k^ M׶u5ҬQ@(2~z!i78$d±9 ۊLM#,?O]2l~h3l'Ym(byҙ5Gju:5iKNC2IGjS,;fOۣX=>P#dY|0 @ g9r6SACV?d04HfXjU &6(?<{uI)~%F#;70bߋy]KcU9ǒrHY?ML`feNjYP93) V~/õD֮;N#I1Ὰ"E(T p^pu9YwhAH~֦8hY$}1ZjD3=uK/u6kRI/8xE|zn @@g,@,cd$KRg\k鎥Ԧ%,gߋ}{q:҆v , vjeL%GTgc=[ei(K? Ǻnm6_ÖH[jDk ϫIX~:Sв˒qQ)*+^n8ZW.Só(E5%@RN%jr` VA ^Cy HoQCy,Iv07Aa5yA.G~s@M ]avN]GN*G3@F2VqC*L,$۝h(MU\mjƊV'b*q_r!;TTh:BЉs6V"" @(r4[P9n@@@@PS?m8/G09ϗSD*ѓڏBdTKm>V'jV0)T iAv = _1*}[BF@:s7b(a#.!`TsRʰl6zD1Ǐ~O8򓒲2|>-$@$@$@$@$FT $   ?9%-:iP֕}w{cEMbb|~e;&k Cᰠlѳ|+J{@rȞ {޵; ۷||ʬF$@$@$@~4m6v輤Z^ arJeǁ:쇊ۿyeé붔c_8%>nOeJZvU-xy?4i?P޸]۝{C׮_:k7?O>?ZǃG_1)O$@$@$@" tn/zv]Z:gbqn@/s6RC_6۪k:T,1?'R@{3 ντ[Pӥz6(5θo }א9w s8|蜻wúu& )dݱ#   0N`բR+U]Keo lW?~2_LwszAG~2|z M U5v{RBn_p{6rxGP[X&,57Ԭ7xRo*;ת b(/eX|wQ< -+>W|ʚWaE("xEw]Ystv#=]';4v|vwaȄ m̍m܉]Vغ#gZ8,!  kuvԳ!;9k/;]gn_fޔīSn˟+YYy4t_Q.ճ+?8`Q: 4RE'3kG3#t<ޑ'݋{gf9j]?,vR OiDR=+(E3!8?wpn$@$@$@$bسxӵt޿[=3綖01~āŎ+)P=xa sznEHoꯜ4P&ltbVt/Z#n־$uKƞr߸Swks~M?w8|A#aOm)NHԷvv`Ǩ5;sism &.i -ʄ CDƳ2ac0h;2v^Gdkt]`(3$6A   m~sVpt6ue|< {zْmUjihi&[%zj{vzV.rx+/W2 @PfknUIp-Nw$g+[l%VXmÝ%GP1dg Hؐ*/q\\#(2ug+pM4HHz'ix]Kgkmg\_oovh?шsRgw;WnZR)>Y C'."{/u[=osqcl鴕5\gw͊gos1uj\u+yG%~wA8j 2O bq:Q7 FhvO61+& D,w74 R0'Nm>l NammgH39^^UnHˏgR@6R㙶-Fŧ@7bhQKo~h xk?tz=b٢5];Ez~Tw];]cM凿ޛSU3r.إl}%+VX|8H.qz*mܔLIމD38.-˖ގ=>ДSPיL7>zo}'_b4nsHHHHb!?vRms\\B\f?>q O=O)`ܐ!;KnAqqb!    $:aCp؝a]6ӒN5+<'%:()8juϯLu5c#+hu?3aR3f5UÿJ'Zm rG'|T1hOOg{eK5ՎؠmX@Vx ?*l:# X]3?< rpa]&wm.?c7acѢE'"aße†(6ϐА()In-YJaJH&c)(tR <0'0srҭ* 4%s,>S_4sGdϟ.4sv1[ɭJ/'s5WgOt:c.8C3s|U^VOD#^Kg=ttP=o{FL՗o gyϪzod1=u>6="ŻțW1%~Yvs9#vݣGV1oIꩋML\&賀=_&i    ; a @(@Ci ]Hg%\6_    @,.sJHHHHH &vh D/F D(JE$@$@$@$i(#mDh @tЁY$@$@$@$@#`voۧt D7)UJIf\X: 1H5o0Y  :"#І3U;H\h{B%cE?m6ւD˪W]rz $3' VHM<*mH:ݭW+wQp^ң6R*}N-%lHHHhڸFEw >mPV\ԄRB4 MKGW)u>DM_zlҩ$9o2 y6E$@$@QA@iVܥSKgUsBtJe.UfAKhtw{)qyPu=r9-V`w_4HHBI@d34r#F2U8U/2> .swz;-|Y}]k{1>I5݁2 rz<#RvÍǒ @0lpΪ,dU,hWjևʡKu;Dy--pyn yH+XHHH%#>c Y!~/DbeY馬 j/$=G1uHHH0lL:>ʡ(ך0WC&HHzlfLh%Hg&CC?~Z&Ro݅rr%1g 9+{*TEF+J*0T_,e#$@$@$;f6, A^L:kۦ5:P\~BKJbwѝl `B+eUbZה-Kcm;bI )OmtD8Վ-4@B$@$@1H@ymy'-QDg7]b C9@`TUE@5 xK@g\:  of^L@j/kF$@$@E@]g#:RHwA^aTIC' 6P'N6~nb8ΨO!  `0iV`'   %Kn sCÙ D=JB:@$@$@$@$Ρ^HHHH@6    K/<Xa \/lHHHH6$@$@$@$@!BÙ L dougx#ꭃX8U˓grȳ_0H (V#   uα>? AA @tm3.9җo vv}mڽ+]՝/wO}~yզoh-?hZ˝^c*W^|ť8}Cw-kO1{{ :S)z"\$@@[ܥ/&gگjo~B+N<[{xCMOM w7L6{}MΜ,fӌ sgg9>9%)#+1=393;gȌAvp… z{\?~|\\\RRRbbb||<\v8Vf9bٲuq#{7T1$a&{n7* mdv>@GBU]'xS|IO;^D X/NWGt㡳l' Qs 7^;3!>eM;x~))&M8l7ͺ9\2eΜ!'Օ~aݮ!06&NII qBB /AXC=Bd^ԩ ֍:N>.kllhs% -@wz"@η-_۝lsF}F_zAáߘS'oٸeS#fL=3ktAsƧdx\S TSY=;pyO]87DQjPY a1qcL>㻮_~.y555---xnƆHwD>y z_[f0qq Aw%';3+3=xTUl߹'9)sq ]3䃇JȘ8alzzZ8شgo1F?;;sfg2VHN\q~HOի;=l`cŻ71UĠU~ϻ {gj-u%MA>@xH3FgdK(,h.ݸpENOhDPm;mxOԹ-1a|k1!]~y !s!<ĹH_>ㄠ2XRBxÅRٳg\P| N|*HV:tb! Q|1uttcR$''y=ws/ˇhgPI ƍJIv*7;P_X4tЈE=oݾF6--uOΎԔ0V}Ҟ3pg5;3n:Ëаb/a! ONKکtrrrvim9=1!tū!}Q1Ր_hC\fڬ}3&wsί/ٹ{MMM]B'G c !"P*#8B[VVƍ?uTH3gBb3g] ]KWO2kx~Uib>UO#p9,贼fذIֆɀ'6}W!,pСCuuu۷ojZ[u* Ɠ(/si;}>_ ,UZ^Sr|𫅷Qӂ:n"noo|իk+#| "܋`/ی4m`v0777//9;'LC c:g\Klkz '77YmU5uI.c׵;4[펎{MYzv<6P7/= .۽{7BUw;v@e1RO)333|mmK/>ңèAQ*N,v[ ٘y*͝I*o#GGβl QN3d@pÙRJ>oʫKA7bJ;uRnnpߚzY ņ+Fgvp?v09iP++x"ᥜ#F3f¼)SWfAIx?7b&BB7 1~8m,0ad.;/`3,^Qg#EhO2E+M!l:suɍQ;~t5gr׼k設-.)8A#&m"b +pTҰA+]<%$d7Xxƌ[AR|ODQlWeM61diNc;Ű}ve3¡T5zD!.>cͲ#>߂⹔r՟+>dBt"|n^nݡC?s,$xRYYYZV''qУ=655صSNX֭2DСC1+'LRF//7'3܂|\ug/{aL8.sc;wN,[`?4ueU xW$6?<6 -5uM%~A8߾} Hal̛rȃ$df[L.>ʫaQePk'}d pTiAsΑ(*G!aCCikk߶c4 Ggge3WUזWUrJJyTUT _UUW4t`>9e9SU`;O'>.ޠJ+w H7G(,,=z7O?*HyC< */Mj}L gq"|DKx*jA%#5[Wyݕr橳B8{jEH۶93;pڴI7_>vⴤAS__#BhͰ;7!V}u= 31)#yUJ;-m de/Na>`@aNvͰA ;N_uz=:gue *(Q,c^ᷲPX˘=T[B+Ziy!4;۳S_B+ xX_$EbP+LZThӏ+oZm/ } < iCF{^z sb2^.`c=#kQĻcE1Ҁe-ߚPp֙ u_uCI!U~L6p'?etSM.]68s,);Y "C''[jU5,p殽K7u;B9;?!~㕅ذ'.(x/>qԬ(lljlh_5bؔ ^&MB^.;w,((@z_ R5dJ *Æ a6zCX#P\Y\QQ5x3e@aAYY)N.WQs8Sû!CC6)O8ٹ{_x sS,EyQSۀY % y.>p5#o0عFTfxĩ5cƌ8qs(ņB۔K /w&~LS&f@;8 5#aY@~< .-W}ɒH"D3݄_ҹʽ0e°HdVaԄ^5fQj|(4| pCpϝ>lΎֶܱCFOL Z%bjx3Uh+\Dz7>1 trF_!ƌSf͘}άc˯ /Eix|Ue˖!"R *Z *SK N ! tD.x|뭷].T&$ ߎ_wпg#]XsgPR.x3J0 `m]=r4?R63ء++}#,]",2!>q)9Ь(fhjn %fZC?I-^/nB*-̀ѰMlŧIvKaf{9aCX&bVk7L`D3tT,tiSQ^fƲK:?켡CB(!DZ;p-%ZlvYWWw̾e@5Vfg;z禮JzpY9uҜihZA7w387[hL R/B7KzH !7Tf`D" PNCCSfoV 8a-uOTkƗ=uw๐kr ZY ;?#c Dk?O?+g׶@?]XB;f׆=--WBO'M(ka嫅ny/y%{?Q<λxBI/ C񑗑6 wA[v{#_rx]weNLN8kB鰑m]u?G3VqfĎV($Dp!DiiYiAp|ƦL]R3bxuqL \^Se響) g-ZA at_,I2 59I,qM=u^[Suys~W5ٓFӧ[7?3)?ĸsF,e[} )HH>|Œgcs k2Sfd':LvS݄x^:#{xqSELj:γ 2(BĆ  -R㎝\]U 37n#G|vc0RM~`I:M{AITghy'ԷZ RT4?S}쐆͟1Aep:6`oū?N¼\ޢ1K>xEX $F+P62d乗&LQS܌L\nKt%GVvŎ%oݱg̣7XmׄԜK1*QF::zHU/o҄1VZ SL}fUX(pm=NqZcEpV 'yLėKllF$E&fFj1/'~-Zx'bAlↈ77@#IƝ sEx;8^h31%%kt$x5+ he ʖf&O7+Rw]^P!nwIv[đ9 00KJ-l.[L% 'Mx녲>Rk36\r`禤ǝvyfN?mFMeH>x=!aH_nyƍLK- X˸>T(iu׌3?kǣXş[@1O4>!goJEEe3;ZvI}$ aΎcG$.:+!D€N_qu#!4JCn"Yi\X.=qiNVp̈溒?O?~탯ۺ]|J67o9a &>^Yq.841 >j%4dfl{~ĮpH7f$T[FH!2i\ؗE3q_D%i,e&o*-<;OЎuP^hr@t3:,?<}Lނo*;: N9y'(#'} ,TLӧcAxIѐΈ/X]k9liG 9xe   X)1!$_ O&WQ./#+12X)د#.!.wj$Pį6e!w|؜ɒuj倓E;);=XO#F|4J@7G)H6CL=d)fmqKB<2 q̝aJƘe(+e*kWu"j<4HBӝϽyoF7bX?z'd-U<#̤ёUJQ*-tJjwZ({B_A2vn06Sbr;mFJ q} FNT `*(䈻pVIDU:HĔ$Rys"T 748Vs9+J7w=-vJt&9!3U>^4;~\-Ͳ5=UJ^h@$"<\mk^<ّ٠K3="mƐGEQgV{dW{R;<^k\SՏk_uY_ޖT6b9Ds5w_ ׶`|DU(o,ʠZY '(o䅾:d@3R8bkyݟFoOջɉ, -?="a$`Fօl o8V(ݝN]̀Xm\VjY鬶DՎWr\τUTTXU'VI oeZÈlmF6R`yze{ӫvB_YGOy@{`=0*QFѨoҝ6Uʩih샼 q=Vpi<RgqR19֣3Qǥԝ~~DŽ*_gd#H` msgh`MjlQMy=xj=ZIɡ1L;!t! hPZnжU V L"Ӫ l6`'QG[]bRcr.yuv֦\Џh,, vk#GK5nSմ"J,Ѻ19YY2C9%AJH'0ZIs%7BFx4/ |ɝ Wx́8g2a0>bid x"0e*_V7˦OMw:cƂ٠zqj)Qu9 T<OO}$ SQ#*pc 4x5wGRRX%e<81mMr ޾B|vYEv:P Ygpgo&2؂7s~c@߈;f z=i ~!3؝j* Tq"- LFDEo+VxN}"@d*ȴ*+x6$- @$tѡm$@B/őb.  Jpe@HHjG#uk[`;i ,Jz:N$@$@$@$Jgx6 @t١$@$@$@$@tk ,COIHHHFI @39A$@$@$@$@JbYRu!'NER$p-RL'iIHHDtRl6 @(k3Jb '   mo}J6|#ɣHHHHr+]HN5CNCIHHH|&سWˎ(}IHHHbsl7%   x @lt4m6XG7w٬@    %HlP΢jYtHHHH  Wia3:޺qQS&   M>HL:FlMVVP%)Hl@,x<)X#$@$@$@QD@)]˘"n-vWQAˣd!7EFS '&   U ʘHgmzVlJr!ghN$@$@$@'N1RLw`, 7"#=zuUpF 2*!x"(5%Π 6X-z9r   '0,%l5XkGYBxg$@$@$@$?Hg4e&'7k_ͺ+Wv@AYHHHH @:aŮ a{U()5(NSlh4)4va796&'XzHg2WhVD˾6C솨jVuK{䁽ibwCHH8'|R[/4Bo=L6 '!.oTڒZ¦HH x~~P>lZu0n:h h ;CӋO Ƞ "s ''G]^\HKcٲe ,=zV#ZvmzpSq!yߎŮG@9Q_ZH$&,Zn],3:SI;Fw!Wܴi,sey,}':Ovwz#\Ku?xȵVʾU=/q4ãC]Z٤2PM\E璗{GA:M y7?yפ#@9Ѫ0Vpyq{_yڵ~\YS͂Xbb^.H-:eo G#?*:;O /dggBo}t_p߫e}UVyhSYW^6 AeHtMf)@D$ZPsw΀jw}N8kqBzALZ( s[߶HilbR*sfe[*S2tmAKDžH H_zvWIgxշ3.!-.>!.>ȞiԔ'K.2W^/ps/w#0Ue!s#yȄmo" )U̔U*[l Q٠OU_=,P,X- H d(u2[CqAMz7x#Lŧ/y۬AkYH :{n.m~{UѣB\\uC;6flV?jX[V=UkEF ,@g/^,ϻ1Od۠G*imwy­[çOOS8[7w=D UXr7nFDD g;ȃWL?PNY5}*r9`9!sG% e?dhCٮ_,q<꓊s[-# =2 :ş^gR(;u~?SEmwO̙j2<'FŒvwWa(c߯[7h4"7"/hsyXYy?m<e}IJ},W"ȣDkNA 21CPjY @p+v;.Pn(q&GSUy`7+_WC8|U1j\=+6PF.AmGqxK nB ؍A SPBlG)rYcDg=_[7J]8vXAfe@ZluWuVlJw\߻WWߵo6?{f@:U52Z8 }n}\,_of;=S+kWrw>2gCtJYo-g} ^OtFFk %ZPM5GM?ni狼oTEMm-4pQ./Sfd *eDS^7XwKAMb.V#P`e4(vWvڎ;~"VCm@{`OW)^r(Q}p -FЇfUIQ`?er D11Oܧ63f\Y ^LXh~,!?]|izFzBb;F9WWl7(uFmuVP-T*]Rk{V)xe$[eeu~%{/~5   }]9s򡒵;ʕ&${/_x~3O%& gtYY%}h+>CHHHHA `:+u]ne_՚* ƳEem6DglQgQ`ه!  @ΡƗ M⣴37:4HHH \(u{\\T !Sm @ Z: vG:{Z}   P'lDHHHw 2{ @L|덩 DgIHHH v^:3; @LtW9...FΒ @`7Tbկ(?b HklHHHH| 0_Ov|R:w-C/}?23Gn$@$@$@$@$tsͥ?/:/''N3 I8smpسCBrm QLAvJ$@$@$@B ҹEiyq9YO DQM;̘:n1@MJ^eR,:2lHHHH &v{N %pIi~Õ}gOSZ/މ??[2d}tXPKe,tlM 0G    '0޾熒XslhlMKJnm+ f!h[Ꚛ>yII_o~SCNgfQ6{!   &0d֞JhJjtjMƺքDln)[&s[y '~l<޺7=3nKlalYm -u6vE;X 0ilô%^4Ǫ$@$@$@C `k>p0V^c@777TvtZ3s +=-Mo (> xK `y 22;J:Y;- 5--'(=+"6go' @#~l$\~pWfvmJj&6`Rzfv`GڗM߰xp=,S   pt6u.ua6kF6ssc]y]Mi\ZѠᓌS;PhhVŧuuN@_wIHHH@E cԹfimlQgAۛkkL7\#̻pmnިL`"q!boͷC({17o^xF=–V/ ;  "}o]3b,mƒ;[&̽1%57 iǷFxT@ßh\~3߬,,)9( /=|JYēϠlHHH Z_:QmkJIj:|7-߭?PUQ=h e2s:}nJ†vzUPPƪ?أ˿8=g   ^I Y? omn.o(?Tuk[{ee†fJa/ RZ-T*lU G.]Oa @~sEξj֔4Teߴ?\|s|ז }p:[aSeNogCsu Dh׉:xwuYInɢS|tFヅ<+WTb\" H:Qݛݸjdž5U%.ܝTwE).:gUٸBK%Ke&_o]hG @t։:رϖ/]ᬛ?3Tz>GIo*֌p|*-<##  !~u޻ke?H&\a`wIHH@Ny LJN"454TOⲋe#y 7HHHz Kgw5H+#BG$@$@$^:{)EEC곌=ɗ{[JL!$@$@$ⰆĩmZo1pgGWbLSVIlHHwЋrxG++V?) d8@$   ixۗlp_1=tHHHH /:[;;f^}ǑW>ͼ3̫~5y-3+~>㊟Z;UTD$o7E$@$@$@@fILa-&YGvf6KfE壛/rӗN @( _::ۡ!MB1wie\vzjv m6>5e@Z"T2J<¾HHHH"@NYhC.wbYf?hzQgʀ EԢ\ms;g-M"   tQg#԰`VVfQuZG7]UhYgy°;%   Xg݉7ފ\7]nǸ]`{uox_>蒲2x"[%eH6̇u#F$@$@$]bb]gD N!xxot:"BB5HHHH Ÿ6ٙl>c/~ _x O}љs.>knbrD3s|R\0f$@$@$@$@QM $[-v-PNNV ݌rTSguQ=wi< @)>鋧c˟>[_>Ky' e6%W0ăHHHH"@/אE $L0H`, 2Af#C:$@$@$@$@a' waGCHHHHH@I ҙQgH    ~̨sTLI$@$@$@$~1f勵<߇SϿۋ_~WpHHHHH d/Sĸ < />WBF 8Kg+1m-M555 y% SC$@$@$@$KgТ}v{CCcMmmeUuyEeEeU]]}]Cc|BKmPotQ~$@$@$@$ _:G#ve=gHg-7h†Z@/)CCs6#m{={W}VaHHJR:X4}FU;W:NHHHBI Y?꜒,IHHz7Kg\gWsOW֯n=-NvOnlT.r9Zl_[_s9Mmo^f)Y.wHQf~ 72lHHz9Kg3'&&v3npY!a+Idvfo9͒ݭd 7v[pHHHG>zz/N[FJBB|܈-`ΐE[.+6=zn\8 {@g$@$@$tAg@]m:+-90 (1dOo={ mi/ DKgF#h:D)ҒԣYZ'3Q}/9aN9upkUݕeIʖDYF8@  PΌ:GԈ<{uWjVrB.4959aS#n8{qG&i;;ښlo)p#WZD$@$@$/uΛ>Åk߿g;wz뎯_}嫿_/e޺,{6c>H[|nMMvG\vFʨ9I6[\zFޠ8s@#p1XhM"  %~uOLfd[&wGq9rjt)EҷvpIÞS0Qƺ^_]/3.o?yV?%^$@$@$@QJ Y'uYLbMvS[ٔwE ]N;˻4..^S}poҹdYtfS=Syճy( D Kg3ʶ&n2Pv}zpzNNF½>{ꂓdm/Vsq}Rd5+V3?QxD #4(C+ٸ;n/{Ҥ?>9^cݕ%.քwJ@$@$@'~,GtFdܡ2Fl\!P5tI-P羅=[rVf<%=}ڼJ>~bՇ}3.ЩsL= rVTUZ&<6%-͙~:H*w/}D:W>4ҫ-*rQ_8^7\u+Q */²%NoCrq< $@$@$z+l-eɲ, sϘWY#5T>:, n̸HLN:3*>~ba#g"I1'8rtbBR W;FЩ}:T)̓`Oniؾv=|6Bj#3Dygu̙=#33:Y*$*dgeÇ+J:., ss`M  Kg\g$lXڕ;l ,Njr _wQ=0иN۬%߭} Gw+He̹gntHՐg7KanLzVPV^| "TՄr5ةWtL}'tah].`W>2 @WQgt5V,Kܻ~y,UɒJ!6؂f5R-c_]0]㙹OjζVeY<-,3.(3s DyJ!-.Mⲋ !#.ңݕW6x @_:GU l‚~νJAW]&+YYNO. 0. =Ӕ;Zj;LUiiNg "B${߃u5W^G<2T)"Bn(H`K$tT(ڵ_ҳOOE.}v7ˁ /uq)+bَn[dҏ6]|מz$&i)(tR*ğ.UmfȖXk{ j5x;q5?1)hY$cDmK~WE'ϟ??TxfU8d\3gN#A24Wj8`'//h4]qcqWg;$@$@$@q[78uֶMk.щW6Spvy%|iKՌ˾< q8oNN<e*$!4w.X_?TV[ QX$=kğQ2+DJ/A+# Z)6Z۴6藸3Iܞϣ sW Y[k >)w\Yb/й3}cX u;g9=ov~V!,ݹ2A(]$='B"E?z$0?t&(_˸ݙ`0r6`$+7| [- @ 0plPM PQOzK;3SRm5kKv>O@(AwC$@$@a$s@KƙV?8%`@rro+lBt%X͍HHzF{8F:?kәt+Q#a0/ʣOHN#`͐F 2OTˉD74HH`9Y*yvdykuɉ?SNCg`{'νOq kew?A'8 0=! %@uZ:{׌u9,:?̻yБWtWz-mAD]" fI Қ}O+CS7x @ _:MhV&~ M n/Hycࡤ\[L$@$@$@C Yn܌fn2Y9osny{?y \7%$@$@$@$@>t֋:#lkR&ف}}TVFKp2BD}U;QpG @n6vt:#fЬ:`TBYyGnTFalvM$@$@$@$Kgu>AeU;sXoW†umTZ)uԲ(WưͰ. DKgu>:3r=!cƕ+[ -c6xj!6ݑ L Y Cc}dmƆڹg̫,(=ڦ VE$@$@$@$zzHذ+wX䰺LwB=eH$@$@$@$ _:{uvJg\#hŲt9)GH\@)S<`5 @t֏:ry{p4dαnOZP&++3xj3h >Kgs\|廾Xcۖ-ٲoQ$@$@$@$@H Yn6֬M&^6Ɏ{q1UDyD$@$@$@$/Έ*ۚTdvجvmw+EQIj(QWh>DŜ$@$@$@$@. _:FkjwJ3bIgirVYceU-p D&Kgu>AeU갉 30,kG0&T/ﲣȜHHHH#Kgu>:3r=!cƕ+[ -AN+Y "tb    0t_anPȀ(+޷Ofil{Ƽ'ɪHWIvq(zH   Kg\g$lXڕSvek`qVCsXS=<%   t*θFЊe;r6(u,X|U8* CFHHHHK Y?u,dksW B+oeWwm7;y +G}o^oo6iA$@$@$P:Qw}lO-[eGx]uo>kO{wҴ@JZp^TE.ҖtQ_}ⴳʟ2i&   Kgi7=~/'/n;^ҵ^W3bm;6>ؾauC˾,\>sk<HHHT/u-0NnqFK}]_l$   }:Q<ns/6z.lعfՔ|?O݋]k$@$@$@!&~̨sWv=cRrJ_X:-m5g:^/"   K:eة[ slծ m`U?HHHH /uΛ>Åk߿g;wz뎯_}嫿_/e޺,{d@[k7KYp5uv8S5kJ˗~[Z']r??@]sg4IIHH"@Nj~]3οgE \0OAG^_u?t ݻ]A.fU(mxٿ] eWڬggW!7:ӊn>}؍g |lBE$@$@$k_:MhV&ډ ܨHo(|x_,~cQE[VX:;\^^3ij/U6Y`OuR|xI$@$@$@@6YL罸mfⶻKw7@ syw6o;꽛[+kEE2U?kw$wtNMlX[<HHH _:EU5vV Z:+GT(}U Qk U%Yٸl`.o$gwsG.oi-d++쭼Nj22Eelvf<:L-><45?y%Yvv*|2`, =geA`jιk\Q^wo7ݓmCn|t(HKM/6' 3RY^V^!(.̍HHHtu+wpXQd,9P=f_xkmQ]ˏ:}ʶ-ZRqi3<6. JvK]v?:ճyԈ{^Щ N~h *k;AIHH 6 _:{uvJg\#hŲt9>Kgmα.=!*yba" w|ankl[Z\}Xap1k/%;wrfN߸i, $1ZZZ2C&iJğO~)`v_{C"*ZL*WwׯhÏ[rM(+:_qԣ5/YG~ K#DN9cccEw _-|S*/4O6+K J V֑{ IH@Nz?O\pK~e?{ŝ_y W/|E/_WOˍ][j ^WQZUZ\wNyT:B+#,v:XиaC\d3 zTe;ݹ]#yȇKjtED\"a0!=E6347Q@޳TRiS֑i FB 70xuqr.tk%T0b~|=8v "ar,$lHH _:D#- /Xg<.33G5t3}?!vsp+vcC1cOcoQg4*ӝ!G),A/$,P`ROGoRD˄o{w/N-\ÅZIVdxۋN} f/rK |HvW'5" "Ό:Gt Js'} i :XJd(fĔvnP qq׀ԜY3p7kBD/£ȇaCZR#NJ*$¨B5/{헧x i\iTu @n گ?{'A:XD/;Hۼ#V  /u+N]t?uR2C٩ţ4+ q711!.)3 D|"aQ<*ZY\\%xTf Y岦\H: iq΀ !.;!:}#2CDwqw:Xb Ͻ\kOyxFHH@֍'NmKB/duvX:۱G"ȟ)|k!sLliスÜ|Tl])G9e5^ x߆C ] iKgB@,ņ^*[Waee+GWd6#pcw} _=ꗸ3@us]0r,Pwy%foӆG D \Yb/L%訳1ܻfϬιd aޕt̓Ͽԫlh35uMR|0'sWPYlf'=+Ҝt$>*Wzt q<[~^< ~.9@>BDj?tq\ښ5$镧msgܗ)r68ZsWi-hJ D܌+ Ju^;;({dΜ99??v`U #scsWN/ThymUw#]J*=̚2k =yP{ʬ@$@$b%ܕѬM&^6Ɏ{qۣtiv ⧻_;pSo{76󵍏/u:3r=!cƕ+[ -sŁ/ -l    Pgtt(w$o'n46=c^ev^B)≲G/iSAB9HHHH "[:#aҮ܁@dkحVss0hT%RGvA$@$@$@$<-5Qgt5V,KܑQ:kCЖ ݽTWL$@$@$@a$u)dksW zO#dPd*+5R=+ѩ콥<HHHH RDtOY|v,t۲%[~*U3'1)M]rJ k:R6)CM;HHHH#z?O\pK~e?{ŝ_y W/|E/_Wh    0D !XHHHHBB9$ @t1$@$@$@$@!!@HHHH %ׯ_#O?+o~jժ[}ClS9 4r lHHHHBtfvGb/kSf^fh5UmIY9 ?~TgU7D~/ .F\$)    X#aOThjkkқ:+m%Mm5U]eu|.&\[JЩU \|IG#QY~0    @Г]zOVTT%)<\gUeM}M}C}WygEҎ/,hNOdeUˣd [5eFQ`QZ;w=f    ? X"#kCjьfGv]cg}CGScG[sG[Kg{sGgs-fk\YPPR銣TZٔxI Ui+Kpٸ8\B/I/sPz6YHHHHns{{ޮ '(QP=>i|li7㱭T*d;cXt}<Ϛ^9U*hYutWf2 Jg$ivmhZ<r[eM;VXW+lnuJΖV{{]}Ou\%db2c"8 H [ٙߵ'(Qwz' ~wVT1}Ѹ6_R,?+)%%ţcsòY;VT;>t=DɄAFHHHH{zr\߾}Ǎ`뮻fYN/ι1MjjHGCr%hǥԗTiwS ]dn62 Ot>:\%9^O>9pkvСkO/zчYLU]'Ţ;eֲ&vV:: BaP/M?lHHHH~݈[t;|VuȑkiiyW^xcw ef(R2~Z\՚(/iSu P\pǛ- L Ͽ nj3yѣG5ꫯFgx D H猌/Zmv 7dffF4HHHH|&s<HHHHy߾}]۳>,gqn$@$@$@$@$%qu].kW^yܹs;\8n^ ߥի|駧VHJJJOO9s&ʿ؁HOIHHHby֭&LЮb={>X؁@OIHHH]:l6v<#ł'(1ͽ$   K焄Y<ټy_4[ >3k׮yn;ӈ @,]:Ϟ=o\sss\qwe]QK/!&p:{tBUM /iWٸƇ.Rj4}T6tMʒXHHHKw|xqq%O_U}Qٝvٔ;Y*VSkwvtӥn'T!{#   ΐPk֬ DW B1[ֶ6 ,v72]X߸nr?&[    't>.++ PgJAl H#BIcgH("GXU5%lxeU9$~IHHHHw錜g099tIVp 6HgTTT.rRuYen|Iuxr+V'   Hw錦q@Q?/rHggg(;v@ѣ="*h3}VVfQ˚' 3lPj@f% \V6ȖHHHH!tVu57n>} cҥXy߾}Xy^(աz*6~Bu/|qAYMy2ಾ?>z5(L$@$@$@$uSgm۴,|w… oְa{7Y"@x`!/ZJ1yiʁ5 &0$RreŊϿ3z:LA: u{5ތ=4$@$@$@'D g N9wޮzQԣXO^eHEcGSIHH@psTd㕋EHHHzJ4HHHH (M &νi4c—IfƄtHHH P:G o>\ӛ" ⌣A$@$@$@&3gAbJUF34HHH P:Gpż-O<Dã!   Pte(6岰%KqoD[_kF*(([p_-Tv}|xTB=!Z< dC$@$@$3F4سo0..B 4ig^Yb(\O\~phx6Tо7篽6#L*)9qp)$2wa# (gBGzQt6a¸#eokJ]vUgWe_Hv-^u$@$@$@%@Xl-#G 8@v|iod~pꯗmݸz\{qf¿7GY|[ozOGs+[ßbGhJݽ5IHH|#@7^]|i sg?^U>}ý0vh2e$oȿ4u]H$@$@$JgXSqnn_OK"XlEECzUA(o(6S wB$@$@$ P:s2D\N MHUgyo~uYXd#J=$@$@$(tb;v,+(3]ަ۫ bha0uW}cE170 s[/ (]*+ȕ7PW^b`a8qW֯߈CģpYyV4CHHHH@tdz]d*ɻ~y's>Z)JXsDtHHH (Ê@Ff߻זTV5vdeeuXJ˫_ym{uNs :d$@$@$@1J9F׸ڞw9y<[xw {[\YGJJrk{Gq s虳G R$iƧ%*[`v; 톼>ntܸvg#99 :`3/~<HHH P:؀ w/&Mʍ~xr0WV5jkomiltv=--y巖SfΙs!(^N s@(\悂sϙ-;-knl>v㧏>fIO?lV{\GSN7혉Y-- UlHHHtC <~ 춮;mGqC}ÉN;85%[;LYYiп`wC'̞ %   `t&]fON/D0Mo2H@:36GBbBAA~fVf퓓ƫ0BlHHz/J;3ۿ^EEmV݇&ܯ_#IN ܻtvzzz,<޻go_X{{gEoHHHB9(Xh WԤ^|;ck뛳3sWtGp l[ iH1h3gN=SR7# lHHHt5C2pk )V[iyCvfQxuݟ|Ͼؽ{łvYkDZ~pnŇO=f^ s (8q6 [s -VHgGau^|]$Cϟ;ԓHt|駍  lc;(TK. @t!)?{gKnk먨j<0fh3ೋ/8c1sNvc']uY׭50)11))nAJ:փ11r|F; -cFlHH 6 P:G5 O=zNO]QlݺpgAoY3OHINLNNLžxsFZjJj.x~-$R$;P\UG\Ӛd Z_-|ooaZŮ!;" -JgΊ Z0p dYVgm@:#i))94rT֙Q#RSq5`brR= Xg 6Om;UExA,E͏}uW(YFpfkXH4[ q kC+&$'%''$a5x|҄95?p(F /&p7 `T m sP# ܳrVyAwE+>3āDv[=wBQd @ x-yg"qW_yJ'l_id5` Me#hA-$/=Ĝ3Tc?FtSWY%\жnD$rS_-(=z?.Jю1SäEL$@Hk5ȕ+V̟? 2l k ;ǍԍĄfҝZ3V2}o,^a[cS3 ;5#9!%)ޙtNtmNKSl>Vl\AC}BRe{q ^G~6~p)lllğyeB6os/!՟f͜.{K"5gͰhwgU񊖡q W(QO9D˹TTs狲(%I1Lgן{=s; rQ>dmsx!P qu x 3ɞک͝_]뮺&ƙR''`ՂC ǎO㯼=$s6DPHoף!j:bSk<(>x޹gb߼elhhmHpvVx 웾-w>E⹈+V*͝yFl/y/xs<bⲋī^m|Q6zHAVq0 prar}=5WXHH@3gHt(-h tOykVقafq_R1rϟts#9!Δ=.5u fNٲd^Q2y"kk& [ 1:jpwsSۀH3;D5rce!Vwgf JE.5㖃mU?p岑Aa  JgN /Ӽzw7l۱}OHhhh@F]%gNznPϘINd7K.7.ZCFqN_)7A]^|Ul֝yFz9P 1]2ŵwܫN#-erq@ 8`J\e! }hM A >02 @lt9!: y5.7OzvfkdfMG8y! `Ja,vuUWZuB,C!]َrq:DMďEf3Dg1crY4 זV=s&-2}]7蘧E%^8T~I ke5 Ve9M^K8]}i5ev<Hزt3Rwg_m۶lVUUVVw̝vlllk1#l9֮G[7 ͹9U>h>݆5,G;-+c]9$)7\j 06] kK z4%VÆ'bu6g}Ţ72n9CU .HqW.GͥXE#hN8m$ $s z]x>ؽtDQ3& 8oz$k$wgkj8LH LiZ^6oOnr}ON9n}gS<HHAQ`PeQC^pI2f3. DO>Z}C6_ܸy;۲ǎ.so<6 D,^&CC8RwH۾coyiw7l_⪊+[MCN>wx;X'8ׇx DJ/Z낀lU) ?Ad }_uvzJ‹/PZVL)ڢLLNpJM-ZN$@$@$@$`AP)Vl+Tn 4s|)55.#5./ՔUHIHJhvlMbO8F;HHH"s T(l\_0gT4)dUmPɉTSSN)5Xo'{\ڄDSss>++URK$@$@$@$`J)lG17 /~Ig[lVf3Y&d/ks֗m:\gڝk+i|mIG;HHH"sdShhR Qp|LV):mM{mgybj,Y Ppsw6 6XpM}I GB8PXf\vvÎGfjm̑SHKNpԶۛ_=>n&q؝:#:>%m5$   `<84'5-6`v͆ b9*Rnjk4ݖ=bGtַBnC@;5dqoO}eLwl#  L3#ֈkZmNlC i8wRi?hq7tj]4JGjntXVv\@;C;3u$5@Fce#   dΑ<:ڦhvƛtsf6v+m;̎fӮN^j6u͐רpS=[e hv m ޲{w~1X<~ oѯMWXHbs,r/NlEfn6w;;ڛ;;+Z[-fs[s;Z:Q5=;S=1<gذ]b\ŊK v=S>{^4$@$@$@QH9 -VMNp.oѳ?l39` mm mm vMPϝNnB&jN'{»Hrv$P<VeK޹ $@$@$@QI9*-65]鹛^\8V$%lnnopm]bwJlX;̖Nzg̑Z:;-ԔH]W\vQff8p-!2"Cdws]IY(GɪkEXSZ֔++,UMQ(>%XwFQ.FDrmT$MtBDqC`p @Dr׸a++V?ğ:Ța&08?75{KkGsk;vj;Zڛ`s{Gщgn8=1ӚHML2 k7\f)'(r9P} kωMG(TorUvkٝfNGA%Ku[b'涎ζv<:E3:-nlJp 'g"OjKCqh+'Մ2JĆWDrK4L["DPKG~ ]y瞉}m͝yB_t9" x_~<⹬odX9nX! 5α6Qo>kou77$6lp7}=tvGvgF{vvC?ǧgA7I-H??3x\u!}oTz«}af|Q#c#x u\t -6+\}L$@$P:g3dPك8C-  = {`~}3*JnjusoHHB + ۮwӼ ω4jH}:__n.FF)aoqӮ'7п_WqHHH ,(Â񅿽\rS+Tmء95t=?'󦋏'7ٗi+"  fi dŲPV/=|J({]^dח\~]IAy,Tig^ .\'QU@(A;,u(?c,,7[&#*J<ډсVQg 0W0@$@$k(cmģ_)&Lwc3P)#FV|-׭ \6ȁ |l*Y۬?/:hafc+l1@qwLأ_ F%m` $@$@$ΜQC@0zAHӕ/mܸY/ZxU9 !blx sUBG.RIvQC |e5+bPs% cnj7l"5bA&*o r(;>>3 0l).(ET- (Q0%*>11ߐpxƒHrƸ&!1*ª(otu(^oݾsO:Suv2N]g4z?Vd6BoB+{s^jj"wt*.Lu*{UL۫%#Ltީ7VnA:9-c?P?Y:R?= o}{ ostvm>ڿ&j7m/YᲩ.]NT$odv)w 'P94I9θ )cMGh䙝@0 !4t5*WL^ʪWk4+ݫPLN6b2bw~cu5Ȇ.sAgBzt |O~ՠ"K>Gf;lb*pUqW7He0T'ȭIL@ 7+nzf(@ :eq'`58Ve˖뽞{He4;ynӉE֒ :ٿ=gzuk=go!HY3:]#L4L7u;UMˀPߜ! q1 @2DPTхIp5%(C ǝf4Wk=[Nԕ묳zYj/0cֳSg5Pr4KKYսg8 ŭ{<qJLŜBu.# ` t~(W~lҞqNGL(X˽[TF Ta-(H7HwvfZ:s s~hL8Z.I]I > tE/)k k=O;>G{}Dsوu0++fç^جe`z$JyB:e0Ԕpnܰa7{ZSS+pG1ܟͲ$·GK@ }{G+i3gϝ0aWʼJ`ĉ=fwqC "_@1\@q:•Q7ы>uvHK@@_ :3y@@έh  kBg__~&  \ٹ-@@|-@@@ :;%  Xח~&30΂ ~`]g?\e  . 6u=   k]{i  u=   k]{i  u=   k]{i  u=   k]{i  u=   k]{i  u=   k]{i  u=   k]{i  u=   k]{i  u=   k]{i  u=M֮]宻|G/_ r~.:D@o :{zv{}衇~wظG~гOI&mذ@L@ tN"m۶{ws՞v핗]:bXyEy|{/A'N:D@O :{}Rf 5*`>Eōwm۱j[ PWZZXƥM6yfowO{N9foEs Yޢm[(2. 7'mP. 1MN=Tӟ{^Mk>}OfOW@K@(PBp ;,aZZsӧ-[r)V;w;o #s0?վ@._Byƌ?^|Q˖-́8c3WTšZv/Uס=Co]|eǟz^ljlI}.VϦDҁfVٓri$ڟhD8k&:WZ d#Pr{h"2s &d"+0qDW3[wVk~U ' իW+VlG;k޼yx YQjkmݖnPi,y<\h#>w'uў'{d?4Q-<ԣ^9>H3'5Wt{혛xO2Y}5uCf0?@ Bp7ec|^s@ZB ,Zo֬СCtuŋ/X7=]VV&}ڵz|׭Yk=w}ź_7|ъ;3ݸY7^y^{RY;UHOBY/dNWlT 5 zTvMA{O4j9_E?gIlzl;a$X'Sh*sYN0S3/k7%@Yg\ꆛhΟ~4[a2ڶmk.l6g} )STaMwӦM'|m6nnZC$ m>;}ڪiD*EX=E֭Yd{iVW&loqwCbJ'QDL֤f*1d|9@?ds!f K.=3맔 UL֮]4ܹsqԩW\xiӦ{_}6qTuĤ{T(<G@kܸL@rn͔IƦ)-ɨL[(UbXs1J?dMFe0zD H nP|1ǜ{ 7nܨܳ4ZcĈ5\S Z>;V {aUPUBʑ2D=T\lhMk .4dH  tTe:Ӂ˖-fܹ󫯾\rֻiu6Sw@oTɶ*TZ#PM?Vr~fdV1Uz$Q>7?dY2q'LJ  BgnXdɼyf7ر]4tv\Ed=`5N=g`}X[oM9&5e%ڻt9NI&k3&+, ].CꁿrKƍ>Į1&Z/szw5kU`ejMi-EJFG-rBu >zv!dƝ<0 'cwpW]u:uYZg?Y&JVɲIj{+nqcoUY)<0FJk~DDj~YJ)h𚂵:uO2YMM]Y?7f ?kKw 6@d.sG H@y^眫\48- :{3=|"I2nS͆ xL!5U-[/囵еR*< xU.P}U 7*Vaw\&zGB 9$=Bh 9ȸЙ%9@@|`35=B @@ cS_B9@@2m:f   doҰ" YH @@ dp  @u.@@ @ W1  YH @@ dp  @u.@@ @ W1  YH @@ dp  @u.@@ @ W1E`۶mc=?aԩ>ӟz'xBՠ-#f  PdSX`SLyG|ɽ{4hPEEŅ^xe=뮻ꪫ޲e3f(~뭷\ӺuA`^=ߨj^~@`  m@xa1cƨlC)gUn(>>P]~Wرc( Tx-/=1l2-:>uFcs=%&6ǾpM?ڼ7ԧprNW ;:0Po߾;v0~CjY`üя*ҥKNFhLO>]9N3Uuk>}O;@ \׎XK.Qن*iVYٜЊU92W6uN~09)V?Yr8 Pd 1 (Pr@Drϊ?b*/rgYaz!u_(VN{ep荕*^)Ƶh:W?[s@|Q%6GeOt[{1[_5ǟzFwsH3;3;N |k>&iZ&fotCB YH\9{ "G`ĉ=fi/† `U4ko^ 髯:'LJa*\x٤{GR:sYߚ-ꌏ=2sagjp٧4_i=c15 |}OSw ʚϹ̀17GGI>gg^폽Fڙ1 -4sr  @2|^*++w\ ~hK/t;#fSd)XrW\[f%Y7n)S164Ez5V*5ߚJS:*@%87+VoVCz1igRx5,]:JƎ#jpMՊ5W'UܜH#Qr *F  d7+uRB猯H@ZmC!rUU̦`ÄK.5jYd#[N&W^}__)!z![{BcJW[)Dί\fwsiR{7sƸ)jkJrlB>cgVᚑe4vevS2^}H|@!@s>T鳰zF޽KZpd7kU>Zyۈ)UYoNTh67hڟYIIUTI|ozN߅H141 @:[ R@ hl޼2yW^ye&cqS*uPFVjd$h:{,Wp2Mܞ5& UThkgE14ӂ1 @:[ R@e޺u[lQ駟R LBf2 $$^;zzmU5=Um@sۯ1GD$~.j2&~ s9'Cl톚֒m)Ǔ𧟙raӏ=P,1zJgL Iߜ}v]7fpvQi1&fJR ԧY\$XYK;wRI7G_}#C{;InBO%n{^N/ouUn&UX'UZ;n1sfjj=ܻb: ru'Q\~^Vɸٔ8ͪUjfrޞ+ lQ@ξc|5ݻϞ=7ѣ&fYoT٬*sgfyƆx[ Ygj}bvY 3@p@6Ygjt%   @ru`#׊@@T s Jrr@@< u30# xEW$@@ȳY<=  W:{J2@@< u30# xEW$@@ȳY<=  W:{J2@@< u30# xEW$@@ȳY<=  W:{J2@@< u30# xEW$@@ȳY<=  W:{J2@@< u30# xEW$@@ȳY<=  W:{J2@@< u30# xEW$@@ȳY<=  W:{J2@@< u30# xEW$@@ȳY<ӽ>+=z?|}%;6}ֺjw! @unwmڝpP.8Pּif _1gV/zz{;ު`%f  dE 8غu9}˺o_ծC{t;WoߵW'TּfmkY2k;[Ջg_9˺E[f8@@ do\, Bۖv?q/=kmnEw>خg٭n}|f;j@]'@@ ds Jw% *o9P+8MS^rL׊ k}jjkk[W=P9xp}pg5mqQ5YF Y (2{u,Կ@0>Gp zWei#6{/Bu55 CW( † P9scuxcAp\ [jvꠑ55%@yuV\>P-@@w: D6Aslᬳa7 tQF{s6`@{<#[)  0 YP@9=srÊ*:1zE"ïpF6X@~D̑5!Ra^йȂp͆ d$@59R76g7f#^묔3 z89 -@\ϟW8\l;p:R\]*ذ:?f @sI7(I6E*C!KZËӅK9UlU.lMfz%j۔g٠aϞ9@8k`Wʑ:$") l3Α-Xy|Оu1ȂYDiqcbw.'c_@_$ίllKr @A`qϒh1s=\ Nc#J5"Qs(X ֚6ʡ9bM>tճgbWufO_{zi9  /%;5nB熿x ]t6k7OCśmF8m92iS'?G33ݹ4`{C:`dsl1T@챲øй.1=$^7`:P=P: ܇~:Fңzꡳ*'׮BvYV XYj?߿8SjlV=$:t~L({1޽}jTiU-GXk`zIꤣZ&9}gMCM-0:|`9 -"~L0xV9f>\a>ڟoʝY1b'[fD7n)S163^ѷӟ{j3_ŵ[SaYGEftjcuP^q?f_E6BL$㦜UMJ'#MWb\!a(kWwrgygCpo"s *BgW]H`uHCA-z/Qw+Rm{9Z.c,s\I:qd6GB ]@9^qL\ws5KYo[,WY9o&z>bqCetu=5+9ْؿ_3U mjv*Tm.UtF߾E C- ahf1 &VS$<9h@xŒD}XSVZ!s\G[[8GFY80@? _iq X4TOs8]=   ;"tή[F@@ʬ@@$]iߊS  H7g$1  21A/17@@? 8c,^|h"qs87̾%  NL6s#B;@@'`Bg 6we  @^YgyN@@@`+a  Q¸0FIENDB`PK](:=\-Pictures/10000000000001F800000044E942D238.jpgJFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222D" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?|YBchv:E7-B~>㳮Xu *,?r~4o2c]i %J$r?*sw աW@dre=tSmjG,+ҵ 7W_CbݐnoChmmdEhXk;oxPFL"הUt~%[d$Koi2v⯙oʿ]Aikc>lNй*?zT6kŬ]Aenyu\>^ikEռ.|9$lp-5 i_L{u_b[kH(RWWzԾ,8%mV œcNB޴i[МJ#dm+ǵK [EewAXrv:3.-eK96I6; `nJ%<t?cmVi#`Ҩ?t;Ekqvi##=,6!qgF[l?Z[ŸK%ԑ"$;N3<~UX98`8MەWyw;?è,6ẔH21_/IF8/@YýqYEggoݔ\g2g־oR7!{?ʫIB+4mg[{m^Yذ#!lR[x/nmdQ3/ ?5>N-E+dž'sUt8 l,fv)mVbm>hMY>Us˹0DnvdU,GV,Juw`Tmb*Ox o<?,@|LJE @ :vM⃚]͛vwzމn i^ |PIE$r}+CGz+RȀyֳlmGa-Z0&iEI_G:GUy4x ,vp>kN2_ۭŝWݒ-sNc%п{}nib o7<|·e).fo$kcBjN(9ђƩ[2Eq CqG?mm" #ּLǶF{yЩpCuf?2tEÒOR濕L9s|M;OPCm%rNzsL\vIpq ; OzRR{ _۶in}+kA0b<0qM!`u ۛV՞L]ۄeFF@\rW9z5\ޤH2FcV{EQcP:*RB|ϹwV{joq©QOògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tògܻ{= ?o8Tòg Iw!F;j*!8_\85dmM5.yL̻LT_I?ǰj*jY2"̟5~ ?~E?oS"da>%~j(;$L$~Lcz(;$L$=nasV{zÒ'-xp\'_,w.q5t4cpȭj){iH2NB 1>>wH2ßQB29KIAZQwH?J:\(N ֢oSrD\/:|עoSrDQ// ?9K+Z=N# ȸRa'?ϰj(;$LE)?|Hs5 |>+;7dɑU O _m4; "Esȷse b8477OV`cOQȬʅ̻fR۹#ŇkqpHP'{Tu?S~`?+R4t#UɫY-$d<pi΅Uȣ?\>eqyu}:[ۡW;Tu8WƐhp]pN28#'JhwcOQȮGIA,ޟ}u$net9977MQйS~`?+Ѿ?ooCȣ?\}2KY.ee*dʕh_E)?|[3AG,]#B@8'mn-RmUr8uԽ^=?G "=+čij~<ֲd25 +A܉帒5eqHsH~ʮ/eȣ?\}}?su^¿ ?G "F~9S~`?+Ѿ?ooa_?G "F~9S~`?+ѾNf!7ά+S3'kmtIsآhNSwIlQEHŠ(((((((((((( s@;]j#;"[9V79%ղ]۴nӃYYzo]TSPQw<J֧ԼbmIkp2m t5^-[OYNG+"d 1}9ei(dOu7uokx)3̨1V5-2ݭ5j  βK!9-$#G,7֣/M}{֖Zּ'q=4kn,pc&Fc ;泬-bIAiG-Ɨ~ /3& $F:5#_ޛQ9dx,6څ׎-Oo}d0v[1\gn#iuRuzji|7}^ҠykgRI8TXzoDkR]^# &ho+ɬ.u _x|hzw;.ajDyfw\6sֽV`-.r'Z)rXQ՜Qm$C ik1ff#jb@P@SGaYijO-ϓJԕX Ivhrj?ZTdrWU9ct}r>G+Eu_XzoG#?ޛQArWU9c\G+Eu_XzoG#?ޛQArcMTXzoW,tturw54M4tQEyEPEPEPEPEPEPEPEPEPEPEPEPEP\ȲֵQ5U; E>`X86me 8Z=uap{d%ӭŬ-)rr[L:,M""+4CU9P=0yj~1.d6_f;黂xr Rih|[ypVW3K+iyŸfz'hdzj al/ ' sUпvϛ}}2W,2F{x*<(ۆ>T;_b OMڴTC/+1ᶢJIGNkGne{$/&fd?}EUS@?-?=(]:a#zןf'ؼh>Aݷ;11=+$M:q9#~o6fn[R츻n5YT"V${eІ f8rD,K Z]PK]BL#i2Ttҫ 9]]3/$gR}PG]K{x i*i610£okqcJ)L򗛀# *lr}U4K:\?b'mY8p߽ 飣sj~|Wv( XlQf'ؼh>Aݷ;11=+ݛ;[^XB47"*[y+8cwN2^i3E{ybp [Ѕb #9R5zUokG4 spxXk#Ch/vbT <W^Rl+s;Snh@c=zC;y_~_m<۶7sZ| \,촻YZ B"ʛmt y Frׇk<)5- y]WCI[|7_BvڕMPr|I2@.߈0䕿?ƏlcoBl8#? Be)f_htCI[nom/Z6oco١1s{yy~zi:q2]8P/e)>;:>_3Wtw'ݎ(((((((((((((((((((((((((((((((((PK](: layout-cache5ơ@`)&Ѭ(&D#Ȇ}c2u*d$')#5iHKz2Ld& YFvr\& IL~yPKu[PK](: content.xml}]ȑػ)fMZQjeˡ@E; 齻bG~w?_pfU@9Kt72;~OKO#a Y.O//0y~f\9t$~ܛ~ ?GWˋu_vFW$U< VOF]ebW=>Oqln}[h'g᳠OכʎݭY|\ˋE{^pޗ-ӻ鄧suѧix?eQ'.Ilם>^ޒ6h.`5צyh ;MzU';viNj p͆eo9PMCwU{ ҩAtI;ݘǧ;4x,<'C2M U PvpT߿}~ K{Go "*WC 8̬>l)W~Dʾ;C~RKIO+8sel< 187fr*=l~za"7琩5c!e3yy1=6t E[ox ƞE˾=Q6dCW5WA3…yOeˋq^՛~8$sx q~"rT#mCkEQK]??.^ލC>=)/>D1YɑGqH m헑:#ɒgKh9fFN8.ncPN{=)+NN'C{ګE2*[ aHTud!{d#'lb̴vQN G/! jER?;גپ7…#ALG E\ \Ǎ('c{D3@|k5a7^ﶟFIy/y,p=X ᵹv A2Q/?p9|>AU^Dvd`( ؽٞ0S&4h[86S.aFNu8|9j0G9GfqYoј;=jhֆ$hJaV3ֱCP!KLh};4\wRZMvξzR{͟z @r˭4Nvȭ#軿zϛAR$ &j<+"n'jC v V5yN"JnoHw \Ru_H? 쎫Q5єZڳI;n+dᕡ$qQJxu0xbx5;ߛ QԝY9]^pY0 [8'>P:y@iAg\g!?n, ~ވ#R|ͯE FqVl6p۱YVJmhs'ZǙ]?PKDCX( ${|2}+j+ hmfʷN@R'AY_ EϹ4EIE!4]g`Rkme!lxJA۶5MPPP؜}7=a6؍v6a {>~tydnhÍAL;u>Y~t cd™jė ܾEpHmr,WiDt8_s{" M?כF Y,{EO!HF35]E`V=+:t?À/xJa<;V2.)Ɩet;3?&A'.z*r*0u%X5(l=G+fj}t+4y4iZ@~,4y<8PlB3=)uyfB3K}WoCyE,f=(igZIl ŋM<c$b@6m?eJ{ zK` nPctlXz@,=>ƞDNuHt{q!ZϹ6I|gi2ג]i$?%gWw0j3 >`觓Y엑l㑬h mkϞ' 'dëyNB+f:#@)E|eQ-?wpKhe v +eYHla@П͍ pp0J1 ,Dz=4SOf)#`AB@L& cc2L]$r1l,i| 41P!CQ3(PC*_#ӰDQD,R TC]t4a? MM0oNSxpTQQz((0Gʍ"-DA,>fb{t/p|3Or(G%QY9 P"UQDImbM6eCWFӔJ$V%`86 r;yM kt(dhQ[(fhCf<')  1luIbi8dm2˧V!-0DEd~P'cD9z1|6#\k!Hb@ViiAp0EA>A+abPT܅ !bMц<9IMH2"@RM2*w锘ڍ)׊j& *dQJ||T(@e,d4QP.%.Ě3:ds]ki rQ|`p>M b,r]vxp,KDi"L|{4L9:L[)Gyz#/?såw_@CT䂃Z6iKaRi<Md(80P#Q0 @GFMWXi|(fnUV8ؔȣ5Pu42B#=0j_6.Դ [h#;t-]ԻT=p-OnTFOAg%Q3 @ȚLL8MThg&XUʐT&66{pxƦxL@r4V!9m|\G :;!*j,o`yTtY2?I4j?/[n4l"L+/b ;7uC lvL0tnׇAU(}rO]!" 8C%lِڐtk6$aSj [#˵v+..;<;sU|ipj #ߏo~%[}{w~lZ 7Y{<;.!]ƭcg_9v\; [>ƴ2J:^XPfaXWdGBRpbdW_߹YW(bW+luQ| ǘPcvBDY| ["pS7m擽zĩ(koB9I>p#ϳYsDf ٌRr#g[v;39MO!SL{aj{٦=#k _(;eำ`y jhJ|;tN-M9+7#w _"_ 9b EQmi8*r{2 neLf5\N~_gf/pU]~58'M |T[P+ξhuwƝ=`, *Y`[ eAU0u;*gJ K6Q*9CoYsPrAN0]/1jՈʦuN1Cƫj*Y]Soi x!.ھŦyJ.+ Z'@'z1]Ah@"yek C9ٞNIh Q8vt.KwnH(o "潰zN;sIi;7^U Sѥp |$M+E:-C>,Vo-?*5QIֵS[1PNNp%us0۝\yIOW #Ra#;]A.ppt_7)r?N D6 S' gm%oHxå04;]4{7QtDЅ{q꘱L2w{ŁA_.}89= Ƿ1R-\XKh1}WLϊq\ںgTg1,3.2YE{)!ZZ y ?B;mQ)+lUT޵o4,{UxRLZVn K%G6h:O#sTQGI8 ֦HQ%wq$@ KH_xcUoޓSz?΃S#{ۏlOw|MBHD101vbQ~@&.S:A막򇆄 p=t¥BV{+l#Q1L2y/7jk;M TrKƜX{Ġ~ӮR~&t`d2Sm;f`G1L!ZOB&wjCxE?t,c͖1DLމʅ%X,e9c `X?Ss;צ'0wyE9/W _8kAb6Cf'wXCk͒g(7M|6v;n&MPQwI_f>>Zg`l0Dw•aYvK<el% )/徧Ս=8bSB#*pɷ}. MZzmfޮu JW᜸$Rs]j8yS.'X#N'貉du iPk+0xfث67{kn]7Ƒ?R+;|HmJ.yj& 3il a] "4;l/2#L I2X"M9aɔ>/%cn(a%R 8{9U,ر/=z{h( ͓ WPiE $ІxO_滑F=9uγ}TÖ]P84(4,.yܽlC`~B^ƺ (X|բ +{M[vn{TI ^9$[xK56e5QX͑vYOS|\iشy+o\ӛA]B.&!q.)[= ~ b8&o_3k7ڢ_xCz*ZPX(ɵ6x]ZA~w\ol?wq66_aOL]š.}`q܁I(7{yaMX[IG;CP?vpaW}$baNMpvbocڀhSOe=FeyJdIEFͰ}{%$3ȷk[B̳gGP] o1C5q#}G;bkI֕yD5frq[ 4ODRأc jCMi0̥lc|.I1Td;rs'J&sл|G.g|L݈(Tk$'[PqJ@1Guڋ&8< ֫'p =/ ͐Z.o8=֤n+$n'іFUQ.s͛G@Ti0'?$Vi渰TY:0ކeAUTUOiӮ],Q7ʺ70TMYUCLng=R~N,rYZeuñ,}k?2HrZNFFe;Q(6xsc^Itse. z7h%zcݦ0ձ10?q5X,!)$SGe %8Ljg8,;37\F guD/& !G EA-> ^j/3$q=4tFPeN"@FsO `ƓI1#q,L(EJyR[XQ\V79[2dFmp: B*H=~tOX2kO\א먋~[g.HLsɥf 'M|vG[Nʋ>LgxHǿed}84XiBWɦZ DQ90=Oq ۞?UW scMOKlgKPE.b8+G-e%JIZrˢq=xssKZGk.io]1$a]Ԁ"! 2؇)nUJYN/$e v̔(FsnRC8z uvP龵P3'm3˔Jج:x.2o|74o&m 2kӚ,˖40X'8CڟhAVǨyK愝Av,4Ք4SgFİ2*NHGOL)Y&[X$~%G(q^_W7&jCZdvtlh8JsJ1h%nREZQ$cuY>hK; 4_JU3uhN&Rj^gOzE5ve sTǵSsW6=4?}9žG,Q]$F,-jQւa N=}yRMQC`aC?%rN028Ygla_Od?KhNQm"z-)bI¾:d42ɪ45m5ְCqɳXzП:u$ӄ= ,i' PO@3:]5qa:c^!׎|}`'bKmzUx*2}*LC@ 8}x%>3M dXa$>Jc?TS3䁥$Z9GT3|KPsn~ cj zzSN@:e)iU]> 3i N\IL:)EKE۳;G2nq^YBܷ.QI }=at -l/"ȗ=aa#tY&Ll~PgJE| RT'8_߈@ E6g^w%$VIƁټ<"!4YU =, R$h.UPXы!$0sMk h $-Y?ۍ,2 ,ھ2\~ NI- ʤcpzl=kq;VmEPԻT,X5UaeTצ~jl=6Zal.`=d8Jr.w#%JLAJەg Yl ^r =c1^PpW[jXT&63ݏR}Sc|tT= ec5HHCa;@ux4o: pc%}IJilz&wtNL2ƞŶ"WW ~db0aOūڏ){-(|Nkƥȇ!ofSn`}ha؎ru W(zD:L>7FS'ڬns x{ RhJyώNm2|:pIL0G;ӜI-;l!96vMʅfbQ&8/a8YlN Mu8ڛPKȿ7(4zYG>>s[G"kd_B RR2 v/xkag9KTw%d.qi^&!I %Xv8<(2M&VF|':<@5h6Sg(N2m)SX(Fk7L%6W.ie4b]BјXN}Дqո,e!^M \Y(]EAO㪿ݔ@Y1/n$ 3mo  .lR@VtWF@tsTڊꨰCuZCTjaۈ\Y/PNEBC~F0_hϛ8m3kD!&U ~E/Q0 ^L]6/9Goc.Q%BOҌ{Obrt.F90('$&P3R JHQܠ% -&a1v&!dhtDAs yzWhx}]hg}Pg)ʺ^!Z#˝x 7)atOW8IPbA#HM7I6PQZ{F *ɉWbSHG8aJ!sISi聯sq1wrӱ9UoxUaT_CJ7٪rBl{ 3y1'Gw1 _bfOإd[F*A)WvhbsBu  {E/FxL7B'65I'gH/k>ϵ)RawctVJ?jJӾ+pQk$@C4r:vT2ظӒQZV8}gCa!bMn} 1hqӘ;%lu_d~F :(zd!}\芪9˷.6Gd%|U;1NGxR% j!% p5Eg G ~=(&ŃԳ'2xOblVx㝾M v&'*mQ]M3f϶鱭:Iv$hQT7pco*s{WG{x1u6{^5W5p>ݫF^5^5z.^A'8^9 ||np\:H?QlzPhjpڻrJN Ҵ^v3=!z3\+ԬElʞ@}d65p-w@w{+_{xW $F—{MlhLulfFoe8d_$P?K~Qp% cbfA5#}_Yp- Ǎ<2r8%2sj"Kɓ]`t;(57ojx`1|9lKc9&Jifk]YY,*}O]$o/ fp*}Hf$m绢hPLXmXo%[r-ŢyS+-#xp!%? P9^($)Z%NRf;J-.71e\s(qA'@Ᏸ;sgE[4qˑ,ǩJ7zݣz| GBڙ8Jg;|UeT\ $X4D}bt˛."I>. C U͙elV0Xs~E!A! 5ϵxk*)ՕRZ!iZEu UťBw-h rjJJi>\GK񽁍mE |/*@q3&ϟ%-TWvMHp*?İ.MiYi=Q5!%Mk5=zf_,/3S7蹀T-izڠRѴ\\WJ~8o&i };4!MK5=}fӴy$Iz|=ks(Z.ioT=ЄT 23~]D 89U=!m3V,|@~ԄI#O_ow q6 F l4>a_/:̮M;In[#şV|gtQOO(㟯qk7~C]A}+2s ̕ U޼ qǿД?HQط,l}'pݟNgNMQ߻XUC.p-;e+7xnmS}xԠlG% hZ OSfK(S$(}&qĂ* B)|VfHwp84Pv~?>j*M?Goq(T\pS=iIqms4qDBsidިTi`߻PK/r #XPK](: 2ffmeta.xml bgokcekAndrew McMillan52009-06-25T14:17:002009-06-25T14:08:002009-06-29T17:02:55PT00H00M13SOpenOffice.org/3.1$Linux OpenOffice.org_project/310m11$Build-9399PK](:Thumbnails/thumbnail.pngWgPڶ9h@"EJTzD:#PN@ HwB7!Q )3w޼fw?3Z3{}ko;01ַ>Y1,,,gN,, &:!y_<n}*/uHD)+= \>/H*n 3'a:dC30il]3`m(r^_/e[tP=.$t5܇m]!#AB*w5G!rG^ POy+j.!uvS)r m! ז9cW"ƌu:]t; dwii¬H%Ez{ !LvuFK'` 7[=noW5 n;:i҇@@\{* dSfe^#=JP1bqJb͝e>_jSFX]Zsh'Wf6BGwEԖ @h'h֠n{'.4~UGJAj͵H3M [6Q:\H ώiFwY›rWNo#˛+ yʏa4+d㔦 jiR<ZQcxSg%37Q9"hRF󨧦OTz?l+<#N a8#H>hKH7\TZc0Lэj=8e =ƫI?|ʑ\5>(Ph!9$nmV}vO`}"Tӆiև9xolxWÂq CƑͿILN.K۱󅪶> !䖌fvA9e(3'Tkc#Jc} \\-U̪H?ո-.~*!J NfWKtr0#ۂ:ڼ?/ny} RD~#>sDk!_`^=\KBM`xdeCb(zê2BGbc *zyMeIsO?wߨ- .~.c{M[i{qK@+" &W_i;0Rcle/!'%M3`E`G(H# sFm6H6s 8%ܥK9Q2,bmϔ5Yں8B,y!,IN(Y)tVFrT"DYp@F>"JVLb|?ʟPHy8V*,C/5Ŷz [ӊ\8U}xvΗ9mtreXM x\`l>Aw7 ĩ`j%l=DmuA6#J?XeLd_bp9?g'I]6Ez Kq<{$?d}i'+U0\iBfKطLq/l}=Lɡ|8R~kC6*pƟ;ث% A҉*yZ6 Id '4ϦoX n5Ts;qEY\ *ZTޢdRe#\-]nRYWPc{PHBkd+Q1TC*cHgcsG0ߝ!'"_ 񣂡a4vQS-Aڶ$ng*imfug]z!=gdh( >.86HHf$3ݘ/0b|ۣ#@F 53J">цO}B$[y+B|L2||iDU:C["*J]zSࡀlNblƪK[-𷏂v!&*i[gBtS0A-r$2b5&wmM?2!ȌOvLOLt52P hjbG[-AZkNi+?A0h])t64͉ ?MtK`f%2 X+o*^CNrDBN4exۭuVߘ"#Q^dp 5ȂԎ&spy$5tۓj$2TO97ůCv/ wVhє^NkgXIkk Sw,|C.[Ժ!Z '-B(;A~Mē17}N'lHHZ)_͒ZgRFF  z pV͝g'M=&P`ßNwsQ<)Pa3{y1^_e'n;:LaϷ; s$H>{$nrK|sE'ztvH5Ͽ% '," 1{!pѺ]--Q+WF>rXk›TȜNDoє@I5?ڧ%)/[BjhM&L! >BʽPy0[tt3ۋ=7se]֭Z9@ut揘vRmK%6vX4& _,Jx?x{3D{**zF݋٬'oǮov/.>T kXrUYTYTOx3VW<5tu2J)8i,+ /8{Nܘ[J< FxĖ_&\1B[gN3&,M؈c׋nL/";=_]KԄv0֓`)MMqkdO (䔹}g110ׯ}_PKI'PK](: settings.xmlY[SJ~?;J)[V poC@Dߟ X.Kߦ;V?{Bw^❁1{wJ_onq: }']R5=u;/L.X: ?]++ŝ7:|Y;G9+WonnQ4*}*D|Sd^H.*rw1]h.6[O)؜m.1Fī]UK=P)yp¡2RԵ<6/EۉtL& 0&Útq^RQDLx7 u:p/ٲ?W Y(C2:lKg7~ +Հ &σ@&HTM Dp> x*h&VX|\&Z' CŸZ&GsjU:zIT1uW`Zr0qiufh2fdN8['Ʀ<.i AD\'ڻ9vfzQ_dtŊև F>PK PK](:META-INF/manifest.xmlXr8W =\q@Y|Bd. ߏpJMtPsK^ןrö]QW5܂Vy\Toz_ͿᘄT J0NQ)9Jm2~n* ҦR+21"h%p*dgp!`H+e" ϔ כt[yJ4 ؛^ >…`K_b-D"e ϒslF|C)so`l?=U(]3kX\QL@?PK~ S`fPK](:^2 ''mimetypePK](:MConfigurations2/statusbar/PK](:'Configurations2/accelerator/current.xmlPK](:Configurations2/floater/PK](:Configurations2/popupmenu/PK](:JConfigurations2/progressbar/PK](:Configurations2/menubar/PK](:Configurations2/toolbar/PK](:Configurations2/images/Bitmaps/PK](:Wۜzz--Pictures/1000000000000261000000D1FE38E511.jpgPK](:2lp44-}Pictures/10000000000001F9000000424AADF1CE.jpgPK](:vW++-Pictures/1000000000000237000001C31D6B8690.pngPK](:@uX-Pictures/100000000000003200000032F4F2703F.pngPK](:P]9oo-sPictures/10000000000001EF00000182F24FB187.jpgPK](:g^&&-GPictures/10000000000000EB000000CFDE0288A1.jpgPK](:9++++-6nPictures/10000000000002100000010038461794.pngPK](:hUU-Pictures/100000000000030F000002412A7F57CF.pngPK](:B]B]-Pictures/10000000000001EF0000018B2E21A910.jpgPK](:=QQ-UMPictures/100000000000021E0000024181652BC1.pngPK](:nPCss-SPictures/10000000000001EF0000013FDC2B81B3.jpgPK](:u44-Pictures/10000000000001FB00000138B63FC99B.pngPK](:q7xx-/0Pictures/10000000000001B7000001AC108F5B54.jpgPK](:(:QQ-Pictures/10000000000004670000033C418B4D49.pngPK](:UDf>f>-GPictures/10000000000002610000007720307C1F.jpgPK](:۹{n{n-kPictures/10000000000001EF0000014B683C6780.jpgPK](:X~Nrr-1Pictures/10000000000001EF00000181B7973543.jpgPK](:3-VhPictures/10000000000001DC00000066A5078228.pngPK](:h h -{Pictures/100000000000025F000000AB414FCC12.pngPK](: hc8c8-qPictures/1000000000000261000000720446512E.jpgPK](: l{!{!-Pictures/100000000000021200000044051821E5.jpgPK](:kk-Pictures/100000000000026F0000023322AFD477.pngPK](:(??-FbPictures/10000000000002080000017C6FA4855C.pngPK](:%.-#Pictures/10000000000003BE000002EE94F3120E.pngPK](:;ڕ-bmPictures/10000000000001EF0000014EF08ACEA1.jpgPK](:_|kJLJL-Pictures/100000000000026100000089C5E73AA8.jpgPK](:9"9"-`PPictures/10000000000001BF0000016450CDB1E1.pngPK](:ezXX-rPictures/10000000000001EF0000016A5C83815C.jpgPK](: J-Pictures/1000000000000149000000B186CB1242.pngPK](:KU-&k Pictures/10000000000001C40000015793AA9DE6.pngPK](:_nkk-E Pictures/10000000000003BC000002E93DB94841.pngPK](:ʮD@D@-?5 Pictures/10000000000002080000017C90CD487A.pngPK](:,C-u Pictures/100000000000020E000000464A8ECCB3.jpgPK](:cc-! Pictures/10000000000000200000002008D4F69B.pngPK](:eyHH-Ϛ Pictures/100000000000026100000116CB9FF836.jpgPK](:O?)-b- Pictures/10000000000002F7000001AF99A941CE.pngPK](: - Pictures/10000000000003BE000002EE227C8EA7.pngPK](:=\- Pictures/10000000000001F800000044E942D238.jpgPK](:u[ . layout-cachePK](:

Root class CalDAVClient

Root class CalDAVClient

Root class CalDAVSyncCalendar

Root class CalDAVSyncClient

Root class CalendarInfo

Root class iCalDate

Root class RepeatRule

Root class RepeatRuleDateRange

Root class Rfc5545Duration

Root class RRule

Root class DateTime

Root class DateTimeZone

Documentation generated on Sun, 08 Jul 2012 12:53:45 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/packages.html0000644000000000000000000000356611776301331014164 0ustar Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 davical-1.1.1/docs/api/classtrees_davical.html0000644000000000000000000001041511776301331016230 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Root class AtomEntry

Root class AtomXHTMLContent

Root class CalDAVRequest

Root class CalDAVSyncCache

Root class CalDAVSyncState

Root class CheckResult

Root class DAVResource

Root class DAVTicket

Root class FakeSession

Root class FakeSession

Root class FakeSession

Root class HTTPAuthSession

Root class imapPamDrivers

Root class imapPamDrivers

Root class iSchedule

Root class ldapDrivers

Root class Principal

Root class PublicSession

Root class pwauthPamDrivers

Root class RRuleTest

Root class RRuleTest

Root class SqlToArray

Root class squidPamDrivers

Root class Tools

Root class Session

Root class vComponent

Root class XMLDocument

Documentation generated on Sun, 08 Jul 2012 12:53:45 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/elementindex_awl.html0000644000000000000000000030546711776301331015737 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

[awl] element index

Package indexes

All elements
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
a b c d e f g h i k l m n o p r s t u v w x y _
_
Method __construct
CalDAVSyncCalendar::__construct() in CalDAVSyncCalendar.php
Method __toString
CalDAVSyncCalendar::__toString() in CalDAVSyncCalendar.php
Method _EpochFromParts
Given a local text date, convert it to an epoch
Constant _FSOCK_TIMEOUT
_FSOCK_TIMEOUT in caldav-client-v2.php
Method _GMTEpochFromParts
Given a GMT text date, convert it to an epoch
Method _GMTTextFromEpoch
Given a GMT epoch date, convert it to text
Method _PartsFromText
Given a text date, convert it to parts
Method _TextFromEpoch
Given an epoch date, convert it to text
Method __construct
Method __construct
Construct a new Rfc5545Duration either from incoming seconds or a text string.
Method __construct
Method __construct
CalendarInfo::__construct() in caldav-client-v2.php
Method __construct
CalDAVSyncClient::__construct() in CalDAVSyncClient.php
Constructor, initialises the class
Method __construct
Method __construct
Construct a new RepeatRuleDateRange which will be the range between $date1 and $date2. The earliest of the two dates will be used as the start of the period, the latest as the end. If one of the dates is null then the order of the parameters is significant, with the null treated as -infinity if it is first, or +infinity if it is second.
Method __toString
Method __toString
CalendarInfo::__toString() in caldav-client-v2.php
Method __toString
Returns the duration as a text string of the form ^(-?)P(\d+W)|((\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?)$
a
Method AddDays
iCalDate::AddDays() in RRule.php
Add some integer number of days to a date
Method AddDuration
Add duration
Method AddMonths
Add some number of months to a date
Method ApplyBySetPos
Given set position descriptions like '1', '3', '11', '-3' or '-1' and a set, return the subset matching the list of set positions.
Method AsDate
Method asSeconds
Returns the duration as epoch seconds.
b
Variable $base_url
CalDAVSyncClient::$base_url in CalDAVSyncClient.php
Server, username, password, calendar
Variable $base_url
CalDAVClient::$base_url in caldav-client.php
Server, username, password, calendar
Variable $body
CalDAVSyncClient::$body in CalDAVSyncClient.php
Variable $body
CalDAVClient::$body in caldav-client.php
c
Class CalDAVSyncCalendar
CalDAVSyncCalendar in CalDAVSyncCalendar.php
A class for holding basic information about a calendar we shall synchronize
Page CalDAVSyncCalendar.php
CalDAVSyncCalendar.php in CalDAVSyncCalendar.php
Variable $calendar
CalDAVClient::$calendar in caldav-client.php
Variable $calendar_home_set
CalDAVSyncClient::$calendar_home_set in CalDAVSyncClient.php
The calendar-home-set we're using
Variable $calendar_url
CalDAVSyncClient::$calendar_url in CalDAVSyncClient.php
The calendar-URL we're using
Variable $calendar_urls
CalDAVSyncClient::$calendar_urls in CalDAVSyncClient.php
The calendar_urls we have discovered
Method CalDAVClient
CalDAVClient::CalDAVClient() in caldav-client.php
Constructor, initialises the class
Class CalDAVClient
CalDAVClient in caldav-client.php
A class for accessing DAViCal via CalDAV, as a client
Class CalDAVSyncClient
CalDAVSyncClient in CalDAVSyncClient.php
A class for accessing DAViCal via CalDAV, as a client
Method CalendarHomeSet
CalDAVSyncClient::CalendarHomeSet() in CalDAVSyncClient.php
Get/Set the calendar-home-set URL
Class CalendarInfo
CalendarInfo in caldav-client-v2.php
A class for holding basic calendar information
Method CalendarMultiget
CalDAVSyncClient::CalendarMultiget() in CalDAVSyncClient.php
Get a bunch of events for a calendar with a calendar-multiget report
Method CalendarUrls
CalDAVSyncClient::CalendarUrls() in CalDAVSyncClient.php
Get/Set the calendar-home-set URL
Method current
RepeatRule::current() in RRule-v2.php
Page caldav-client-v2.php
caldav-client-v2.php in caldav-client-v2.php
Page caldav-client.php
caldav-client.php in caldav-client.php
Page CalDAVSyncClient.php
CalDAVSyncClient.php in CalDAVSyncClient.php
d
Variable $displayname
CalendarInfo::$displayname in caldav-client-v2.php
Method DateDifference
Produce an iCalendar format DURATION for the difference between this an another iCalDate
Method date_mask
RepeatRule::date_mask() in RRule-v2.php
Method day
Method daysInMonth
Returns the number of days in a year/month pair
Method DaysInMonth
No of days in a month 1(Jan) - 12(Dec)
Constant DEBUG_RRULE
DEBUG_RRULE in RRule-v2.php
Method DoCalendarQuery
CalDAVClient::DoCalendarQuery() in caldav-client.php
Given XML for a calendar query, return an array of the events (/todos) in the response. Each event in the array will have a 'href', 'etag' and '$response_type' part, where the 'href' is relative to the calendar and the '$response_type' contains the definition of the calendar data in iCalendar format.
Method DoCalendarQuery
CalDAVSyncClient::DoCalendarQuery() in CalDAVSyncClient.php
Given XML for a calendar query, return an array of the events (/todos) in the response. Each event in the array will have a 'href', 'etag' and '$response_type' part, where the 'href' is relative to the calendar and the '$response_type' contains the definition of the calendar data in iCalendar format.
Method DoDELETERequest
CalDAVClient::DoDELETERequest() in caldav-client.php
DELETE a text/icalendar resource
Method DoDELETERequest
CalDAVSyncClient::DoDELETERequest() in CalDAVSyncClient.php
DELETE a text/icalendar resource
Method DoGETRequest
CalDAVClient::DoGETRequest() in caldav-client.php
Get a single item from the server.
Method DoGETRequest
CalDAVSyncClient::DoGETRequest() in CalDAVSyncClient.php
Get a single item from the server.
Method DoHEADRequest
CalDAVSyncClient::DoHEADRequest() in CalDAVSyncClient.php
Get the HEAD of a single item from the server.
Method DoOptionsRequest
Send an OPTIONS request to the server
Method DoOptionsRequest
CalDAVSyncClient::DoOptionsRequest() in CalDAVSyncClient.php
Send an OPTIONS request to the server
Method DoPROPFINDRequest
Get a single item from the server.
Method DoPUTRequest
CalDAVClient::DoPUTRequest() in caldav-client.php
PUT a text/icalendar resource, returning the etag
Method DoPUTRequest
CalDAVSyncClient::DoPUTRequest() in CalDAVSyncClient.php
PUT a text/icalendar resource, returning the etag
Method DoRequest
CalDAVSyncClient::DoRequest() in CalDAVSyncClient.php
Send a request to the server
Method DoRequest
CalDAVClient::DoRequest() in caldav-client.php
Send a request to the server
Method doSyncReport
CalDAVSyncClient::doSyncReport() in CalDAVSyncClient.php
Method DoXMLRequest
CalDAVClient::DoXMLRequest() in caldav-client.php
Send an XML request to the server (e.g. PROPFIND, REPORT, MKCALENDAR)
Method DoXMLRequest
CalDAVSyncClient::DoXMLRequest() in CalDAVSyncClient.php
Send an XML request to the server (e.g. PROPFIND, REPORT, MKCALENDAR)
e
Variable $entry
CalDAVClient::$entry in caldav-client.php
Variable $entry
CalDAVSyncClient::$entry in CalDAVSyncClient.php
Method epoch
Method equals
Return true if $this and $other are equal, false otherwise.
Function expand_event_instances
expand_event_instances() in RRule-v2.php
Expand the event instances for an iCalendar VEVENT (or VTODO)
f
Variable $Format
Variable $from
Method FindCalendarHome
CalDAVSyncClient::FindCalendarHome() in CalDAVSyncClient.php
Attack the given URL in an attempt to find a principal URL
Method FindCalendars
CalDAVSyncClient::FindCalendars() in CalDAVSyncClient.php
Find the calendars, from the calendar_home_set
Method FindPrincipal
CalDAVSyncClient::FindPrincipal() in CalDAVSyncClient.php
Attack the given URL in an attempt to find a principal URL
Method FloatOrUTC
If this is a localised time then this will return the UTC equivalent. If it is a floating time, then you will just get the floating time. If it is a date then it will be returned as a date. Note that if it is a *localised* date then the answer will still be the UTC equivalent but only the date itself will be returned.
Method fromTwoDates
Factory method to return an Rfc5545Duration object from the difference between two dates.
g
Method Get
CalDAVSyncCalendar::Get() in CalDAVSyncCalendar.php
Method GetToken
CalDAVSyncCalendar::GetToken() in CalDAVSyncCalendar.php
Variable $getctag
CalendarInfo::$getctag in caldav-client-v2.php
Method GetCalendarDetails
Find the calendars, from the calendar_home_set
Method GetCollectionETags
Get all etags for a calendar
Function getComponentRange
getComponentRange() in RRule-v2.php
Return a date range for this component.
Method getDuration
Get an Rfc5545Duration from this date range. If the from date is null it will be null.
Method GetEntryByHref
CalDAVClient::GetEntryByHref() in caldav-client.php
Get the calendar entry by HREF
Method GetEntryByHref
CalDAVSyncClient::GetEntryByHref() in CalDAVSyncClient.php
Get the calendar entry by HREF
Method GetEntryByUid
CalDAVSyncClient::GetEntryByUid() in CalDAVSyncClient.php
Get the calendar entry by UID
Method GetEntryByUid
CalDAVClient::GetEntryByUid() in caldav-client.php
Get the calendar entry by UID
Method GetEvents
CalDAVSyncClient::GetEvents() in CalDAVSyncClient.php
Get the events in a range from $start to $finish. The dates should be in the
Method GetEvents
CalDAVClient::GetEvents() in caldav-client.php
Get the events in a range from $start to $finish. The dates should be in the
Method GetHttpRequest
CalDAVSyncClient::GetHttpRequest() in CalDAVSyncClient.php
Output http request headers
Method GetHttpRequest
CalDAVClient::GetHttpRequest() in caldav-client.php
Output http request headers
Method GetHttpResponse
CalDAVClient::GetHttpResponse() in caldav-client.php
Output http response headers
Method GetMonthByDay
Applies any BYDAY to the month to return a set of days
Method GetMonthByMonthDay
Applies any BYMONTHDAY to the month to return a set of days
Method GetNext
RRule::GetNext() in RRule.php
This is most of the meat of the RRULE processing, where we find the next date.
Method GetOKProps
CalDAVSyncClient::GetOKProps() in CalDAVSyncClient.php
Return the <prop> ... </prop> of a propstat where the status is OK
Method GetResponseBody
CalDAVSyncClient::GetResponseBody() in CalDAVSyncClient.php
Output http response body
Method GetResponseHeaders
Output http response headers
Method getTimeZone
Method GetTodos
CalDAVSyncClient::GetTodos() in CalDAVSyncClient.php
Get the todo's in a range from $start to $finish. The dates should be in the
Method GetTodos
CalDAVClient::GetTodos() in caldav-client.php
Get the todo's in a range from $start to $finish. The dates should be in the
Function getVCalendarRange
getVCalendarRange() in RRule-v2.php
Return a RepeatRuleDateRange from the earliest start to the latest end of the event.
Method GetWeekByDay
Applies any BYDAY to the week to return a set of days
Method GetXmlRequest
CalDAVSyncClient::GetXmlRequest() in CalDAVSyncClient.php
Output xml request
Method GetXmlRequest
CalDAVClient::GetXmlRequest() in caldav-client.php
Output xml request
Method GetXmlResponse
CalDAVSyncClient::GetXmlResponse() in CalDAVSyncClient.php
Output xml response
Method GetXmlResponse
CalDAVClient::GetXmlResponse() in caldav-client.php
Output xml response
Method GreaterThan
Test if $this is greater than the date parameter
h
Method hasSyncReport
CalDAVSyncCalendar::hasSyncReport() in CalDAVSyncCalendar.php
Variable $headers
CalDAVClient::$headers in caldav-client.php
Variable $headers
CalDAVSyncClient::$headers in CalDAVSyncClient.php
Variable $httpParsedHeaders
CalDAVSyncClient::$httpParsedHeaders in CalDAVSyncClient.php
Variable $httpRequest
CalDAVClient::$httpRequest in caldav-client.php
Variable $httpRequest
CalDAVSyncClient::$httpRequest in CalDAVSyncClient.php
Variable $httpResponse
CalDAVClient::$httpResponse in caldav-client.php
Variable $httpResponseBody
CalDAVSyncClient::$httpResponseBody in CalDAVSyncClient.php
Variable $httpResponseCode
CalDAVSyncClient::$httpResponseCode in CalDAVSyncClient.php
Variable $httpResponseHeaders
Method hasLeapDay
Returns a 1 if this year is a leap year, otherwise a 0
Method hasLimitedOccurrences
If this repeat rule has an UNTIL= or COUNT= then we can know it will end. Eventually.
Method hour
Method HrefForProp
CalDAVSyncClient::HrefForProp() in CalDAVSyncClient.php
Return the href containing this property. Except only if it's inside a status != 200
Method HrefForResourcetype
Return the href which has a resourcetype of the specified type
Method HrefValueInside
CalDAVSyncClient::HrefValueInside() in CalDAVSyncClient.php
Return the first occurrence of an href inside the named tag.
i
Method iCalDate
The constructor takes either an iCalendar date, a text string formatted as an iCalendar date, or epoch seconds.
Class iCalDate
iCalDate in RRule.php
A Class for handling dates in iCalendar format. We do make the simplifying assumption that all date handling in here is normalised to GMT. One day we might provide some functions to do that, but for now it is done externally.
Method isDate
Method isFloating
k
Method key
RepeatRule::key() in RRule-v2.php
l
Method LessThan
Test if $this is less than the date parameter
m
Method minute
Method modify
Method month
Method MonthDays
Given a MonthDays string like "1MO", "-2WE" return an integer day of the month.
n
Method next
RepeatRule::next() in RRule-v2.php
Return the next date in the repeating series.
o
Function olson_from_vtimezone
olson_from_vtimezone() in RRule-v2.php
Try and extract something like "Pacific/Auckland" or "America/Indiana/Indianapolis" if possible, given the VTIMEZONE component that is passed in. This is much more complex than olson_from_tzstring since we start to examine the rules and work out what actual timezone this might be.
Method overlaps
Assess whether this range overlaps the supplied range. null values are treated as infinity.
p
Variable $parser
CalDAVSyncClient::$parser in CalDAVSyncClient.php
Variable $pass
CalDAVClient::$pass in caldav-client.php
Variable $pass
CalDAVSyncClient::$pass in CalDAVSyncClient.php
Variable $port
CalDAVSyncClient::$port in CalDAVSyncClient.php
Variable $port
CalDAVClient::$port in caldav-client.php
Variable $principal_url
CalDAVSyncClient::$principal_url in CalDAVSyncClient.php
The principal-URL we're using
Variable $protocol
CalDAVClient::$protocol in caldav-client.php
Variable $protocol
CalDAVSyncClient::$protocol in CalDAVSyncClient.php
Method ParseResponse
CalDAVClient::ParseResponse() in caldav-client.php
Split response into httpResponse and xmlResponse
Method ParseResponse
CalDAVSyncClient::ParseResponse() in CalDAVSyncClient.php
Split response into httpResponse and xmlResponse
Method ParseResponseHeaders
Split httpResponseHeaders into an array of headers
Method PrincipalURL
CalDAVSyncClient::PrincipalURL() in CalDAVSyncClient.php
Get/Set the Principal URL
r
Variable $requestMethod
CalDAVClient::$requestMethod in caldav-client.php
Variable $requestMethod
CalDAVSyncClient::$requestMethod in CalDAVSyncClient.php
Page RRule-v2.php
RRule-v2.php in RRule-v2.php
Page RRule.php
RRule.php in RRule.php
Function rdate_expand
rdate_expand() in RRule-v2.php
Expand the event instances for an RDATE or EXDATE property
Method Render
iCalDate::Render() in RRule.php
Set the day of week used for calculation of week starts
Method RenderGMT
Render the date as GMT
Class RepeatRule
RepeatRule in RRule-v2.php
This class is an implementation of RRULE parsing and expansion, as per RFC5545. It should be reasonably complete, except that it does not handle changing the WKST - there may be a few errors in unusual rules also, but all of the common cases should be handled correctly.
Class RepeatRuleDateRange
RepeatRuleDateRange in RRule-v2.php
This class is used to hold a pair of dates defining a range. The range may be open-ended by including a null for one end or the other, or both.
Class RepeatRuleDateTime
RepeatRuleDateTime in RRule-v2.php
Wrap the DateTime class to make it friendlier to passing in random strings from iCalendar objects, and especially the random stuff used to identify timezones. We also add some utility methods and stuff too, in order to simplify some of the operations we need to do with dates.
Class RepeatRuleTimeZone
RepeatRuleTimeZone in RRule-v2.php
Wrap the DateTimeZone class to allow parsing some iCalendar TZID strangenesses
Method rewind
RepeatRule::rewind() in RRule-v2.php
Method RFC5545
Returns the string following a property name for an RFC5545 DATE-TIME value.
Class Rfc5545Duration
Rfc5545Duration in RRule-v2.php
Provide a useful way of dealing with RFC5545 duration strings of the form
Method RRule
RRule::RRule() in RRule.php
The constructor takes a start date and an RRULE definition. Both of these follow the iCalendar standard.
Class RRule
RRule in RRule.php
A Class for handling Events on a calendar which repeat
Method rrule_day_number
Function rrule_expand
rrule_expand() in RRule-v2.php
Expand the event instances for an RRULE property
s
Variable $sync_client
CalDAVSyncCalendar::$sync_client in CalDAVSyncCalendar.php
Method Set
CalDAVSyncCalendar::Set() in CalDAVSyncCalendar.php
Variable $server
CalDAVClient::$server in caldav-client.php
Variable $server
CalDAVSyncClient::$server in CalDAVSyncClient.php
Method second
Method setAsDate
Method setAsFloat
Method SetCalendar
CalDAVSyncClient::SetCalendar() in CalDAVSyncClient.php
Set the calendar_url we will be using for a while.
Method SetContentType
CalDAVClient::SetContentType() in caldav-client.php
Add a Content-type: header.
Method SetContentType
CalDAVSyncClient::SetContentType() in CalDAVSyncClient.php
Add a Content-type: header.
Method setDate
Method SetDebug
CalDAVSyncClient::SetDebug() in CalDAVSyncClient.php
Call this to enable / disable debugging. It will return the prior value of the debugging flag.
Method SetDepth
CalDAVSyncClient::SetDepth() in CalDAVSyncClient.php
Add a Depth: header. Valid values are 0, 1 or infinity
Method SetDepth
CalDAVClient::SetDepth() in caldav-client.php
Method SetEpochDate
Set the date from an epoch
Method SetGMTDate
Set the date from a text string
Method SetLocalDate
Set the date from a text string
Method SetMatch
CalDAVSyncClient::SetMatch() in CalDAVSyncClient.php
Adds an If-Match or If-None-Match header
Method SetMatch
CalDAVClient::SetMatch() in caldav-client.php
Adds an If-Match or If-None-Match header
Method SetMonthDay
Set the day in the month to what we have been given
Method setTimeZone
Method SetUserAgent
CalDAVSyncClient::SetUserAgent() in CalDAVSyncClient.php
Add a Depth: header. Valid values are 1 or infinity
Method SetUserAgent
CalDAVClient::SetUserAgent() in caldav-client.php
Add a Depth: header. Valid values are 1 or infinity
Method SetWeekStart
Set the day of week used for calculation of week starts
Method setYearDay
Method set_timezone
Method Start
RepeatRule::Start() in RRule-v2.php
t
Method TestByMonth
Test to see if our _mo matches something in the list of months we have received.
Method tzid
u
Variable $url
CalDAVSyncCalendar::$url in CalDAVSyncCalendar.php
Variable $until
Variable $url
CalendarInfo::$url in caldav-client-v2.php
Variable $user
CalDAVSyncClient::$user in CalDAVSyncClient.php
Variable $user
CalDAVClient::$user in caldav-client.php
Variable $user_agent
CalDAVClient::$user_agent in caldav-client.php
The useragent which is send to the caldav server
Variable $user_agent
CalDAVSyncClient::$user_agent in CalDAVSyncClient.php
The useragent which is send to the caldav server
Method Unchunk
CalDAVSyncClient::Unchunk() in CalDAVSyncClient.php
Unchunk a chunked response
Method UTC
Always returns a time localised to UTC. Even floating times are converted to UTC using the server's currently configured PHP timezone. Even dates will include a time, which will be non-zero if they were localised dates.
v
Method valid
RepeatRule::valid() in RRule-v2.php
w
Method whatChangedSince
CalDAVSyncCalendar::whatChangedSince() in CalDAVSyncCalendar.php
Method WithinScope
Processes the array of $relative_days to $base and removes any which are not within the scope of our rule.
x
Variable $xmlRequest
CalDAVSyncClient::$xmlRequest in CalDAVSyncClient.php
Variable $xmlRequest
CalDAVClient::$xmlRequest in caldav-client.php
Variable $xmlResponse
CalDAVSyncClient::$xmlResponse in CalDAVSyncClient.php
Variable $xmlResponse
CalDAVClient::$xmlResponse in caldav-client.php
y
Method year
a b c d e f g h i k l m n o p r s t u v w x y _
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 davical-1.1.1/docs/api/li_davical.html0000644000000000000000000016655011776301331014500 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
davical
Description
Class trees
Index of elements
Todo List
 Classes
ClassAtomEntry
ClassAtomFeed
ClassAtomXHTMLContent
ClassCalDAVSyncCache
ClassCalDAVSyncState
ClassCheckResult
ClassFakeSession
ClassRRuleTest
ClassSqlToArray
ClassVCard
ClassVTimezone
 Functions
Functionaccess_ticket_browser
Functionapply_filter
Functionbindings_to_other_browser
Functionbindings_to_us_browser
Functionbits_to_privilege
FunctionBuildSqlFilter
Functionbuild_dependencies_table
Functionbuild_privileges_html
Functionbuild_site_statistics
Functioncaldav_get_feed
Functioncatch_setup_errors
FunctioncheckiSchedule
Functioncheck_awl_version
Functioncheck_calendar
Functioncheck_curl
Functioncheck_database_connection
Functioncheck_datetime
Functioncheck_davical_version
Functioncheck_for_expansion
Functioncheck_gettext
Functioncheck_iconv
Functioncheck_ldap
Functioncheck_magic_quotes_gpc
Functioncheck_magic_quotes_runtime
Functioncheck_pdo
Functioncheck_pdo_pgsql
Functioncheck_pgsql
Functioncheck_real_php
Functioncheck_schema_version
Functioncheck_string
Functioncheck_suhosin_server_strip
Functionconfirm_delete_binding
Functionconfirm_delete_bind_in
Functionconfirm_delete_collection
Functionconfirm_delete_principal
Functionconfirm_delete_ticket
FunctionConstructURL
FunctionDateToISODate
FunctionDeconstructURL
Functiondo_error
Functionearly_exception_handler
Functionedit_grant_row
Functionedit_group_row
Functionedit_ticket_row
FunctionerrorResponse
Functionexpand_properties
FunctiongenerateKeys
FunctiongetStatusMessage
Functionget_address_properties
Functionget_freebusy
Functionget_href_containers
Functionget_phpinfo
Functiongrant_row_editor
Functiongroup_memberships_browser
Functiongroup_members_browser
Functiongroup_row_editor
Functionhandle_subaction
Functionhyperlink
Functioni18n
Functionischedule_get
FunctionISODateToHTTPDate
Functionlog_setup_error
Functionmake_help_link
Functionprincipal_collection_browser
Functionprincipal_editor
Functionprincipal_grants_browser
Functionprivileges_to_XML
Functionprivilege_format_function
Functionprivilege_to_bits
FunctionremoveComment
Functionsend_page_header
FunctionSqlFilterCardDAV
FunctionSqlFilterFragment
FunctionSRVFormat
FunctionSRVOk
Functionticket_row_editor
FunctionunicodeToUtf8
Functionutf8ToUnicode
 Files
Fileadmin.php
Filealways.php
FileAtomFeed.php
Fileautodiscover-handler.php
Filecaldav-LOCK.php
Filecaldav-REPORT-calquery.php
Filecaldav-REPORT-cardquery.php
Filecaldav-REPORT-expand-property.php
Filecaldav-REPORT-freebusy.php
Filecaldav-REPORT-multiget.php
Filecaldav-REPORT-principal-match.php
Filecaldav-REPORT-principal.php
FileCalDAVSyncCache.php
FileCalDAVSyncState.php
Filecheck_UTF8.php
Filecollection-edit.php
Filecreatedb.php
Filedavical_configuration_missing.php
Filedbexec.php
Fileexternal-browse.php
FileFakeSession.php
Filefeed.php
Filefreebusy-functions.php
Filefreebusy.php
Filehelp.php
Fileindex.php
Fileinteractive-page.php
FileiSchedule.php
Filenewfile.php
Fileother_translated_strings.php
Filepage-footer.php
Filepage-header.php
Fileprincipal-browse.php
Fileprincipal-edit.php
Filepubsub.php
Filesetup.php
FileSqlToArray.php
Filetest-RRULE-v2.php
Filetest-RRULE.php
Filetest.php
Fileupgrade.php
Filevcard.php
Filevtimezone.php
Filewell-known.php
FileWritableCollection.php
Sub-packageauthentication
 Functions
FunctionAuthExternalAWL
Functionauth_functions_deprecated
FunctionCreateDefaultRelationships
FunctionCreateHomeCalendar
FunctionCreateHomeCollections
FunctiongetPrincipalByID
FunctiongetUserByEMail
FunctiongetUserByID
FunctiongetUserByName
FunctionUpdateCollectionTimezones
FunctionUpdateUserFromExternal
 Files
Fileauth-functions.php
Sub-packagecaldav
 Functions
Functionadd_failure
Functioncomponent_to_xml
FunctioncontrolRequestContainer
Functiondelete_collection
FunctiondeliverItipCancel
Functiondisplay_status
FunctiondoItipAttendeeReply
FunctiondoItipOrganizerCancel
Functiondo_scheduling_for_delete
Functiondo_scheduling_reply
Functiondo_scheduling_requests
Functionexport_iCalendar
FunctionGetItip
FunctionGetTZID
Functionhandle_cancel_request
Functionhandle_freebusy_request
Functionhandle_schedule_reply
Functionhandle_schedule_request
Functionimport_addressbook_collection
Functionimport_calendar_collection
Functionimport_collection
FunctionlogRequestHeaders
Functionobfuscated_event
FunctionprocessItipCancel
Functionprocess_ace
Functionproperty_response
Functionpublic_events_only
Functionrollback
Functionrollback_on_error
Functionsend_dav_header
Functionsimple_write_resource
Functionwrite_alarms
Functionwrite_attendees
Functionwrite_resource
 Files
Filecaldav-ACL.php
Filecaldav-BIND.php
Filecaldav-DELETE.php
Filecaldav-DELTICKET.php
Filecaldav-GET-functions.php
Filecaldav-GET.php
Filecaldav-MKCOL.php
Filecaldav-MKTICKET.php
Filecaldav-MOVE.php
Filecaldav-OPTIONS.php
Filecaldav-POST.php
Filecaldav-PROPPATCH.php
Filecaldav-PUT-default.php
Filecaldav-PUT-functions.php
Filecaldav-PUT-vcalendar.php
Filecaldav-PUT-vcard.php
Filecaldav-REPORT-pps-set.php
Filecaldav-REPORT-sync-collection.php
Filecaldav-REPORT.php
Filecaldav.php
Filepublic.php
Fileschedule-functions.php
Sub-packageDAViCalSession
 Classes
ClassDAViCalSession
ClassTools
 Functions
Functionlocal_session_sql
 Files
FileDAViCalSession.php
Filetools.php
Sub-packageDAVTicket
 Classes
ClassDAVTicket
 Files
FileDAVTicket.php
Sub-packageexternal-bind
 Functions
Functioncreate_external
Functionfetch_external
Functionupdate_external
 Files
Fileexternal-fetch.php
Sub-packageHTTPAuthSession
 Classes
ClassHTTPAuthSession
 Files
FileHTTPAuthSession.php
Sub-packageiSchedule
 Classes
ClassiSchedule
 Files
FileiSchedule.php
Sub-packageiSchedule-POST
 Functions
Functionischedule_cancel
Functionischedule_freebusy_request
Functionischedule_request
 Files
FileiSchedule-POST.php
Sub-packageldap
 Classes
ClassimapPamDrivers
ClassldapDrivers
ClasssquidPamDrivers
 Functions
Functionarray_values_mapping
FunctiongetStaticLdap
FunctionIMAP_PAM_check
FunctionLDAP_check
FunctionRIMAP_check
FunctionSQUID_PAM_check
Functionsync_LDAP
Functionsync_LDAP_groups
Functionsync_user_from_LDAP
 Files
Filedrivers_imap_pam.php
Filedrivers_ldap.php
Filedrivers_rimap.php
Filedrivers_squid_pam.php
Sub-packagelogging
 Functions
Functionlog_caldav_action
 Files
Filelog_caldav_action.php
Sub-packagePrincipal
 Classes
ClassDAVPrincipal
ClassPrincipal
 Files
FileDAVPrincipal.php
FilePrincipal.php
Sub-packagepropfind
 Functions
Functionadd_proxy_response
Functionget_collection_contents
 Files
Filecaldav-PROPFIND.php
Sub-packagePublicSession
 Classes
ClassPublicSession
 Files
FilePublicSession.php
Sub-packagepwauth
 Classes
ClasspwauthPamDrivers
 Functions
FunctionPWAUTH_PAM_check
 Files
Filedrivers_pwauth_pam.php
Sub-packageRequest
 Classes
ClassCalDAVRequest
 Files
FileCalDAVRequest.php
Sub-packageResource
 Classes
ClassDAVResource
ClassWritableCollection
 Files
FileDAVResource.php
Sub-packagetzservice
 Functions
Functionexpand_timezone_onsets
 Files
Filecapabilities.php
Fileexpand.php
Fileget.php
Filelist.php
Filetz.php

phpDocumentor v 1.4.3

davical-1.1.1/docs/api/errors.html0000644000000000000000000012061711776301337013725 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 phpDocumentor Parser Errors and Warnings Post-parsing
always.php
AtomFeed.php
auth-functions.php
autodiscover-handler.php
caldav-ACL.php
caldav-BIND.php
caldav-client-v2.php
caldav-DELETE.php
caldav-DELTICKET.php
caldav-GET-functions.php
caldav-GET.php
caldav-LOCK.php
caldav-MKCOL.php
caldav-MKTICKET.php
caldav-MOVE.php
caldav-OPTIONS.php
caldav-POST.php
caldav-PROPFIND.php
caldav-PROPPATCH.php
caldav-PUT-default.php
caldav-PUT-vcalendar.php
caldav-PUT-vcard.php
caldav-REPORT-calquery.php
caldav-REPORT-cardquery.php
caldav-REPORT-expand-property.php
caldav-REPORT-freebusy.php
caldav-REPORT-multiget.php
caldav-REPORT-principal-match.php
caldav-REPORT-principal.php
caldav-REPORT.php
caldav.php
CalDAVRequest.php
CalDAVSyncCache.php
CalDAVSyncClient.php
CalDAVSyncState.php
check_UTF8.php
collection-edit.php
createdb.php
davical_configuration_missing.php
DAVPrincipal.php
DAVResource.php
DAVTicket.php
dbexec.php
drivers_imap_pam.php
drivers_ldap.php
drivers_pwauth_pam.php
drivers_rimap.php
drivers_squid_pam.php
expand.php
external-browse.php
external-fetch.php
FakeSession.php
feed.php
freebusy-functions.php
freebusy.php
get.php
help.php
index.php
interactive-page.php
iSchedule-POST.php
iSchedule.php
list.php
log_caldav_action.php
newfile.php
other_translated_strings.php
page-footer.php
page-header.php
principal-browse.php
principal-edit.php
Principal.php
public.php
pubsub.php
RRule-v2.php
schedule-functions.php
setup.php
SqlToArray.php
test-RRULE-v2.php
test-RRULE.php
test.php
tools.php
tz.php
upgrade.php
vcard.php
vtimezone.php
well-known.php
WritableCollection.php

Post-parsing

Warnings:


Warning - duplicate class element "CalDAVClient" in file /home/karora/projects/davical/inc/caldav-client-v2.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - duplicate function element "privilege_format_function" in file /home/karora/projects/davical/inc/ui/principal-edit.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - duplicate function element "edit_grant_row" in file /home/karora/projects/davical/inc/ui/principal-edit.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - duplicate class element "RRuleTest" in file /home/karora/projects/davical/inc/test-RRULE-v2.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - duplicate class element "FakeSession" in file /home/karora/projects/davical/inc/iSchedule-POST.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - duplicate class element "imapPamDrivers" in file /home/karora/projects/davical/inc/drivers_imap_pam.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - duplicate function element "apply_filter" in file /home/karora/projects/davical/inc/caldav-REPORT-cardquery.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - duplicate class element "FakeSession" in file /home/karora/projects/davical/htdocs/setup.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - duplicate function element "check_for_expansion" in file /home/karora/projects/davical/inc/caldav-REPORT-multiget.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - Class VCard parent vComponent not found
Warning - Class AtomFeed parent XMLDocument not found
Warning - Class VTimezone parent vComponent not found
Warning - @todo on an include element is ignored (line 106, file /home/karora/projects/davical/htdocs/caldav.php)
Warning - Class DAViCalSession parent Session not found
Warning - duplicate define element "_FSOCK_TIMEOUT" in file /home/karora/projects/davical/inc/CalDAVSyncClient.php will be ignored. Use an @ignore tag on the original if you want this case to be documented.
Warning - @todo on an include element is ignored (line 106, file /home/karora/projects/davical/htdocs/caldav.php)

admin.php

Warnings:


Warning on line 51 - File "/home/karora/projects/davical/htdocs/admin.php" has no page-level DocBlock, use @package in the first DocBlock to create one

always.php

Warnings:


Warning on line 41 - Page-level DocBlock precedes "function early_exception_handler", use another DocBlock to document the source element

Errors:


Error on line 41 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

AtomFeed.php

Warnings:


Warning on line 19 - no @package tag was used in a DocBlock for class AtomXHTMLContent
Warning on line 32 - no @package tag was used in a DocBlock for class AtomEntry
Warning on line 138 - no @package tag was used in a DocBlock for class AtomFeed
Warning on line 239 - File "/home/karora/projects/davical/inc/AtomFeed.php" has no page-level DocBlock, use @package in the first DocBlock to create one

auth-functions.php

Warnings:


Warning on line 27 - Page-level DocBlock precedes "require_once "DataUpdate.php"", use another DocBlock to document the source element

Errors:


Error on line 27 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 27 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage authentication"

autodiscover-handler.php

Warnings:


Warning on line 89 - File "/home/karora/projects/davical/inc/autodiscover-handler.php" has no page-level DocBlock, use @package in the first DocBlock to create one

caldav-ACL.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once 'DAVResource.php'", use another DocBlock to document the source element

caldav-BIND.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'AwlQuery.php'", use another DocBlock to document the source element

caldav-client-v2.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once 'XMLDocument.php'", use another DocBlock to document the source element
Warning on line 12 - package davical is already in category Technical, will now replace with category Documentation

Errors:


Error on line 12 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
Error on line 12 - require_once include's DocBlock has @package tag, illegal. ignoring tag "@package awl"

caldav-DELETE.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once 'DAVResource.php'", use another DocBlock to document the source element

Errors:


Error on line 12 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
Error on line 12 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

caldav-DELTICKET.php

Warnings:


Warning on line 20 - Page-level DocBlock precedes "require_once 'DAVResource.php'", use another DocBlock to document the source element

caldav-GET-functions.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once "iCalendar.php"", use another DocBlock to document the source element

Errors:


Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"

caldav-GET.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require "caldav-GET-functions.php"", use another DocBlock to document the source element

caldav-LOCK.php

Warnings:


Warning on line 164 - File "/home/karora/projects/davical/inc/caldav-LOCK.php" has no page-level DocBlock, use @package in the first DocBlock to create one

caldav-MKCOL.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'AwlQuery.php'", use another DocBlock to document the source element

Errors:


Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

caldav-MKTICKET.php

Warnings:


Warning on line 19 - package davical is already in category Technical, will now replace with category Documentation
Warning on line 20 - Page-level DocBlock precedes "require_once 'DAVResource.php'", use another DocBlock to document the source element

Errors:


Error on line 20 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
Error on line 20 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

caldav-MOVE.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once 'DAVResource.php'", use another DocBlock to document the source element

caldav-OPTIONS.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "include_once 'DAVResource.php'", use another DocBlock to document the source element

Errors:


Error on line 12 - "include" include_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
Error on line 12 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

caldav-POST.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once "XMLDocument.php"", use another DocBlock to document the source element

Errors:


Error on line 12 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 12 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"

caldav-PROPFIND.php

Warnings:


Warning on line 14 - Page-level DocBlock precedes "require_once 'iCalendar.php'", use another DocBlock to document the source element

caldav-PROPPATCH.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once 'vCalendar.php'", use another DocBlock to document the source element

Errors:


Error on line 12 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 12 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"

caldav-PUT-default.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once 'DAVResource.php'", use another DocBlock to document the source element

caldav-PUT-vcalendar.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once 'DAVResource.php'", use another DocBlock to document the source element

caldav-PUT-vcard.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once 'DAVResource.php'", use another DocBlock to document the source element

caldav-REPORT-calquery.php

Warnings:


Warning on line 382 - File "/home/karora/projects/davical/inc/caldav-REPORT-calquery.php" has no page-level DocBlock, use @package in the first DocBlock to create one

caldav-REPORT-cardquery.php

Warnings:


Warning on line 232 - File "/home/karora/projects/davical/inc/caldav-REPORT-cardquery.php" has no page-level DocBlock, use @package in the first DocBlock to create one

caldav-REPORT-expand-property.php

Warnings:


Warning on line 98 - File "/home/karora/projects/davical/inc/caldav-REPORT-expand-property.php" has no page-level DocBlock, use @package in the first DocBlock to create one

caldav-REPORT-freebusy.php

Warnings:


Warning on line 24 - File "/home/karora/projects/davical/inc/caldav-REPORT-freebusy.php" has no page-level DocBlock, use @package in the first DocBlock to create one

caldav-REPORT-multiget.php

Warnings:


Warning on line 105 - Unknown tag "@todo:" used
Warning on line 123 - File "/home/karora/projects/davical/inc/caldav-REPORT-multiget.php" has no page-level DocBlock, use @package in the first DocBlock to create one

caldav-REPORT-principal-match.php

Warnings:


Warning on line 56 - File "/home/karora/projects/davical/inc/caldav-REPORT-principal-match.php" has no page-level DocBlock, use @package in the first DocBlock to create one

caldav-REPORT-principal.php

Warnings:


Warning on line 51 - no @package tag was used in a DocBlock for file /home/karora/projects/davical/inc/caldav-REPORT-principal.php

caldav-REPORT.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once "XMLDocument.php"", use another DocBlock to document the source element

Errors:


Error on line 12 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 12 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"

caldav.php

Warnings:


Warning on line 21 - Page-level DocBlock precedes "require_once './always.php'", use another DocBlock to document the source element

Errors:


Error on line 21 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
Error on line 21 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

CalDAVRequest.php

Warnings:


Warning on line 16 - Page-level DocBlock precedes "require_once "AwlCache.php"", use another DocBlock to document the source element

CalDAVSyncCache.php

Warnings:


Warning on line 10 - no @package tag was used in a DocBlock for class CalDAVSyncCache
Warning on line 129 - File "/home/karora/projects/davical/inc/CalDAVSyncCache.php" has no page-level DocBlock, use @package in the first DocBlock to create one

CalDAVSyncClient.php

Warnings:


Warning on line 12 - Page-level DocBlock precedes "require_once 'XMLDocument.php'", use another DocBlock to document the source element

Errors:


Error on line 12 - require_once include's DocBlock has @package tag, illegal. ignoring tag "@package awl"
Error on line 12 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"

CalDAVSyncState.php

Warnings:


Warning on line 4 - no @package tag was used in a DocBlock for class CalDAVSyncState
Warning on line 25 - File "/home/karora/projects/davical/inc/CalDAVSyncState.php" has no page-level DocBlock, use @package in the first DocBlock to create one

check_UTF8.php

Warnings:


Warning on line 227 - File "/home/karora/projects/davical/inc/check_UTF8.php" has no page-level DocBlock, use @package in the first DocBlock to create one

collection-edit.php

Warnings:


Warning on line 551 - File "/home/karora/projects/davical/inc/ui/collection-edit.php" has no page-level DocBlock, use @package in the first DocBlock to create one

createdb.php

Warnings:


Warning on line 31 - File "/home/karora/projects/davical/htdocs/createdb.php" has no page-level DocBlock, use @package in the first DocBlock to create one

davical_configuration_missing.php

Warnings:


Warning on line 31 - File "/home/karora/projects/davical/inc/davical_configuration_missing.php" has no page-level DocBlock, use @package in the first DocBlock to create one

DAVPrincipal.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'Principal.php'", use another DocBlock to document the source element

Errors:


Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage Principal"

DAVResource.php

Warnings:


Warning on line 11 - package davical is already in category Technical, will now replace with category Documentation
Warning on line 11 - Page-level DocBlock precedes "require_once 'AwlCache.php'", use another DocBlock to document the source element

Errors:


Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage Resource"
Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

DAVTicket.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'AwlQuery.php'", use another DocBlock to document the source element

Errors:


Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage DAVTicket"
Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

dbexec.php

Warnings:


Warning on line 58 - File "/home/karora/projects/davical/htdocs/dbexec.php" has no page-level DocBlock, use @package in the first DocBlock to create one

drivers_imap_pam.php

Warnings:


Warning on line 14 - package davical is already in category Documentation, will now replace with category Technical
Warning on line 18 - Page-level DocBlock precedes "require_once "auth-functions.php"", use another DocBlock to document the source element
Warning on line 21 - no @package tag was used in a DocBlock for class imapPamDrivers

Errors:


Error on line 18 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 18 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage ldap"

drivers_ldap.php

Warnings:


Warning on line 13 - Page-level DocBlock precedes "require_once "auth-functions.php"", use another DocBlock to document the source element
Warning on line 16 - no @package tag was used in a DocBlock for class ldapDrivers

Errors:


Error on line 13 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage ldap"
Error on line 13 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

drivers_pwauth_pam.php

Warnings:


Warning on line 16 - Page-level DocBlock precedes "require_once "auth-functions.php"", use another DocBlock to document the source element
Warning on line 19 - no @package tag was used in a DocBlock for class pwauthPamDrivers

Errors:


Error on line 16 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 16 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage pwauth"

drivers_rimap.php

Warnings:


Warning on line 13 - Page-level DocBlock precedes "require_once "auth-functions.php"", use another DocBlock to document the source element
Warning on line 13 - package davical is already in category Documentation, will now replace with category Technical
Warning on line 16 - no @package tag was used in a DocBlock for class imapPamDrivers

Errors:


Error on line 13 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 13 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage ldap"

drivers_squid_pam.php

Warnings:


Warning on line 13 - Page-level DocBlock precedes "require_once "auth-functions.php"", use another DocBlock to document the source element
Warning on line 16 - no @package tag was used in a DocBlock for class squidPamDrivers

Errors:


Error on line 13 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage ldap"
Error on line 13 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

expand.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'vCalendar.php'", use another DocBlock to document the source element

Errors:


Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage tzservice"

external-browse.php

Warnings:


Warning on line 37 - File "/home/karora/projects/davical/inc/ui/external-browse.php" has no page-level DocBlock, use @package in the first DocBlock to create one

external-fetch.php

Warnings:


Warning on line 39 - Page-level DocBlock precedes "function create_external", use another DocBlock to document the source element

Errors:


Error on line 39 - "function" create_external's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage external-bind"
Error on line 39 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

FakeSession.php

Warnings:


Warning on line 11 - no @package tag was used in a DocBlock for class FakeSession
Warning on line 37 - File "/home/karora/projects/davical/inc/FakeSession.php" has no page-level DocBlock, use @package in the first DocBlock to create one

feed.php

Warnings:


Warning on line 206 - File "/home/karora/projects/davical/htdocs/feed.php" has no page-level DocBlock, use @package in the first DocBlock to create one

freebusy-functions.php

Warnings:


Warning on line 94 - File "/home/karora/projects/davical/inc/freebusy-functions.php" has no page-level DocBlock, use @package in the first DocBlock to create one

freebusy.php

Warnings:


Warning on line 43 - Unknown tag "@NOTE:" used
Warning on line 83 - File "/home/karora/projects/davical/htdocs/freebusy.php" has no page-level DocBlock, use @package in the first DocBlock to create one

get.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'vCalendar.php'", use another DocBlock to document the source element

Errors:


Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage tzservice"

help.php

Warnings:


Warning on line 28 - File "/home/karora/projects/davical/htdocs/help.php" has no page-level DocBlock, use @package in the first DocBlock to create one

index.php

Warnings:


Warning on line 60 - File "/home/karora/projects/davical/htdocs/index.php" has no page-level DocBlock, use @package in the first DocBlock to create one

interactive-page.php

Warnings:


Warning on line 47 - File "/home/karora/projects/davical/inc/interactive-page.php" has no page-level DocBlock, use @package in the first DocBlock to create one

iSchedule-POST.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'iSchedule.php'", use another DocBlock to document the source element
Warning on line 18 - no @package tag was used in a DocBlock for class FakeSession

Errors:


Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage iSchedule-POST"

iSchedule.php

Warnings:


Warning on line 16 - Page-level DocBlock precedes "require_once "XMLDocument.php"", use another DocBlock to document the source element
Warning on line 145 - File "/home/karora/projects/davical/htdocs/iSchedule.php" has no page-level DocBlock, use @package in the first DocBlock to create one

Errors:


Error on line 16 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage iSchedule"
Error on line 16 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

list.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'vComponent.php'", use another DocBlock to document the source element

Errors:


Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage tzservice"

log_caldav_action.php

Warnings:


Warning on line 24 - package davical is already in category Documentation, will now replace with category Technical

newfile.php

Warnings:


Warning on line 49 - File "/home/karora/projects/davical/htdocs/newfile.php" has no page-level DocBlock, use @package in the first DocBlock to create one

other_translated_strings.php

Warnings:


Warning on line 50 - File "/home/karora/projects/davical/inc/other_translated_strings.php" has no page-level DocBlock, use @package in the first DocBlock to create one

page-footer.php

Warnings:


Warning on line 12 - File "/home/karora/projects/davical/inc/page-footer.php" has no page-level DocBlock, use @package in the first DocBlock to create one

page-header.php

Warnings:


Warning on line 84 - File "/home/karora/projects/davical/inc/page-header.php" has no page-level DocBlock, use @package in the first DocBlock to create one

principal-browse.php

Warnings:


Warning on line 47 - File "/home/karora/projects/davical/inc/ui/principal-browse.php" has no page-level DocBlock, use @package in the first DocBlock to create one

principal-edit.php

Warnings:


Warning on line 980 - File "/home/karora/projects/davical/inc/ui/principal-edit.php" has no page-level DocBlock, use @package in the first DocBlock to create one

Principal.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'AwlCache.php'", use another DocBlock to document the source element

Errors:


Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage Principal"
Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

public.php

Warnings:


Warning on line 10 - Page-level DocBlock precedes "require "./always.php"", use another DocBlock to document the source element

Errors:


Error on line 10 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 10 - "include" require's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"

pubsub.php

Warnings:


Warning on line 721 - File "/home/karora/projects/davical/inc/pubsub.php" has no page-level DocBlock, use @package in the first DocBlock to create one

RRule-v2.php

Warnings:


Warning on line 38 - no @package tag was used in a DocBlock for class RepeatRuleTimeZone
Warning on line 76 - no @package tag was used in a DocBlock for class Rfc5545Duration
Warning on line 203 - no @package tag was used in a DocBlock for class RepeatRuleDateTime
Warning on line 521 - no @package tag was used in a DocBlock for class RepeatRuleDateRange
Warning on line 589 - no @package tag was used in a DocBlock for class RepeatRule
Warning on line 1451 - Unknown tag "@todo:" used

schedule-functions.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once 'vCalendar.php'", use another DocBlock to document the source element

Errors:


Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage caldav"
Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"

setup.php

Warnings:


Warning on line 49 - no @package tag was used in a DocBlock for class CheckResult
Warning on line 204 - no @package tag was used in a DocBlock for class FakeSession
Warning on line 480 - File "/home/karora/projects/davical/htdocs/setup.php" has no page-level DocBlock, use @package in the first DocBlock to create one

SqlToArray.php

Warnings:


Warning on line 24 - no @package tag was used in a DocBlock for class SqlToArray
Warning on line 104 - File "/home/karora/projects/davical/htdocs/SqlToArray.php" has no page-level DocBlock, use @package in the first DocBlock to create one

test-RRULE-v2.php

Warnings:


Warning on line 21 - no @package tag was used in a DocBlock for class RRuleTest
Warning on line 112 - File "/home/karora/projects/davical/inc/test-RRULE-v2.php" has no page-level DocBlock, use @package in the first DocBlock to create one

test-RRULE.php

Warnings:


Warning on line 11 - no @package tag was used in a DocBlock for class RRuleTest
Warning on line 95 - File "/home/karora/projects/davical/inc/test-RRULE.php" has no page-level DocBlock, use @package in the first DocBlock to create one

test.php

Warnings:


Warning on line 27 - File "/home/karora/projects/davical/htdocs/test.php" has no page-level DocBlock, use @package in the first DocBlock to create one

tools.php

Warnings:


Warning on line 11 - Page-level DocBlock precedes "require_once "./always.php"", use another DocBlock to document the source element
Warning on line 38 - no @package tag was used in a DocBlock for class Tools

Errors:


Error on line 11 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 11 - "include" require_once's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage DAViCalSession"

tz.php

Warnings:


Warning on line 10 - Page-level DocBlock precedes "require "./always.php"", use another DocBlock to document the source element

Errors:


Error on line 10 - DocBlock has multiple @package tags, illegal. ignoring additional tag "@package davical"
Error on line 10 - "include" require's DocBlock has @subpackage tags, illegal. ignoring tag "@subpackage tzservice"

upgrade.php

Warnings:


Warning on line 95 - File "/home/karora/projects/davical/htdocs/upgrade.php" has no page-level DocBlock, use @package in the first DocBlock to create one

vcard.php

Warnings:


Warning on line 8 - no @package tag was used in a DocBlock for class VCard
Warning on line 173 - File "/home/karora/projects/davical/inc/vcard.php" has no page-level DocBlock, use @package in the first DocBlock to create one

vtimezone.php

Warnings:


Warning on line 8 - no @package tag was used in a DocBlock for class VTimezone
Warning on line 113 - File "/home/karora/projects/davical/inc/vtimezone.php" has no page-level DocBlock, use @package in the first DocBlock to create one

well-known.php

Warnings:


Warning on line 106 - File "/home/karora/projects/davical/inc/well-known.php" has no page-level DocBlock, use @package in the first DocBlock to create one

WritableCollection.php

Warnings:


Warning on line 3 - no @package tag was used in a DocBlock for class WritableCollection
Warning on line 486 - File "/home/karora/projects/davical/inc/WritableCollection.php" has no page-level DocBlock, use @package in the first DocBlock to create one

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/0000755000000000000000000000000011776303357013123 5ustar davical-1.1.1/docs/api/davical/pwauth/0000755000000000000000000000000011776303357014433 5ustar davical-1.1.1/docs/api/davical/pwauth/pwauthPamDrivers.html0000644000000000000000000000657711776301335020637 0ustar Docs For Class pwauthPamDrivers

 Class pwauthPamDrivers

Description

Located in /inc/drivers_pwauth_pam.php (line 19)


	
			
Method Summary
 pwauthPamDrivers __construct (string $config)
Methods
Constructor __construct (line 33)

The constructor

pwauthPamDrivers __construct (string $config)
  • string $config: path where pwauth is

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/pwauth/_inc---drivers_pwauth_pam.php.html0000644000000000000000000001255311776301335023052 0ustar Docs for page drivers_pwauth_pam.php

File/inc/drivers_pwauth_pam.php

Description

Manages PAM repository connection with pwauth

Classes
Class Description
 class pwauthPamDrivers
Includes
 require_once ("auth-functions.php") (line 17)

Manages PAM repository connection with pwauth

Functions
PWAUTH_PAM_check (line 48)

Check the username / password against the PAM system

void PWAUTH_PAM_check ( $username,  $password)
  • $username
  • $password

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---WritableCollection.php.html0000644000000000000000000000555711776301337021434 0ustar Docs for page WritableCollection.php

File/inc/WritableCollection.php

Description
Classes
Class Description
 class WritableCollection A class for things to do with a DAV Resource
Includes
 include_once ('DAVResource.php') (line 2)

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---SqlToArray.php.html0000644000000000000000000000400711776301337020410 0ustar Docs for page SqlToArray.php

File/htdocs/SqlToArray.php

Description
Classes
Class Description
 class SqlToArray SqlToArray class for parsing a file of somewhat structured SQL statements into an array

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/PublicSession/0000755000000000000000000000000011776303357015705 5ustar davical-1.1.1/docs/api/davical/PublicSession/_inc---PublicSession.php.html0000644000000000000000000000467711776301336023214 0ustar Docs for page PublicSession.php

File/inc/PublicSession.php

Description

A Class for faking sessions which are anonymous access to a resource

Classes
Class Description
 class PublicSession A Class for handling a public (anonymous) session

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/PublicSession/PublicSession.html0000644000000000000000000001104611776301336021352 0ustar Docs For Class PublicSession

 Class PublicSession

Description

A Class for handling a public (anonymous) session

Located in /inc/PublicSession.php (line 17)


	
			
Method Summary
 PublicSession PublicSession ()
 boolean AllowedTo (string $whatever)
Methods
Constructor PublicSession (line 56)

The constructor, which just calls the actual type configured

PublicSession PublicSession ()
AllowedTo (line 92)

Checks whether a user is allowed to do something.

The check is performed to see if the user has that role.

  • return: Whether or not the user has the specified role.
boolean AllowedTo (string $whatever)
  • string $whatever: The role we want to know if the user has.

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/Resource/0000755000000000000000000000000011776303357014712 5ustar davical-1.1.1/docs/api/davical/Resource/DAVResource.html0000644000000000000000000021705011776301335017721 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs For Class DAVResource

 Class DAVResource

Description

A class for things to do with a DAV Resource

Located in /inc/DAVResource.php (line 24)


	
			
Direct descendents
Class Description
 class WritableCollection A class for things to do with a DAV Resource
Variable Summary
Method Summary
 static void BuildDeadPropertyXML ( $property_name,  $raw_string)
 DAVResource __construct ([mixed $parameters = null])
 void bound_from ()
 void BuildACE ( &$xmldoc,  $privs,  $principal)
 void BuildPrivileges ([ $privilege_names = null], [ &$xmldoc = null])
 void BuildSupportedReports ( &$reply)
 XMLTreeFragment BuildTicketinfo ( &$reply, &XMLDocument $reply)
 void collection_id ()
 void ContainerExists ()
 void ContainerType ()
 void dav_name ()
 void Exists ()
 void FetchCollection ()
 void FetchPrincipal ()
 void FetchPrivileges ()
 void FetchResource ()
 void FetchTickets ()
 void FromPath (object $inpath)
 void FromRow (object $row)
 void GetACL ( &$xmldoc)
 void GetProperty ( $name)
 string GetPropStat (array $properties,  &$reply, [ $props_only = false])
 boolean HavePrivilegeTo ($do_what $do_what, [$any $any = null])
 void IsAddressbook ()
 void IsBinding ()
 void IsCalendar ()
 void IsCollection ()
 void IsExternal ()
 void IsInSchedulingCollection ([string $type = 'any'])
 void IsLocked ([ $depth = 0])
 void IsPrincipal ()
 void IsPublic ()
 void IsPublicOnly ()
 void IsSchedulingCollection ([string $type = 'any'])
 void NeedPrivilege (string $privilege, [boolean $any = null])
 void parent_path ()
 void principal_url ()
 void Privileges ()
 string RenderAsXML (array $properties,  &$reply, [ $bound_parent_path = null], reference $reply)
 void resource ()
 void ResourceProperty ( $tag,  $prop,  &$reply,  &$denied)
 void resource_id ()
 void set_bind_location ( $new_dav_name)
 void sync_token ()
 void unique_tag ()
 void url ()
 void user_no ()
Variables
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
The $bound_from (line 64)
  • var: canonical name which this resource exists at
  • access: protected
The $contenttype (line 59)
  • var: type of the content
  • access: protected
The $dav_name (line 29)
  • var: partial URL of the resource within our namespace, which this resource is being retrieved as
  • access: protected
Boolean: $exists (line 34)
  • var: does the resource actually exist yet?
  • access: protected
The $parent (line 49)
  • var: parent of the resource, which will always be a collection
  • access: protected
The $resource (line 44)
  • var: actual resource content, if it exists and is not a collection
  • access: protected
The $resourcetypes (line 54)
  • var: types of the resource, possibly multiple
  • access: protected
The $unique_tag (line 39)
  • var: unique etag associated with the current version of the resource
  • access: protected
Methods
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
static BuildDeadPropertyXML (line 635)
  • access: public
void BuildDeadPropertyXML ( $property_name,  $raw_string)
  • $property_name
  • $raw_string
Constructor __construct (line 147)

Constructor

DAVResource __construct ([mixed $parameters = null])
  • mixed $parameters: If null, an empty Resourced is created. If it is an object then it is expected to be a record that was read elsewhere.
bound_from (line 1188)

Returns the dav_name of the resource we are bound to, within our internal namespace

void bound_from ()
BuildACE (line 1361)

BuildACE - construct an XMLElement subtree for a DAV::ace

void BuildACE ( &$xmldoc,  $privs,  $principal)
  • &$xmldoc
  • $privs
  • $principal
BuildPrivileges (line 800)

Returns the array of privilege names converted into XMLElements

void BuildPrivileges ([ $privilege_names = null], [ &$xmldoc = null])
  • $privilege_names
  • &$xmldoc
BuildSupportedMethods (line 889)

Returns the array of supported methods converted into XMLElements

void BuildSupportedMethods ()
BuildSupportedReports (line 941)

Returns the array of supported reports converted into XMLElements

void BuildSupportedReports ( &$reply)
  • &$reply
BuildTicketinfo (line 1002)

Returns the array of tickets converted into XMLElements

If the current user does not have DAV::read-acl privilege on this resource they will only get to see the tickets where they are the owner, or which they supplied along with the request.

  • return: A fragment of an XMLDocument to go in the reply
XMLTreeFragment BuildTicketinfo ( &$reply, &XMLDocument $reply)
  • &XMLDocument $reply: A reference to the XMLDocument used to construct the reply
  • &$reply
collection_id (line 1243)

Returns the internal collection_id for this collection, or the collection containing this resource

void collection_id ()
ContainerExists (line 1156)

Checks whether the container for this resource actually exists, in the virtual sense, within the hierarchy

void ContainerExists ()
ContainerType (line 1327)

Return the type of whatever contains this resource, or would if it existed.

void ContainerType ()
DAV_AllProperties (line 1495)

Return an array which is an expansion of the DAV::allprop

void DAV_AllProperties ()
dav_name (line 1179)

Returns the dav_name of the resource in our internal namespace

void dav_name ()
Exists (line 1138)

Checks whether this resource actually exists, in the virtual sense, within the hierarchy

void Exists ()
FetchCollection (line 482)

Find the collection associated with this resource.

  • access: protected
void FetchCollection ()
FetchDeadProperties (line 621)

Fetch any dead properties for this URL

  • access: protected
void FetchDeadProperties ()
FetchParentContainer (line 742)

Fetch the parent to this resource. This is deprecated - use GetParentContainer() instead.

void FetchParentContainer ()
FetchPrincipal (line 569)

Find the principal associated with this resource.

  • access: protected
void FetchPrincipal ()
FetchPrivileges (line 665)

Build permissions for this URL

  • access: protected
void FetchPrivileges ()
FetchResource (line 592)

Retrieve the actual resource.

  • access: protected
void FetchResource ()
FetchSupportedMethods (line 812)

Returns the array of supported methods

void FetchSupportedMethods ()
FetchSupportedReports (line 903)

Returns the array of supported reports

void FetchSupportedReports ()
FetchTickets (line 957)

Fetches an array of the access_ticket records applying to this path

void FetchTickets ()
FromPath (line 314)

Initialise from a path

void FromPath (object $inpath)
  • object $inpath: The path to populate the resource data from
FromRow (line 188)

Initialise from a database row

void FromRow (object $row)
  • object $row: The row from the DB.
GetACL (line 1382)

Return ACL settings

void GetACL ( &$xmldoc)
  • &$xmldoc
GetParentContainer (line 723)

Get a DAVResource which is the parent to this resource.

void GetParentContainer ()
GetProperty (line 1414)

Return general server-related properties, in plain form

void GetProperty ( $name)
  • $name
GetPropStat (line 1824)

Construct XML propstat fragment for this resource

  • return: An XML fragment with the requested properties for this resource
string GetPropStat (array $properties,  &$reply, [ $props_only = false])
  • array $properties: of string $properties The requested properties for this resource
  • &$reply
  • $props_only
HavePrivilegeTo (line 763)

Does the user have the privileges to do what is requested.

  • return: Whether they do have one of those privileges against this resource.
boolean HavePrivilegeTo ($do_what $do_what, [$any $any = null])
  • $do_what $do_what: mixed The request privilege name, or array of privilege names, to be checked.
  • $any $any: boolean Whether we accept any of the privileges. The default is true, unless the requested privilege is 'all', when it is false.
IsAddressbook (line 1114)

Checks whether this resource is an addressbook

void IsAddressbook ()
IsBinding (line 1122)

Checks whether this resource is a bind to another resource

void IsBinding ()
IsCalendar (line 1082)

Checks whether this resource is a calendar

void IsCalendar ()
IsCollection (line 1066)

Checks whether this resource is a collection

void IsCollection ()
IsExternal (line 1130)

Checks whether this resource is a bind to an external resource

void IsExternal ()
IsInSchedulingCollection (line 1103)

Checks whether this resource is IN a scheduling inbox/outbox collection

void IsInSchedulingCollection ([string $type = 'any'])
  • string $type: The type of scheduling collection, 'inbox', 'outbox' or 'any'
IsLocked (line 1034)

Checks whether the resource is locked, returning any lock token, or false

  • todo: This logic does not catch all locking scenarios. For example an infinite depth request should check the permissions for all collections and resources within that. At present we only maintain permissions on a per-collection basis though.
void IsLocked ([ $depth = 0])
  • $depth
IsPrincipal (line 1074)

Checks whether this resource is a principal

void IsPrincipal ()
IsPublic (line 1311)

Checks whether the target collection is publicly_readable

void IsPublic ()
IsPublicOnly (line 1319)

Checks whether the target collection is for public events only

void IsPublicOnly ()
IsSchedulingCollection (line 1091)

Checks whether this resource is a scheduling inbox/outbox collection

void IsSchedulingCollection ([string $type = 'any'])
  • string $type: The type of scheduling collection, 'inbox', 'outbox' or 'any'
NeedPrivilege (line 785)

Check if we have the needed privilege or send an error response. If the user does not have the privileges then the call will not return, and an XML error document will be output.

void NeedPrivilege (string $privilege, [boolean $any = null])
  • string $privilege: The name of the needed privilege.
  • boolean $any: Whether we accept any of the privileges. The default is true, unless the requested privilege is 'all', when it is false.
parent_path (line 1209)

Returns the dav_name of the resource in our internal namespace

void parent_path ()
principal_url (line 1225)

Returns the principal-URL for this resource

void principal_url ()
Privileges (line 751)

Return the privileges bits for the current session user to this resource

void Privileges ()
RenderAsXML (line 1882)

Render XML for this resource

  • return: An XML fragment with the requested properties for this principal
string RenderAsXML (array $properties,  &$reply, [ $bound_parent_path = null], reference $reply)
  • array $properties: The requested properties for this principal
  • reference $reply: A reference to the XMLDocument being used for the reply
  • &$reply
  • $bound_parent_path
resource (line 1252)

Returns the database row for this resource

void resource ()
ResourceProperty (line 1514)

Return general server-related properties for this URL

void ResourceProperty ( $tag,  $prop,  &$reply,  &$denied)
  • $tag
  • $prop
  • &$reply
  • &$denied
resource_id (line 1278)

Returns the definitive resource_id for this resource - usually a dav_id

void resource_id ()
set_bind_location (line 1197)

Sets the dav_name of the resource we are bound as

void set_bind_location ( $new_dav_name)
  • $new_dav_name
sync_token (line 1292)

Returns the current sync_token for this collection, or the containing collection

void sync_token ()
unique_tag (line 1261)

Returns the unique_tag (ETag or getctag) for this resource

void unique_tag ()
url (line 1168)

Returns the URL of our resource

void url ()
user_no (line 1234)

Returns the internal user_no for the principal for this resource

void user_no ()
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/Resource/WritableCollection.html0000644000000000000000000007113011776301337021363 0ustar Docs For Class WritableCollection

 Class WritableCollection

Description

A class for things to do with a DAV Resource

Located in /inc/WritableCollection.php (line 4)

DAVResource
   |
   --WritableCollection
Method Summary
 boolean actualDeleteCalendarMember (vCalendar $member_dav_name)
 void whatChangedSince (unknown_type $some_old_token)
 null WriteCalendarAlarms ( $dav_id,  $vcal)
 null WriteCalendarAttendees (int $dav_id,  $vcal)
 string WriteCalendarMember ( $vcal, boolean $create_resource, [boolean $do_scheduling = false], [string $segment_name = null], [boolean $log_action = false])
 string WriteMember ($resource $resource, $create_resource $create_resource, [$segment_name $segment_name = null], [boolean $log_action = true])
Methods
actualDeleteCalendarMember (line 412)

Writes the data to a member in the collection and returns the segment_name of the resource in our internal namespace.

  • return: Success is true, or false on failure.
boolean actualDeleteCalendarMember (vCalendar $member_dav_name)
  • vCalendar $member_dav_name: The path to the resource to be deleted.
whatChangedSince (line 450)
  • access: public
void whatChangedSince (unknown_type $some_old_token)
  • unknown_type $some_old_token
WriteCalendarAlarms (line 312)

Given a dav_id and an original vCalendar, pull out each of the VALARMs and write the values into the calendar_alarm table.

null WriteCalendarAlarms ( $dav_id,  $vcal)
  • $dav_id
  • vCalendar $vcal
WriteCalendarAttendees (line 374)

Parse out the attendee property and write a row to the calendar_attendee table for each one.

null WriteCalendarAttendees (int $dav_id,  $vcal)
  • int $dav_id: The dav_id of the caldav_data we're processing
  • vComponent $vcal: The VEVENT or VTODO containing the ATTENDEEs
WriteCalendarMember (line 33)

Writes the data to a member in the collection and returns the segment_name of the resource in our internal namespace.

  • return: The segment_name of the resource within the collection, as written, or false on failure.
string WriteCalendarMember ( $vcal, boolean $create_resource, [boolean $do_scheduling = false], [string $segment_name = null], [boolean $log_action = false])
  • vCalendar $vcal: The resource to be written.
  • boolean $create_resource: True if this is a new resource.
  • boolean $do_scheduling: True if we should also do scheduling for this write. Default false.
  • string $segment_name: The name of the resource within the collection, or null if this call should invent one based on the UID of the vCalendar.
  • boolean $log_action: Whether to log this action. Defaults to false since this is normally called in situations where one is writing secondary data.
WriteMember (line 286)

Writes the data to a member in the collection and returns the segment_name of the resource in our internal namespace.

A caller who wants scheduling not to happen for this write must already know they are dealing with a calendar, so should be calling WriteCalendarMember directly.

  • return: The segment_name that was given, or one that was assigned if null was given.
string WriteMember ($resource $resource, $create_resource $create_resource, [$segment_name $segment_name = null], [boolean $log_action = true])
  • boolean $log_action: Whether to log this action. Defaults to true since this is normally called in situations where one is writing primary data.
  • $resource $resource: mixed The resource to be written.
  • $create_resource $create_resource: boolean True if this is a new resource.
  • $segment_name $segment_name: The name of the resource within the collection, or false on failure.

Inherited Methods

Inherited From DAVResource

 DAVResource::__construct()
 DAVResource::bound_from()
 DAVResource::BuildACE()
 DAVResource::BuildDeadPropertyXML()
 DAVResource::BuildPrivileges()
 DAVResource::BuildSupportedMethods()
 DAVResource::BuildSupportedReports()
 DAVResource::BuildTicketinfo()
 DAVResource::collection_id()
 DAVResource::ContainerExists()
 DAVResource::ContainerType()
 DAVResource::DAV_AllProperties()
 DAVResource::dav_name()
 DAVResource::Exists()
 DAVResource::FetchCollection()
 DAVResource::FetchDeadProperties()
 DAVResource::FetchParentContainer()
 DAVResource::FetchPrincipal()
 DAVResource::FetchPrivileges()
 DAVResource::FetchResource()
 DAVResource::FetchSupportedMethods()
 DAVResource::FetchSupportedReports()
 DAVResource::FetchTickets()
 DAVResource::FromPath()
 DAVResource::FromRow()
 DAVResource::GetACL()
 DAVResource::GetParentContainer()
 DAVResource::GetProperty()
 DAVResource::GetPropStat()
 DAVResource::HavePrivilegeTo()
 DAVResource::IsAddressbook()
 DAVResource::IsBinding()
 DAVResource::IsCalendar()
 DAVResource::IsCollection()
 DAVResource::IsExternal()
 DAVResource::IsInSchedulingCollection()
 DAVResource::IsLocked()
 DAVResource::IsPrincipal()
 DAVResource::IsPublic()
 DAVResource::IsPublicOnly()
 DAVResource::IsSchedulingCollection()
 DAVResource::NeedPrivilege()
 DAVResource::parent_path()
 DAVResource::principal_url()
 DAVResource::Privileges()
 DAVResource::RenderAsXML()
 DAVResource::resource()
 DAVResource::ResourceProperty()
 DAVResource::resource_id()
 DAVResource::set_bind_location()
 DAVResource::sync_token()
 DAVResource::unique_tag()
 DAVResource::url()
 DAVResource::user_no()

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/Resource/_inc---DAVResource.php.html0000644000000000000000000001460311776301335021546 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page DAVResource.php

File/inc/DAVResource.php

Description

An object representing a DAV 'resource'

Classes
Class Description
 class DAVResource A class for things to do with a DAV Resource
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ('AwlCache.php') (line 12)

An object representing a DAV 'resource'

 require_once ('AwlQuery.php') (line 13)
 require_once ('DAVPrincipal.php') (line 14)
 require_once ('DAVTicket.php') (line 15)
 require_once ('iCalendar.php') (line 16)

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/external-bind/0000755000000000000000000000000011776303357015657 5ustar davical-1.1.1/docs/api/davical/external-bind/_inc---external-fetch.php.html0000644000000000000000000001151611776301335023302 0ustar Docs for page external-fetch.php

File/inc/external-fetch.php

Description

Functions for managing external BIND resources

Functions
create_external (line 13)

Functions for managing external BIND resources

void create_external ( $path,  $is_calendar,  $is_addressbook)
  • $path
  • $is_calendar
  • $is_addressbook
fetch_external (line 42)
void fetch_external ( $bind_id, [ $min_age = '1 hour'])
  • $bind_id
  • $min_age
update_external (line 98)
void update_external ( $request)
  • $request

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/SqlToArray.html0000644000000000000000000001726111776301337016055 0ustar Docs For Class SqlToArray

 Class SqlToArray

Description

SqlToArray class for parsing a file of somewhat structured SQL statements into an array

There are a number of limitations for this class, and it is expected that the SQL files are constructed specifically to work within these limitations:

1) A statement is terminated by a semi-colon followed by whitespace.

2) A comment is a line starting with whitespace followed by two hyphens

3) If a line contains $somestring$ then rules (1) and (2) are suspended until the next line after a line containing a matching $somestring$. Where the 'somestring' can be any sequence of letters, numbers and underscores, including the empty string.

Notable deficiency:

Any SQL quoting using ' or " is ignored. Consequently a semi-colon followed by whitespace, a $somestring$ delimiter or a comment line will be processed in the same way regardless of whether they are inside an SQL quoted string.

  • author: karora

Located in /htdocs/SqlToArray.php (line 25)


	
			
Method Summary
 static string removeComment (string $line)
 SqlToArray __construct ( $filename)
 void doNormalLine (unknown_type $s)
 array getStatements ()
Methods
static removeComment (line 66)

Return the empty string if this line is an SQL comment

Limitations: Does not recognize trailing comments.

string removeComment (string $line)
  • string $line
Constructor __construct (line 31)
SqlToArray __construct ( $filename)
  • $filename
doNormalLine (line 81)

Add this line onto the current statement, detecting the end of the statement.

Limitations: Doesn't handle quoting very well at all, other than $delimiter$ for quoting function bodies.

void doNormalLine (unknown_type $s)
  • unknown_type $s
getStatements (line 102)

Accessor for the array of parsed statements.

  • return: of string
array getStatements ()

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---pubsub.php.html0000644000000000000000000000306411776301336017135 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page pubsub.php

File/inc/pubsub.php

Description

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/HTTPAuthSession/0000755000000000000000000000000011776303357016070 5ustar davical-1.1.1/docs/api/davical/HTTPAuthSession/_inc---HTTPAuthSession.php.html0000644000000000000000000000467411776301336023557 0ustar Docs for page HTTPAuthSession.php

File/inc/HTTPAuthSession.php

Description

A Class for handling HTTP Authentication

Classes
Class Description
 class HTTPAuthSession A Class for handling a session using HTTP Basic Authentication

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/HTTPAuthSession/HTTPAuthSession.html0000644000000000000000000004324111776301336021722 0ustar Docs For Class HTTPAuthSession

 Class HTTPAuthSession

Description

A Class for handling a session using HTTP Basic Authentication

Located in /inc/HTTPAuthSession.php (line 17)


	
			
Variable Summary
 email $email
 fullname $fullname
 groups $groups
 user_no $user_no
Method Summary
 HTTPAuthSession HTTPAuthSession ()
 boolean AllowedTo (string $whatever)
 void AssignSessionDetails ( $principal, object $u)
 void AuthFailedResponse ([string $auth_header = ""])
 void CheckPassword ( $username,  $password)
 void GetRoles ()
 void ParseDigestHeader ( $auth_header)
Variables
email $email (line 32)

User e-mail

  • var: string
  • access: public
fullname $fullname (line 38)

User full name

  • var: string
  • access: public
groups $groups (line 44)

Group rights

  • var: array
  • access: public
user_no $user_no (line 26)

User ID number

  • var: int
  • access: public
Methods
Constructor HTTPAuthSession (line 50)

The constructor, which just calls the type supplied or configured

HTTPAuthSession HTTPAuthSession ()
AllowedTo (line 329)

Checks whether a user is allowed to do something.

The check is performed to see if the user has that role.

  • return: Whether or not the user has the specified role.
boolean AllowedTo (string $whatever)
  • string $whatever: The role we want to know if the user has.
AssignSessionDetails (line 353)

Internal function used to assign the session details to a user's new session.

void AssignSessionDetails ( $principal, object $u)
  • object $u: The user+session object we (probably) read from the database.
  • $principal
AuthFailedResponse (line 72)

Authorisation failed, so we send some headers to say so.

void AuthFailedResponse ([string $auth_header = ""])
  • string $auth_header: The WWW-Authenticate header details.
BasicAuthSession (line 98)

Handle Basic HTTP Authentication (not secure unless https)

void BasicAuthSession ()
CheckPassword (line 280)

CheckPassword does all of the password checking and returns a user record object, or false if it all ends in tears.

void CheckPassword ( $username,  $password)
  • $username
  • $password
DigestAuthSession (line 185)

Handle Digest HTTP Authentication (no passwords were harmed in this transaction!)

Note that this will not actually work, unless we can either: (A) store the password plain text in the database (B) store an md5( username || realm || password ) in the database

The problem is that potentially means that the administrator can collect the sorts of things people use as passwords. I believe this is quite a bad idea. In scenario (B) while they cannot see the password itself, they can see a hash which only varies when the password varies, so can see when two users have the same password, or can use some of the reverse lookup sites to attempt to reverse the hash. I think this is a less bad idea, but not ideal. Probably better than running Basic auth of HTTP though!

void DigestAuthSession ()
GetRoles (line 337)

Internal function used to get the user's roles from the database.

void GetRoles ()
ParseDigestHeader (line 247)

Parse the HTTP Digest Auth Header

  • largely sourced from the PHP documentation

void ParseDigestHeader ( $auth_header)
  • $auth_header

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---caldav-LOCK.php.html0000644000000000000000000000364011776301332017611 0ustar Docs for page caldav-LOCK.php

File/inc/caldav-LOCK.php

Description
Includes
 require_once ('XMLDocument.php') (line 6)

We support both LOCK and UNLOCK methods in this function

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/tzservice/0000755000000000000000000000000011776303357015141 5ustar davical-1.1.1/docs/api/davical/tzservice/_inc---tz---expand.php.html0000644000000000000000000001555411776301335021725 0ustar Docs for page expand.php

File/inc/tz/expand.php

Description

DAViCal Timezone Service handler - capabilitis

Includes
 require_once ('vCalendar.php') (line 12)

DAViCal Timezone Service handler - capabilitis

 require_once (RRule-v2.php) (line 13)
Constants
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
DEBUG_EXPAND = false (line 40)
Functions
expand_timezone_onsets (line 53)

Expand the instances for a STANDARD or DAYLIGHT component of a VTIMEZONE

  • return: of onset datetimes with UTC from/to offsets
array expand_timezone_onsets ( $vResource,  $range_start,  $range_end, int $offset_from)
  • object $vResource: is a VCALENDAR with a VTIMEZONE containing components needing expansion
  • object $range_start: A RepeatRuleDateTime which is the beginning of the range for events.
  • object $range_end: A RepeatRuleDateTime which is the end of the range for events.
  • int $offset_from: The offset from UTC in seconds at the onset time.

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/tzservice/_inc---tz---list.php.html0000644000000000000000000000521511776301336021413 0ustar Docs for page list.php

File/inc/tz/list.php

Description

DAViCal Timezone Service handler - capabilitis

Includes
 require_once ('vComponent.php') (line 12)

DAViCal Timezone Service handler - capabilitis

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/tzservice/_inc---tz---get.php.html0000644000000000000000000000521011776301336021212 0ustar Docs for page get.php

File/inc/tz/get.php

Description

DAViCal Timezone Service handler - capabilitis

Includes
 require_once ('vCalendar.php') (line 12)

DAViCal Timezone Service handler - capabilitis

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/tzservice/_htdocs---tz.php.html0000644000000000000000000000764411776301337021034 0ustar Docs for page tz.php

File/htdocs/tz.php

Description

DAViCal Timezone Service handler

Includes
 include_once ($code_file) (line 28)
 require ("./always.php") (line 11)

DAViCal Timezone Service handler

 require (PublicSession.php) (line 12)
 require_once (CalDAVRequest.php) (line 24)

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/tzservice/_inc---tz---capabilities.php.html0000644000000000000000000000276711776301334023100 0ustar Docs for page capabilities.php

File/inc/tz/capabilities.php

Description

DAViCal Timezone Service handler - capabilitis

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/Request/0000755000000000000000000000000011776303357014553 5ustar davical-1.1.1/docs/api/davical/Request/CalDAVRequest.html0000644000000000000000000015244111776301333020043 0ustar Docs For Class CalDAVRequest

 Class CalDAVRequest

Description

A class for collecting things to do with this request.

Located in /inc/CalDAVRequest.php (line 30)


	
			
Method Summary
 static void kill_on_exit ()
 CalDAVRequest __construct ([ $options = array()])
 void AllowedTo (string $activity)
 void BuildSupportedPrivileges ( &$reply, [ $privs = null])
 void CheckEtagMatch (boolean $exists, string $dest_etag)
 void CollectionId ()
 void dav_name ()
 void DepthRegexTail ([ $for_collection_report = false])
 void DoResponse (int $status, [string $message = ""], [ $content_type = "text/plain; charset=\"utf-8\""])
 mixed FailIfLocked ()
 void GetDepthName ()
 void GetLockDetails (string $lock_token)
 void GetLockRow ( $lock_token, string $dav_name)
 void HavePrivilegeTo ( $do_what)
 void IsAddressBook ()
 void IsCalendar ()
 void IsCollection ()
 void IsInfiniteDepth ()
 void IsLocked ()
 void IsPrincipal ()
 void IsProxyRequest ()
 void IsPublic ()
 void MalformedRequest ([string $text = 'Bad request'])
 void NeedPrivilege ( $privileges, [string $href = null], string $privilege)
 void PreconditionFailed (int $status, string $precondition, [string $explanation = ''], [ $xmlns = 'DAV:'])
 void PreferMinimal ()
 void Privileges ()
 void setPermissions (int $user_no)
 void UnsupportedRequest (array $unsupported)
 void ValidateLockToken (string $lock_token)
 void XMLResponse (int $status, XMLElement $xmltree)
Variables
mixed $collection_id (line 70)

The ID of the collection containing this path, or of this path if it is a collection

mixed $collection_path (line 75)

The path corresponding to the collection_id

mixed $collection_type (line 81)

The type of collection being requested:

calendar, schedule-inbox, schedule-outbox

mixed $current_user_principal_xml (line 60)

The 'current_user_principal_xml' the DAV:current-user-principal answer. An XMLElement object with an <href> or <unauthenticated> fragment.

mixed $depth (line 48)

The depth parameter from the request headers, coerced into a valid integer: 0, 1 or DEPTH_INFINITY which is defined above. The default is set per various RFCs.

mixed $destination (line 92)

The value of any 'Destionation:' header, if present.

mixed $exists (line 87)

The type of collection being requested:

calendar, schedule-inbox, schedule-outbox

  • access: protected
mixed $method (line 42)

The HTTP request method: PROPFIND, LOCK, REPORT, OPTIONS, etc...

mixed $options (line 32)
DAVPrincipal $principal (line 54)

The 'principal' (user/resource/...) which this request seeks to access

mixed $privileges (line 97)

The decimal privileges allowed by this user to the identified resource.

  • access: protected
mixed $raw_post (line 37)

The raw data sent along with the request

mixed $supported_privileges (line 102)

A static structure of supported privileges.

mixed $ticket (line 107)

A DAVTicket object, if there is a ?ticket=id or Ticket: id with this request

  • access: public
mixed $user_agent (line 65)

The user agent making the request.

Methods
static kill_on_exit (line 1271)
  • access: public
void kill_on_exit ()
Constructor __construct (line 118)

Create a new CalDAVRequest object.

CalDAVRequest __construct ([ $options = array()])
  • $options
AllowedTo (line 1048)

Are we allowed to do the requested activity

+------------+------------------------------------------------------+ | METHOD | PRIVILEGES | +------------+------------------------------------------------------+ | MKCALENDAR | DAV:bind | | REPORT | DAV:read or CALDAV:read-free-busy (on all referenced | | | resources) | +------------+------------------------------------------------------+

void AllowedTo (string $activity)
  • string $activity: The activity we want to do.
BuildSupportedPrivileges (line 1010)

Returns the array of supported privileges converted into XMLElements

void BuildSupportedPrivileges ( &$reply, [ $privs = null])
  • &$reply
  • $privs
CheckEtagMatch (line 1124)

Check that the incoming Etag matches the one for the existing (or non-existing) resource.

void CheckEtagMatch (boolean $exists, string $dest_etag)
  • boolean $exists: Whether the destination exists
  • string $dest_etag: The etag for the destination.
CoerceContentType (line 891)

Coerces the Content-type of the request into something valid/appropriate

void CoerceContentType ()
CollectionId (line 1002)

Returns the ID of the collection of, or containing this request

void CollectionId ()
dav_name (line 756)

Returns the dav_name of the resource in our internal namespace

void dav_name ()
DepthRegexTail (line 774)

Returns the tail of a Regex appropriate for this Depth, when appended to

void DepthRegexTail ([ $for_collection_report = false])
  • $for_collection_report
DoResponse (line 1282)

Utility function we call when we have a simple status-based response to return to the client. Possibly

void DoResponse (int $status, [string $message = ""], [ $content_type = "text/plain; charset=\"utf-8\""])
  • int $status: The HTTP status code to send.
  • string $message: The friendly text message to send with the response.
  • $content_type
FailIfLocked (line 856)

This will either (a) return false if no locks apply, or (b) return the lock_token which the request successfully included to open the lock, or: (c) respond directly to the client with the failure.

  • return: false (no lock) or opaquelocktoken (opened lock)
mixed FailIfLocked ()
GetDepthName (line 765)

Returns the name for this depth: 0, 1, infinity

void GetDepthName ()
GetLockDetails (line 842)

Returns the DB object associated with a lock token, or false.

void GetLockDetails (string $lock_token)
  • string $lock_token: The opaquelocktoken which we are looking for
GetLockRow (line 786)

Returns the locked row, either from the cache or from the database

void GetLockRow ( $lock_token, string $dav_name)
  • string $dav_name: The resource which we want to know the lock status for
  • $lock_token
HavePrivilegeTo (line 1174)

Is the user has the privileges to do what is requested.

void HavePrivilegeTo ( $do_what)
  • $do_what
IsAddressBook (line 963)

Returns true if the URL referenced by this request points at an addressbook collection.

void IsAddressBook ()
IsCalendar (line 954)

Returns true if the URL referenced by this request points at a calendar collection.

void IsCalendar ()
IsCollection (line 943)

Returns true if the URL referenced by this request points at a collection.

void IsCollection ()
IsInfiniteDepth (line 994)

Returns true if the request asked for infinite depth

void IsInfiniteDepth ()
IsLocked (line 677)

Checks whether the resource is locked, returning any lock token, or false

  • todo: This logic does not catch all locking scenarios. For example an infinite depth request should check the permissions for all collections and resources within that. At present we only maintain permissions on a per-collection basis though.
void IsLocked ()
IsPrincipal (line 972)

Returns true if the URL referenced by this request points at a principal.

void IsPrincipal ()
IsProxyRequest (line 983)

Returns true if the URL referenced by this request is within a proxy URL

void IsProxyRequest ()
IsPublic (line 714)

Checks whether the collection is public

void IsPublic ()
MalformedRequest (line 1251)

Send a simple error informing the client that was a malformed request

void MalformedRequest ([string $text = 'Bad request'])
  • string $text: An optional text description of the failure.
NeedPrivilege (line 1210)

Send a need-privileges error response. This function will only return if the $href is not supplied and the current user has the specified permission for the request path.

void NeedPrivilege ( $privileges, [string $href = null], string $privilege)
  • string $privilege: The name of the needed privilege.
  • string $href: The unconstructed URI where we needed the privilege.
  • $privileges
PreconditionFailed (line 1235)

Send an error response for a failed precondition.

void PreconditionFailed (int $status, string $precondition, [string $explanation = ''], [ $xmlns = 'DAV:'])
  • int $status: The status code for the failed precondition. Normally 403
  • string $precondition: The namespaced precondition tag.
  • string $explanation: An optional text explanation for the failure.
  • $xmlns
PreferMinimal (line 932)

Returns true if the 'Prefer: return-minimal' or 'Brief: t' were present in the request headers.

void PreferMinimal ()
Privileges (line 1113)

Return the privileges bits for the current session user to this resource

void Privileges ()
setPermissions (line 609)

Permissions are controlled as follows:

  1. if the path is '/', the request has read privileges
  2. if the requester is an admin, the request has read/write priviliges
  3. if there is a <user name> component which matches the logged on user then the request has read/write privileges
  4. otherwise we query the defined relationships between users and use the minimum privileges returned from that analysis.

void setPermissions (int $user_no)
  • int $user_no: The current user number
UnsupportedRequest (line 1187)

Sometimes it's a perfectly formed request, but we just don't do that :-(

void UnsupportedRequest (array $unsupported)
  • array $unsupported: An array of the properties we don't support.
ValidateLockToken (line 811)

Checks to see whether the lock token given matches one of the ones handed in with the request.

void ValidateLockToken (string $lock_token)
  • string $lock_token: The opaquelocktoken which we are looking for
XMLResponse (line 1263)

Send an XML Response. This function will never return.

void XMLResponse (int $status, XMLElement $xmltree)
  • int $status: The HTTP status to respond
  • XMLElement $xmltree: An XMLElement tree to be rendered

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/Request/_inc---CalDAVRequest.php.html0000644000000000000000000001315011776301333021662 0ustar Docs for page CalDAVRequest.php

File/inc/CalDAVRequest.php

Description

Functions that are needed for all CalDAV Requests

  • Ascertaining the paths
  • Ascertaining the current user's permission to those paths.
  • Utility functions which we can use to decide whether this is a permitted activity for this user.

Classes
Class Description
 class CalDAVRequest A class for collecting things to do with this request.
Includes
 require_once ("AwlCache.php") (line 17)
 require_once ("XMLDocument.php") (line 18)
 require_once ("DAVPrincipal.php") (line 19)
 require_once ("DAVTicket.php") (line 20)
Constants
DEPTH_INFINITY = 9999 (line 22)

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---always.php.html0000644000000000000000000005106211776301331017644 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page always.php

File/htdocs/always.php

Description
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 include ('../config/config.php') (line 165)
 include ('/usr/local/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php') (line 159)
 include ('/usr/local/etc/davical/config.php') (line 162)
 include ('/etc/davical/'.$_SERVER['SERVER_NAME'].'-conf.php') (line 153)

We use @file_exists because things like open_basedir might noisily deny access which could break DAViCal completely by causing output to start too early.

 include ('config/config.php') (line 168)
 include (davical_configuration_missing.php) (line 171)
 include ('/etc/davical/config.php') (line 156)
 include_once ('AWLUtilities.php') (line 113)
 include_once ('AWLUtilities.php') (line 99)
 require_once ('AwlQuery.php') (line 219)

Force the domain name to what was in the configuration file

 require_once (Principal.php) (line 237)
Constants
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
DAVICAL_ADDRESSBOOK_MAXPRIV = "1023" (line 403)
DAVICAL_MAXPRIV = "65535" (line 402)

Given a privilege string, or an array of privilege strings, return a bit mask of the privileges.

  • return: A bit mask of the privileges.
Functions
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
bits_to_privilege (line 455)

Given a bit mask of the privileges, will return an array of the text values of privileges.

  • return: The string (or array of strings) of privilege names
mixed bits_to_privilege (integer $raw_bits, [ $resourcetype = 'resource'])
  • integer $raw_bits: A bit mask of the privileges.
  • $resourcetype
ConstructURL (line 301)

Construct a URL from the supplied dav_name. The URL will be urlencoded, except for any '/' characters in it.

void ConstructURL (string $partial_path, [ $force_script = false])
  • string $partial_path: The part of the path after the script name
  • $force_script
DateToISODate (line 390)

Convert a date into ISO format into the sparkly new ISO format.

void DateToISODate (string $indate, [ $in_utc = false])
  • string $indate: The date to convert
  • $in_utc
DeconstructURL (line 332)

Deconstruct a dav_name from the supplied URL. The dav_name will be urldecoded.

void DeconstructURL ( $url, [ $force_script = false], string $partial_path)
  • string $partial_path: The part of the path after the script name
  • $url
  • $force_script
early_exception_handler (line 20)
void early_exception_handler ( $e)
  • $e
getStatusMessage (line 244)

Return the HTTP status code description for a given code. Hopefully this is an efficient way to code this.

  • return: The text for a give HTTP status code, in english
string getStatusMessage ( $status)
  • $status
ISODateToHTTPDate (line 363)

Convert a date from ISO format into the sad old HTTP format.

void ISODateToHTTPDate (string $isodate)
  • string $isodate: The date to convert
privileges_to_XML (line 502)

Returns the array of privilege names converted into XMLElements

void privileges_to_XML ( $privilege_names, [ &$xmldoc = null])
  • $privilege_names
  • &$xmldoc
privilege_to_bits (line 404)
void privilege_to_bits ( $raw_privs)
  • $raw_privs
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:45 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/CheckResult.html0000644000000000000000000002071611776301337016227 0ustar Docs For Class CheckResult

 Class CheckResult

Description

Located in /htdocs/setup.php (line 50)


	
			
Method Summary
 CheckResult __construct ( $success, [ $description = null], [ $use_class = null])
 void getClass ()
 void getDescription ()
 void getOK ()
 void setClass ( $new_class)
 void setDescription ( $new_desc)
Methods
Constructor __construct (line 55)
CheckResult __construct ( $success, [ $description = null], [ $use_class = null])
  • $success
  • $description
  • $use_class
getClass (line 61)
  • access: public
void getClass ()
getDescription (line 73)
  • access: public
void getDescription ()
getOK (line 69)
  • access: public
void getOK ()
setClass (line 65)
  • access: public
void setClass ( $new_class)
  • $new_class
setDescription (line 77)
  • access: public
void setDescription ( $new_desc)
  • $new_desc

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/AtomXHTMLContent.html0000644000000000000000000001233011776301332017047 0ustar Docs For Class AtomXHTMLContent

 Class AtomXHTMLContent

Description

These two classes here sort of emulate the interface from the Zend Framework API with regard to ZendFeedWriteFeed for constructing an Atom feed. Except we do it in a DAViCal way, and we have some huge limitations:

  • We *only* support Atom feeds.

  • We *only* support creating them.

Located in /inc/AtomFeed.php (line 20)


	
			
Method Summary
 AtomXHTMLContent __construct ( $xhtml)
 void Render ( $ignore1,  $ignore2,  $ignore3)
Methods
Constructor __construct (line 23)
AtomXHTMLContent __construct ( $xhtml)
  • $xhtml
Render (line 27)
void Render ( $ignore1,  $ignore2,  $ignore3)
  • $ignore1
  • $ignore2
  • $ignore3

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---test-RRULE-v2.php.html0000644000000000000000000000700311776301337020026 0ustar Docs for page test-RRULE-v2.php

File/inc/test-RRULE-v2.php

Description
Classes
Class Description
 class
Includes
 require_once (always.php) (line 10)
 require_once ("RRule-v2.php") (line 12)
 require_once ('AwlQuery.php') (line 13)

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/RRuleTest.html0000644000000000000000000002211611776301337015700 0ustar Docs For Class RRuleTest

 Class RRuleTest

Description

Located in /inc/test-RRULE.php (line 12)


	
			
Variable Summary
Method Summary
 RRuleTest RRuleTest ( $description,  $start,  $recur, [ $result_description = null])
 void PHPTest ()
 void SQLTest ()
Variables
mixed $description (line 15)
mixed $dtstart (line 13)
mixed $recur (line 14)
mixed $result_description (line 16)
Methods
Constructor RRuleTest (line 18)
RRuleTest RRuleTest ( $description,  $start,  $recur, [ $result_description = null])
  • $description
  • $start
  • $recur
  • $result_description
PHPTest (line 25)
void PHPTest ()
SQLTest (line 40)
void SQLTest ()

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/iSchedule/0000755000000000000000000000000011776303357015030 5ustar davical-1.1.1/docs/api/davical/iSchedule/_inc---iSchedule.php.html0000644000000000000000000001237011776301336021447 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page iSchedule.php

File/inc/iSchedule.php

Description

Functions that are needed for iScheduling requests

  • verifying Domain Key signatures
  • delivering remote scheduling requests to local users inboxes
  • Utility functions which we can use to decide whether this is a permitted activity for this user.

Classes
Class Description
 class iSchedule A class for handling iScheduling requests.
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ("XMLDocument.php") (line 17)

Functions that are needed for iScheduling requests

  • verifying Domain Key signatures
  • delivering remote scheduling requests to local users inboxes
  • Utility functions which we can use to decide whether this is a permitted activity for this user.

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/iSchedule/iSchedule.html0000644000000000000000000005552211776301336017627 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs For Class iSchedule

 Class iSchedule

Description

A class for handling iScheduling requests.

Located in /inc/iSchedule.php (line 25)


	
			
Variable Summary
 mixed $domain
 mixed $parsed
 mixed $selector
Method Summary
 iSchedule __construct ()
 void getCapabilities ([ $domain = null])
 void getServer ()
 void getTxt ()
 void parseDKIM (string $sig)
 void parseTxt ()
 void parseURI ( $uri)
 void queryCapabilities ( $capability, [ $domain = null])
 void sendRequest ( $address,  $type,  $data)
 void setTxt ( $dk)
 void signDKIM (array $headers, string $body)
 void validateKey ()
 void validateRequest ()
 void verifySignature ()
Variables
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
mixed $domain (line 29)
  • access: public
mixed $parsed (line 27)
  • access: public
mixed $selector (line 28)
  • access: public
Methods
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
Constructor __construct (line 51)
iSchedule __construct ()
getCapabilities (line 256)

get capabilities from remote server

void getCapabilities ([ $domain = null])
  • $domain
getServer (line 193)

finds a remote calendar server via DNS SRV records

void getServer ()
getTxt (line 78)

gets the domainkey TXT record from DNS

void getTxt ()
parseDKIM (line 506)

parses and validates DK header

void parseDKIM (string $sig)
  • string $sig: the value of the DKIM-Signature header
parseTxt (line 122)

parses DNS TXT record from domainkey lookup

void parseTxt ()
parseURI (line 584)

split up a mailto uri into domain and user components

TODO handle other uri types (eg http)

void parseURI ( $uri)
  • $uri
queryCapabilities (line 294)

query capabilities retrieved from server

void queryCapabilities ( $capability, [ $domain = null])
  • $capability
  • $domain
sendRequest (line 403)

send request to remote server

$address should be an email address or an array of email addresses all with the same domain $type should be in the format COMPONENT/METHOD eg (VFREEBUSY, VEVENT/REQUEST, VEVENT/REPLY, etc. ) $data is the vcalendar data N.B. must already be rendered into text format

void sendRequest ( $address,  $type,  $data)
  • $address
  • $type
  • $data
setTxt (line 114)

strictly for testing purposes

void setTxt ( $dk)
  • $dk
signDKIM (line 361)

signs a POST body and headers

void signDKIM (array $headers, string $body)
  • string $body: the body of the POST
  • array $headers: the headers to sign as passed to header ();
validateKey (line 144)

validates that domainkey is acceptable for the current request

void validateKey ()
validateRequest (line 645)

checks that current request has a valid DKIM signature signed by a currently valid key from DNS

void validateRequest ()
verifySignature (line 599)

verifies parsed DKIM header is valid for current message with a signature from the public key in DNS

TODO handle multiple headers of the same name

void verifySignature ()
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/iSchedule-POST/0000755000000000000000000000000011776303357015613 5ustar davical-1.1.1/docs/api/davical/iSchedule-POST/_inc---iSchedule-POST.php.html0000644000000000000000000002150211776301336023012 0ustar Docs for page iSchedule-POST.php

File/inc/iSchedule-POST.php

Description

iScheduling POST handle remote iSchedule requests

Classes
Class Description
 class
Includes
 include_once ('freebusy-functions.php') (line 16)
 require_once ('iSchedule.php') (line 12)

iScheduling POST handle remote iSchedule requests

 require_once ('vCalendar.php') (line 14)
 require_once ('vComponent.php') (line 13)
 require_once ('WritableCollection.php') (line 15)
Functions
ischedule_cancel (line 237)
void ischedule_cancel ( $ic,  $attendees,  $attendees_fail)
  • $ic
  • $attendees
  • $attendees_fail
ischedule_freebusy_request (line 140)
void ischedule_freebusy_request ( $ic,  $attendees,  $attendees_fail)
  • $ic
  • $attendees
  • $attendees_fail
ischedule_request (line 188)
void ischedule_request ( $ic,  $attendees,  $attendees_fail)
  • $ic
  • $attendees
  • $attendees_fail

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/iSchedule-POST/FakeSession.html0000644000000000000000000001037611776150052020712 0ustar Docs For Class FakeSession

 Class FakeSession

Description

Located in /inc/iSchedule-POST.php (line 19)


	
			
Method Summary
 FakeSession __construct ( $principal)
 void AllowedTo ( $do_something)
Methods
Constructor __construct (line 20)
FakeSession __construct ( $principal)
  • $principal
AllowedTo (line 36)
void AllowedTo ( $do_something)
  • $do_something

Documentation generated on Wed, 04 Jul 2012 10:13:09 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---test-RRULE.php.html0000644000000000000000000000627511776301337017513 0ustar Docs for page test-RRULE.php

File/inc/test-RRULE.php

Description
Classes
Class Description
 class RRuleTest
Includes
 require_once ("../htdocs/always.php") (line 2)
 require_once ("RRule.php") (line 3)

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---ui---principal-edit.php.html0000644000000000000000000003262411776301336021312 0ustar Docs for page principal-edit.php

File/inc/ui/principal-edit.php

Description
Functions
access_ticket_browser (line 781)
void access_ticket_browser ()
bindings_to_other_browser (line 871)
void bindings_to_other_browser ()
bindings_to_us_browser (line 907)
void bindings_to_us_browser ()
build_privileges_html (line 378)
void build_privileges_html ( $ed,  $fname)
  • $ed
  • $fname
confirm_delete_binding (line 931)
void confirm_delete_binding ( $confirmation_hash)
  • $confirmation_hash
confirm_delete_bind_in (line 895)
void confirm_delete_bind_in ( $confirmation_hash)
  • $confirmation_hash
confirm_delete_collection (line 860)
void confirm_delete_collection ( $confirmation_hash)
  • $confirmation_hash
confirm_delete_principal (line 442)
void confirm_delete_principal ( $confirmation_hash,  $displayname)
  • $confirmation_hash
  • $displayname
confirm_delete_ticket (line 815)
void confirm_delete_ticket ( $confirmation_hash)
  • $confirmation_hash
edit_group_row (line 515)
void edit_group_row ( $row_data)
  • $row_data
edit_ticket_row (line 750)
void edit_ticket_row ( $row_data)
  • $row_data
grant_row_editor (line 577)
void grant_row_editor ()
group_memberships_browser (line 454)
void group_memberships_browser ()
group_members_browser (line 536)
void group_members_browser ()
group_row_editor (line 481)
void group_row_editor ()
handle_subaction (line 44)
void handle_subaction ( $subaction)
  • $subaction
principal_collection_browser (line 827)
void principal_collection_browser ()
principal_editor (line 162)
void principal_editor ()
principal_grants_browser (line 650)
void principal_grants_browser ()
ticket_row_editor (line 698)
void ticket_row_editor ()

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---ui---external-browse.php.html0000644000000000000000000000212211776301335021514 0ustar Docs for page external-browse.php

File/inc/ui/external-browse.php

Description

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---dbexec.php.html0000644000000000000000000000714511776301335017605 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page dbexec.php

File/htdocs/dbexec.php

Description
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 include ('SqlToArray.php') (line 36)

sudo -s su - postgres

createuser jayden

Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---AtomFeed.php.html0000644000000000000000000001143611776301332017317 0ustar Docs for page AtomFeed.php

File/inc/AtomFeed.php

Description
Classes
Class Description
 class AtomXHTMLContent These two classes here sort of emulate the interface from the Zend Framework API with regard to ZendFeedWriteFeed for constructing an Atom feed. Except we do it in a DAViCal way, and we have some huge limitations:
  • We *only* support Atom feeds.
 class AtomEntry
 class AtomFeed
Includes
 require_once ("XMLDocument.php") (line 3)
Constants
ATOM_XMLNS = 'http://www.w3.org/2005/Atom' (line 5)
XHTML_XMLNS = 'http://www.w3.org/1999/xhtml' (line 6)

Documentation generated on Sun, 08 Jul 2012 12:53:45 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---freebusy-functions.php.html0000644000000000000000000001011611776301335021462 0ustar Docs for page freebusy-functions.php

File/inc/freebusy-functions.php

Description
Includes
 include_once ('iCalendar.php') (line 9)

Function to include which handles building a free/busy response to be used in either the REPORT, response to a POST, or response to a a freebusy GET request.

 include_once ('RRule-v2.php') (line 10)
Functions
get_freebusy (line 13)
void get_freebusy ( $path_match,  $range_start,  $range_end, [ $bin_privs = null])
  • $path_match
  • $range_start
  • $range_end
  • $bin_privs

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---upgrade.php.html0000644000000000000000000001103211776301337017772 0ustar Docs for page upgrade.php

File/htdocs/upgrade.php

Description
Includes
 include (interactive-page.php) (line 7)
 include ("./always.php") (line 3)
 include (DAViCalSession.php) (line 4)
 include ("classEditor.php") (line 26)
 include (page-footer.php) (line 96)

Page elements could be an array of viewers, browsers or something else that supports the Render() method... or a non-object which we assume is just a string of text that we echo.

 include ("AwlUpgrader.php") (line 27)
 include (page-header.php) (line 74)

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/AtomEntry.html0000644000000000000000000005120211776301332015722 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs For Class AtomEntry

 Class AtomEntry

Description

Located in /inc/AtomFeed.php (line 33)


	
			
Method Summary
 static void setDate ( $tagname,  $epoch)
 AtomEntry __construct ( $id,  $title,  $published,  $updated)
 void addAuthor ( $new_value)
 void addCategory ( $new_value)
 void addNode ( $in_tag, [ $content = false], [ $attributes = false], [ $xmlns = null])
 void getXML ()
 void setContent ( $new_value, [ $type = 'xhtml'])
 void setDateCreated ( $epoch)
 void setDateModified ( $epoch)
 void setDescription ( $new_value, [ $type = 'text'])
 void setId ( $new_value)
 void setLink ( $new_value, [ $type = "text/calendar"], [ $rel = 'alternate'])
 void setTitle ( $new_value, [ $type = 'text'])
Methods
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
static setDate (line 67)
  • access: public
void setDate ( $tagname,  $epoch)
  • $tagname
  • $epoch
Constructor __construct (line 53)
AtomEntry __construct ( $id,  $title,  $published,  $updated)
  • $id
  • $title
  • $published
  • $updated
addAuthor (line 87)
  • access: public
void addAuthor ( $new_value)
  • $new_value
addCategory (line 99)
  • access: public
void addCategory ( $new_value)
  • $new_value
addNode (line 123)
  • access: public
void addNode ( $in_tag, [ $content = false], [ $attributes = false], [ $xmlns = null])
  • $in_tag
  • $content
  • $attributes
  • $xmlns
getXML (line 130)
  • access: public
void getXML ()
setContent (line 112)
  • access: public
void setContent ( $new_value, [ $type = 'xhtml'])
  • $new_value
  • $type
setDateCreated (line 77)
  • access: public
void setDateCreated ( $epoch)
  • $epoch
setDateModified (line 72)
  • access: public
void setDateModified ( $epoch)
  • $epoch
setDescription (line 108)
  • access: public
void setDescription ( $new_value, [ $type = 'text'])
  • $new_value
  • $type
setId (line 57)
  • access: public
void setId ( $new_value)
  • $new_value
setLink (line 83)
  • access: public
void setLink ( $new_value, [ $type = "text/calendar"], [ $rel = 'alternate'])
  • $new_value
  • $type
  • $rel
setTitle (line 62)
  • access: public
void setTitle ( $new_value, [ $type = 'text'])
  • $new_value
  • $type

Documentation generated on Sun, 08 Jul 2012 12:53:45 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/AtomFeed.html0000644000000000000000000004601711776301332015474 0ustar Docs For Class AtomFeed

 Class AtomFeed

Description

Located in /inc/AtomFeed.php (line 139)

XMLDocument
   |
   --AtomFeed
Method Summary
 AtomFeed __construct ()
 void addAuthor ( $new_value)
 void addEntry ( $new_entry)
 void addNode ( $in_tag, [ $content = false], [ $attributes = false], [ $xmlns = null])
 void createEntry ([ $id = null], [ $title = null], [ $published = null], [ $updated = null])
 void export ([ $format = 'atom'])
 void setDateModified ( $epoch)
 void setDescription ( $new_value, [ $type = 'text'])
 XMLElement setFeedLink (uri $new_value, [ $type = null])
 void setId ( $new_value)
 void setLink ( $new_value, [ $type = "text/calendar"], [ $rel = 'alternate'])
 void setTitle ( $new_value, [ $type = 'text'])
Methods
Constructor __construct (line 146)
  • access: public
AtomFeed __construct ()
addAuthor (line 201)
  • access: public
void addAuthor ( $new_value)
  • $new_value
addEntry (line 224)
  • access: public
void addEntry ( $new_entry)
  • $new_entry
addNode (line 217)
  • access: public
void addNode ( $in_tag, [ $content = false], [ $attributes = false], [ $xmlns = null])
  • $in_tag
  • $content
  • $attributes
  • $xmlns
createEntry (line 229)
  • access: public
void createEntry ([ $id = null], [ $title = null], [ $published = null], [ $updated = null])
  • $id
  • $title
  • $published
  • $updated
export (line 233)
  • access: public
void export ([ $format = 'atom'])
  • $format
setDateModified (line 179)
  • access: public
void setDateModified ( $epoch)
  • $epoch
setDescription (line 213)
  • access: public
void setDescription ( $new_value, [ $type = 'text'])
  • $new_value
  • $type
setFeedLink (line 196)

Sets the feed link (rel=self), ignoring the parameter which is for compatibility with the Zend library API, although we use this for the Id, whereas they use the first link that is set.

  • return: the node that was added.
  • access: public
XMLElement setFeedLink (uri $new_value, [ $type = null])
  • uri $new_value: The link target
  • $type
setId (line 169)
  • access: public
void setId ( $new_value)
  • $new_value
setLink (line 184)
  • access: public
void setLink ( $new_value, [ $type = "text/calendar"], [ $rel = 'alternate'])
  • $new_value
  • $type
  • $rel
setTitle (line 174)
  • access: public
void setTitle ( $new_value, [ $type = 'text'])
  • $new_value
  • $type

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---caldav-REPORT-freebusy.php.html0000644000000000000000000000376411776301333021726 0ustar Docs for page caldav-REPORT-freebusy.php

File/inc/caldav-REPORT-freebusy.php

Description
Includes
 include_once ("freebusy-functions.php") (line 5)

Handle the FREE-BUSY-QUERY variant of REPORT

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---admin.php.html0000644000000000000000000001641711776301331017441 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page admin.php

File/htdocs/admin.php

Description
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 include (page-footer.php) (line 52)

Page elements could be an array of viewers, browsers or something else that supports the Render() method... or a non-object which we assume is just a string of text that we echo.

 include (page-header.php) (line 30)
 include (DAViCalSession.php) (line 5)
 include (page-header.php) (line 25)
 include (page-footer.php) (line 26)
 include_once ($code_file) (line 23)
 require_once ('./always.php') (line 2)
 require_once ('AwlQuery.php') (line 8)
 require_once ('classBrowser.php') (line 4)
 require_once ('classEditor.php') (line 3)
 require_once (interactive-page.php) (line 19)

Documentation generated on Sun, 08 Jul 2012 12:53:45 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---davical_configuration_missing.php.html0000644000000000000000000000772611776301334023727 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page davical_configuration_missing.php

File/inc/davical_configuration_missing.php

Description
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 include ("page-header.php") (line 2)
 include ("page-footer.php") (line 32)
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---newfile.php.html0000644000000000000000000000701011776301336017774 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page newfile.php

File/htdocs/newfile.php

Description
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ('/home/karora/projects/awl/inc/XMLDocument.php') (line 2)
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---caldav-REPORT-expand-property.php.html0000644000000000000000000000762111776301333023237 0ustar Docs for page caldav-REPORT-expand-property.php

File/inc/caldav-REPORT-expand-property.php

Description
Functions
expand_properties (line 44)

Expand the properties, recursing only once

void expand_properties ( $urls,  $ptree,  &$reply, [ $recurse_again = true])
  • $urls
  • $ptree
  • &$reply
  • $recurse_again
get_href_containers (line 8)

Given a <response><href>...</href><propstat><prop><someprop/></prop><status>HTTP/1.1 200 OK</status></propstat>...</response> pull out the content of <someprop>content</someprop> and check to see if it has any href elements. If it *does* then recurse into them, looking for the next deeper nesting of properties.

void get_href_containers ( &$multistatus_response)
  • &$multistatus_response

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---check_UTF8.php.html0000644000000000000000000001343211776301334017516 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page check_UTF8.php

File/inc/check_UTF8.php

Description
Functions
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
check_string (line 211)
void check_string ( $ics)
  • $ics
unicodeToUtf8 (line 179)

Takes an array of ints representing the Unicode characters and returns a UTF-8 string. Astral planes are supported ie. the ints in the input can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates are not allowed.

Returns false if the input array contains ints that represent surrogates or are outside the Unicode range.

void unicodeToUtf8 ( &$arr)
  • &$arr
utf8ToUnicode (line 59)

Takes an UTF-8 string and returns an array of ints representing the Unicode characters. Astral planes are supported ie. the ints in the output can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates are not allowed.

Returns false if the input string isn't a valid UTF-8 octet sequence.

void utf8ToUnicode ( &$str)
  • &$str
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---setup.php.html0000644000000000000000000004604111776301337017513 0ustar Docs for page setup.php

File/htdocs/setup.php

Description
Classes
Class Description
 class CheckResult
 class
Includes
 include (interactive-page.php) (line 214)
 include (page-header.php) (line 215)
 include (page-footer.php) (line 481)
 include (DAViCalSession.php) (line 199)
 include ("./always.php") (line 197)
 require_once ("AwlQuery.php") (line 217)
Functions
build_dependencies_table (line 314)
void build_dependencies_table ()
build_site_statistics (line 286)
void build_site_statistics ()
catch_setup_errors (line 16)
void catch_setup_errors ( $errno,  $errstr,  $errfile,  $errline,  $errcontext)
  • $errno
  • $errstr
  • $errfile
  • $errline
  • $errcontext
check_awl_version (line 271)
void check_awl_version ()
check_calendar (line 137)
void check_calendar ()
check_curl (line 161)
void check_curl ()
check_database_connection (line 102)
void check_database_connection ()
check_datetime (line 220)
void check_datetime ()
check_davical_version (line 250)
void check_davical_version ()
check_gettext (line 109)
void check_gettext ()
check_iconv (line 116)
void check_iconv ()
check_ldap (line 123)
void check_ldap ()
check_magic_quotes_gpc (line 153)
void check_magic_quotes_gpc ()
check_magic_quotes_runtime (line 157)
void check_magic_quotes_runtime ()
check_pdo (line 91)
void check_pdo ()
check_pdo_pgsql (line 95)
void check_pdo_pgsql ()
check_pgsql (line 87)

We put many of these checks before we even try to load always.php so that we can try and do some diagnostic work to ensure it will load OK.

void check_pgsql ()
check_real_php (line 130)
void check_real_php ()
check_schema_version (line 228)
void check_schema_version ()
check_suhosin_server_strip (line 144)
void check_suhosin_server_strip ()
do_error (line 171)
void do_error ( $errormessage)
  • $errormessage
get_phpinfo (line 184)
void get_phpinfo ()
i18n (line 5)

todo work out something more than true/false returns for dependency checks

void i18n ( $value)
  • $value
log_setup_error (line 10)
void log_setup_error ( $errno,  $errstr,  $errfile,  $errline)
  • $errno
  • $errstr
  • $errfile
  • $errline

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---page-header.php.html0000644000000000000000000000510411776301336017774 0ustar Docs for page page-header.php

File/inc/page-header.php

Description
Functions
make_help_link (line 7)
void make_help_link ( $matches)
  • $matches
send_page_header (line 31)
void send_page_header ()

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/ldap/0000755000000000000000000000000011776303357014043 5ustar davical-1.1.1/docs/api/davical/ldap/squidPamDrivers.html0000644000000000000000000000661311776301335020053 0ustar Docs For Class squidPamDrivers

 Class squidPamDrivers

Description

Located in /inc/drivers_squid_pam.php (line 16)


	
			
Method Summary
 squidPamDrivers __construct (string $config)
Methods
Constructor __construct (line 30)

The constructor

squidPamDrivers __construct (string $config)
  • string $config: path where /usr/lib/squid/pam_auth is

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/ldap/_inc---drivers_imap_pam.php.html0000644000000000000000000001236611776301335022102 0ustar Docs for page drivers_imap_pam.php

File/inc/drivers_imap_pam.php

Description

Manages PAM repository connection with local imap server help

Classes
Class Description
 class
Includes
 require_once ("auth-functions.php") (line 19)

Manages PAM repository connection with local imap server help

Functions
IMAP_PAM_check (line 59)

Check the username / password against the PAM system

void IMAP_PAM_check ( $username,  $password)
  • $username
  • $password

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/ldap/_inc---drivers_rimap.php.html0000644000000000000000000001613111776301335021421 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page drivers_rimap.php

File/inc/drivers_rimap.php

Description

Manages PAM repository connection with local imap server help

Classes
Class Description
 class imapPamDrivers
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ("auth-functions.php") (line 14)

Manages PAM repository connection with local imap server help

Functions
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
RIMAP_check (line 54)

Check the username / password against the IMAP server

void RIMAP_check ( $username,  $password)
  • $username
  • $password

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/ldap/_inc---drivers_ldap.php.html0000644000000000000000000002533711776301335021241 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page drivers_ldap.php

File/inc/drivers_ldap.php

Description

Manages LDAP repository connection

Classes
Class Description
 class ldapDrivers
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ("auth-functions.php") (line 14)

Manages LDAP repository connection

Functions
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
array_values_mapping (line 301)
void array_values_mapping ( $mapping)
  • $mapping
getStaticLdap (line 242)

A generic function to create and fetch static objects

void getStaticLdap ()
LDAP_check (line 315)

Check the username / password against the LDAP server

void LDAP_check ( $username,  $password)
  • $username
  • $password
sync_LDAP (line 533)

sync LDAP against the DB

void sync_LDAP ()
sync_LDAP_groups (line 399)

sync LDAP Groups against the DB

void sync_LDAP_groups ()
sync_user_from_LDAP (line 259)

Synchronise a cached user with one from LDAP

void sync_user_from_LDAP (Principal &$principal,  $mapping,  $ldap_values, object $principal)
  • object $principal: A Principal object to be updated (or created)
  • Principal &$principal
  • $mapping
  • $ldap_values

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/ldap/_inc---drivers_squid_pam.php.html0000644000000000000000000001233311776301335022273 0ustar Docs for page drivers_squid_pam.php

File/inc/drivers_squid_pam.php

Description

Manages PAM repository connection with SQUID help

Classes
Class Description
 class squidPamDrivers
Includes
 require_once ("auth-functions.php") (line 14)

Manages PAM repository connection with SQUID help

Functions
SQUID_PAM_check (line 44)

Check the username / password against the PAM system

void SQUID_PAM_check ( $username,  $password)
  • $username
  • $password

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/ldap/imapPamDrivers.html0000644000000000000000000001431511776301335017652 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs For Class imapPamDrivers

 Class imapPamDrivers

Description

Located in /inc/drivers_rimap.php (line 16)


	
			
Method Summary
 imapPamDrivers __construct (string $imap_url)
 imapPamDrivers imapPamDrivers (string $imap_url)
Methods
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
Constructor __construct (line 39)

The constructor

imapPamDrivers __construct (string $imap_url)
  • string $imap_url: formated for imap_open()
Constructor imapPamDrivers (line 29)

Constructor.

imapPamDrivers imapPamDrivers (string $imap_url)
  • string $imap_url: formated for imap_open()
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/ldap/ldapDrivers.html0000644000000000000000000002275411776301335017214 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs For Class ldapDrivers

 Class ldapDrivers

Description

Located in /inc/drivers_ldap.php (line 16)


	
			
Method Summary
 ldapDrivers __construct (array $config)
 void getAllGroups ( $attributes)
 void getAllUsers ( $attributes)
 array requestUser (string $filter, [array $attributes = NULL],  $username, string $passwd)
Methods
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
Constructor __construct (line 35)

Initializes the LDAP connection

ldapDrivers __construct (array $config)
  • array $config: The configuration data
getAllGroups (line 147)

Retrieve all groups from the LDAP directory

void getAllGroups ( $attributes)
  • $attributes
getAllUsers (line 116)

Retrieve all users from the LDAP directory

void getAllUsers ( $attributes)
  • $attributes
requestUser (line 182)

Returns the result of the LDAP query

  • return: Contains selected attributes from all entries corresponding to the given filter
array requestUser (string $filter, [array $attributes = NULL],  $username, string $passwd)
  • string $filter: The filter used to search entries
  • array $attributes: Attributes to be returned
  • string $passwd: password to check
  • $username
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---vtimezone.php.html0000644000000000000000000000626211776301337017661 0ustar Docs for page vtimezone.php

File/inc/vtimezone.php

Description
Classes
Class Description
 class VTimezone
Includes
 require_once ('AwlQuery.php') (line 6)

Extend the vComponent to specifically handle VTIMEZONE resources

 require_once ('vComponent.php') (line 7)

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---interactive-page.php.html0000644000000000000000000000351011776301336021060 0ustar Docs for page interactive-page.php

File/inc/interactive-page.php

Description
Includes
 require_once ('MenuSet.php') (line 2)

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/VCard.html0000644000000000000000000001476411776301337015020 0ustar Docs For Class VCard

 Class VCard

Description

Located in /inc/vcard.php (line 9)

vComponent
   |
   --VCard
Method Summary
 void Write ( $dav_id, [ $exists = true])
 void WriteAddresses ( $dav_id)
 void WriteEmails ( $dav_id)
 void WritePhones ( $dav_id)
Methods
Write (line 26)
void Write ( $dav_id, [ $exists = true])
  • $dav_id
  • $exists
WriteAddresses (line 82)
void WriteAddresses ( $dav_id)
  • $dav_id
WriteEmails (line 153)
void WriteEmails ( $dav_id)
  • $dav_id
WritePhones (line 122)
void WritePhones ( $dav_id)
  • $dav_id

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/Principal/0000755000000000000000000000000011776303357015044 5ustar davical-1.1.1/docs/api/davical/Principal/_inc---Principal.php.html0000644000000000000000000000730711776301336021503 0ustar Docs for page Principal.php

File/inc/Principal.php

Description

An object representing a 'Principal' read from the database

Classes
Class Description
 class Principal A class for things to do with a Principal
Includes
 require_once ('AwlCache.php') (line 12)

An object representing a 'Principal' read from the database

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/Principal/_inc---DAVPrincipal.php.html0000644000000000000000000000743111776301334022032 0ustar Docs for page DAVPrincipal.php

File/inc/DAVPrincipal.php

Description

An object representing a DAV 'Principal'

Classes
Class Description
 class DAVPrincipal A class for things to do with a DAV Principal
Includes
 require_once ('Principal.php') (line 12)

An object representing a DAV 'Principal'

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/Principal/DAVPrincipal.html0000644000000000000000000011236111776301334020203 0ustar Docs For Class DAVPrincipal

 Class DAVPrincipal

Description

A class for things to do with a DAV Principal

Located in /inc/DAVPrincipal.php (line 19)

Principal
   |
   --DAVPrincipal
Variable Summary
 RFC3744: $_is_group
Method Summary
 boolean __construct ([mixed $parameters = null])
 void AsCollection ()
 string GetProperty ( $property_id)
 void GroupMemberSet ()
 void GroupMembership ()
 void InitialiseRecord (object $usr)
 boolean IsGroup ()
 void PrincipalProperty ( $tag,  $prop,  &$reply,  &$denied)
 void Privileges ()
 void PropertySearch ( $parameters)
 void ProxyFor (string $type)
 void ReadProxyGroup ()
 string RenderAsXML (array $properties,  &$reply, [boolean $props_only = false], reference $reply)
 void unique_tag ()
 void WriteProxyGroup ()
Methods
Constructor __construct (line 95)

Constructor

  • return: Whether we actually read data from the DB to initialise the record.
boolean __construct ([mixed $parameters = null])
  • mixed $parameters: If null, an empty Principal is created. If it is an integer then that ID is read (if possible). If it is an array then the Principal matching the supplied elements is read. If it is an object then it is expected to be a 'usr' record that was read elsewhere.

Redefinition of:
Principal::__construct()
Construct a new Principal object. The principal record will be retrieved from the database, or (if not found) initialised to a new record. You can test for whether the Principal exists by calling the Exists() method on the returned object.
addressbook_home_set (line 358)

Get the addressbook_home_set, as lazily as possible

void addressbook_home_set ()
AsCollection (line 419)

Returns a representation of the principal as a collection

void AsCollection ()
calendar_free_busy_set (line 381)

Get the calendar_free_busy_set, as lazily as possible

void calendar_free_busy_set ()
calendar_home_set (line 335)

Get the calendar_home_set, as lazily as possible

void calendar_home_set ()
FetchProxyGroups (line 194)

Split this out so we do it as infrequently as possible, given the cost.

void FetchProxyGroups ()
GetProperty (line 302)

Return an arbitrary property

  • return: The name of the arbitrary property
string GetProperty ( $property_id)
  • $property_id
GroupMemberSet (line 283)

Accessor for the group member set - the members of this group

void GroupMemberSet ()
GroupMembership (line 274)

Accessor for the group membership - the groups this principal is a member of

void GroupMembership ()
InitialiseRecord (line 144)

Initialise the Principal object from a $usr record from the DB.

void InitialiseRecord (object $usr)
  • object $usr: The usr record from the DB.
IsGroup (line 293)

Is this a group principal?

  • return: Whether this is a group principal
boolean IsGroup ()
PrincipalProperty (line 450)

Returns properties which are specific to this principal

void PrincipalProperty ( $tag,  $prop,  &$reply,  &$denied)
  • $tag
  • $prop
  • &$reply
  • &$denied
Privileges (line 403)

Return the privileges bits for the current session user to this resource

void Privileges ()
PropertySearch (line 443)
void PropertySearch ( $parameters)
  • $parameters
ProxyFor (line 264)

Accessor for read or write proxy

void ProxyFor (string $type)
  • string $type: read/write - which sort of proxy list is requested.
ReadProxyGroup (line 245)

Accessor for the read proxy group

void ReadProxyGroup ()
RenderAsXML (line 568)

Render XML for a single Principal (user) from the DB

  • return: An XML fragment with the requested properties for this principal
string RenderAsXML (array $properties,  &$reply, [boolean $props_only = false], reference $reply)
  • array $properties: The requested properties for this principal
  • reference $reply: A reference to the XMLDocument being used for the reply
  • boolean $props_only: Default false. If true will only return the fragment with the properties, not a full response fragment.
  • &$reply
unique_tag (line 323)

Returns the unique_tag (ETag or getctag) for this resource

  • access: public
void unique_tag ()
WriteProxyGroup (line 254)

Accessor for the write proxy group

void WriteProxyGroup ()

Inherited Methods

Inherited From Principal

 Principal::__construct()
 Principal::byEmail()
 Principal::cacheDelete()
 Principal::cacheFlush()
 Principal::Create()
 Principal::dav_name()
 Principal::default_calendar()
 Principal::email()
 Principal::Exists()
 Principal::FetchCollections()
 Principal::FetchDeadProperties()
 Principal::internal_url()
 Principal::principal_id()
 Principal::setUsername()
 Principal::unCache()
 Principal::Update()
 Principal::updateableFields()
 Principal::url()
 Principal::username()
 Principal::user_no()
 Principal::__get()
 Principal::__isset()

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/Principal/Principal.html0000644000000000000000000014646311776301336017664 0ustar Docs For Class Principal

 Class Principal

Description

A class for things to do with a Principal

Located in /inc/Principal.php (line 19)


	
			
Direct descendents
Class Description
 class DAVPrincipal A class for things to do with a DAV Principal
Method Summary
 static void cacheDelete ( $type,  $value)
 static void cacheFlush ( $where, [ $whereparams = array()])
 static void updateableFields ()
 Principal __construct (string $type, mixed $value, [boolean $use_cache = true])
 void byEmail ()
 void Create ( $field_values)
 string dav_name ()
 string default_calendar ()
 string email ()
 void Exists ()
 string FetchCollections ()
 void internal_url ([ $type = 'principal'])
 string principal_id ()
 string setUsername ( $new_username)
 void unCache ()
 void Update ( $field_values)
 string url ([string $type = 'principal'], [boolean $internal = false])
 string username ()
 int user_no ()
 void __get ($property $property)
 void __isset ($property $property)
Variables
boolean $by_email (line 92)

Whether this was retrieved using an e-mail address

  • access: protected
mixed $collections (line 101)
  • access: protected
mixed $collection_id (line 67)
  • access: public
mixed $created (line 55)
  • access: public
mixed $date_format_type (line 60)
  • access: public
mixed $dav_name (line 53)
  • access: protected
mixed $dead_properties (line 102)
  • access: protected
mixed $default_calendar (line 103)
  • access: protected
mixed $default_privileges (line 64)
  • access: public
mixed $displayname (line 63)
  • access: public
mixed $email (line 52)
  • access: protected
mixed $email_ok (line 59)
  • access: public
boolean $exists (line 76)

Whether this Principal actually exists in the database yet.

  • access: protected
mixed $fullname (line 58)
  • access: public
mixed $is_addressbook (line 68)
  • access: public
mixed $is_calendar (line 66)
  • access: public
mixed $is_principal (line 65)
  • access: public
mixed $locale (line 61)
  • access: public
mixed $modified (line 56)
  • access: public
The $original_request_url (line 86)
  • var: actual requested URL for this principal, when the request was for /principals/... or such
  • access: protected
mixed $password (line 57)
  • access: public
mixed $principal_id (line 51)
  • access: protected
mixed $privileges (line 70)
  • access: public
mixed $resourcetypes (line 69)
  • access: public
mixed $type_id (line 62)
  • access: public
The $url (line 81)
  • var: home URL of the principal
  • access: protected
mixed $username (line 49)

Columns from the database

  • access: protected
mixed $user_active (line 54)
  • access: public
mixed $user_no (line 50)
  • access: protected
Methods
static cacheDelete (line 614)
  • access: public
void cacheDelete ( $type,  $value)
  • $type
  • $value
static cacheFlush (line 603)
  • access: public
void cacheFlush ( $where, [ $whereparams = array()])
  • $where
  • $whereparams
static updateableFields (line 30)
  • access: public
void updateableFields ()
Constructor __construct (line 122)

Construct a new Principal object. The principal record will be retrieved from the database, or (if not found) initialised to a new record. You can test for whether the Principal exists by calling the Exists() method on the returned object.

Depending on the supplied $type, the following behaviour will occur: path: Will attempt to extract a username or email from the supplied path, and then do what those do. dav_name: Expects the dav_name of a <em>principal</em>, exactly, like: /principal/ and will use that as for username. user_no: Expects an integer which is the usr.user_no (deprecated) principal_id: Expects an integer which is the principal.principal_id email: Will try and retrieve a unique principal by using the email address. Will fail (subsequent call to Exists() will be false) if there is not a unique match. username: Will retrieve based on strtolower($value) = lower(usr.username)

  • throws: Exception When provided with an invalid $type parameter.
Principal __construct (string $type, mixed $value, [boolean $use_cache = true])
  • string $type: One of 'path', 'dav_name', 'user_no', 'principal_id', 'email' or 'username'
  • mixed $value: A value appropriate to the $type requested.
  • boolean $use_cache: Whether to use an available cache source (default true)

Redefined in descendants as:
byEmail (line 288)
  • access: public
void byEmail ()
Create (line 592)
  • access: public
void Create ( $field_values)
  • $field_values
dav_name (line 380)

Return the partial path representing this principal

  • return: The dav_name
string dav_name ()
default_calendar (line 428)

Return the default calendar for this principal

  • return: The internal dav_name for the home_calendar, or false if there is none
string default_calendar ()
email (line 371)

Return the email

  • return: The email
string email ()
Exists (line 283)
  • access: public
void Exists ()
FetchCollections (line 411)

Fetch the list of collections for this principal

  • return: The internal dav_name for the home_calendar, or null if there is none
  • access: protected
string FetchCollections ()
FetchDeadProperties (line 394)

Ensure the principal's dead properties are loaded

  • access: protected
void FetchDeadProperties ()
internal_url (line 494)
  • access: public
void internal_url ([ $type = 'principal'])
  • $type
principal_id (line 362)

Return the principal_id

  • return: The principal_id
string principal_id ()
setUsername (line 342)

Set the username - but only if the record does not yet exist!

  • return: The username
string setUsername ( $new_username)
  • $new_username
unCache (line 499)
  • access: public
void unCache ()
Update (line 596)
  • access: public
void Update ( $field_values)
  • $field_values
url (line 468)

Return the URL for this principal

  • return: The principal-URL
  • access: public
string url ([string $type = 'principal'], [boolean $internal = false])
  • string $type: The type of URL we want (the principal, by default)
  • boolean $internal: Whether an internal reference is requested
username (line 333)

Return the username

  • return: The username
string username ()
user_no (line 353)

Return the user_no

  • return: The user_no
int user_no ()
__get (line 251)

This will allow protected properties to be referenced for retrieval, but not referenced for update.

  • access: public
void __get ($property $property)
  • $property $property
__isset (line 261)

This will allow protected properties to be examined for whether they are set without making them writable. PHP 5.1 or later only.

  • access: public
void __isset ($property $property)
  • $property $property

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/propfind/0000755000000000000000000000000011776303357014744 5ustar davical-1.1.1/docs/api/davical/propfind/_inc---caldav-PROPFIND.php.html0000644000000000000000000001460611776301332022127 0ustar Docs for page caldav-PROPFIND.php

File/inc/caldav-PROPFIND.php

Description

CalDAV Server - handle PROPFIND method

Includes
 require_once ('iCalendar.php') (line 15)
 require_once ('XMLDocument.php') (line 16)
 require_once ("external-fetch.php") (line 240)

Something that we can handle, at least roughly correctly.

 require_once ('DAVResource.php') (line 17)
Functions
add_proxy_response (line 54)

Add the calendar-proxy-read/write pseudocollections

void add_proxy_response (responses $which,  $parent_path)
  • responses $which: array of responses to which to add the collections
  • $parent_path
get_collection_contents (line 104)

Get XML response for items in the collection If '/' is requested, a list of visible users is given, otherwise a list of calendars for the user which are parented by this path.

void get_collection_contents ( $depth,  $collection, [ $parent_path = null])
  • $depth
  • $collection
  • $parent_path

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---ui---collection-edit.php.html0000644000000000000000000001250411776301334021455 0ustar Docs for page collection-edit.php

File/inc/ui/collection-edit.php

Description
Includes
 include_once (caldav-PUT-functions.php) (line 116)
 include_once (check_UTF8.php) (line 108)

If the user has uploaded a .ics file as a calendar, we fake this out

as if it were a "PUT" request against a collection. This is something of a hack. It works though :-)

Functions
edit_grant_row (line 408)
void edit_grant_row ( $row_data)
  • $row_data
privilege_format_function (line 193)

privilege_format_function is for formatting the binary privileges from the

database, including localising them. This is a hook function for a browser column object, so it takes three parameters:

  • return: The formatted privileges.
string privilege_format_function (mixed $value, BrowserColumn $column, dbrow $row)
  • mixed $value: The value of the column.
  • BrowserColumn $column: The BrowserColumn object we are hooked into.
  • dbrow $row: The row object we read from the database.

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---caldav-REPORT-cardquery.php.html0000644000000000000000000001054611776301333022075 0ustar Docs for page caldav-REPORT-cardquery.php

File/inc/caldav-REPORT-cardquery.php

Description
Includes
 require_once ('vcard.php') (line 3)
Functions
get_address_properties (line 6)
void get_address_properties ( $address_data_xml)
  • $address_data_xml
SqlFilterCardDAV (line 83)

Process a filter fragment returning an SQL fragment

void SqlFilterCardDAV ( $filter,  $components, [ $property = null], [ $parameter = null])
  • $filter
  • $components
  • $property
  • $parameter

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---well-known.php.html0000644000000000000000000001006611651212132020430 0ustar Docs for page well-known.php

File/htdocs/well-known.php

Description
Includes
 include (iSchedule.php) (line 41)
 require_once ('./always.php') (line 3)
 require_once (CalDAVRequest.php) (line 12)
 require_once (HTTPAuthSession.php) (line 7)
Functions
ischedule_get (line 55)
void ischedule_get ()

Documentation generated on Tue, 27 Sep 2011 11:30:49 +1300 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---ui---principal-browse.php.html0000644000000000000000000000212411776301336021656 0ustar Docs for page principal-browse.php

File/inc/ui/principal-browse.php

Description

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---caldav-REPORT-principal.php.html0000644000000000000000000000227611776301333022060 0ustar Docs for page caldav-REPORT-principal.php

File/inc/caldav-REPORT-principal.php

Description

Build the array of properties to include in the report output

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---caldav-REPORT-calquery.php.html0000644000000000000000000001610611776301333021721 0ustar Docs for page caldav-REPORT-calquery.php

File/inc/caldav-REPORT-calquery.php

Description
Includes
 include_once ('vCalendar.php') (line 3)
Functions
apply_filter (line 78)

While we can construct our SQL to apply some filters in the query, other filters need to be checked against the retrieved record. This is for handling those ones.

  • return: True if the check succeeded, false otherwise.
boolean apply_filter ( $filters, string $item, array $filter)
  • array $filter: An array of XMLElement which is the filter definition
  • string $item: The database row retrieved for this calendar item
  • $filters
BuildSqlFilter (line 278)

Build an SQL 'WHERE' clause which implements (parts of) the filter. The elements of the filter which are implemented in the SQL will be removed.

  • return: A string suitable for use as an SQL 'WHERE' clause selecting the desired records.
string BuildSqlFilter ( $filter, arrayref &$filter)
  • arrayref &$filter: A reference to an array of XMLElement defining the filter
  • $filter
check_for_expansion (line 6)
void check_for_expansion ( $calendar_data_node)
  • $calendar_data_node
SqlFilterFragment (line 94)

Process a filter fragment returning an SQL fragment

void SqlFilterFragment ( $filter,  $components, [ $property = null], [ $parameter = null])
  • $filter
  • $components
  • $property
  • $parameter

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---other_translated_strings.php.html0000644000000000000000000000214111776301336022743 0ustar Docs for page other_translated_strings.php

File/inc/other_translated_strings.php

Description

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---iSchedule.php.html0000644000000000000000000002503211776301336020254 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page iSchedule.php

File/htdocs/iSchedule.php

Description
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 include ("classEditor.php") (line 84)
 include (interactive-page.php) (line 7)
 include (DAViCalSession.php) (line 4)
 include (page-header.php) (line 124)
 include ("classBrowser.php") (line 85)
 include (page-footer.php) (line 146)

Page elements could be an array of viewers, browsers or something else that supports the Render() method... or a non-object which we assume is just a string of text that we echo.

 include ("./always.php") (line 3)
 require_once ("AwlQuery.php") (line 8)
 require_once ('iSchedule.php') (line 9)
Functions
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
checkiSchedule (line 38)
void checkiSchedule ()
generateKeys (line 72)
void generateKeys ()
SRVFormat (line 95)
void SRVFormat ( $domain)
  • $domain
SRVOk (line 87)
void SRVOk ( $value,  $name,  $row)
  • $value
  • $name
  • $row
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---feed.php.html0000644000000000000000000001476211776301335017261 0ustar Docs for page feed.php

File/htdocs/feed.php

Description
Includes
 require_once (HTTPAuthSession.php) (line 14)
 require_once ("./always.php") (line 8)

A script for returning a feed (currently Atom) of recent changes to a calendar collection

 require_once ('AwlCache.php') (line 12)
 require_once ("vComponent.php") (line 20)
 require_once (DAVResource.php) (line 21)
 require_once (CalDAVRequest.php) (line 17)
Functions
caldav_get_feed (line 32)
void caldav_get_feed ( $request,  $collection)
  • $request
  • $collection
hyperlink (line 28)

Function for creating anchor links out of plain text.

Source: http://stackoverflow.com/questions/1960461/convert-plain-text-hyperlinks-into-html-hyperlinks-in-php

void hyperlink ( $text)
  • $text

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---caldav-REPORT-multiget.php.html0000644000000000000000000000213511776301333021723 0ustar Docs for page caldav-REPORT-multiget.php

File/inc/caldav-REPORT-multiget.php

Description

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/0000755000000000000000000000000011776303357014355 5ustar davical-1.1.1/docs/api/davical/caldav/_inc---caldav-PUT-default.php.html0000644000000000000000000000453411776301333022411 0ustar Docs for page caldav-PUT-default.php

File/inc/caldav-PUT-default.php

Description

CalDAV Server - handle PUT method on unknown (arbitrary) content-types

Includes
 require_once ('DAVResource.php') (line 13)

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-ACL.php.html0000644000000000000000000000765011776301332020717 0ustar Docs for page caldav-ACL.php

File/inc/caldav-ACL.php

Description

CalDAV Server - handle ACL method

Includes
 require_once ('DAVResource.php') (line 13)
Functions
process_ace (line 107)

Preconditions

void process_ace ( $grantor,  $by_principal,  $by_collection,  $ace)
  • $grantor
  • $by_principal
  • $by_collection
  • $ace

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-DELETE.php.html0000644000000000000000000001325011776301332021253 0ustar Docs for page caldav-DELETE.php

File/inc/caldav-DELETE.php

Description

CalDAV Server - handle DELETE method

Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ('DAVResource.php') (line 13)

CalDAV Server - handle DELETE method

 require_once ('schedule-functions.php') (line 20)
Functions
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
delete_collection (line 22)
void delete_collection ( $id)
  • $id

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-MOVE.php.html0000644000000000000000000001000011776301332021045 0ustar Docs for page caldav-MOVE.php

File/inc/caldav-MOVE.php

Description

CalDAV Server - handle MOVE method

Includes
 require_once ('DAVResource.php') (line 13)
Functions
rollback (line 92)

RFC2068, 14.25: If none of the entity tags match, or if "*" is given and no current entity exists, the server MUST NOT perform the requested method, and MUST return a 412 (Precondition Failed) response.

RFC2068, 14.26: If any of the entity tags match the entity tag of the entity that would have been returned in the response to a similar GET request (without the If-None-Match header) on that resource, or if "*" is given and any current entity exists for that resource, then the server MUST NOT perform the requested method.

void rollback ([ $response_code = 412])
  • $response_code

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-PUT-vcard.php.html0000644000000000000000000000536411776301333022066 0ustar Docs for page caldav-PUT-vcard.php

File/inc/caldav-PUT-vcard.php

Description

CalDAV Server - handle PUT method on VCARD content-types

Includes
 require_once ('DAVResource.php') (line 13)
 require_once ('vcard.php') (line 25)

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-DELTICKET.php.html0000644000000000000000000000570211776301332021624 0ustar Docs for page caldav-DELTICKET.php

File/inc/caldav-DELTICKET.php

Description

CalDAV Server - handle DELTICKET method in line with defunct proposed RFC from: http://tools.ietf.org/html/draft-ito-dav-ticket-00

Why are we using a defunct RFC? Well, we want to support some kind of system for providing a URI to people to give out for granting privileged access without requiring logins. Using a defunct proposed spec seems better than inventing our own. As well as Xythos, Cosmo follows this specification, with some documented variations, which we will also follow. In particular we use the xmlns="http://www.xythos.com/namespaces/StorageServer" rather than the DAV: namespace.

Includes
 require_once ('DAVResource.php') (line 21)

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-POST.php.html0000644000000000000000000001351711776301332021104 0ustar Docs for page caldav-POST.php

File/inc/caldav-POST.php

Description

CalDAV Server - handle PUT method

Includes
 include_once ('caldav-PUT-functions.php') (line 14)
 include_once ('iSchedule.php') (line 16)
 include_once ('freebusy-functions.php') (line 15)
 require_once ("XMLDocument.php") (line 13)

CalDAV Server - handle PUT method

Functions
handle_cancel_request (line 131)
void handle_cancel_request ( $ic)
  • $ic
handle_freebusy_request (line 27)
void handle_freebusy_request ( $ic)
  • $ic

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-OPTIONS.php.html0000644000000000000000000000550311776301332021446 0ustar Docs for page caldav-OPTIONS.php

File/inc/caldav-OPTIONS.php

Description

CalDAV Server - handle OPTIONS method

Includes
 include_once ('DAVResource.php') (line 13)

CalDAV Server - handle OPTIONS method

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-PROPPATCH.php.html0000644000000000000000000001665711776301333021670 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page caldav-PROPPATCH.php

File/inc/caldav-PROPPATCH.php

Description

CalDAV Server - handle PROPPATCH method

Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ('vCalendar.php') (line 13)

CalDAV Server - handle PROPPATCH method

 require_once ('DAVResource.php') (line 14)
Functions
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
add_failure (line 57)

Small utility function to add propstat for one failure

void add_failure ( $type, unknown_type $tag, unknown_type $status, [unknown_type $description = null], [unknown_type $error_tag = null])
  • unknown_type $tag
  • unknown_type $status
  • unknown_type $description
  • unknown_type $error_tag
  • $type
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-REPORT-sync-collection.php.html0000644000000000000000000000533711776301333024437 0ustar Docs for page caldav-REPORT-sync-collection.php

File/inc/caldav-REPORT-sync-collection.php

Description

CalDAV Server - handle sync-collection report (draft-daboo-webdav-sync-01)

Functions
display_status (line 47)

Build the array of properties to include in the report output

void display_status ( $status_code)
  • $status_code

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-PUT-functions.php.html0000644000000000000000000007312611776301333023000 0ustar Docs for page caldav-PUT-functions.php

File/inc/caldav-PUT-functions.php

Description

CalDAV Server - handle PUT method

Includes
 include_once ('iSchedule.php') (line 22)
 include_once ('RRule-v2.php') (line 23)
 require_once ('vComponent.php') (line 19)
 require_once ('WritableCollection.php') (line 21)
 require_once ('AwlCache.php') (line 18)

Check if the user wants to put just one VEVENT/VTODO or a whole calendar

if the collection = calendar = $request_container doesn't exist then create it return true if it's a whole calendar

 require_once ('vCalendar.php') (line 20)
Functions
controlRequestContainer (line 71)

Work out the location we are doing the PUT to, and check that we have the rights to do the needful.

void controlRequestContainer (string $username, int $user_no, string $path, boolean $caldav_context, [boolean $public = null])
  • string $username: The name of the destination user
  • int $user_no: The user making the change
  • string $path: The DAV path the resource is bing PUT to
  • boolean $caldav_context: Whether we are responding via CalDAV or interactively
  • boolean $public: Whether the collection will be public, should we need to create it
do_scheduling_reply (line 324)

Do the scheduling adjustments for a REPLY when an ATTENDEE updates their status.

void do_scheduling_reply ( $resource,  $organizer)
  • vCalendar $resource: The resource that the ATTENDEE is writing to their calendar
  • string $organizer: The property which is the event ORGANIZER.
do_scheduling_requests (line 485)

Create/Update the scheduling requests for this resource. This includes updating the scheduled user's default calendar.

  • return: If there was any scheduling action
true do_scheduling_requests ( $resource, boolean $create, [ $old_data = null])
  • vComponent $resource: The VEVENT/VTODO/... resource we are scheduling
  • boolean $create: true if the scheduling requests are being created.
  • $old_data
GetTZID (line 173)

Get a TZID string from this VEVENT/VTODO/... component if we can

  • return: TZID value we found, or null
The GetTZID ( $comp)
  • vComponent $comp
handle_schedule_reply (line 275)

Deliver scheduling replies to organizer and other attendees

  • return: on error
false handle_schedule_reply ( $ical)
  • vComponent $ical: the VCALENDAR to deliver
handle_schedule_request (line 186)

Deliver scheduling requests to attendees

void handle_schedule_request (vComponent $ical)
  • vComponent $ical: the VCALENDAR to deliver
import_addressbook_collection (line 682)

This function will import a whole calendar

void import_addressbook_collection ( $vcard_content, int $user_no, string $path, boolean $caldav_context, [ $appending = false], string $ics_content)
  • string $ics_content: the ics file to import
  • int $user_no: the user wich will receive this ics file
  • string $path: the $path where it will be store such as /user_foo/home/
  • boolean $caldav_context:

    Whether we are responding via CalDAV or interactively

    Any VEVENTs with the same UID will be concatenated together

  • $vcard_content
  • $appending
import_calendar_collection (line 779)

This function will import a whole calendar

void import_calendar_collection (string $ics_content, int $user_no, string $path, boolean $caldav_context, [ $appending = false])
  • string $ics_content: the ics file to import
  • int $user_no: the user wich will receive this ics file
  • string $path: the $path where it will be store such as /user_foo/home/
  • boolean $caldav_context:

    Whether we are responding via CalDAV or interactively

    Any VEVENTs with the same UID will be concatenated together

  • $appending
import_collection (line 646)

This function will import a whole collection

void import_collection ( $import_content, int $user_no, string $path, boolean $caldav_context, [ $appending = false], string $ics_content)
  • string $ics_content: the ics file to import
  • int $user_no: the user wich will receive this ics file
  • string $path: the $path where it will be store such as /user_foo/home/
  • boolean $caldav_context:

    Whether we are responding via CalDAV or interactively

    The work is either done by

  • $import_content
  • $appending
public_events_only (line 149)

Check if this collection should force all events to be PUBLIC.

  • return: Return true if public events only are allowed.
boolean public_events_only (string $user_no, string $dav_name)
  • string $user_no: the user that owns the collection
  • string $dav_name: the collection to check
rollback_on_error (line 40)

This function launches an error

void rollback_on_error (boolean $caldav_context, int $user_no, string $path, [string $message = ''], [int $error_no = 500])
  • boolean $caldav_context: Whether we are responding via CalDAV or interactively
  • int $user_no: the user who will receive this ics file
  • string $path: the $path where the PUT failed to store such as /user_foo/home/
  • string $message: An optional error message to return to the client
  • int $error_no: An optional value for the HTTP error code
simple_write_resource (line 1459)

A slightly simpler version of write_resource which will make more sense for calling from an external program. This makes assumptions that the collection and user do exist and bypasses all checks for whether it is reasonable to write this here.

  • return: True for success, false for failure.
boolean simple_write_resource (string $path, string $caldav_data, string $put_action_type, [ $write_action_log = false])
  • string $path: The path to the resource being written
  • string $caldav_data: The actual resource to be written
  • string $put_action_type: INSERT or UPDATE depending on what we are to do
  • $write_action_log
write_alarms (line 1058)

Given a dav_id and an original vCalendar, pull out each of the VALARMs and write the values into the calendar_alarm table.

null write_alarms (int $dav_id,  $ical)
  • int $dav_id: The dav_id of the caldav_data we're processing
  • vComponent $ical: The VEVENT or VTODO containing the VALARM
write_attendees (line 1120)

Parse out the attendee property and write a row to the calendar_attendee table for each one.

null write_attendees (int $dav_id,  $ical)
  • int $dav_id: The dav_id of the caldav_data we're processing
  • vComponent $ical: The VEVENT or VTODO containing the ATTENDEEs
write_resource (line 1169)

Actually write the resource to the database. All checking of whether this is reasonable should be done before this is called.

  • return: True for success, false for failure.
boolean write_resource (DAVResource $resource, string $caldav_data, DAVResource $collection, int $author,  &$etag, string $put_action_type, boolean $caldav_context, [string $log_action = true], [string $weak_etag = null], string $etag)
  • DAVResource $resource: The resource being written
  • string $caldav_data: The actual data to be written
  • DAVResource $collection: The collection containing the resource being written
  • int $author: The user_no who wants to put this resource on the server
  • string $etag: An etag unique for this event
  • string $put_action_type: INSERT or UPDATE depending on what we are to do
  • boolean $caldav_context: True, if we are responding via CalDAV, false for other ways of calling this
  • string $log_action: Either 'INSERT' or 'UPDATE': the type of action we are doing
  • string $weak_etag: An etag that is NOT modified on ATTENDEE changes for this event
  • &$etag

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_htdocs---public.php.html0000644000000000000000000001441311776301336021060 0ustar Docs for page public.php

File/htdocs/public.php

Description

CalDAV Server - main program

Includes
 include_once (caldav-GET.php) (line 41)
 include_once (caldav-OPTIONS.php) (line 38)
 include_once (caldav-PROPFIND.php) (line 40)
 include_once (caldav-REPORT.php) (line 39)
 include_once (test-RRULE.php) (line 54)
 include_once (caldav-GET.php) (line 42)
 require (PublicSession.php) (line 14)
 require ("./always.php") (line 11)

CalDAV Server - main program

 require_once (CalDAVRequest.php) (line 20)

A simplified DAV header in this case

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-BIND.php.html0000644000000000000000000001225411776301332021030 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page caldav-BIND.php

File/inc/caldav-BIND.php

Description

CalDAV Server - handle BIND method

Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ('AwlQuery.php') (line 12)
 require_once ('DAVResource.php') (line 22)
 require_once ('XMLDocument.php') (line 28)
 require_once ('external-fetch.php') (line 54)
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-GET-functions.php.html0000644000000000000000000001344611776301332022745 0ustar Docs for page caldav-GET-functions.php

File/inc/caldav-GET-functions.php

Description

CalDAV Server - functions used by GET method handler

Includes
 require_once ("iCalendar.php") (line 12)

CalDAV Server - functions used by GET method handler

 require_once ("DAVResource.php") (line 13)
Functions
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
export_iCalendar (line 33)
void export_iCalendar (DAVResource $dav_resource)
obfuscated_event (line 15)
void obfuscated_event ( $icalendar)
  • $icalendar

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-REPORT.php.html0000644000000000000000000002714311776301333021333 0ustar Docs for page caldav-REPORT.php

File/inc/caldav-REPORT.php

Description

CalDAV Server - handle REPORT method

Includes
 include ("caldav-REPORT-freebusy.php") (line 51)
 include ("caldav-REPORT-principal.php") (line 58)
 include ("caldav-REPORT-pps-set.php") (line 61)
 include ("caldav-REPORT-cardquery.php") (line 246)
 include ("caldav-REPORT-calquery.php") (line 232)
 include ("caldav-REPORT-multiget.php") (line 237)
 include ("caldav-REPORT-multiget.php") (line 242)
 require_once ("external-fetch.php") (line 65)
 require_once ("XMLDocument.php") (line 13)

CalDAV Server - handle REPORT method

 require_once ("external-fetch.php") (line 72)
 require_once ("vCalendar.php") (line 42)
 require_once ('RRule-v2.php') (line 16)
 require_once ('DAVResource.php') (line 14)
 require_once ("external-fetch.php") (line 223)
Functions
component_to_xml (line 92)

Return XML for a single component from the DB

  • return: An XML document which is the response for the component
string component_to_xml (array $properties, string $item)
  • array $properties: The properties for this component
  • string $item: The DB row data for this component

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-MKTICKET.php.html0000644000000000000000000001055311776301332021527 0ustar Docs for page caldav-MKTICKET.php

File/inc/caldav-MKTICKET.php

Description

CalDAV Server - handle MKTICKET method in line with defunct proposed RFC from: http://tools.ietf.org/html/draft-ito-dav-ticket-00

Why are we using a defunct RFC? Well, we want to support some kind of system for providing a URI to people to give out for granting privileged access without requiring logins. Using a defunct proposed spec seems better than inventing our own. As well as Xythos, Cosmo follows this specification, with some documented variations, which we will also follow. In particular we use the xmlns="http://www.xythos.com/namespaces/StorageServer" rather than the DAV: namespace.

Includes
 require_once ('DAVResource.php') (line 21)

CalDAV Server - handle MKTICKET method in line with defunct proposed RFC from: http://tools.ietf.org/html/draft-ito-dav-ticket-00

Why are we using a defunct RFC? Well, we want to support some kind of system for providing a URI to people to give out for granting privileged access without requiring logins. Using a defunct proposed spec seems better than inventing our own. As well as Xythos, Cosmo follows this specification, with some documented variations, which we will also follow. In particular we use the xmlns="http://www.xythos.com/namespaces/StorageServer" rather than the DAV: namespace.

 require_once ('XMLDocument.php') (line 25)

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_htdocs---caldav.php.html0000644000000000000000000003645511776301333021043 0ustar Docs for page caldav.php

File/htdocs/caldav.php

Description

CalDAV Server - main program

Includes
 include (caldav-PROPFIND.php) (line 108)
 include (caldav-MOVE.php) (line 134)
 include (caldav-PUT-vcard.php) (line 124)
 include (caldav-GET.php) (line 110)
 include (caldav-PUT-vcalendar.php) (line 120)
 include (caldav-POST.php) (line 114)
 include (caldav-PUT-default.php) (line 127)
 include (caldav-PROPPATCH.php) (line 111)
 include (caldav-GET.php) (line 109)
 include (caldav-MKCOL.php) (line 131)
 include (caldav-MKCOL.php) (line 132)
 include (caldav-MKTICKET.php) (line 138)
 include (caldav-ACL.php) (line 135)
 include (caldav-LOCK.php) (line 136)
 include (caldav-LOCK.php) (line 137)
 include (caldav-DELTICKET.php) (line 139)
 include (caldav-BIND.php) (line 140)
 include (test-RRULE-v2.php) (line 142)
 include (caldav-DELETE.php) (line 133)
 include_once (caldav-OPTIONS.php) (line 106)
  • todo: integrate handling this URL into CalDAVRequest.php
 include_once (caldav-REPORT.php) (line 107)
 require (well-known.php) (line 25)
 require (autodiscover-handler.php) (line 29)
 require_once ('./always.php') (line 22)

CalDAV Server - main program

 require_once (CalDAVRequest.php) (line 86)
 require_once (HTTPAuthSession.php) (line 61)
Functions
logRequestHeaders (line 33)
void logRequestHeaders ()
send_dav_header (line 64)
void send_dav_header ()

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-GET.php.html0000644000000000000000000000551011776301332020730 0ustar Docs for page caldav-GET.php

File/inc/caldav-GET.php

Description

CalDAV Server - handle GET method

Includes
 require ("caldav-GET-functions.php") (line 13)
 require_once ("external-fetch.php") (line 18)

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---schedule-functions.php.html0000644000000000000000000002751011776301337022674 0ustar Docs for page schedule-functions.php

File/inc/schedule-functions.php

Description

Functions for handling CalDAV Scheduling.

Includes
 require_once ('RRule-v2.php') (line 14)
 require_once ('WritableCollection.php') (line 13)
 require_once ('vCalendar.php') (line 12)

Functions for handling CalDAV Scheduling.

Functions
deliverItipCancel (line 312)

Delivers the iTIP CANCEL message to an ATTENDEE's Scheduling Inbox Collection.

This is pretty simple at present, but could be extended in the future to do the sending of e-mail to a remote attendee.

void deliverItipCancel ( $iTIP,  $attendee, WritableCollection $attendee_inbox)
doItipAttendeeReply (line 67)

Do the scheduling adjustments for a REPLY when an ATTENDEE updates their status.

void doItipAttendeeReply ( $resource,  $partstat, vCalendar $vcal, string $organizer)
  • vCalendar $vcal: The resource that the ATTENDEE is writing to their calendar
  • string $organizer: The property which is the event ORGANIZER.
  • vCalendar $resource
  • $partstat
doItipOrganizerCancel (line 207)

Handles sending the iTIP CANCEL messages to each ATTENDEE by the ORGANIZER.

void doItipOrganizerCancel ( $vcal)
  • vCalendar $vcal: What's being cancelled.
do_scheduling_for_delete (line 24)

Entry point for scheduling on DELETE, for which there are thee outcomes:

  • We don't do scheduling (disabled, no organizer, ...)
  • We are an ATTENDEE declining the meeting.

  • We are the ORGANIZER canceling the meeting.

void do_scheduling_for_delete (DAVResource $deleted_resource)
  • DAVResource $deleted_resource: The resource which has already been deleted
GetItip (line 178)
void GetItip ( $vcal,  $method,  $attendee_value)
  • VCalendar $vcal
  • $method
  • $attendee_value
processItipCancel (line 265)

Does the actual processing of the iTIP CANCEL message on behalf of an ATTENDEE, which generally means writing it into the ATTENDEE's default calendar.

void processItipCancel ( $vcal,  $attendee, WritableCollection $attendee_calendar, Principal $attendee_principal)

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-REPORT-pps-set.php.html0000644000000000000000000000556011776301333022723 0ustar Docs for page caldav-REPORT-pps-set.php

File/inc/caldav-REPORT-pps-set.php

Description

DAViCal CalDAV Server - handle principal-search-property-set report (RFC3744)

Functions
property_response (line 16)

Wrap an individual property name as needed

void property_response ( &$xmldoc,  $property)
  • &$xmldoc
  • $property

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-MKCOL.php.html0000644000000000000000000000707111776301332021162 0ustar Docs for page caldav-MKCOL.php

File/inc/caldav-MKCOL.php

Description

CalDAV Server - handle MKCOL and MKCALENDAR method

Includes
 require_once ('AwlQuery.php') (line 12)

CalDAV Server - handle MKCOL and MKCALENDAR method

 require_once ('DAVResource.php') (line 29)
 require_once ('XMLDocument.php') (line 43)

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/caldav/_inc---caldav-PUT-vcalendar.php.html0000644000000000000000000000546211776301333022725 0ustar Docs for page caldav-PUT-vcalendar.php

File/inc/caldav-PUT-vcalendar.php

Description

CalDAV Server - handle PUT method

Includes
 include_once ('caldav-PUT-functions.php') (line 15)
 require_once ('DAVResource.php') (line 13)

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---autodiscover-handler.php.html0000644000000000000000000001425711776301332021761 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page autodiscover-handler.php

File/inc/autodiscover-handler.php

Description
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ('HTTPAuthSession.php') (line 9)

Errors are sent as an XML document.

 require_once ('CalDAVRequest.php') (line 12)
Functions
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
errorResponse (line 24)
void errorResponse ( $code,  $message, [ $debugdata = ''])
  • $code
  • $message
  • $debugdata
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---page-footer.php.html0000644000000000000000000000210711776301336020042 0ustar Docs for page page-footer.php

File/inc/page-footer.php

Description

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---test.php.html0000644000000000000000000000207411776301337017330 0ustar Docs for page test.php

File/htdocs/test.php

Description

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/DAVTicket/0000755000000000000000000000000011776303357014701 5ustar davical-1.1.1/docs/api/davical/DAVTicket/_inc---DAVTicket.php.html0000644000000000000000000001135611776301335021173 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page DAVTicket.php

File/inc/DAVTicket.php

Description

An object representing a DAV 'ticket'

Classes
Class Description
 class DAVTicket A class for things to do with a DAV Ticket
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 require_once ('AwlQuery.php') (line 12)

An object representing a DAV 'ticket'

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/DAVTicket/DAVTicket.html0000644000000000000000000002232011776301335017336 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs For Class DAVTicket

 Class DAVTicket

Description

A class for things to do with a DAV Ticket

Located in /inc/DAVTicket.php (line 20)


	
			
Method Summary
 DAVTicket __construct (string $ticket_id)
 void dav_name ()
 void id ()
 void MatchesPath ( $test_path)
 void MatchesResource ( $test_resource_id)
 void privileges ()
Methods
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
Constructor __construct (line 66)

Constructor

DAVTicket __construct (string $ticket_id)
  • string $ticket_id
dav_name (line 109)
void dav_name ()
id (line 114)
void id ()
MatchesPath (line 124)
void MatchesPath ( $test_path)
  • $test_path
MatchesResource (line 129)
void MatchesResource ( $test_resource_id)
  • $test_resource_id
privileges (line 119)
void privileges ()
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---freebusy.php.html0000644000000000000000000000750711776301335020201 0ustar Docs for page freebusy.php

File/htdocs/freebusy.php

Description
Includes
 require_once ("./always.php") (line 2)
 require_once (PublicSession.php) (line 6)
 require_once (HTTPAuthSession.php) (line 10)
 require_once (CalDAVRequest.php) (line 44)

We also allow URLs like .../freebusy.php/user@example.com to work, so long as the e-mail matches a single user whose calendar we have rights to.

 require_once (freebusy-functions.php) (line 58)

Documentation generated on Sun, 08 Jul 2012 12:53:49 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---help.php.html0000644000000000000000000001034211776301336017275 0ustar Docs for page help.php

File/htdocs/help.php

Description
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 include ("./always.php") (line 2)
 include (DAViCalSession.php) (line 3)
 include (interactive-page.php) (line 6)
 include (page-header.php) (line 9)
 include (page-footer.php) (line 29)

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---well-known.php.html0000644000000000000000000000724011776301337017733 0ustar Docs for page well-known.php

File/inc/well-known.php

Description
Includes
 include ('iSchedule-POST.php') (line 42)
 require_once ('HTTPAuthSession.php') (line 5)
 require_once ('CalDAVRequest.php') (line 10)
Functions
ischedule_get (line 56)
void ischedule_get ()

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---vcard.php.html0000644000000000000000000000623611776301337016741 0ustar Docs for page vcard.php

File/inc/vcard.php

Description
Classes
Class Description
 class VCard
Includes
 require_once ('AwlQuery.php') (line 6)

Extend the vComponent to specifically handle VCARD resources

 require_once ('vComponent.php') (line 7)

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---index.php.html0000644000000000000000000001336111776301336017460 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page index.php

File/htdocs/index.php

Description
Includes
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
 include ("./always.php") (line 10)
 include ("./caldav.php") (line 6)

If the request is not a GET or POST then they must really want caldav.php!

 include (DAViCalSession.php) (line 11)
 include (interactive-page.php) (line 14)
 include (page-footer.php) (line 61)
 include (page-header.php) (line 15)
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/VTimezone.html0000644000000000000000000001037111776301337015727 0ustar Docs For Class VTimezone

 Class VTimezone

Description

Located in /inc/vtimezone.php (line 9)

vComponent
   |
   --VTimezone
Method Summary
 static void getInstance ( $name)
 static void msCdoToOlson ( $tzcdo)
Methods
static getInstance (line 11)
void getInstance ( $name)
  • $name
static msCdoToOlson (line 24)
void msCdoToOlson ( $tzcdo)
  • $tzcdo

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/DAViCalSession/0000755000000000000000000000000011776303357015672 5ustar davical-1.1.1/docs/api/davical/DAViCalSession/Tools.html0000644000000000000000000001245511776301337017663 0ustar Docs For Class Tools

 Class Tools

Description

Located in /htdocs/tools.php (line 39)


	
			
Method Summary
 static void importFromDirectory ()
 static void renderImportFromDirectory ()
 static void renderSyncLDAP ()
 void render ()
Methods
static importFromDirectory (line 105)
void importFromDirectory ()
static renderImportFromDirectory (line 77)
void renderImportFromDirectory ()
static renderSyncLDAP (line 49)
void renderSyncLDAP ()
render (line 41)
void render ()

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/DAViCalSession/_inc---DAViCalSession.php.html0000644000000000000000000001530411776301334023151 0ustar Docs for page DAViCalSession.php

File/inc/DAViCalSession.php

Description

DAViCal extensions to AWL Session handling

Classes
Class Description
 class DAViCalSession A class for creating and holding session information.
Includes
 include_once ('DAVResource.php') (line 38)
 require ('Session.php') (line 37)

We extend the AWL Session class.

Variables
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
resource $session The session object is global. (line 17)
  • name: $session The session object is global.
Functions
local_session_sql (line 26)
  • todo: Make this a defined constant
void local_session_sql ()

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/DAViCalSession/_htdocs---tools.php.html0000644000000000000000000001574411776301337022270 0ustar Docs for page tools.php

File/htdocs/tools.php

Description

Tools for manipulating calendars

Classes
Class Description
 class Tools
Includes
 include (page-footer.php) (line 166)
 include (page-header.php) (line 164)
 include_once (check_UTF8.php) (line 21)
 require_once (interactive-page.php) (line 17)
 require_once ("DataEntry.php") (line 16)
 require_once ("./always.php") (line 12)

Tools for manipulating calendars

 require_once ("classBrowser.php") (line 18)
 require_once (caldav-PUT-functions.php) (line 20)
 require_once (DAViCalSession.php) (line 13)

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/DAViCalSession/DAViCalSession.html0000644000000000000000000002704011776301334021323 0ustar Docs For Class DAViCalSession

 Class DAViCalSession

Description

A class for creating and holding session information.

Located in /inc/DAViCalSession.php (line 48)

Session
   |
   --DAViCalSession
Variable Summary
Method Summary
 DAViCalSession __construct ([string $sid = ''])
 void AssignSessionDetails (object $u)
 void GetRoles ()
 boolean HavePrivilegeTo ($do_what $do_what, $path $path, [$any $any = null])
 boolean LoginRequired ([string $roles = ''])
Variables
mixed $principal_id (line 51)
  • access: public
Methods
Constructor __construct (line 62)

Create a new DAViCalSession object.

We create a Session and extend it with some additional useful DAViCal related information.

DAViCalSession __construct ([string $sid = ''])
  • string $sid: A session identifier.
AssignSessionDetails (line 72)

Internal function used to assign the session details to a user's new session.

void AssignSessionDetails (object $u)
  • object $u: The user+session object we (probably) read from the database.
GetRoles (line 92)

Method used to get the user's roles

void GetRoles ()
HavePrivilegeTo (line 111)

Does the user have the privileges to do what is requested.

  • return: Whether they do have one of those privileges against the specified path.
boolean HavePrivilegeTo ($do_what $do_what, $path $path, [$any $any = null])
  • $do_what $do_what: mixed The request privilege name, or array of privilege names, to be checked.
  • $path $path: string The path we want that permission for
  • $any $any: boolean Whether we accept any of the privileges. The default is true, unless the requested privilege is 'all', when it is false.
LoginRequired (line 134)

Checks that this user is logged in, and presents a login screen if they aren't.

The function can optionally confirm whether they are a member of one of a list of roles, and deny access if they are not a member of any of them.

  • return: Whether or not the user is logged in and is a member of one of the required roles.
boolean LoginRequired ([string $roles = ''])
  • string $roles: The list of roles that the user must be a member of one of to be allowed to proceed.

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_inc---caldav-REPORT-principal-match.php.html0000644000000000000000000000215311776301333023144 0ustar Docs for page caldav-REPORT-principal-match.php

File/inc/caldav-REPORT-principal-match.php

Description

Documentation generated on Sun, 08 Jul 2012 12:53:47 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/_htdocs---createdb.php.html0000644000000000000000000000565011776301334020122 0ustar Docs for page createdb.php

File/htdocs/createdb.php

Description
Includes
 include ('dbexec.php') (line 14)
Functions
removeComment (line 6)
void removeComment ( $s)
  • $s

Documentation generated on Sun, 08 Jul 2012 12:53:48 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/logging/0000755000000000000000000000000011776303357014551 5ustar davical-1.1.1/docs/api/davical/logging/_inc---log_caldav_action.php.html0000644000000000000000000000772411776301336022722 0ustar Docs for page log_caldav_action.php

File/inc/log_caldav_action.php

Description

Allows logging of CalDAV actions (PUT/DELETE) for possible export or sync through some other glue.

Functions
log_caldav_action (line 26)

Log the action

void log_caldav_action (string $action_type, string $uid, integer $user_no, integer $collection_id, string $dav_name)
  • string $action_type: INSERT / UPDATE or DELETE
  • string $uid: The UID of the modified item
  • integer $user_no: The user owning the containing collection.
  • integer $collection_id: The ID of the containing collection.
  • string $dav_name: The DAV path of the item, relative to the DAViCal base path

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/davical/authentication/0000755000000000000000000000000011776303357016142 5ustar davical-1.1.1/docs/api/davical/authentication/_inc---auth-functions.php.html0000644000000000000000000003676011776301332023630 0ustar Docs for page auth-functions.php

File/inc/auth-functions.php

Description

The authentication handling plugins can be used by the Session class to provide authentication.

Each authenticate hook needs to:

  • Accept a username / password
  • Confirm the username / password are correct
  • Create (or update) a 'usr' record in our database
  • Return the 'usr' record as an object
  • Return === false when authentication fails
It can expect that:
  • Configuration data will be in $c->authenticate_hook['config'], which might be an array, or whatever is needed.
In order to be called:
  • This file should be included
  • $c->authenticate_hook['call'] should be set to the name of the plugin
  • $c->authenticate_hook['config'] should be set up with any configuration data for the plugin

Includes
 require_once ("DataUpdate.php") (line 28)

The authentication handling plugins can be used by the Session class to provide authentication.

Each authenticate hook needs to:

  • Accept a username / password
  • Confirm the username / password are correct
  • Create (or update) a 'usr' record in our database
  • Return the 'usr' record as an object
  • Return === false when authentication fails
It can expect that:
  • Configuration data will be in $c->authenticate_hook['config'], which might be an array, or whatever is needed.
In order to be called:
  • This file should be included
  • $c->authenticate_hook['call'] should be set to the name of the plugin
  • $c->authenticate_hook['config'] should be set up with any configuration data for the plugin

Functions
AuthExternalAWL (line 273)

Authenticate against a different PostgreSQL database which contains a usr table in the AWL format.

Use this as in the following example config snippet:

require_once('auth-functions.php'); $c->authenticate_hook = array( 'call' => 'AuthExternalAwl', 'config' => array( // A PgSQL database connection string for the database containing user records 'connection[]' => 'dbname=wrms host=otherhost port=5433 user=general', // Which columns should be fetched from the database 'columns' => "user_no, active, email_ok, joined, last_update AS updated, last_used, username, password, fullname, email", // a WHERE clause to limit the records returned. 'where' => "active AND org_code=7" ) );

void AuthExternalAWL ( $username,  $password)
  • $username
  • $password
auth_functions_deprecated (line 31)
void auth_functions_deprecated ( $method, [ $message = null])
  • $method
  • $message
CreateDefaultRelationships (line 146)

Defunct function for creating default relationships.

void CreateDefaultRelationships (string $username)
  • string $username: The username of the user we are creating relationships for.
CreateHomeCalendar (line 137)

Backward compatibility

void CreateHomeCalendar (unknown_type $username)
  • unknown_type $username
CreateHomeCollections (line 71)

Creates some default home collections for the user.

void CreateHomeCollections (string $username, [ $defult_timezone = null])
  • string $username: The username of the user we are creating relationships for.
  • $defult_timezone
getPrincipalByID (line 61)
void getPrincipalByID ( $principal_id, [ $use_cache = true])
  • $principal_id
  • $use_cache
getUserByEMail (line 51)
void getUserByEMail ( $email, [ $use_cache = true])
  • $email
  • $use_cache
getUserByID (line 56)
void getUserByID ( $user_no, [ $use_cache = true])
  • $user_no
  • $use_cache
getUserByName (line 46)
void getUserByName ( $username, [ $use_cache = true])
  • $username
  • $use_cache
UpdateCollectionTimezones (line 178)
void UpdateCollectionTimezones ( $username, [ $new_timezone = null])
  • $username
  • $new_timezone
UpdateUserFromExternal (line 188)

Update the local cache of the remote user details

void UpdateUserFromExternal ( &$usr, object $usr)
  • object $usr: The user details we read from the remote.
  • &$usr

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/li_awl.html0000644000000000000000000001340711776301331013650 0ustar
awl

phpDocumentor v 1.4.3

davical-1.1.1/docs/api/elementindex.html0000644000000000000000000121637211776301331015071 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Full index

Package indexes


a b c d e f g h i k l m n o p q r s t u v w x y _
a
Function access_ticket_browser
access_ticket_browser() in principal-edit.php
Method actualDeleteCalendarMember
Writes the data to a member in the collection and returns the segment_name of the resource in our internal namespace.
Method addAuthor
AtomEntry::addAuthor() in AtomFeed.php
Method addAuthor
AtomFeed::addAuthor() in AtomFeed.php
Method addCategory
AtomEntry::addCategory() in AtomFeed.php
Method AddDays
iCalDate::AddDays() in RRule.php
Add some integer number of days to a date
Method AddDuration
Add duration
Method addEntry
AtomFeed::addEntry() in AtomFeed.php
Method AddMonths
Add some number of months to a date
Method addNode
AtomEntry::addNode() in AtomFeed.php
Method addNode
AtomFeed::addNode() in AtomFeed.php
Method addressbook_home_set
Get the addressbook_home_set, as lazily as possible
Function add_failure
add_failure() in caldav-PROPPATCH.php
Small utility function to add propstat for one failure
Function add_proxy_response
add_proxy_response() in caldav-PROPFIND.php
Add the calendar-proxy-read/write pseudocollections
Method AllowedTo
CalDAVRequest::AllowedTo() in CalDAVRequest.php
Are we allowed to do the requested activity
Method AllowedTo
HTTPAuthSession::AllowedTo() in HTTPAuthSession.php
Checks whether a user is allowed to do something.
Method AllowedTo
FakeSession::AllowedTo() in FakeSession.php
Method AllowedTo
PublicSession::AllowedTo() in PublicSession.php
Checks whether a user is allowed to do something.
Method ApplyBySetPos
Given set position descriptions like '1', '3', '11', '-3' or '-1' and a set, return the subset matching the list of set positions.
Method applyLocalChangesToRemote
Put/Delete to the remote server as appropriate
Method applyRemoteChangesToLocal
Apply remote changes to local database
Function apply_filter
apply_filter() in caldav-REPORT-calquery.php
While we can construct our SQL to apply some filters in the query, other filters need to be checked against the retrieved record. This is for handling those ones.
Function array_values_mapping
array_values_mapping() in drivers_ldap.php
Method AsCollection
DAVPrincipal::AsCollection() in DAVPrincipal.php
Returns a representation of the principal as a collection
Method AsDate
Method asSeconds
Returns the duration as epoch seconds.
Method AssignSessionDetails
Internal function used to assign the session details to a user's new session.
Method AssignSessionDetails
Internal function used to assign the session details to a user's new session.
Class AtomEntry
AtomEntry in AtomFeed.php
Class AtomFeed
AtomFeed in AtomFeed.php
Class AtomXHTMLContent
AtomXHTMLContent in AtomFeed.php
These two classes here sort of emulate the interface from the Zend Framework API with regard to ZendFeedWriteFeed for constructing an Atom feed. Except we do it in a DAViCal way, and we have some huge limitations:
  • We *only* support Atom feeds.
Constant ATOM_XMLNS
ATOM_XMLNS in AtomFeed.php
Function AuthExternalAWL
AuthExternalAWL() in auth-functions.php
Authenticate against a different PostgreSQL database which contains a usr table in the AWL format.
Method AuthFailedResponse
Authorisation failed, so we send some headers to say so.
Function auth_functions_deprecated
auth_functions_deprecated() in auth-functions.php
Page admin.php
admin.php in admin.php
Page always.php
always.php in always.php
Page AtomFeed.php
AtomFeed.php in AtomFeed.php
Page auth-functions.php
auth-functions.php in auth-functions.php
Page autodiscover-handler.php
autodiscover-handler.php in autodiscover-handler.php
b
Variable $base_url
CalDAVClient::$base_url in caldav-client.php
Server, username, password, calendar
Variable $base_url
CalDAVSyncClient::$base_url in CalDAVSyncClient.php
Server, username, password, calendar
Variable $body
CalDAVSyncClient::$body in CalDAVSyncClient.php
Variable $body
CalDAVClient::$body in caldav-client.php
Variable $bound_from
DAVResource::$bound_from in DAVResource.php
Variable $by_email
Principal::$by_email in Principal.php
Whether this was retrieved using an e-mail address
Method BasicAuthSession
Handle Basic HTTP Authentication (not secure unless https)
Function bindings_to_other_browser
bindings_to_other_browser() in principal-edit.php
Function bindings_to_us_browser
bindings_to_us_browser() in principal-edit.php
Function bits_to_privilege
bits_to_privilege() in always.php
Given a bit mask of the privileges, will return an array of the text values of privileges.
Method bound_from
DAVResource::bound_from() in DAVResource.php
Returns the dav_name of the resource we are bound to, within our internal namespace
Method BuildACE
DAVResource::BuildACE() in DAVResource.php
BuildACE - construct an XMLElement subtree for a DAV::ace
Method BuildDeadPropertyXML
Method BuildPrivileges
Returns the array of privilege names converted into XMLElements
Function BuildSqlFilter
BuildSqlFilter() in caldav-REPORT-calquery.php
Build an SQL 'WHERE' clause which implements (parts of) the filter. The elements of the filter which are implemented in the SQL will be removed.
Method BuildSupportedMethods
Returns the array of supported methods converted into XMLElements
Method BuildSupportedPrivileges
Returns the array of supported privileges converted into XMLElements
Method BuildSupportedReports
Returns the array of supported reports converted into XMLElements
Method BuildTicketinfo
Returns the array of tickets converted into XMLElements
Function build_dependencies_table
Function build_privileges_html
build_privileges_html() in principal-edit.php
Function build_site_statistics
Method byEmail
Principal::byEmail() in Principal.php
c
Variable $calendar
CalDAVClient::$calendar in caldav-client.php
Variable $calendar_home_set
CalDAVSyncClient::$calendar_home_set in CalDAVSyncClient.php
The calendar-home-set we're using
Variable $calendar_url
CalDAVSyncClient::$calendar_url in CalDAVSyncClient.php
The calendar-URL we're using
Variable $calendar_urls
CalDAVSyncClient::$calendar_urls in CalDAVSyncClient.php
The calendar_urls we have discovered
Variable $collections
Principal::$collections in Principal.php
Variable $collection_id
CalDAVRequest::$collection_id in CalDAVRequest.php
The ID of the collection containing this path, or of this path if it is a collection
Variable $collection_id
Principal::$collection_id in Principal.php
Variable $collection_path
CalDAVRequest::$collection_path in CalDAVRequest.php
The path corresponding to the collection_id
Variable $collection_type
CalDAVRequest::$collection_type in CalDAVRequest.php
The type of collection being requested:
Variable $contenttype
DAVResource::$contenttype in DAVResource.php
Variable $created
Principal::$created in Principal.php
Variable $current_user_principal_xml
The 'current_user_principal_xml' the DAV:current-user-principal answer. An XMLElement object with an <href> or <unauthenticated> fragment.
Method cacheDelete
Principal::cacheDelete() in Principal.php
Method cacheFlush
Principal::cacheFlush() in Principal.php
Class CalDAVClient
CalDAVClient in caldav-client.php
A class for accessing DAViCal via CalDAV, as a client
Method CalDAVClient
CalDAVClient::CalDAVClient() in caldav-client.php
Constructor, initialises the class
Class CalDAVRequest
CalDAVRequest in CalDAVRequest.php
A class for collecting things to do with this request.
Class CalDAVSyncCache
CalDAVSyncCache in CalDAVSyncCache.php
Our SyncCache holds
Class CalDAVSyncCalendar
CalDAVSyncCalendar in CalDAVSyncCalendar.php
A class for holding basic information about a calendar we shall synchronize
Class CalDAVSyncClient
CalDAVSyncClient in CalDAVSyncClient.php
A class for accessing DAViCal via CalDAV, as a client
Class CalDAVSyncState
CalDAVSyncState in CalDAVSyncState.php
The CalDAVSyncState is a very lightweight object holding the data from the last sync process.
Function caldav_get_feed
caldav_get_feed() in feed.php
Method CalendarHomeSet
CalDAVSyncClient::CalendarHomeSet() in CalDAVSyncClient.php
Get/Set the calendar-home-set URL
Class CalendarInfo
CalendarInfo in caldav-client-v2.php
A class for holding basic calendar information
Method CalendarMultiget
CalDAVSyncClient::CalendarMultiget() in CalDAVSyncClient.php
Get a bunch of events for a calendar with a calendar-multiget report
Method CalendarUrls
CalDAVSyncClient::CalendarUrls() in CalDAVSyncClient.php
Get/Set the calendar-home-set URL
Method calendar_free_busy_set
Get the calendar_free_busy_set, as lazily as possible
Method calendar_home_set
Get the calendar_home_set, as lazily as possible
Function catch_setup_errors
Method CheckEtagMatch
CalDAVRequest::CheckEtagMatch() in CalDAVRequest.php
Check that the incoming Etag matches the one for the existing (or non-existing) resource.
Function checkiSchedule
checkiSchedule() in iSchedule.php
Method CheckPassword
HTTPAuthSession::CheckPassword() in HTTPAuthSession.php
CheckPassword does all of the password checking and returns a user record object, or false if it all ends in tears.
Class CheckResult
CheckResult in setup.php
Function check_awl_version
check_awl_version() in setup.php
Function check_calendar
check_calendar() in setup.php
Function check_curl
check_curl() in setup.php
Function check_database_connection
Function check_datetime
check_datetime() in setup.php
Function check_davical_version
Function check_for_expansion
check_for_expansion() in caldav-REPORT-calquery.php
Function check_gettext
check_gettext() in setup.php
Function check_iconv
check_iconv() in setup.php
Function check_ldap
check_ldap() in setup.php
Function check_magic_quotes_gpc
Function check_magic_quotes_runtime
Function check_pdo
check_pdo() in setup.php
Function check_pdo_pgsql
check_pdo_pgsql() in setup.php
Function check_pgsql
check_pgsql() in setup.php
We put many of these checks before we even try to load always.php so that we can try and do some diagnostic work to ensure it will load OK.
Function check_real_php
check_real_php() in setup.php
Function check_schema_version
Function check_string
check_string() in check_UTF8.php
Function check_suhosin_server_strip
Method CoerceContentType
Coerces the Content-type of the request into something valid/appropriate
Method CollectionId
CalDAVRequest::CollectionId() in CalDAVRequest.php
Returns the ID of the collection of, or containing this request
Method collection_id
DAVResource::collection_id() in DAVResource.php
Returns the internal collection_id for this collection, or the collection containing this resource
Function component_to_xml
component_to_xml() in caldav-REPORT.php
Return XML for a single component from the DB
Function confirm_delete_binding
confirm_delete_binding() in principal-edit.php
Function confirm_delete_bind_in
confirm_delete_bind_in() in principal-edit.php
Function confirm_delete_collection
confirm_delete_collection() in principal-edit.php
Function confirm_delete_principal
confirm_delete_principal() in principal-edit.php
Function confirm_delete_ticket
confirm_delete_ticket() in principal-edit.php
Function ConstructURL
ConstructURL() in always.php
Construct a URL from the supplied dav_name. The URL will be urlencoded, except for any '/' characters in it.
Method ContainerExists
Checks whether the container for this resource actually exists, in the virtual sense, within the hierarchy
Method ContainerType
DAVResource::ContainerType() in DAVResource.php
Return the type of whatever contains this resource, or would if it existed.
Function controlRequestContainer
controlRequestContainer() in caldav-PUT-functions.php
Work out the location we are doing the PUT to, and check that we have the rights to do the needful.
Method Create
Principal::Create() in Principal.php
Function CreateDefaultRelationships
CreateDefaultRelationships() in auth-functions.php
Defunct function for creating default relationships.
Method createEntry
AtomFeed::createEntry() in AtomFeed.php
Function CreateHomeCalendar
CreateHomeCalendar() in auth-functions.php
Backward compatibility
Function CreateHomeCollections
CreateHomeCollections() in auth-functions.php
Creates some default home collections for the user.
Function create_external
create_external() in external-fetch.php
Functions for managing external BIND resources
Method current
RepeatRule::current() in RRule-v2.php
Page caldav.php
caldav.php in caldav.php
Page createdb.php
createdb.php in createdb.php
Page caldav-ACL.php
caldav-ACL.php in caldav-ACL.php
Page caldav-BIND.php
caldav-BIND.php in caldav-BIND.php
Page caldav-client-v2.php
caldav-client-v2.php in caldav-client-v2.php
Page caldav-client.php
caldav-client.php in caldav-client.php
Page caldav-DELETE.php
caldav-DELETE.php in caldav-DELETE.php
Page caldav-DELTICKET.php
caldav-DELTICKET.php in caldav-DELTICKET.php
Page caldav-GET-functions.php
caldav-GET-functions.php in caldav-GET-functions.php
Page caldav-GET.php
caldav-GET.php in caldav-GET.php
Page caldav-LOCK.php
caldav-LOCK.php in caldav-LOCK.php
Page caldav-MKCOL.php
caldav-MKCOL.php in caldav-MKCOL.php
Page caldav-MKTICKET.php
caldav-MKTICKET.php in caldav-MKTICKET.php
Page caldav-MOVE.php
caldav-MOVE.php in caldav-MOVE.php
Page caldav-OPTIONS.php
caldav-OPTIONS.php in caldav-OPTIONS.php
Page caldav-POST.php
caldav-POST.php in caldav-POST.php
Page caldav-PROPFIND.php
caldav-PROPFIND.php in caldav-PROPFIND.php
Page caldav-PROPPATCH.php
caldav-PROPPATCH.php in caldav-PROPPATCH.php
Page caldav-PUT-default.php
caldav-PUT-default.php in caldav-PUT-default.php
Page caldav-PUT-functions.php
caldav-PUT-functions.php in caldav-PUT-functions.php
Page caldav-PUT-vcalendar.php
caldav-PUT-vcalendar.php in caldav-PUT-vcalendar.php
Page caldav-PUT-vcard.php
caldav-PUT-vcard.php in caldav-PUT-vcard.php
Page caldav-REPORT-calquery.php
caldav-REPORT-calquery.php in caldav-REPORT-calquery.php
Page caldav-REPORT-cardquery.php
caldav-REPORT-cardquery.php in caldav-REPORT-cardquery.php
Page caldav-REPORT-expand-property.php
caldav-REPORT-expand-property.php in caldav-REPORT-expand-property.php
Page caldav-REPORT-freebusy.php
caldav-REPORT-freebusy.php in caldav-REPORT-freebusy.php
Page caldav-REPORT-multiget.php
caldav-REPORT-multiget.php in caldav-REPORT-multiget.php
Page caldav-REPORT-pps-set.php
caldav-REPORT-pps-set.php in caldav-REPORT-pps-set.php
Page caldav-REPORT-principal-match.php
caldav-REPORT-principal-match.php in caldav-REPORT-principal-match.php
Page caldav-REPORT-principal.php
caldav-REPORT-principal.php in caldav-REPORT-principal.php
Page caldav-REPORT-sync-collection.php
caldav-REPORT-sync-collection.php in caldav-REPORT-sync-collection.php
Page caldav-REPORT.php
caldav-REPORT.php in caldav-REPORT.php
Page CalDAVRequest.php
CalDAVRequest.php in CalDAVRequest.php
Page CalDAVSyncCache.php
CalDAVSyncCache.php in CalDAVSyncCache.php
Page CalDAVSyncCalendar.php
CalDAVSyncCalendar.php in CalDAVSyncCalendar.php
Page CalDAVSyncClient.php
CalDAVSyncClient.php in CalDAVSyncClient.php
Page CalDAVSyncState.php
CalDAVSyncState.php in CalDAVSyncState.php
Page check_UTF8.php
check_UTF8.php in check_UTF8.php
Page capabilities.php
capabilities.php in capabilities.php
Page collection-edit.php
collection-edit.php in collection-edit.php
d
Variable $date_format_type
Variable $dav_name
DAVResource::$dav_name in DAVResource.php
Variable $dav_name
Principal::$dav_name in Principal.php
Variable $dead_properties
Variable $default_calendar
Variable $default_privileges
Variable $depth
CalDAVRequest::$depth in CalDAVRequest.php
The depth parameter from the request headers, coerced into a valid integer: 0, 1 or DEPTH_INFINITY which is defined above. The default is set per various RFCs.
Variable $description
RRuleTest::$description in test-RRULE.php
Variable $destination
CalDAVRequest::$destination in CalDAVRequest.php
The value of any 'Destionation:' header, if present.
Variable $displayname
CalendarInfo::$displayname in caldav-client-v2.php
Variable $displayname
Principal::$displayname in Principal.php
Variable $domain
iSchedule::$domain in iSchedule.php
Variable $dtstart
RRuleTest::$dtstart in test-RRULE.php
Method DateDifference
Produce an iCalendar format DURATION for the difference between this an another iCalDate
Function DateToISODate
DateToISODate() in always.php
Convert a date into ISO format into the sparkly new ISO format.
Method date_mask
RepeatRule::date_mask() in RRule-v2.php
Class DAViCalSession
DAViCalSession in DAViCalSession.php
A class for creating and holding session information.
Constant DAVICAL_ADDRESSBOOK_MAXPRIV
Constant DAVICAL_MAXPRIV
DAVICAL_MAXPRIV in always.php
Given a privilege string, or an array of privilege strings, return a bit mask of the privileges.
Class DAVPrincipal
DAVPrincipal in DAVPrincipal.php
A class for things to do with a DAV Principal
Class DAVResource
DAVResource in DAVResource.php
A class for things to do with a DAV Resource
Class DAVTicket
DAVTicket in DAVTicket.php
A class for things to do with a DAV Ticket
Method DAV_AllProperties
Return an array which is an expansion of the DAV::allprop
Method dav_name
DAVResource::dav_name() in DAVResource.php
Returns the dav_name of the resource in our internal namespace
Method dav_name
DAVTicket::dav_name() in DAVTicket.php
Method dav_name
CalDAVRequest::dav_name() in CalDAVRequest.php
Returns the dav_name of the resource in our internal namespace
Method dav_name
Principal::dav_name() in Principal.php
Return the partial path representing this principal
Method day
Method daysInMonth
Returns the number of days in a year/month pair
Method DaysInMonth
No of days in a month 1(Jan) - 12(Dec)
Constant DEBUG_EXPAND
DEBUG_EXPAND in expand.php
Constant DEBUG_RRULE
DEBUG_RRULE in RRule-v2.php
Function DeconstructURL
DeconstructURL() in always.php
Deconstruct a dav_name from the supplied URL. The dav_name will be urldecoded.
Method default_calendar
Return the default calendar for this principal
Method deleteRemote
CalDAVSyncCache::deleteRemote() in CalDAVSyncCache.php
Delete this from the remote server
Function delete_collection
delete_collection() in caldav-DELETE.php
Function deliverItipCancel
deliverItipCancel() in schedule-functions.php
Delivers the iTIP CANCEL message to an ATTENDEE's Scheduling Inbox Collection.
Method DepthRegexTail
CalDAVRequest::DepthRegexTail() in CalDAVRequest.php
Returns the tail of a Regex appropriate for this Depth, when appended to
Constant DEPTH_INFINITY
DEPTH_INFINITY in CalDAVRequest.php
Method DigestAuthSession
Handle Digest HTTP Authentication (no passwords were harmed in this transaction!)
Function display_status
display_status() in caldav-REPORT-sync-collection.php
Build the array of properties to include in the report output
Method DoCalendarQuery
CalDAVSyncClient::DoCalendarQuery() in CalDAVSyncClient.php
Given XML for a calendar query, return an array of the events (/todos) in the response. Each event in the array will have a 'href', 'etag' and '$response_type' part, where the 'href' is relative to the calendar and the '$response_type' contains the definition of the calendar data in iCalendar format.
Method DoCalendarQuery
CalDAVClient::DoCalendarQuery() in caldav-client.php
Given XML for a calendar query, return an array of the events (/todos) in the response. Each event in the array will have a 'href', 'etag' and '$response_type' part, where the 'href' is relative to the calendar and the '$response_type' contains the definition of the calendar data in iCalendar format.
Method DoDELETERequest
CalDAVSyncClient::DoDELETERequest() in CalDAVSyncClient.php
DELETE a text/icalendar resource
Method DoDELETERequest
CalDAVClient::DoDELETERequest() in caldav-client.php
DELETE a text/icalendar resource
Method DoGETRequest
CalDAVSyncClient::DoGETRequest() in CalDAVSyncClient.php
Get a single item from the server.
Method DoGETRequest
CalDAVClient::DoGETRequest() in caldav-client.php
Get a single item from the server.
Method DoHEADRequest
CalDAVSyncClient::DoHEADRequest() in CalDAVSyncClient.php
Get the HEAD of a single item from the server.
Function doItipAttendeeReply
doItipAttendeeReply() in schedule-functions.php
Do the scheduling adjustments for a REPLY when an ATTENDEE updates their status.
Function doItipOrganizerCancel
doItipOrganizerCancel() in schedule-functions.php
Handles sending the iTIP CANCEL messages to each ATTENDEE by the ORGANIZER.
Method doNormalLine
SqlToArray::doNormalLine() in SqlToArray.php
Add this line onto the current statement, detecting the end of the statement.
Method DoOptionsRequest
Send an OPTIONS request to the server
Method DoOptionsRequest
CalDAVSyncClient::DoOptionsRequest() in CalDAVSyncClient.php
Send an OPTIONS request to the server
Method DoPROPFINDRequest
Get a single item from the server.
Method DoPUTRequest
CalDAVClient::DoPUTRequest() in caldav-client.php
PUT a text/icalendar resource, returning the etag
Method DoPUTRequest
CalDAVSyncClient::DoPUTRequest() in CalDAVSyncClient.php
PUT a text/icalendar resource, returning the etag
Method DoRequest
CalDAVClient::DoRequest() in caldav-client.php
Send a request to the server
Method DoRequest
CalDAVSyncClient::DoRequest() in CalDAVSyncClient.php
Send a request to the server
Method DoResponse
CalDAVRequest::DoResponse() in CalDAVRequest.php
Utility function we call when we have a simple status-based response to return to the client. Possibly
Method doSyncReport
CalDAVSyncClient::doSyncReport() in CalDAVSyncClient.php
Method DoXMLRequest
CalDAVClient::DoXMLRequest() in caldav-client.php
Send an XML request to the server (e.g. PROPFIND, REPORT, MKCALENDAR)
Method DoXMLRequest
CalDAVSyncClient::DoXMLRequest() in CalDAVSyncClient.php
Send an XML request to the server (e.g. PROPFIND, REPORT, MKCALENDAR)
Function do_error
do_error() in setup.php
Function do_scheduling_for_delete
do_scheduling_for_delete() in schedule-functions.php
Entry point for scheduling on DELETE, for which there are thee outcomes:
  • We don't do scheduling (disabled, no organizer, ...)
  • We are an ATTENDEE declining the meeting.
Function do_scheduling_reply
do_scheduling_reply() in caldav-PUT-functions.php
Do the scheduling adjustments for a REPLY when an ATTENDEE updates their status.
Function do_scheduling_requests
do_scheduling_requests() in caldav-PUT-functions.php
Create/Update the scheduling requests for this resource. This includes updating the scheduled user's default calendar.
Page dbexec.php
dbexec.php in dbexec.php
Page DAViCalSession.php
DAViCalSession.php in DAViCalSession.php
Page davical_configuration_missing.php
davical_configuration_missing.php in davical_configuration_missing.php
Page DAVPrincipal.php
DAVPrincipal.php in DAVPrincipal.php
Page DAVResource.php
DAVResource.php in DAVResource.php
Page DAVTicket.php
DAVTicket.php in DAVTicket.php
Page drivers_imap_pam.php
drivers_imap_pam.php in drivers_imap_pam.php
Page drivers_ldap.php
drivers_ldap.php in drivers_ldap.php
Page drivers_pwauth_pam.php
drivers_pwauth_pam.php in drivers_pwauth_pam.php
Page drivers_rimap.php
drivers_rimap.php in drivers_rimap.php
Page drivers_squid_pam.php
drivers_squid_pam.php in drivers_squid_pam.php
e
Variable $email
HTTPAuthSession::$email in HTTPAuthSession.php
User e-mail
Variable $email
Principal::$email in Principal.php
Variable $email_ok
Principal::$email_ok in Principal.php
Variable $entry
CalDAVClient::$entry in caldav-client.php
Variable $entry
CalDAVSyncClient::$entry in CalDAVSyncClient.php
Variable $exists
Principal::$exists in Principal.php
Whether this Principal actually exists in the database yet.
Variable $exists
DAVResource::$exists in DAVResource.php
Variable $exists
CalDAVRequest::$exists in CalDAVRequest.php
The type of collection being requested:
Function early_exception_handler
Function edit_grant_row
edit_grant_row() in collection-edit.php
Function edit_group_row
edit_group_row() in principal-edit.php
Function edit_ticket_row
edit_ticket_row() in principal-edit.php
Method email
Principal::email() in Principal.php
Return the email
Method epoch
Method equals
Return true if $this and $other are equal, false otherwise.
Function errorResponse
errorResponse() in autodiscover-handler.php
Method Exists
Principal::Exists() in Principal.php
Method Exists
DAVResource::Exists() in DAVResource.php
Checks whether this resource actually exists, in the virtual sense, within the hierarchy
Function expand_event_instances
expand_event_instances() in RRule-v2.php
Expand the event instances for an iCalendar VEVENT (or VTODO)
Function expand_properties
expand_properties() in caldav-REPORT-expand-property.php
Expand the properties, recursing only once
Function expand_timezone_onsets
Expand the instances for a STANDARD or DAYLIGHT component of a VTIMEZONE
Method export
AtomFeed::export() in AtomFeed.php
Function export_iCalendar
export_iCalendar() in caldav-GET-functions.php
Page external-fetch.php
external-fetch.php in external-fetch.php
Page expand.php
expand.php in expand.php
Page external-browse.php
external-browse.php in external-browse.php
f
Variable $Format
Variable $from
Variable $fullname
HTTPAuthSession::$fullname in HTTPAuthSession.php
User full name
Variable $fullname
Principal::$fullname in Principal.php
Method FailIfLocked
CalDAVRequest::FailIfLocked() in CalDAVRequest.php
This will either (a) return false if no locks apply, or (b) return the lock_token which the request successfully included to open the lock, or: (c) respond directly to the client with the failure.
Class FakeSession
FakeSession in FakeSession.php
Sometimes we need a fake session when we are using the DAViCal libraries from a script POV.
Method FetchCollection
Find the collection associated with this resource.
Method FetchCollections
Fetch the list of collections for this principal
Method FetchDeadProperties
Ensure the principal's dead properties are loaded
Method FetchDeadProperties
Fetch any dead properties for this URL
Method FetchParentContainer
Fetch the parent to this resource. This is deprecated - use GetParentContainer() instead.
Method FetchPrincipal
Find the principal associated with this resource.
Method FetchPrivileges
Build permissions for this URL
Method FetchProxyGroups
Split this out so we do it as infrequently as possible, given the cost.
Method FetchResource
DAVResource::FetchResource() in DAVResource.php
Retrieve the actual resource.
Method FetchSupportedMethods
Returns the array of supported methods
Method FetchSupportedReports
Returns the array of supported reports
Method FetchTickets
DAVResource::FetchTickets() in DAVResource.php
Fetches an array of the access_ticket records applying to this path
Function fetch_external
fetch_external() in external-fetch.php
Method FindCalendarHome
CalDAVSyncClient::FindCalendarHome() in CalDAVSyncClient.php
Attack the given URL in an attempt to find a principal URL
Method FindCalendars
CalDAVSyncClient::FindCalendars() in CalDAVSyncClient.php
Find the calendars, from the calendar_home_set
Method FindPrincipal
CalDAVSyncClient::FindPrincipal() in CalDAVSyncClient.php
Attack the given URL in an attempt to find a principal URL
Method finish
CalDAVSyncCache::finish() in CalDAVSyncCache.php
Method FloatOrUTC
If this is a localised time then this will return the UTC equivalent. If it is a floating time, then you will just get the floating time. If it is a date then it will be returned as a date. Note that if it is a *localised* date then the answer will still be the UTC equivalent but only the date itself will be returned.
Method FromPath
DAVResource::FromPath() in DAVResource.php
Initialise from a path
Method FromRow
DAVResource::FromRow() in DAVResource.php
Initialise from a database row
Method fromTwoDates
Factory method to return an Rfc5545Duration object from the difference between two dates.
Page feed.php
feed.php in feed.php
Page freebusy.php
freebusy.php in freebusy.php
Page FakeSession.php
FakeSession.php in FakeSession.php
Page freebusy-functions.php
freebusy-functions.php in freebusy-functions.php
g
Variable $getctag
CalendarInfo::$getctag in caldav-client-v2.php
Variable $groups
HTTPAuthSession::$groups in HTTPAuthSession.php
Group rights
Function generateKeys
generateKeys() in iSchedule.php
Method Get
CalDAVSyncCalendar::Get() in CalDAVSyncCalendar.php
Method GetACL
DAVResource::GetACL() in DAVResource.php
Return ACL settings
Method getAllGroups
ldapDrivers::getAllGroups() in drivers_ldap.php
Retrieve all groups from the LDAP directory
Method getAllUsers
ldapDrivers::getAllUsers() in drivers_ldap.php
Retrieve all users from the LDAP directory
Method GetCalendarDetails
Find the calendars, from the calendar_home_set
Method getCapabilities
get capabilities from remote server
Method getClass
Method GetCollectionETags
Get all etags for a calendar
Function getComponentRange
getComponentRange() in RRule-v2.php
Return a date range for this component.
Method GetDepthName
CalDAVRequest::GetDepthName() in CalDAVRequest.php
Returns the name for this depth: 0, 1, infinity
Method getDescription
Method getDuration
Get an Rfc5545Duration from this date range. If the from date is null it will be null.
Method GetEntryByHref
CalDAVClient::GetEntryByHref() in caldav-client.php
Get the calendar entry by HREF
Method GetEntryByHref
CalDAVSyncClient::GetEntryByHref() in CalDAVSyncClient.php
Get the calendar entry by HREF
Method GetEntryByUid
CalDAVSyncClient::GetEntryByUid() in CalDAVSyncClient.php
Get the calendar entry by UID
Method GetEntryByUid
CalDAVClient::GetEntryByUid() in caldav-client.php
Get the calendar entry by UID
Method GetEvents
CalDAVClient::GetEvents() in caldav-client.php
Get the events in a range from $start to $finish. The dates should be in the
Method GetEvents
CalDAVSyncClient::GetEvents() in CalDAVSyncClient.php
Get the events in a range from $start to $finish. The dates should be in the
Method GetHttpRequest
CalDAVSyncClient::GetHttpRequest() in CalDAVSyncClient.php
Output http request headers
Method GetHttpRequest
CalDAVClient::GetHttpRequest() in caldav-client.php
Output http request headers
Method GetHttpResponse
CalDAVClient::GetHttpResponse() in caldav-client.php
Output http response headers
Method getInstance
VTimezone::getInstance() in vtimezone.php
Function GetItip
GetItip() in schedule-functions.php
Method GetLockDetails
CalDAVRequest::GetLockDetails() in CalDAVRequest.php
Returns the DB object associated with a lock token, or false.
Method GetLockRow
CalDAVRequest::GetLockRow() in CalDAVRequest.php
Returns the locked row, either from the cache or from the database
Method GetMonthByDay
Applies any BYDAY to the month to return a set of days
Method GetMonthByMonthDay
Applies any BYMONTHDAY to the month to return a set of days
Method GetNext
RRule::GetNext() in RRule.php
This is most of the meat of the RRULE processing, where we find the next date.
Method getOK
Method GetOKProps
CalDAVSyncClient::GetOKProps() in CalDAVSyncClient.php
Return the <prop> ... </prop> of a propstat where the status is OK
Method GetParentContainer
Get a DAVResource which is the parent to this resource.
Function getPrincipalByID
getPrincipalByID() in auth-functions.php
Method GetProperty
DAVResource::GetProperty() in DAVResource.php
Return general server-related properties, in plain form
Method GetProperty
DAVPrincipal::GetProperty() in DAVPrincipal.php
Return an arbitrary property
Method GetPropStat
DAVResource::GetPropStat() in DAVResource.php
Construct XML propstat fragment for this resource
Method GetResponseBody
CalDAVSyncClient::GetResponseBody() in CalDAVSyncClient.php
Output http response body
Method GetResponseHeaders
Output http response headers
Method GetRoles
DAViCalSession::GetRoles() in DAViCalSession.php
Method used to get the user's roles
Method GetRoles
HTTPAuthSession::GetRoles() in HTTPAuthSession.php
Internal function used to get the user's roles from the database.
Method getServer
iSchedule::getServer() in iSchedule.php
finds a remote calendar server via DNS SRV records
Method getStatements
SqlToArray::getStatements() in SqlToArray.php
Accessor for the array of parsed statements.
Function getStaticLdap
getStaticLdap() in drivers_ldap.php
A generic function to create and fetch static objects
Function getStatusMessage
getStatusMessage() in always.php
Return the HTTP status code description for a given code. Hopefully this is an efficient way to code this.
Method getTimeZone
Method GetTodos
CalDAVClient::GetTodos() in caldav-client.php
Get the todo's in a range from $start to $finish. The dates should be in the
Method GetTodos
CalDAVSyncClient::GetTodos() in CalDAVSyncClient.php
Get the todo's in a range from $start to $finish. The dates should be in the
Method GetToken
CalDAVSyncCalendar::GetToken() in CalDAVSyncCalendar.php
Method getTxt
iSchedule::getTxt() in iSchedule.php
gets the domainkey TXT record from DNS
Function GetTZID
GetTZID() in caldav-PUT-functions.php
Get a TZID string from this VEVENT/VTODO/... component if we can
Function getUserByEMail
getUserByEMail() in auth-functions.php
Function getUserByID
getUserByID() in auth-functions.php
Function getUserByName
getUserByName() in auth-functions.php
Function getVCalendarRange
getVCalendarRange() in RRule-v2.php
Return a RepeatRuleDateRange from the earliest start to the latest end of the event.
Method GetWeekByDay
Applies any BYDAY to the week to return a set of days
Method getXML
AtomEntry::getXML() in AtomFeed.php
Method GetXmlRequest
CalDAVClient::GetXmlRequest() in caldav-client.php
Output xml request
Method GetXmlRequest
CalDAVSyncClient::GetXmlRequest() in CalDAVSyncClient.php
Output xml request
Method GetXmlResponse
CalDAVClient::GetXmlResponse() in caldav-client.php
Output xml response
Method GetXmlResponse
CalDAVSyncClient::GetXmlResponse() in CalDAVSyncClient.php
Output xml response
Function get_address_properties
get_address_properties() in caldav-REPORT-cardquery.php
Function get_collection_contents
get_collection_contents() in caldav-PROPFIND.php
Get XML response for items in the collection If '/' is requested, a list of visible users is given, otherwise a list of calendars for the user which are parented by this path.
Function get_freebusy
get_freebusy() in freebusy-functions.php
Function get_href_containers
get_href_containers() in caldav-REPORT-expand-property.php
Given a <response><href>...</href><propstat><prop><someprop/></prop><status>HTTP/1.1 200 OK</status></propstat>...</response> pull out the content of <someprop>content</someprop> and check to see if it has any href elements. If it *does* then recurse into them, looking for the next deeper nesting of properties.
Function get_phpinfo
get_phpinfo() in setup.php
Function grant_row_editor
grant_row_editor() in principal-edit.php
Method GreaterThan
Test if $this is greater than the date parameter
Method GroupMemberSet
DAVPrincipal::GroupMemberSet() in DAVPrincipal.php
Accessor for the group member set - the members of this group
Method GroupMembership
Accessor for the group membership - the groups this principal is a member of
Function group_memberships_browser
group_memberships_browser() in principal-edit.php
Function group_members_browser
group_members_browser() in principal-edit.php
Function group_row_editor
group_row_editor() in principal-edit.php
Page get.php
get.php in get.php
h
Variable $headers
CalDAVSyncClient::$headers in CalDAVSyncClient.php
Variable $headers
CalDAVClient::$headers in caldav-client.php
Variable $httpParsedHeaders
CalDAVSyncClient::$httpParsedHeaders in CalDAVSyncClient.php
Variable $httpRequest
CalDAVClient::$httpRequest in caldav-client.php
Variable $httpRequest
CalDAVSyncClient::$httpRequest in CalDAVSyncClient.php
Variable $httpResponse
CalDAVClient::$httpResponse in caldav-client.php
Variable $httpResponseBody
CalDAVSyncClient::$httpResponseBody in CalDAVSyncClient.php
Variable $httpResponseCode
CalDAVSyncClient::$httpResponseCode in CalDAVSyncClient.php
Variable $httpResponseHeaders
Function handle_cancel_request
handle_cancel_request() in caldav-POST.php
Function handle_freebusy_request
handle_freebusy_request() in caldav-POST.php
Function handle_schedule_reply
handle_schedule_reply() in caldav-PUT-functions.php
Deliver scheduling replies to organizer and other attendees
Function handle_schedule_request
handle_schedule_request() in caldav-PUT-functions.php
Deliver scheduling requests to attendees
Function handle_subaction
handle_subaction() in principal-edit.php
Method hasLeapDay
Returns a 1 if this year is a leap year, otherwise a 0
Method hasLimitedOccurrences
If this repeat rule has an UNTIL= or COUNT= then we can know it will end. Eventually.
Method hasSyncReport
CalDAVSyncCalendar::hasSyncReport() in CalDAVSyncCalendar.php
Method HavePrivilegeTo
Does the user have the privileges to do what is requested.
Method HavePrivilegeTo
DAViCalSession::HavePrivilegeTo() in DAViCalSession.php
Does the user have the privileges to do what is requested.
Method HavePrivilegeTo
Is the user has the privileges to do what is requested.
Method hour
Method HrefForProp
CalDAVSyncClient::HrefForProp() in CalDAVSyncClient.php
Return the href containing this property. Except only if it's inside a status != 200
Method HrefForResourcetype
Return the href which has a resourcetype of the specified type
Method HrefValueInside
CalDAVSyncClient::HrefValueInside() in CalDAVSyncClient.php
Return the first occurrence of an href inside the named tag.
Page help.php
help.php in help.php
Class HTTPAuthSession
HTTPAuthSession in HTTPAuthSession.php
A Class for handling a session using HTTP Basic Authentication
Method HTTPAuthSession
HTTPAuthSession::HTTPAuthSession() in HTTPAuthSession.php
The constructor, which just calls the type supplied or configured
Function hyperlink
hyperlink() in feed.php
Function for creating anchor links out of plain text.
Page HTTPAuthSession.php
HTTPAuthSession.php in HTTPAuthSession.php
i
Variable $is_addressbook
Variable $is_calendar
Principal::$is_calendar in Principal.php
Variable $is_principal
Principal::$is_principal in Principal.php
Page index.php
index.php in index.php
Page iSchedule.php
iSchedule.php in iSchedule.php
Function i18n
i18n() in setup.php
todo work out something more than true/false returns for dependency checks
Method iCalDate
The constructor takes either an iCalendar date, a text string formatted as an iCalendar date, or epoch seconds.
Class iCalDate
iCalDate in RRule.php
A Class for handling dates in iCalendar format. We do make the simplifying assumption that all date handling in here is normalised to GMT. One day we might provide some functions to do that, but for now it is done externally.
Method id
DAVTicket::id() in DAVTicket.php
Class imapPamDrivers
imapPamDrivers in drivers_rimap.php
Method imapPamDrivers
Constructor.
Function IMAP_PAM_check
IMAP_PAM_check() in drivers_imap_pam.php
Check the username / password against the PAM system
Method importFromDirectory
Function import_addressbook_collection
import_addressbook_collection() in caldav-PUT-functions.php
This function will import a whole calendar
Function import_calendar_collection
import_calendar_collection() in caldav-PUT-functions.php
This function will import a whole calendar
Function import_collection
import_collection() in caldav-PUT-functions.php
This function will import a whole collection
Page interactive-page.php
interactive-page.php in interactive-page.php
Page iSchedule-POST.php
iSchedule-POST.php in iSchedule-POST.php
Page iSchedule.php
iSchedule.php in iSchedule.php
Method InitialiseRecord
Initialise the Principal object from a $usr record from the DB.
Method internal_url
Principal::internal_url() in Principal.php
Method IsAddressBook
CalDAVRequest::IsAddressBook() in CalDAVRequest.php
Returns true if the URL referenced by this request points at an addressbook collection.
Method IsAddressbook
DAVResource::IsAddressbook() in DAVResource.php
Checks whether this resource is an addressbook
Method IsBinding
DAVResource::IsBinding() in DAVResource.php
Checks whether this resource is a bind to another resource
Method IsCalendar
DAVResource::IsCalendar() in DAVResource.php
Checks whether this resource is a calendar
Method IsCalendar
CalDAVRequest::IsCalendar() in CalDAVRequest.php
Returns true if the URL referenced by this request points at a calendar collection.
Class iSchedule
iSchedule in iSchedule.php
A class for handling iScheduling requests.
Function ischedule_cancel
ischedule_cancel() in iSchedule-POST.php
Function ischedule_freebusy_request
ischedule_freebusy_request() in iSchedule-POST.php
Function ischedule_get
ischedule_get() in well-known.php
Function ischedule_request
ischedule_request() in iSchedule-POST.php
Method IsCollection
CalDAVRequest::IsCollection() in CalDAVRequest.php
Returns true if the URL referenced by this request points at a collection.
Method IsCollection
DAVResource::IsCollection() in DAVResource.php
Checks whether this resource is a collection
Method isDate
Method IsExternal
DAVResource::IsExternal() in DAVResource.php
Checks whether this resource is a bind to an external resource
Method isFloating
Method IsGroup
DAVPrincipal::IsGroup() in DAVPrincipal.php
Is this a group principal?
Method IsInfiniteDepth
Returns true if the request asked for infinite depth
Method IsInSchedulingCollection
Checks whether this resource is IN a scheduling inbox/outbox collection
Method IsLocked
DAVResource::IsLocked() in DAVResource.php
Checks whether the resource is locked, returning any lock token, or false
Method IsLocked
CalDAVRequest::IsLocked() in CalDAVRequest.php
Checks whether the resource is locked, returning any lock token, or false
Function ISODateToHTTPDate
ISODateToHTTPDate() in always.php
Convert a date from ISO format into the sad old HTTP format.
Method IsPrincipal
DAVResource::IsPrincipal() in DAVResource.php
Checks whether this resource is a principal
Method IsPrincipal
CalDAVRequest::IsPrincipal() in CalDAVRequest.php
Returns true if the URL referenced by this request points at a principal.
Method IsProxyRequest
CalDAVRequest::IsProxyRequest() in CalDAVRequest.php
Returns true if the URL referenced by this request is within a proxy URL
Method IsPublic
DAVResource::IsPublic() in DAVResource.php
Checks whether the target collection is publicly_readable
Method IsPublic
CalDAVRequest::IsPublic() in CalDAVRequest.php
Checks whether the collection is public
Method IsPublicOnly
DAVResource::IsPublicOnly() in DAVResource.php
Checks whether the target collection is for public events only
Method IsSchedulingCollection
Checks whether this resource is a scheduling inbox/outbox collection
k
Method key
RepeatRule::key() in RRule-v2.php
Method kill_on_exit
CalDAVRequest::kill_on_exit() in CalDAVRequest.php
l
Variable $locale
Principal::$locale in Principal.php
Variable $local_etags
CalDAVSyncState::$local_etags in CalDAVSyncState.php
Variable $local_token
CalDAVSyncState::$local_token in CalDAVSyncState.php
Page log_caldav_action.php
log_caldav_action.php in log_caldav_action.php
Page list.php
list.php in list.php
Class ldapDrivers
ldapDrivers in drivers_ldap.php
Function LDAP_check
LDAP_check() in drivers_ldap.php
Check the username / password against the LDAP server
Method LessThan
Test if $this is less than the date parameter
Method localChanges
CalDAVSyncCache::localChanges() in CalDAVSyncCache.php
Function local_session_sql
local_session_sql() in DAViCalSession.php
Method LoginRequired
DAViCalSession::LoginRequired() in DAViCalSession.php
Checks that this user is logged in, and presents a login screen if they aren't.
Function logRequestHeaders
logRequestHeaders() in caldav.php
Function log_caldav_action
log_caldav_action() in log_caldav_action.php
Log the action
Function log_setup_error
log_setup_error() in setup.php
m
Variable $method
CalDAVRequest::$method in CalDAVRequest.php
The HTTP request method: PROPFIND, LOCK, REPORT, OPTIONS, etc...
Variable $modified
Principal::$modified in Principal.php
Function make_help_link
make_help_link() in page-header.php
Method MalformedRequest
Send a simple error informing the client that was a malformed request
Method MatchesPath
DAVTicket::MatchesPath() in DAVTicket.php
Method MatchesResource
Method minute
Method modify
Method month
Method MonthDays
Given a MonthDays string like "1MO", "-2WE" return an integer day of the month.
Method msCdoToOlson
VTimezone::msCdoToOlson() in vtimezone.php
n
Page newfile.php
newfile.php in newfile.php
Method NeedPrivilege
CalDAVRequest::NeedPrivilege() in CalDAVRequest.php
Send a need-privileges error response. This function will only return if the $href is not supplied and the current user has the specified permission for the request path.
Method NeedPrivilege
DAVResource::NeedPrivilege() in DAVResource.php
Check if we have the needed privilege or send an error response. If the user does not have the privileges then the call will not return, and an XML error document will be output.
Method needsSync
CalDAVSyncCache::needsSync() in CalDAVSyncCache.php
Method next
RepeatRule::next() in RRule-v2.php
Return the next date in the repeating series.
o
Variable $options
CalDAVRequest::$options in CalDAVRequest.php
Variable $original_request_url
Page other_translated_strings.php
other_translated_strings.php in other_translated_strings.php
Function obfuscated_event
obfuscated_event() in caldav-GET-functions.php
Function olson_from_vtimezone
olson_from_vtimezone() in RRule-v2.php
Try and extract something like "Pacific/Auckland" or "America/Indiana/Indianapolis" if possible, given the VTIMEZONE component that is passed in. This is much more complex than olson_from_tzstring since we start to examine the rules and work out what actual timezone this might be.
Method overlaps
Assess whether this range overlaps the supplied range. null values are treated as infinity.
p
Variable $parent
DAVResource::$parent in DAVResource.php
Variable $parsed
iSchedule::$parsed in iSchedule.php
Variable $parser
CalDAVSyncClient::$parser in CalDAVSyncClient.php
Variable $pass
CalDAVSyncClient::$pass in CalDAVSyncClient.php
Variable $pass
CalDAVClient::$pass in caldav-client.php
Variable $password
Principal::$password in Principal.php
Variable $port
CalDAVClient::$port in caldav-client.php
Variable $port
CalDAVSyncClient::$port in CalDAVSyncClient.php
Variable $principal
CalDAVRequest::$principal in CalDAVRequest.php
The 'principal' (user/resource/...) which this request seeks to access
Variable $principal_id
DAViCalSession::$principal_id in DAViCalSession.php
Variable $principal_id
Principal::$principal_id in Principal.php
Variable $principal_url
CalDAVSyncClient::$principal_url in CalDAVSyncClient.php
The principal-URL we're using
Variable $privileges
Principal::$privileges in Principal.php
Variable $privileges
CalDAVRequest::$privileges in CalDAVRequest.php
The decimal privileges allowed by this user to the identified resource.
Variable $protocol
CalDAVSyncClient::$protocol in CalDAVSyncClient.php
Variable $protocol
CalDAVClient::$protocol in caldav-client.php
Page public.php
public.php in public.php
Page page-footer.php
page-footer.php in page-footer.php
Page page-header.php
page-header.php in page-header.php
Page Principal.php
Principal.php in Principal.php
Page PublicSession.php
PublicSession.php in PublicSession.php
Page pubsub.php
pubsub.php in pubsub.php
Page principal-browse.php
principal-browse.php in principal-browse.php
Page principal-edit.php
principal-edit.php in principal-edit.php
Method parent_path
DAVResource::parent_path() in DAVResource.php
Returns the dav_name of the resource in our internal namespace
Method ParseDigestHeader
Parse the HTTP Digest Auth Header
Method parseDKIM
iSchedule::parseDKIM() in iSchedule.php
parses and validates DK header
Method ParseResponse
CalDAVClient::ParseResponse() in caldav-client.php
Split response into httpResponse and xmlResponse
Method ParseResponse
CalDAVSyncClient::ParseResponse() in CalDAVSyncClient.php
Split response into httpResponse and xmlResponse
Method ParseResponseHeaders
Split httpResponseHeaders into an array of headers
Method parseTxt
iSchedule::parseTxt() in iSchedule.php
parses DNS TXT record from domainkey lookup
Method parseURI
iSchedule::parseURI() in iSchedule.php
split up a mailto uri into domain and user components
Method PHPTest
RRuleTest::PHPTest() in test-RRULE.php
Method PreconditionFailed
Send an error response for a failed precondition.
Method PreferMinimal
CalDAVRequest::PreferMinimal() in CalDAVRequest.php
Returns true if the 'Prefer: return-minimal' or 'Brief: t' were present in the request headers.
Class Principal
Principal in Principal.php
A class for things to do with a Principal
Method PrincipalProperty
Returns properties which are specific to this principal
Method PrincipalURL
CalDAVSyncClient::PrincipalURL() in CalDAVSyncClient.php
Get/Set the Principal URL
Function principal_collection_browser
principal_collection_browser() in principal-edit.php
Function principal_editor
principal_editor() in principal-edit.php
Function principal_grants_browser
principal_grants_browser() in principal-edit.php
Method principal_id
Principal::principal_id() in Principal.php
Return the principal_id
Method principal_url
DAVResource::principal_url() in DAVResource.php
Returns the principal-URL for this resource
Method Privileges
DAVPrincipal::Privileges() in DAVPrincipal.php
Return the privileges bits for the current session user to this resource
Method Privileges
CalDAVRequest::Privileges() in CalDAVRequest.php
Return the privileges bits for the current session user to this resource
Method privileges
DAVTicket::privileges() in DAVTicket.php
Method Privileges
DAVResource::Privileges() in DAVResource.php
Return the privileges bits for the current session user to this resource
Function privileges_to_XML
privileges_to_XML() in always.php
Returns the array of privilege names converted into XMLElements
Function privilege_format_function
privilege_format_function() in collection-edit.php
privilege_format_function is for formatting the binary privileges from the
Function privilege_to_bits
privilege_to_bits() in always.php
Function processItipCancel
processItipCancel() in schedule-functions.php
Does the actual processing of the iTIP CANCEL message on behalf of an ATTENDEE, which generally means writing it into the ATTENDEE's default calendar.
Function process_ace
process_ace() in caldav-ACL.php
Preconditions
Method PropertySearch
DAVPrincipal::PropertySearch() in DAVPrincipal.php
Function property_response
property_response() in caldav-REPORT-pps-set.php
Wrap an individual property name as needed
Method ProxyFor
DAVPrincipal::ProxyFor() in DAVPrincipal.php
Accessor for read or write proxy
Class PublicSession
PublicSession in PublicSession.php
A Class for handling a public (anonymous) session
Method PublicSession
PublicSession::PublicSession() in PublicSession.php
The constructor, which just calls the actual type configured
Function public_events_only
public_events_only() in caldav-PUT-functions.php
Check if this collection should force all events to be PUBLIC.
Method putRemote
CalDAVSyncCache::putRemote() in CalDAVSyncCache.php
Write this change to the remote server
Class pwauthPamDrivers
pwauthPamDrivers in drivers_pwauth_pam.php
Function PWAUTH_PAM_check
PWAUTH_PAM_check() in drivers_pwauth_pam.php
Check the username / password against the PAM system
q
Method queryCapabilities
query capabilities retrieved from server
r
Variable $raw_post
CalDAVRequest::$raw_post in CalDAVRequest.php
The raw data sent along with the request
Variable $recur
RRuleTest::$recur in test-RRULE.php
Variable $remote_etags
CalDAVSyncState::$remote_etags in CalDAVSyncState.php
Variable $remote_token
CalDAVSyncState::$remote_token in CalDAVSyncState.php
Variable $requestMethod
CalDAVClient::$requestMethod in caldav-client.php
Variable $requestMethod
CalDAVSyncClient::$requestMethod in CalDAVSyncClient.php
Variable $resource
DAVResource::$resource in DAVResource.php
Variable $resourcetypes
Principal::$resourcetypes in Principal.php
Variable $resourcetypes
DAVResource::$resourcetypes in DAVResource.php
Variable $result_description
Page RRule-v2.php
RRule-v2.php in RRule-v2.php
Page RRule.php
RRule.php in RRule.php
Function rdate_expand
rdate_expand() in RRule-v2.php
Expand the event instances for an RDATE or EXDATE property
Method ReadProxyGroup
DAVPrincipal::ReadProxyGroup() in DAVPrincipal.php
Accessor for the read proxy group
Method remoteChanges
CalDAVSyncCache::remoteChanges() in CalDAVSyncCache.php
Function removeComment
removeComment() in createdb.php
Method removeComment
SqlToArray::removeComment() in SqlToArray.php
Return the empty string if this line is an SQL comment
Method render
Tools::render() in tools.php
Method Render
iCalDate::Render() in RRule.php
Set the day of week used for calculation of week starts
Method Render
Method RenderAsXML
DAVResource::RenderAsXML() in DAVResource.php
Render XML for this resource
Method RenderAsXML
DAVPrincipal::RenderAsXML() in DAVPrincipal.php
Render XML for a single Principal (user) from the DB
Method RenderGMT
Render the date as GMT
Method renderImportFromDirectory
Method renderSyncLDAP
Class RepeatRule
RepeatRule in RRule-v2.php
This class is an implementation of RRULE parsing and expansion, as per RFC5545. It should be reasonably complete, except that it does not handle changing the WKST - there may be a few errors in unusual rules also, but all of the common cases should be handled correctly.
Class RepeatRuleDateRange
RepeatRuleDateRange in RRule-v2.php
This class is used to hold a pair of dates defining a range. The range may be open-ended by including a null for one end or the other, or both.
Class RepeatRuleDateTime
RepeatRuleDateTime in RRule-v2.php
Wrap the DateTime class to make it friendlier to passing in random strings from iCalendar objects, and especially the random stuff used to identify timezones. We also add some utility methods and stuff too, in order to simplify some of the operations we need to do with dates.
Class RepeatRuleTimeZone
RepeatRuleTimeZone in RRule-v2.php
Wrap the DateTimeZone class to allow parsing some iCalendar TZID strangenesses
Method requestUser
ldapDrivers::requestUser() in drivers_ldap.php
Returns the result of the LDAP query
Method resolveConflicts
Method resource
DAVResource::resource() in DAVResource.php
Returns the database row for this resource
Method ResourceProperty
Return general server-related properties for this URL
Method resource_id
DAVResource::resource_id() in DAVResource.php
Returns the definitive resource_id for this resource - usually a dav_id
Method rewind
RepeatRule::rewind() in RRule-v2.php
Method RFC5545
Returns the string following a property name for an RFC5545 DATE-TIME value.
Class Rfc5545Duration
Rfc5545Duration in RRule-v2.php
Provide a useful way of dealing with RFC5545 duration strings of the form
Function RIMAP_check
RIMAP_check() in drivers_rimap.php
Check the username / password against the IMAP server
Function rollback
rollback() in caldav-MOVE.php
RFC2068, 14.25: If none of the entity tags match, or if "*" is given and no current entity exists, the server MUST NOT perform the requested method, and MUST return a 412 (Precondition Failed) response.
Function rollback_on_error
rollback_on_error() in caldav-PUT-functions.php
This function launches an error
Class RRule
RRule in RRule.php
A Class for handling Events on a calendar which repeat
Method RRule
RRule::RRule() in RRule.php
The constructor takes a start date and an RRULE definition. Both of these follow the iCalendar standard.
Class RRuleTest
RRuleTest in test-RRULE.php
Method RRuleTest
RRuleTest::RRuleTest() in test-RRULE.php
Method rrule_day_number
Function rrule_expand
rrule_expand() in RRule-v2.php
Expand the event instances for an RRULE property
s
Variable $selector
iSchedule::$selector in iSchedule.php
Variable $server
CalDAVSyncClient::$server in CalDAVSyncClient.php
Variable $server
CalDAVClient::$server in caldav-client.php
Global $session The session object is global.
Variable $supported_privileges
A static structure of supported privileges.
Variable $sync_client
CalDAVSyncCalendar::$sync_client in CalDAVSyncCalendar.php
Page setup.php
setup.php in setup.php
Page SqlToArray.php
SqlToArray.php in SqlToArray.php
Page schedule-functions.php
schedule-functions.php in schedule-functions.php
Method second
Method sendRequest
iSchedule::sendRequest() in iSchedule.php
send request to remote server
Function send_dav_header
send_dav_header() in caldav.php
Function send_page_header
send_page_header() in page-header.php
Method serialize
CalDAVSyncState::serialize() in CalDAVSyncState.php
Method Set
CalDAVSyncCalendar::Set() in CalDAVSyncCalendar.php
Method setAsDate
Method setAsFloat
Method SetCalendar
CalDAVSyncClient::SetCalendar() in CalDAVSyncClient.php
Set the calendar_url we will be using for a while.
Method setClass
Method setContent
AtomEntry::setContent() in AtomFeed.php
Method SetContentType
CalDAVClient::SetContentType() in caldav-client.php
Add a Content-type: header.
Method SetContentType
CalDAVSyncClient::SetContentType() in CalDAVSyncClient.php
Add a Content-type: header.
Method setDate
AtomEntry::setDate() in AtomFeed.php
Method setDate
Method setDateCreated
Method setDateModified
Method setDateModified
Method SetDebug
CalDAVSyncClient::SetDebug() in CalDAVSyncClient.php
Call this to enable / disable debugging. It will return the prior value of the debugging flag.
Method SetDepth
CalDAVSyncClient::SetDepth() in CalDAVSyncClient.php
Add a Depth: header. Valid values are 0, 1 or infinity
Method SetDepth
CalDAVClient::SetDepth() in caldav-client.php
Method setDescription
Method setDescription
Method setDescription
Method SetEpochDate
Set the date from an epoch
Method setFeedLink
AtomFeed::setFeedLink() in AtomFeed.php
Sets the feed link (rel=self), ignoring the parameter which is for compatibility with the Zend library API, although we use this for the Id, whereas they use the first link that is set.
Method SetGMTDate
Set the date from a text string
Method setId
AtomEntry::setId() in AtomFeed.php
Method setId
AtomFeed::setId() in AtomFeed.php
Method setLink
AtomEntry::setLink() in AtomFeed.php
Method setLink
AtomFeed::setLink() in AtomFeed.php
Method SetLocalDate
Set the date from a text string
Method SetMatch
CalDAVSyncClient::SetMatch() in CalDAVSyncClient.php
Adds an If-Match or If-None-Match header
Method SetMatch
CalDAVClient::SetMatch() in caldav-client.php
Adds an If-Match or If-None-Match header
Method SetMonthDay
Set the day in the month to what we have been given
Method setPermissions
CalDAVRequest::setPermissions() in CalDAVRequest.php
Permissions are controlled as follows:
Method setTimeZone
Method setTitle
AtomEntry::setTitle() in AtomFeed.php
Method setTitle
AtomFeed::setTitle() in AtomFeed.php
Method setTxt
iSchedule::setTxt() in iSchedule.php
strictly for testing purposes
Method SetUserAgent
CalDAVSyncClient::SetUserAgent() in CalDAVSyncClient.php
Add a Depth: header. Valid values are 1 or infinity
Method SetUserAgent
CalDAVClient::SetUserAgent() in caldav-client.php
Add a Depth: header. Valid values are 1 or infinity
Method setUsername
Principal::setUsername() in Principal.php
Set the username - but only if the record does not yet exist!
Method SetWeekStart
Set the day of week used for calculation of week starts
Method setYearDay
Method set_bind_location
Sets the dav_name of the resource we are bound as
Method set_timezone
Method signDKIM
iSchedule::signDKIM() in iSchedule.php
signs a POST body and headers
Function simple_write_resource
simple_write_resource() in caldav-PUT-functions.php
A slightly simpler version of write_resource which will make more sense for calling from an external program. This makes assumptions that the collection and user do exist and bypasses all checks for whether it is reasonable to write this here.
Function SqlFilterCardDAV
SqlFilterCardDAV() in caldav-REPORT-cardquery.php
Process a filter fragment returning an SQL fragment
Function SqlFilterFragment
SqlFilterFragment() in caldav-REPORT-calquery.php
Process a filter fragment returning an SQL fragment
Method SQLTest
RRuleTest::SQLTest() in test-RRULE.php
Class SqlToArray
SqlToArray in SqlToArray.php
SqlToArray class for parsing a file of somewhat structured SQL statements into an array
Class squidPamDrivers
squidPamDrivers in drivers_squid_pam.php
Function SQUID_PAM_check
SQUID_PAM_check() in drivers_squid_pam.php
Check the username / password against the PAM system
Function SRVFormat
SRVFormat() in iSchedule.php
Function SRVOk
SRVOk() in iSchedule.php
Method Start
RepeatRule::Start() in RRule-v2.php
Function sync_LDAP
sync_LDAP() in drivers_ldap.php
sync LDAP against the DB
Function sync_LDAP_groups
sync_LDAP_groups() in drivers_ldap.php
sync LDAP Groups against the DB
Method sync_token
DAVResource::sync_token() in DAVResource.php
Returns the current sync_token for this collection, or the containing collection
Function sync_user_from_LDAP
sync_user_from_LDAP() in drivers_ldap.php
Synchronise a cached user with one from LDAP
t
Variable $ticket
CalDAVRequest::$ticket in CalDAVRequest.php
A DAVTicket object, if there is a ?ticket=id or Ticket: id with this request
Variable $type_id
Principal::$type_id in Principal.php
Page test.php
test.php in test.php
Page tools.php
tools.php in tools.php
Page tz.php
tz.php in tz.php
Page test-RRULE-v2.php
test-RRULE-v2.php in test-RRULE-v2.php
Page test-RRULE.php
test-RRULE.php in test-RRULE.php
Method TestByMonth
Test to see if our _mo matches something in the list of months we have received.
Function ticket_row_editor
ticket_row_editor() in principal-edit.php
Class Tools
Tools in tools.php
Method tzid
u
Variable $unique_tag
DAVResource::$unique_tag in DAVResource.php
Variable $until
Variable $url
Principal::$url in Principal.php
Variable $url
CalDAVSyncCalendar::$url in CalDAVSyncCalendar.php
Variable $url
CalendarInfo::$url in caldav-client-v2.php
Variable $user
CalDAVSyncClient::$user in CalDAVSyncClient.php
Variable $user
CalDAVClient::$user in caldav-client.php
Variable $username
Principal::$username in Principal.php
Columns from the database
Variable $user_active
Principal::$user_active in Principal.php
Variable $user_agent
CalDAVClient::$user_agent in caldav-client.php
The useragent which is send to the caldav server
Variable $user_agent
CalDAVSyncClient::$user_agent in CalDAVSyncClient.php
The useragent which is send to the caldav server
Variable $user_agent
CalDAVRequest::$user_agent in CalDAVRequest.php
The user agent making the request.
Variable $user_no
HTTPAuthSession::$user_no in HTTPAuthSession.php
User ID number
Variable $user_no
Principal::$user_no in Principal.php
Page upgrade.php
upgrade.php in upgrade.php
Method unCache
Principal::unCache() in Principal.php
Method Unchunk
CalDAVSyncClient::Unchunk() in CalDAVSyncClient.php
Unchunk a chunked response
Function unicodeToUtf8
unicodeToUtf8() in check_UTF8.php
Takes an array of ints representing the Unicode characters and returns a UTF-8 string. Astral planes are supported ie. the ints in the input can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates are not allowed.
Method unique_tag
DAVResource::unique_tag() in DAVResource.php
Returns the unique_tag (ETag or getctag) for this resource
Method unique_tag
DAVPrincipal::unique_tag() in DAVPrincipal.php
Returns the unique_tag (ETag or getctag) for this resource
Method unserialize
CalDAVSyncState::unserialize() in CalDAVSyncState.php
Method UnsupportedRequest
Sometimes it's a perfectly formed request, but we just don't do that :-(
Method Update
Principal::Update() in Principal.php
Method updateableFields
Function UpdateCollectionTimezones
UpdateCollectionTimezones() in auth-functions.php
Method updateETags
CalDAVSyncCache::updateETags() in CalDAVSyncCache.php
Function UpdateUserFromExternal
UpdateUserFromExternal() in auth-functions.php
Update the local cache of the remote user details
Function update_external
update_external() in external-fetch.php
Method url
Principal::url() in Principal.php
Return the URL for this principal
Method url
DAVResource::url() in DAVResource.php
Returns the URL of our resource
Method username
Principal::username() in Principal.php
Return the username
Method user_no
Principal::user_no() in Principal.php
Return the user_no
Method user_no
DAVResource::user_no() in DAVResource.php
Returns the internal user_no for the principal for this resource
Method UTC
Always returns a time localised to UTC. Even floating times are converted to UTC using the server's currently configured PHP timezone. Even dates will include a time, which will be non-zero if they were localised dates.
Function utf8ToUnicode
utf8ToUnicode() in check_UTF8.php
Takes an UTF-8 string and returns an array of ints representing the Unicode characters. Astral planes are supported ie. the ints in the output can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates are not allowed.
v
Page vcard.php
vcard.php in vcard.php
Page vtimezone.php
vtimezone.php in vtimezone.php
Method valid
RepeatRule::valid() in RRule-v2.php
Method validateKey
iSchedule::validateKey() in iSchedule.php
validates that domainkey is acceptable for the current request
Method ValidateLockToken
Checks to see whether the lock token given matches one of the ones handed in with the request.
Method validateRequest
checks that current request has a valid DKIM signature signed by a currently valid key from DNS
Class VCard
VCard in vcard.php
Method verifySignature
verifies parsed DKIM header is valid for current message with a signature from the public key in DNS
Class VTimezone
VTimezone in vtimezone.php
w
Page well-known.php
well-known.php in well-known.php
Page WritableCollection.php
WritableCollection.php in WritableCollection.php
Method whatChangedSince
CalDAVSyncCalendar::whatChangedSince() in CalDAVSyncCalendar.php
Method whatChangedSince
WritableCollection::whatChangedSince() in WritableCollection.php
Method WithinScope
Processes the array of $relative_days to $base and removes any which are not within the scope of our rule.
Class WritableCollection
WritableCollection in WritableCollection.php
A class for things to do with a DAV Resource
Method Write
VCard::Write() in vcard.php
Method WriteAddresses
Method WriteCalendarAlarms
Given a dav_id and an original vCalendar, pull out each of the VALARMs and write the values into the calendar_alarm table.
Method WriteCalendarAttendees
Parse out the attendee property and write a row to the calendar_attendee table for each one.
Method WriteCalendarMember
Writes the data to a member in the collection and returns the segment_name of the resource in our internal namespace.
Method WriteEmails
Method WriteMember
WritableCollection::WriteMember() in WritableCollection.php
Writes the data to a member in the collection and returns the segment_name of the resource in our internal namespace.
Method WritePhones
Method WriteProxyGroup
Accessor for the write proxy group
Function write_alarms
write_alarms() in caldav-PUT-functions.php
Given a dav_id and an original vCalendar, pull out each of the VALARMs and write the values into the calendar_alarm table.
Function write_attendees
write_attendees() in caldav-PUT-functions.php
Parse out the attendee property and write a row to the calendar_attendee table for each one.
Function write_resource
write_resource() in caldav-PUT-functions.php
Actually write the resource to the database. All checking of whether this is reasonable should be done before this is called.
x
Variable $xmlRequest
CalDAVSyncClient::$xmlRequest in CalDAVSyncClient.php
Variable $xmlRequest
CalDAVClient::$xmlRequest in caldav-client.php
Variable $xmlResponse
CalDAVSyncClient::$xmlResponse in CalDAVSyncClient.php
Variable $xmlResponse
CalDAVClient::$xmlResponse in caldav-client.php
Constant XHTML_XMLNS
XHTML_XMLNS in AtomFeed.php
Method XMLResponse
CalDAVRequest::XMLResponse() in CalDAVRequest.php
Send an XML Response. This function will never return.
y
Method year
_
Variable $_is_group
DAVPrincipal::$_is_group in DAVPrincipal.php
Method _EpochFromParts
Given a local text date, convert it to an epoch
Constant _FSOCK_TIMEOUT
_FSOCK_TIMEOUT in caldav-client-v2.php
Method _GMTEpochFromParts
Given a GMT text date, convert it to an epoch
Method _GMTTextFromEpoch
Given a GMT epoch date, convert it to text
Method _PartsFromText
Given a text date, convert it to parts
Method _TextFromEpoch
Given an epoch date, convert it to text
Method __construct
Method __construct
Principal::__construct() in Principal.php
Construct a new Principal object. The principal record will be retrieved from the database, or (if not found) initialised to a new record. You can test for whether the Principal exists by calling the Exists() method on the returned object.
Method __construct
squidPamDrivers::__construct() in drivers_squid_pam.php
The constructor
Method __construct
FakeSession::__construct() in FakeSession.php
Method __construct
iSchedule::__construct() in iSchedule.php
Method __construct
Construct a new Rfc5545Duration either from incoming seconds or a text string.
Method __construct
Method __construct
SqlToArray::__construct() in SqlToArray.php
Method __construct
AtomEntry::__construct() in AtomFeed.php
Method __construct
Method __construct
Method __construct
Construct a new RepeatRuleDateRange which will be the range between $date1 and $date2. The earliest of the two dates will be used as the start of the period, the latest as the end. If one of the dates is null then the order of the parameters is significant, with the null treated as -infinity if it is first, or +infinity if it is second.
Method __construct
imapPamDrivers::__construct() in drivers_rimap.php
The constructor
Method __construct
AtomFeed::__construct() in AtomFeed.php
Method __construct
CalDAVSyncClient::__construct() in CalDAVSyncClient.php
Constructor, initialises the class
Method __construct
pwauthPamDrivers::__construct() in drivers_pwauth_pam.php
The constructor
Method __construct
Method __construct
CalDAVSyncCalendar::__construct() in CalDAVSyncCalendar.php
Method __construct
CalDAVRequest::__construct() in CalDAVRequest.php
Create a new CalDAVRequest object.
Method __construct
CalDAVSyncCache::__construct() in CalDAVSyncCache.php
Method __construct
CalDAVSyncState::__construct() in CalDAVSyncState.php
Method __construct
DAViCalSession::__construct() in DAViCalSession.php
Create a new DAViCalSession object.
Method __construct
DAVResource::__construct() in DAVResource.php
Constructor
Method __construct
CalendarInfo::__construct() in caldav-client-v2.php
Method __construct
ldapDrivers::__construct() in drivers_ldap.php
Initializes the LDAP connection
Method __construct
DAVPrincipal::__construct() in DAVPrincipal.php
Constructor
Method __construct
DAVTicket::__construct() in DAVTicket.php
Constructor
Method __get
Principal::__get() in Principal.php
This will allow protected properties to be referenced for retrieval, but not referenced for update.
Method __isset
Principal::__isset() in Principal.php
This will allow protected properties to be examined for whether they are set without making them writable. PHP 5.1 or later only.
Method __toString
Method __toString
CalDAVSyncCalendar::__toString() in CalDAVSyncCalendar.php
Method __toString
Returns the duration as a text string of the form ^(-?)P(\d+W)|((\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?)$
Method __toString
CalendarInfo::__toString() in caldav-client-v2.php
a b c d e f g h i k l m n o p q r s t u v w x y _
davical-1.1.1/docs/api/phpdoc.ini0000644000000000000000000000643611446771206013503 0ustar ;; phpDocumentor configuration file for DAViCal API documentation ;; [Parse Data] ;; title of all the documentation ;; legal values: any string title = DAViCal ;; parse files that start with a . like .bash_profile ;; legal values: true, false hidden = false ;; show elements marked @access private in documentation by setting this to on ;; legal values: on, off parseprivate = off ;; parse with javadoc-like description (first sentence is always the short description) ;; legal values: on, off javadocdesc = off ;; add any custom @tags separated by commas here ;; legal values: any legal tagname separated by commas. ;customtags = mytag1,mytag2 ;; This is only used by the XML:DocBook/peardoc2 converter defaultcategoryname = Documentation ;; what is the main package? ;; legal values: alphanumeric string plus - and _ defaultpackagename = davical ;; output any parsing information? set to on for cron jobs ;; legal values: on quiet = on ;; parse a PEAR-style repository. Do not turn this on if your project does ;; not have a parent directory named "pear" ;; legal values: on/off ;pear = on ;; where should the documentation be written? ;; legal values: a legal path target = docs/api ;; Which files should be parsed out as special documentation files, such as README, ;; INSTALL and CHANGELOG? This overrides the default files found in ;; phpDocumentor.ini (this file is not a user .ini file, but the global file) readmeinstallchangelog = README, INSTALL, CHANGELOG, NEWS, FAQ, LICENSE ;; limit output to the specified packages, even if others are parsed ;; legal values: package names separated by commas ;packageoutput = package1,package2 packageoutput = davical,awl ;; comma-separated list of files to parse ;; legal values: paths separated by commas ;filename = /path/to/file1,/path/to/file2,fileincurrentdirectory ;; comma-separated list of directories to parse ;; legal values: directory paths separated by commas ;directory = /path1,/path2,.,..,subdirectory ;directory = /home/jeichorn/cvs/pear directory = inc,htdocs ;; template base directory (the equivalent directory of /phpDocumentor) ;templatebase = /path/to/my/templates ;; directory to find any example files in through @example and {@example} tags ;examplesdir = /path/to/my/templates examplesdir = examples ;; comma-separated list of files, directories or wildcards ? and * (any wildcard) to ignore ;; legal values: any wildcard strings separated by commas ;ignore = /path/to/ignore*,*list.php,myfile.php,subdirectory/ ignore = htdocs/css/,htdocs/images/,htdocs/js/, ;; comma-separated list of Converters to use in outputformat:Convertername:templatedirectory format ;; legal values: HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib, ;; HTML:frames:earthli, ;; HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de, ;; HTML:frames:DOM/phphtmllib,HTML:frames:DOM/earthli ;; HTML:Smarty:default,HTML:Smarty:PHP,HTML:Smarty:HandS ;; PDF:default:default,CHM:default:default,XML:DocBook/peardoc2:default output=HTML:frames:earthli ;; turn this option on if you want highlighted source code for every file ;; legal values: on/off sourcecode = off davical-1.1.1/docs/api/media/0000755000000000000000000000000011776303357012577 5ustar davical-1.1.1/docs/api/media/banner.css0000644000000000000000000000063711776301331014552 0ustar body { background-color: #EEEEEE; margin: 0px; padding: 0px; } /* Banner (top bar) classes */ .banner { } .banner-menu { text-align: right; clear: both; padding: .5em; border-top: 2px solid #AAAAAA; } .banner-title { text-align: right; font-size: 20pt; font-weight: bold; margin: .2em; } .package-selector { background-color: #DDDDDD; border: 1px solid #AAAAAA; color: #000090; } davical-1.1.1/docs/api/media/stylesheet.css0000644000000000000000000001307711776301331015500 0ustar a { color: #000090; text-decoration: none; } a:hover, a:active, a:focus { color: highlighttext; background-color: highlight; text-decoration: none; } body { background: #FFFFFF; } body, table { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; } a img { border: 0px; } /* Page layout/boxes */ .info-box { } .info-box-title { margin: 1em 0em 0em 0em; font-weight: normal; font-size: 14pt; color: #999999; border-bottom: 2px solid #999999; } .info-box-body { border: 1px solid #999999; padding: .5em; } .nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } .oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} .evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} .page-body { max-width: 800px; margin: auto; } .tree { white-space: nowrap; font: icon } .tree dd { margin-left: 19px } .tree dl { margin: 0px } .tree-icon { vertical-align: middle; border: 0px; margin-right: 3px } /* Index formatting classes */ .index-item-body { margin-top: .5em; margin-bottom: .5em} .index-item-description { margin-top: .25em } .index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } .index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} .index-letter-title { font-size: 12pt; font-weight: bold } .index-letter-menu { text-align: center; margin: 1em } .index-letter { font-size: 12pt } /* Docbook classes */ .description {} .short-description { font-weight: bold; color: #666666; } .tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } .parameters { padding-left: 0em; margin-left: 3em; color: #014fbe; list-style-type: square; } .redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } .package { font-weight: bold; } .package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } .package-details { font-size: 85%; } .sub-package { font-weight: bold; } .tutorial { border-width: thin; border-color: #0066ff; } .tutorial-nav-box { width: 100%; border: 1px solid #999999; background-color: #F8F8F8; } .folder-title { font-style: italic; font-family: Verdana, Arial, Helvetica, sans-serif } /* Generic formatting */ .field { font-weight: bold; } .detail { font-size: 8pt; } .notes { font-style: italic; font-size: 8pt; } .separator { background-color: #999999; height: 2px; } .warning { color: #FF6600; } .disabled { font-style: italic; color: #999999; } /* Code elements */ .line-number { } .class-table { width: 100%; } .class-table-header { border-bottom: 1px dotted #666666; text-align: left} .class-name { color: #0000AA; font-weight: bold; } .method-summary { color: #009000; padding-left: 1em; font-size: 8pt; } .method-header { } .method-definition { margin-bottom: .2em } .method-title { color: #009000; font-weight: bold; } .method-name { font-weight: bold; } .method-signature { font-size: 85%; color: #666666; margin: .5em 0em } .method-result { font-style: italic; } .var-summary { padding-left: 1em; font-size: 8pt; } .var-header { } .var-title { color: #014fbe; margin-bottom: .3em } .var-type { font-style: italic; } .var-name { font-weight: bold; } .var-default {} .var-description { font-weight: normal; color: #000000; } .include-title { color: #014fbe;} .include-type { font-style: italic; } .include-name { font-weight: bold; } .const-title { color: #FF6600; } .const-name { font-weight: bold; } /* Syntax highlighting */ .src-code { font-family: 'Courier New', Courier, monospace; font-weight: normal; } .src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } .src-code a:link { padding: 1px; text-decoration: underline; color: #0000DD; } .src-code a:visited { text-decoration: underline; color: #0000DD; } .src-code a:active { background-color: #FFFF66; color: #008000; } .src-code a:hover { background-color: #FFFF66; text-decoration: overline underline; color: #008000; } .src-comm { color: #666666; } .src-id { color: #FF6600; font-style: italic; } .src-inc { color: #0000AA; font-weight: bold; } .src-key { color: #0000AA; font-weight: bold; } .src-num { color: #CC0000; } .src-str { color: #CC0000; } .src-sym { } .src-var { } .src-php { font-weight: bold; } .src-doc { color: #666666; } .src-doc-close-template { color: #666666 } .src-doc-coretag { color: #008000; } .src-doc-inlinetag {} .src-doc-internal {} .src-doc-tag { color: #0080CC; } .src-doc-template { color: #666666 } .src-doc-type { font-style: italic; color: #444444 } .src-doc-var { color: #444444 } .tute-tag { color: #009999 } .tute-attribute-name { color: #0000FF } .tute-attribute-value { color: #0099FF } .tute-entity { font-weight: bold; } .tute-comment { font-style: italic } .tute-inline-tag { color: #636311; font-weight: bold } /* tutorial */ .authors { } .author { font-style: italic; font-weight: bold } .author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } .example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } *[class="example"] { line-height : 1.0em; } .listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } *[class="listing"] { line-height : 1.0em; } .release-info { font-size: 85%; font-style: italic; margin: 1em 0em } .ref-title-box { } .ref-title { } .ref-purpose { font-style: italic; color: #666666 } .ref-synopsis { } .title { font-weight: bold; border-bottom: 1px solid #999999; color: #999999; } .cmd-synopsis { margin: 1em 0em } .cmd-title { font-weight: bold } .toc { margin-left: 2em; padding-left: 0em } davical-1.1.1/docs/api/media/images/0000755000000000000000000000000011776303357014044 5ustar davical-1.1.1/docs/api/media/images/Constructor.png0000644000000000000000000000154111776301331017066 0ustar PNG  IHDR(-SsBITOePLTELL<9?::UrmnfP 9ffa14++D-H>Y**.O|>7-./ :X! E:0JkXjYU[a!` RXVOɬ[ձ3T-M^5^_;^Cfq:>B6\l:;Yʊ5̬3%ԟ[ .ֈZ| K$Nc Sۖ8ksh΀oOŖ9׸(frՋ֟B &ph‰į& ^1D@4CW@P<Αv2Fղ.IENDB`davical-1.1.1/docs/api/media/images/PrivateClass_logo.png0000644000000000000000000000345411776301331020166 0ustar PNG  IHDR DsBITOPLTE8rJJJ唾|sqmfXHJJJ:::|||8t333)))"""怨yrlfaZTMCz3h*d'Z(WBBB:::2k֐ztk–cZ_RfWJI𵵵UuHB`WN@]ErkPMEQ9jDJ;9팢dr:@H]憜l<42h1^Uバ3;䃏d/-`Kۅ1+1W-10fM|||)0.,sss%/|-|*{bqDtPu8t#}1y-s)tfff*pZfu8m*j(l q3h$l9eTalm*d*bJ`r>btZZZ(`h"cOXd'Z@Ze)X5[l$Z`LT`RRR(TKQ[%T\yX'Q$RIMU!QJJJ%K#MTmEIR$I!JBBB!B"B!@:::9:z8p7s3}3332k-r-d))))U"""utRNS"3DUUfffwwwwwwwwwwww pHYs  ~ tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxmSaq(:D;4-<53R < :DYN] Ls,< dH}w13gyw} 1&-_r5kǷnKh4}##vt7Y@L;s=^T>ɎEdH0{yy$Ippptt|JVAVMg[,DEEǧeh\6p40""d\\rr얦˙GT0 9Gv6111M,Vw;&R}CO+y2JSnr X*:W&0t;R1LcPk+A,Z|*ATuQ4}y) *TW#7%7ڠQ*ՙIVV[TTo>'aR{'AVާ@\aC r+Է@( wC>kk;pH` aUu5uQ03'V B|%R]w}]COoO)b̟;Mf;P8bZckd1`m;z젿H ;s/i"ZL&`?A/` |A0mX `kzȿ`J֡a+}&o p?a&;Cd/C}왬M:zy .}q).涀吱#pyq9l g2Yr1@_ZIENDB`davical-1.1.1/docs/api/media/images/next_button_disabled.png0000644000000000000000000000103711776301331020741 0ustar PNG  IHDR%leIsBITOBPLTEQQQ̥{{{sssލfffŃ\\\fff_ pHYsod tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/12/03s&IDATx}I @1f*@N5˥I 4^ #,fNJHZwj%o/"kBTB1ݬà"W s)Y.>0ZO8p7.X"QԖ\-Yxns f6e=c"[=ٞWw "wN.8ҜVk1fz|:a^!"/d,GqBG6ܬ s/J&ık$6Bd^rdT6R;3pmIENDB`davical-1.1.1/docs/api/media/images/tutorial_folder.png0000644000000000000000000000107411776301331017740 0ustar PNG  IHDR esBITOPLTE^32fff ZCv zzw=cC̮/ȁLRX}rrr׻fƣ':&~>@@0033HHH** *3vVV333ķkk{{{ooaasssffPPfff[[PPUU33BBhZZaZZZZZ;;@@''88[SSQQQ11PLL::00)),,CCC""(( S00333n""'''zrf(gtRNS""3DDUffwww pHYs  ~ tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATx-Z@@rWIc&6bjR&1+ DߣZ}{c$ rH @,yo\|Ч,ߨ _e+zuTTa 0>v8NqӞh []WI@ '`D.,IENDB`davical-1.1.1/docs/api/media/images/Function.png0000644000000000000000000000112411776301331016323 0ustar PNG  IHDR(-SsBITOPLTEAwww+4#)8J6aC {rJ!R5,H'v[D7UBfffBYWC1ҿYEB3Q533I<k "N%,lPFOE^T5z[*,A&K&R<9jCW28;2Z(SE(UUU˜jTM.^4"/:\<3M((eC\CL9rB#ƽ.0P8AŜIE 3 !.)^:_Ǧ pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxcpW@ \A(Z(zHNa晙/֨rfff#Fd5nۆȾ}Jl:zۑ*[/V뛰إ}9rۇxnPwWuѻߞ._6nz1ӎ<ֻM` pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATx=@@ᕤu+-r)Ƶ(;>ح态}ӌc v68H/A ![^^VQ"!gUh.STĩHK[ ُʲ3-hb˭uf0̵njn\חGꯩ0/JvIENDB`davical-1.1.1/docs/api/media/images/previous_button_disabled.png0000644000000000000000000000103511776301331021635 0ustar PNG  IHDR%leIsBITOBPLTEQQQ̥{{{sssލfffŃ\\\fffS pHYsod tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/12/03s$IDATxuY CL]~H7̈́U_I ?.&;,DuDfYKDTz?R&[,74I 2/`|YzEK2yXYU_80ߨ㆕m(6L(iWي?i/LZNݢMeydJ;!tl >i+(U^WtiXD=R+$H=Ka{E*nӡN:; IC^+ۃ~nX&2ҙ?9IENDB`davical-1.1.1/docs/api/media/images/file.png0000644000000000000000000000071611776301331015463 0ustar PNG  IHDRha,tEXtCreation TimeTue 29 Jan 2002 20:17:29 +0100uPtIME pHYsodgAMA a%IDATxc?р񨨯Gpf744+:pH^_]`BP% ~~a0H?¥]ے޶1H!TYJ*fg/뺰yyZ~p!G{ غfHujWXOnzr(UhcnO+e)xhN érGΟ9r!(f#?z a' 1`D RdaPa`1[THT322z2IENDB`davical-1.1.1/docs/api/media/images/package_folder.png0000644000000000000000000000106411776301331017467 0ustar PNG  IHDR esBITOPLTE`Bϴ3y$3Ѝ׻f.f2Tͣ#`?sȁɭ/HGXQ:xƝ!ٵ.X v _uP?=fߗ?&*}̮/OiCƣ'gn<[!۵1ٓ:/(׾jBCfww!{TBM^O}+ ߼3wc pHYs  ~tEXtCreation Time04/02/03ْZB tEXtSoftwareMacromedia Fireworks MX*$IDATxU[`l&:a(a2M"k\Y&2_l[tJ: 32eY*j;z.M{&Iߗa]#&8gH te@Qj/1f{eY'QaMOej̃.pJIENDB`davical-1.1.1/docs/api/media/images/blank.png0000644000000000000000000000022011776301331015621 0ustar PNG  IHDR !tIME +T pHYs B4PLTEٟtRNS0JIDATxc{-=KIENDB`davical-1.1.1/docs/api/media/images/AbstractPrivateMethod.png0000644000000000000000000000155211776301331021002 0ustar PNG  IHDR(-SsBITOePLTEXtU yGR )_df8 )^I4}1̂A}jjHHBB<@DfffZZZA<U4I3D3O8H.=2<1<=33^K?++2*12-:3%1005':>%5~||_OsC{{{XSCǕGi\3?9UPtsa14ݽrmHڼo>YfO|7\\TdfIvApI[.sĔWDS8l>GBB<tRNSDffffI pHYs  ~tEXtCreation Time04/02/03ْZB tEXtSoftwareMacromedia Fireworks MX*$IDATxcbd;SS3+kg&E3LMW[!&ࡧodn dsȂ -퍽ؼL,\C9b]=}#kZT54s*2bjD`Fs%7 Q  0>MpLiqzY=aV\RXI*iS(k[ޡ3DND(30^4-n#IENDB`davical-1.1.1/docs/api/media/images/next_button.png0000644000000000000000000000122111776301331017105 0ustar PNG  IHDR%leIsBITOPLTEQQQ虙3fyW{{{sss?n΍fffܥ탃ֳ\\\oJwfffd{٭޻,3W_Mk7=7Y]u,1~u CY(W;ExBBC A|*q;J^[6DXLp>d+i"m} -^cW4/*eIENDB`davical-1.1.1/docs/api/media/images/Variable.png0000644000000000000000000000126011776301331016264 0ustar PNG  IHDR(-SsBITO)PLTEl1/(mUгEz@wyŤeDu32fܼk،5tͮƢJOЉLemmvHB޲YנyovQCctҿV֓zB6c.ݕLyIa"Ew?f@]նKeOZrom/6a;ΨNk1𵫏ڻQ_ޚkpHײR݇ԍrWꓴPWΫJr/Rd pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxc`aS1pec9)3mq#9Gw'=T@YQU,*JG "lΝ up +9(jh(q,Baa.r ,lr&v@0_O, ' 9 xu\fvIC- %z.A l8>p-VKM~AKIENDB`davical-1.1.1/docs/api/media/images/Class.png0000644000000000000000000000107211776301331015605 0ustar PNG  IHDR(-SsBITOPLTE1f3-ш&N3(k3X3DA}-qLi(R;z33!HNK~3f@/5(c_'YH3X$F3!/S~3+`-+x3U'R6k4 ?E5d5g3]-}'[D1E)JUi/.Ţ pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxMi@Ѣ(*R)J,D &DZ_dX9fȩ\A޾9gy~[]c@ z؜>=/T!P~YWs]܄Tpq1~|xlH%+ :yIB@ POQ'ko ?x,pؔIENDB`davical-1.1.1/docs/api/media/images/Class_logo.png0000644000000000000000000000310011776301331016617 0ustar PNG  IHDR ?sBITOOPLTE5Sr唾ہ|qmfXH*[Cs5\ '(F#@: 2 . '8tNJ耭yrlfbZTMCy1n'[$YztkcZRfJWIBWx=Zr`ME3SkM]v*y1u0r-t*s)t-n'q1n$yW([o0} k?$ s1 ;]nBG|[?P]G@=)YOpl*|n+ȷrFo뛺`9BP) ڸ?:ԙ@ W\T^9a´i3,X|ͦ(O,obtZZZ(`h"cOXd'Z@Ze)X5[l$Z`LT`RRR(TKQ[%T\yX'Q$RIMU!QJJJ%K#MTmEIR$I!JBBB!B"B!@:::9:z8p7s3}3332k-r-d))))U"""utRNS"3DUUfffwwwwwwwwwwww pHYs  ~ tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxmSaq(:D;4-<53R < :DYN] Ls,< dH}w13gyw} 1&-_r5kǷnKh4}##vt7Y@L;s=^T>ɎEdH0{yy$Ippptt|JVAVMg[,DEEǧeh\6p40""d\\rr얦˙GT0 9Gv6111M,Vw;&R}CO+y2JSnr X*:W&0t;R1LcPk+A,Z|*ATuQ4}y) *TW#7%7ڠQ*ՙIVV[TTo>'aR{'AVާ@\aC r+Է@( wC>kk;pH` aUu5uQ03'V B|%R]w}]COoO)b̟;Mf;P8bZckd1`m;z젿H ;s/i"ZL&`?A/` |A0mX `kzȿ`J֡a+}&o p?a&;Cd/C}왬M:zy .}q).涀吱#pyq9l g2Yr1@_ZIENDB`davical-1.1.1/docs/api/media/images/previous_button.png0000644000000000000000000000120411776301331020004 0ustar PNG  IHDR%leIsBITOPLTEQQQ癙3f̵z{{{Xsss?n鍍fffŒ߭Jwlփ\\\fffc֭Kx{۠, pHYsodtEXtCreation Time04/12/03s tEXtSoftwareMacromedia Fireworks MX*$@IDATxuV @tS,,099hx%mi?'@`]9 J$ՊdSŌ G8$Qъ#jiol;$tS"Ќ@3x TMSYd oMX(+4i4-=ZI9lFD,iWE.YYʚTc$h-en&3;@:s;pEqVN]"5 ^]Bα2i9դq 1*dڎA\ Ђּ@`4Cn'6RsRCm><7IENDB`davical-1.1.1/docs/api/media/images/PrivateVariable.png0000644000000000000000000000140411776301331017617 0ustar PNG  IHDR6sBITOhPLTE333[2YO@~{heгEfff.ᥐfuοBQQQzBZkrѻB+݇l1@wŤ2\fueԍЉVOㄲc5t̯ws^KxܼktttyEEEߟ/eXXXrCooײRkH]?tƢJIᗍYridTm(mf̅zzz};Xmm1DvQ~===jY;z`[QΨNUsdyk6cַG~L޲Y[RH`]WW/呌WΫJҺ pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxcq62MwkL6(?8..WFWf+JTQQex̤=ty@|[$tGC6 @R02[a`cS4 IMHs`cQ.΋PPp/`c`c- aOSPHIacЍ(U`Tp WaP76 0Otoe-Q"30$Dͭnĭq?0rCa,?zIENDB`davical-1.1.1/docs/api/media/images/L.png0000644000000000000000000000023111776301331014727 0ustar PNG  IHDR !tIME %"!xg pHYs B4PLTE{RHtRNS0JIDATxc_ E:@h4o*OkckIENDB`davical-1.1.1/docs/api/media/images/Method.png0000644000000000000000000000122511776301331015760 0ustar PNG  IHDR(-SsBITO#PLTEC 3f"+|=2EtrDfGXVͧƨ^KJJCPLTEC %5hh>>#,eetr%h(o \Aѷ?3NLYYJJO8§$_(33 ͙sC+2J3DfG:l:??or:333HHɀ*1^KIwI՘&*X NwH(1nn$!(w$j䄬IENDB`davical-1.1.1/docs/api/media/images/AbstractClass_logo.png0000644000000000000000000000232011776301331020306 0ustar PNG  IHDR DsBITOPLTEȑ@{!!uqqllcc[[TTOOKKBB::33$$TqqKeeA:3*!ZZQQJJ :DD;;11))""tfZRKffssiillff``ddTT^^WWJJZZUUCCOOTTHHQQ<~Od2Z_}){es.󅽊jqexy_5s$ "TE.rZK:|8 )6M90A6A \J@pAFA;FhvgxÌjzv Eǁ8X8XZfyh^BޮE4ֲ&pkCHX_]+çٔ$IU/Z ^ yӲ'QpO7 Dz,>9yƱaat:D"ḯaz$*h IB&N@*-IENDB`davical-1.1.1/docs/api/media/images/function_folder.png0000644000000000000000000000113511776301331017720 0ustar PNG  IHDR esBITOPLTE*l &v їf9̮/R#J/^8(^4 C=X>=0 c̯Xš%;rJALH׻:޵<,A72)|my O2G?}¡9=T)_=3RB֝N!ȭ04C=CT9C[3@Lc84k9:*X0D2ϴ3*}JA=:BP0,kaL pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATx=i@%"IMQ3p{|y3( ,'`5 7:|@B)?S9iԴS+ܥ&*P,}R差,;/} Xr2`C]BQ[OQ|PaC@pğd:=TuIENDB`davical-1.1.1/docs/api/media/images/Tplus.png0000644000000000000000000000033611776301331015651 0ustar PNG  IHDRYQtIME '*I pHYs B40PLTE{y8tRNS0J3IDATxcE! &6Q% P0!J LFlLFEEE & IENDB`davical-1.1.1/docs/api/media/images/class_folder.png0000644000000000000000000000117111776301331017200 0ustar PNG  IHDR(-SsBITOPLTE^3f&#Gї_3pkFX̮/CKUf+Op3z23?waH:s;޵<3z3v ,XɮY\ַ7#:3OC8rtR_f'Nl֝|F3Hܹ5EX1zqBɭ/3?[t2ϴ3TUּa:z̬rЪ*[/VPwن9rz픫nJlWux._6n1<ǡը}O%4 pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATx=@@lIc!Q"m_L1]OeY\cr/ ' (xbYjH@jY_ÂA5mJs\ h7i s&"jB?#g'(F8>q u CSX=)<3@UH&%u-\IENDB`davical-1.1.1/docs/api/media/images/Lminus.png0000644000000000000000000000033311776301331016006 0ustar PNG  IHDRYQtIME %# pHYs B40PLTE{y8tRNS0J0IDATxcE! &6Q% P0!J0Qd.04i 7gIENDB`davical-1.1.1/docs/api/media/images/Constant.png0000644000000000000000000000136011776301331016331 0ustar PNG  IHDR(-SsBITOSPLTEy5www}u|IhΪ`2VNFM@sdNyK,̵i_WG\)䷙4춓QݒeXݟ\2I#oOվ1QzEfV%{ӊt?+ʄۊD!=U%sA+eda[Vz^JLmE|x:O݅U/P y@?9#YZOFe `!XS(If9܆ ՁO{(XB!全 pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxcA(D9j; BtX-"|A:|IJJ@?$%Tl)7Fi#>_>W50P&sK2#yP]JAl "We BX *669B! @>s*"L >ķbb* .IENDB`davical-1.1.1/docs/api/media/images/Page_logo.png0000644000000000000000000000253111776301331016435 0ustar PNG  IHDR DsBITOPLTE=== vvv333Zw ݳڬإ؟ؒՄno3Z2U.N(G{&Ey#Cy!Au;j5b޵ݯپرߥަްНުݛޖࢷ͕۟إŝُ͒וΒ͋ҚՍ͕˘ËNJІ~{{ytuuqltpkknhsbjbgdca~h{Uz]zZwXtTqUnNnSnLlHh=i;b9aB`7^>[.[<;|;9w85o2,d^tRNS""33DDUUUfffffffffffw\ pHYs  ~ tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxc`B|ť PY\.Ƅ7P 5&p0д>UZɾݞj 9t!9;f6jmό+U:{(2uPfxɨZl/Q cD?y˶Ōs@¿~ߗnʈ` I2Qߤ)mqM!ȶ2ޭ1yS^1f pHYs  ~ tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATx]aOPcZ#EÊi]vfn"ʔ }/Rmճ߻?lM(XrZq9tô0>t@m;mf_Fpp6"\4ZBHSJ&If35\Vcm4Vp~}_ ÷(b<|w7"Ӵ/<ٞK$X‚rSđ#o? ;{IENDB`davical-1.1.1/docs/api/media/images/Interface_logo.png0000644000000000000000000000310011776301331017452 0ustar PNG  IHDR ?sBITOOPLTE5Sr唾ہ|qmfXH*[Cs5\ '(F#@: 2 . '8tNJ耭yrlfbZTMCy1n'[$YztkcZRfJWIBWx=Zr`ME3SkM]v*y1u0r-t*s)t-n'q1n$yW([o0} k?$ s1 ;]nBG|[?P]G@=)YOpl*|n+ȷrFo뛺`9BP) ڸ?:ԙ@ W\T^9a´i3,X|ͦ(O,oR TC9q"21h1ȴYӹh4B?8.D cu'-Vq\0 NF$ #EbBO} 43l2_OV sn|zPXDPpFo^?kf{1ys zs A_T0Sy;kLwzc넭DdZŰA$Jb`@_ )};@ Gx(3ZbD! $0 2pT1Q?g!^&dE 0x^S`rfDAR,f*h ("H1 _QBhTq-@_K-IQͰ1)NJd SB4a,ݣ'kZh&GREe?-+SFy{vȂJJb33i^K?++2\?>*1U2-U:3OŌ%1P005'qa3̅4H%5:>WVYm{{{XSC6ʜ *n)U 3U*U Kk  :%;}J}*`e/f o.kߒ^IENDB`davical-1.1.1/docs/api/media/images/StaticVariable.png0000644000000000000000000000126011776301331017434 0ustar PNG  IHDR(-SsBITO)PLTEl1/(mUгEz@wyŤeDu32fܼk،5tͮƢJOЉLemmvHB޲YנyovQCctҿV֓zB6c.ݕLyIa"Ew?f@]նKeOZrom/6a;ΨNk1𵫏ڻQ_ޚkpHײR݇ԍrWꓴPWΫJr/Rd pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxc`aS1pec9)3mq#9Gw'=T@YQU,*JG "lΝ up +9(jh(q,Baa.r ,lr&v@0_O, ' 9 xu\fvIC- %z.A l8>p-VKM~AKIENDB`davical-1.1.1/docs/api/media/images/StaticMethod.png0000644000000000000000000000122511776301331017130 0ustar PNG  IHDR(-SsBITO#PLTEC 3f"+|=2EtrDfGXVͧƨ^KJJC|ZßJŅJuCxlYRΥRa^Yuu>o`ˁ~zfy;ܺUkWOSs pHYs B4 tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxcpEN(DpBt-\]=}8Afڞ"22zL@m^ Տr wc qCT9b=edMBCT}D@@A? D^(PBGI bad40HaSI~7s99UdMx[c.i7N D>CHeIFNӥU\ԄmE|mؕ#X@|o9ŹAk/6IENDB`davical-1.1.1/docs/api/media/images/tutorial.png0000644000000000000000000000065711776301331016413 0ustar PNG  IHDR(-SsBITOWPLTERRR򽽽3@fsssofffYYYfff{{{p] pHYs  ~ tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/03/03a.='IDATx] P(1s4[2L<\tB!-!VXDŽ!v};R)4 H R e˺DօcAL.6o Zݎ([!զ+4 `CJKIUl,F=;PtY܋}8[  IENDB`davical-1.1.1/docs/api/media/images/AbstractClass.png0000644000000000000000000000115411776301331017272 0ustar PNG  IHDR(-SsBITOPLTEˢ}}{{ffYYPPKKBB<<00 faaPP33BBBB''881100))''!! {rfV?>tRNS""3DUfffwww pHYs  ~ tEXtSoftwareMacromedia Fireworks MX*$tEXtCreation Time04/02/03ْZBIDATxMkB0᭭#I30_gWBn x2`q]I1K{)AX(8OQCk: װ c~a NB'QT  , 5-YU3FL ˜~? ? IENDB`davical-1.1.1/docs/api/media/images/folder.png0000644000000000000000000000075411776301331016021 0ustar PNG  IHDR(-SsBITOPLTES96 Ω+x!Orݾڼ8?WȓHݿ0kmI̮U̯6CǨ2q|S6pRvzu"&$'=H\a 3p;f92r X{7eLjCZU~&G:IENDB`davical-1.1.1/docs/api/index.html0000644000000000000000000000165011776301331013505 0ustar DAViCal <H2>Frame Alert</H2> <P>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.</P> davical-1.1.1/docs/api/awl/0000755000000000000000000000000011776301342012273 5ustar davical-1.1.1/docs/api/awl/caldav/0000755000000000000000000000000011776303357013535 5ustar davical-1.1.1/docs/api/awl/caldav/_inc---RRule.php.html0000644000000000000000000000563511776301337017307 0ustar Docs for page RRule.php

File/inc/RRule.php

Description

Class for parsing RRule and getting us the dates

Classes
Class Description
 class iCalDate A Class for handling dates in iCalendar format. We do make the simplifying assumption that all date handling in here is normalised to GMT. One day we might provide some functions to do that, but for now it is done externally.
 class RRule A Class for handling Events on a calendar which repeat

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/_inc---RRule-v2.php.html0000644000000000000000000004051011776301337017623 0ustar Docs for page RRule-v2.php

File/inc/RRule-v2.php

Description

Class for parsing RRule and getting us the dates

Classes
Class Description
 class RepeatRuleTimeZone Wrap the DateTimeZone class to allow parsing some iCalendar TZID strangenesses
 class Rfc5545Duration Provide a useful way of dealing with RFC5545 duration strings of the form
 class RepeatRuleDateTime Wrap the DateTime class to make it friendlier to passing in random strings from iCalendar objects, and especially the random stuff used to identify timezones. We also add some utility methods and stuff too, in order to simplify some of the operations we need to do with dates.
 class RepeatRuleDateRange This class is used to hold a pair of dates defining a range. The range may be open-ended by including a null for one end or the other, or both.
 class RepeatRule This class is an implementation of RRULE parsing and expansion, as per RFC5545. It should be reasonably complete, except that it does not handle changing the WKST - there may be a few errors in unusual rules also, but all of the common cases should be handled correctly.
Includes
 require_once ("vComponent.php") (line 1102)
Constants
DEBUG_RRULE = false (line 34)
Functions
expand_event_instances (line 1183)

Expand the event instances for an iCalendar VEVENT (or VTODO)

Note: expansion here does not apply modifications to instances other than modifying start/end/due/duration.

  • return: The original vComponent, with the instances of the internal components expanded.
vComponent expand_event_instances (object $vResource, [object $range_start = null], [object $range_end = null], [ $return_floating_times = false])
  • object $vResource: A vComponent which is a VCALENDAR containing components needing expansion
  • object $range_start: A RepeatRuleDateTime which is the beginning of the range for events, default -6 weeks
  • object $range_end: A RepeatRuleDateTime which is the end of the range for events, default +6 weeks
  • $return_floating_times
getComponentRange (line 1397)

Return a date range for this component.

  • throws: Exception (1) When DTSTART is not present but the RFC says MUST and (2) when we get an unsupported component
RepeatRuleDateRange getComponentRange ( $comp)
  • vComponent $comp
getVCalendarRange (line 1452)

Return a RepeatRuleDateRange from the earliest start to the latest end of the event.

  • return: Representing the range of time covered by the event.
RepeatRuleDateRange getVCalendarRange (object $vResource)
  • object $vResource: A vComponent which is a VCALENDAR containing components needing expansion
olson_from_vtimezone (line 19)

Try and extract something like "Pacific/Auckland" or "America/Indiana/Indianapolis" if possible, given the VTIMEZONE component that is passed in. This is much more complex than olson_from_tzstring since we start to examine the rules and work out what actual timezone this might be.

void olson_from_vtimezone ( $vtz)
  • vComponent $vtz
rdate_expand (line 1113)

Expand the event instances for an RDATE or EXDATE property

  • return: An array keyed on the UTC dates, referring to the component
array rdate_expand ( $dtstart, string $property, array $component, [array $range_end = null], [ $is_date = null], [ $return_floating_times = false])
  • string $property: RDATE or EXDATE, depending...
  • array $component: A vComponent which is a VEVENT, VTODO or VJOURNAL
  • array $range_end: A date after which we care less about expansion
  • $dtstart
  • $is_date
  • $return_floating_times
rrule_expand (line 1141)

Expand the event instances for an RRULE property

  • return: An array keyed on the UTC dates, referring to the component
array rrule_expand (object $dtstart, string $property, array $component, array $range_end, [ $is_date = null], [ $return_floating_times = false])
  • object $dtstart: A RepeatRuleDateTime which is the master dtstart
  • string $property: RDATE or EXDATE, depending...
  • array $component: A vComponent which is a VEVENT, VTODO or VJOURNAL
  • array $range_end: A date after which we care less about expansion
  • $is_date
  • $return_floating_times

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/RepeatRuleTimeZone.html0000644000000000000000000002121111776301337020137 0ustar Docs For Class RepeatRuleTimeZone

 Class RepeatRuleTimeZone

Description

Wrap the DateTimeZone class to allow parsing some iCalendar TZID strangenesses

Located in /inc/RRule-v2.php (line 39)

DateTimeZone
   |
   --RepeatRuleTimeZone
Method Summary
 RepeatRuleTimeZone __construct ([ $in_dtz = null])
 void tzid ()
Methods
Constructor __construct (line 42)
  • access: public
RepeatRuleTimeZone __construct ([ $in_dtz = null])
  • $in_dtz

Redefinition of:
DateTimeZone::constructor __construct ( $timezone )
tzid (line 65)
void tzid ()

Inherited Methods

Inherited From DateTimeZone (Internal Class)

 constructor __construct ( $timezone )
 getLocation ( )
 getName ( )
 getOffset ( $datetime )
 getTransitions ( $timestamp_begin, $timestamp_end )
 listAbbreviations ( )
 listIdentifiers ( [$what = ], [$country = ] )
Class Constants

Inherited Constants

Inherited from DateTimeZone (Internal Class)

AFRICA = 1
ALL = 2047
ALL_WITH_BC = 4095
AMERICA = 2
ANTARCTICA = 4
ARCTIC = 8
ASIA = 16
ATLANTIC = 32
AUSTRALIA = 64
EUROPE = 128
INDIAN = 256
PACIFIC = 512
PER_COUNTRY = 4096
UTC = 1024

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/iCalDate.html0000644000000000000000000010337411776301337016075 0ustar Docs For Class iCalDate

 Class iCalDate

Description

A Class for handling dates in iCalendar format. We do make the simplifying assumption that all date handling in here is normalised to GMT. One day we might provide some functions to do that, but for now it is done externally.

Located in /inc/RRule.php (line 21)


	
			
Method Summary
 iCalDate iCalDate ( $input)
 void AddDays ( $dd)
 void AddDuration ( $duration)
 void AddMonths ( $mo)
 array &ApplyBySetPos (string $bysplist, string $set)
 string DateDifference (date $from)
 void DaysInMonth ([ $mo = false], [ $yy = false])
 array GetMonthByDay (string $byday)
 array GetMonthByMonthDay (string $bymonthday)
 array GetWeekByDay (string $byday, [string $increasing = false])
 boolean GreaterThan (string $lesser)
 boolean LessThan (string $greater)
 array &MonthDays (string $dow_first, string $days_in_month, string $dayspec)
 void Render ([ $fmt = 'Y-m-d H:i:s'])
 void RenderGMT ([ $fmt = 'Ymd\THis\Z'])
 void SetEpochDate ( $input)
 void SetGMTDate ( $input)
 void SetLocalDate ( $input)
 void SetMonthDay ( $dd)
 void SetWeekStart (string $weekstart)
 boolean TestByMonth (string $monthlist)
 void _EpochFromParts ()
 void _PartsFromText ()
 void _TextFromEpoch ()
Methods
Constructor iCalDate (line 50)

The constructor takes either an iCalendar date, a text string formatted as an iCalendar date, or epoch seconds.

iCalDate iCalDate ( $input)
  • $input
AddDays (line 265)

Add some integer number of days to a date

void AddDays ( $dd)
  • $dd
AddDuration (line 293)

Add duration

void AddDuration ( $duration)
  • $duration
AddMonths (line 237)

Add some number of months to a date

void AddMonths ( $mo)
  • $mo
ApplyBySetPos (line 563)

Given set position descriptions like '1', '3', '11', '-3' or '-1' and a set, return the subset matching the list of set positions.

  • return: The subset which matches.
array &ApplyBySetPos (string $bysplist, string $set)
  • string $bysplist: The list of set positions.
  • string $set: The set of days that we will apply the positions to.
DateDifference (line 331)

Produce an iCalendar format DURATION for the difference between this an another iCalDate

  • return: The date difference, as an iCalendar duration format
string DateDifference (date $from)
  • date $from: The start of the period
DaysInMonth (line 188)

No of days in a month 1(Jan) - 12(Dec)

void DaysInMonth ([ $mo = false], [ $yy = false])
  • $mo
  • $yy
GetMonthByDay (line 414)

Applies any BYDAY to the month to return a set of days

  • return: An array of the day numbers for the month which meet the rule.
array GetMonthByDay (string $byday)
  • string $byday: The BYDAY rule
GetMonthByMonthDay (line 435)

Applies any BYMONTHDAY to the month to return a set of days

  • return: An array of the day numbers for the month which meet the rule.
array GetMonthByMonthDay (string $bymonthday)
  • string $bymonthday: The BYMONTHDAY rule
GetWeekByDay (line 455)

Applies any BYDAY to the week to return a set of days

  • return: An array of the day numbers for the week which meet the rule.
array GetWeekByDay (string $byday, [string $increasing = false])
  • string $byday: The BYDAY rule
  • string $increasing: When we are moving by months, we want any day of the week, but when by day we only want to increase. Default false.
GreaterThan (line 478)

Test if $this is greater than the date parameter

  • return: True if $this > $lesser
boolean GreaterThan (string $lesser)
  • string $lesser: The other date, as a local time string
LessThan (line 493)

Test if $this is less than the date parameter

  • return: True if $this < $greater
boolean LessThan (string $greater)
  • string $greater: The other date, as a local time string
MonthDays (line 512)

Given a MonthDays string like "1MO", "-2WE" return an integer day of the month.

  • return: An array of the day numbers for the month which meet the rule.
array &MonthDays (string $dow_first, string $days_in_month, string $dayspec)
  • string $dow_first: The day of week of the first of the month.
  • string $days_in_month: The number of days in the month.
  • string $dayspec: The specification for a month day (or days) which we parse.
Render (line 172)

Set the day of week used for calculation of week starts

void Render ([ $fmt = 'Y-m-d H:i:s'])
  • $fmt
RenderGMT (line 180)

Render the date as GMT

void RenderGMT ([ $fmt = 'Ymd\THis\Z'])
  • $fmt
SetEpochDate (line 104)

Set the date from an epoch

void SetEpochDate ( $input)
  • $input
SetGMTDate (line 84)

Set the date from a text string

void SetGMTDate ( $input)
  • $input
SetLocalDate (line 94)

Set the date from a text string

void SetLocalDate ( $input)
  • $input
SetMonthDay (line 225)

Set the day in the month to what we have been given

void SetMonthDay ( $dd)
  • $dd
SetWeekStart (line 163)

Set the day of week used for calculation of week starts

void SetWeekStart (string $weekstart)
  • string $weekstart: The day of the week which is the first business day.
TestByMonth (line 402)

Test to see if our _mo matches something in the list of months we have received.

  • return: Whether this date falls within one of those months.
boolean TestByMonth (string $monthlist)
  • string $monthlist: A comma-separated list of months.
_EpochFromParts (line 152)

Given a local text date, convert it to an epoch

void _EpochFromParts ()
_GMTEpochFromParts (line 143)

Given a GMT text date, convert it to an epoch

void _GMTEpochFromParts ()
_GMTTextFromEpoch (line 122)

Given a GMT epoch date, convert it to text

void _GMTTextFromEpoch ()
_PartsFromText (line 130)

Given a text date, convert it to parts

void _PartsFromText ()
_TextFromEpoch (line 114)

Given an epoch date, convert it to text

void _TextFromEpoch ()

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/RepeatRuleDateRange.html0000644000000000000000000002330311776301336020242 0ustar Docs For Class RepeatRuleDateRange

 Class RepeatRuleDateRange

Description

This class is used to hold a pair of dates defining a range. The range may be open-ended by including a null for one end or the other, or both.

Located in /inc/RRule-v2.php (line 522)


	
			
Variable Summary
 mixed $from
 mixed $until
Method Summary
 RepeatRuleDateRange __construct (RepeatRuleDateTime $date1, RepeatRuleDateTime $date2)
 boolean overlaps (RepeatRuleDateRange $other)
Variables
mixed $from (line 523)
  • access: public
mixed $until (line 524)
  • access: public
Methods
Constructor __construct (line 535)

Construct a new RepeatRuleDateRange which will be the range between $date1 and $date2. The earliest of the two dates will be used as the start of the period, the latest as the end. If one of the dates is null then the order of the parameters is significant, with the null treated as -infinity if it is first, or +infinity if it is second.

If both parameters are null then the range is from -infinity to +infinity.

RepeatRuleDateRange __construct (RepeatRuleDateTime $date1, RepeatRuleDateTime $date2)
getDuration (line 570)

Get an Rfc5545Duration from this date range. If the from date is null it will be null.

If the until date is null the duration will either be 1 day (if the from is a date) or 0 otherwise.

NULL|Rfc5545Duration getDuration ()
overlaps (line 551)

Assess whether this range overlaps the supplied range. null values are treated as infinity.

boolean overlaps (RepeatRuleDateRange $other)

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/CalDAVClient.html0000644000000000000000000014564111776301332016616 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs For Class CalDAVClient

 Class CalDAVClient

Description

A class for accessing DAViCal via CalDAV, as a client

Located in /inc/caldav-client.php (line 21)


	
			
Variable Summary
 string $base_url
 mixed $body
 mixed $calendar
 mixed $entry
 mixed $headers
 mixed $httpRequest
 mixed $pass
 mixed $port
 mixed $protocol
 mixed $server
 mixed $user
 string $user_agent
 mixed $xmlRequest
 mixed $xmlResponse
Method Summary
 CalDAVClient CalDAVClient (string $base_url, string $user, string $pass, [string $calendar = ''])
 array DoCalendarQuery (string $filter, [string $relative_url = ''], string $report_type)
 int DoDELETERequest (string $relative_url, [string $etag = null])
 void DoGETRequest (string $relative_url)
 array DoOptionsRequest ([string $relative_url = ""])
 string DoPUTRequest (string $relative_url, string $icalendar, [string $etag = null])
 string DoRequest ([string $relative_url = ""])
 array DoXMLRequest ( $request_method, string $xml, [string $relative_url = ''], string $method)
 string GetEntryByHref (string $href, [string $relative_url = ''])
 array GetEntryByUid (uid $uid, [string $relative_url = ''])
 array GetEvents ([timestamp $start = null], [timestamp $finish = null], [string $relative_url = ''])
 HTTP GetHttpRequest ()
 HTTP GetHttpResponse ()
 array GetTodos (timestamp $start, timestamp $finish, [boolean $completed = false], [boolean $cancelled = false], [string $relative_url = ""])
 raw GetXmlRequest ()
 void ParseResponse (string $response)
 void SetContentType (int $type)
 void SetDepth ([ $depth = '0'])
 void SetMatch (bool $match, [string $etag = '*'])
 void SetUserAgent ([ $user_agent = null], int $depth)
Variables
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
string $base_url (line 27)

Server, username, password, calendar

mixed $body = "" (line 37)
mixed $calendar (line 27)
mixed $entry (line 27)
mixed $headers = array() (line 36)
mixed $httpRequest = "" (line 39)
mixed $httpResponse = "" (line 41)
mixed $pass (line 27)
mixed $port (line 27)
mixed $protocol (line 27)
mixed $requestMethod = "GET" (line 38)
mixed $server (line 27)
mixed $user (line 27)
string $user_agent = 'DAViCalClient' (line 34)

The useragent which is send to the caldav server

mixed $xmlRequest = "" (line 40)
mixed $xmlResponse = "" (line 42)
Methods
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
Constructor CalDAVClient (line 52)

Constructor, initialises the class

CalDAVClient CalDAVClient (string $base_url, string $user, string $pass, [string $calendar = ''])
  • string $base_url: The URL for the calendar server
  • string $user: The name of the user logging in
  • string $pass: The password for that user
  • string $calendar: The name of the calendar (not currently used)
DoCalendarQuery (line 312)

Given XML for a calendar query, return an array of the events (/todos) in the response. Each event in the array will have a 'href', 'etag' and '$response_type' part, where the 'href' is relative to the calendar and the '$response_type' contains the definition of the calendar data in iCalendar format.

  • return: An array of the relative URLs, etags, and events from the server. Each element of the array will be an array with 'href', 'etag' and 'data' elements, corresponding to the URL, the server-supplied etag (which only varies when the data changes) and the calendar data in iCalendar format.
array DoCalendarQuery (string $filter, [string $relative_url = ''], string $report_type)
  • string $filter: XML fragment which is the <filter> element of a calendar-query
  • string $relative_url: The URL relative to the base_url specified when the calendar was opened. Default ''.
  • string $report_type: Used as a name for the array element containing the calendar data. @deprecated
DoDELETERequest (line 286)

DELETE a text/icalendar resource

  • return: The HTTP Result Code for the DELETE
int DoDELETERequest (string $relative_url, [string $etag = null])
  • string $relative_url: The URL to make the request to, relative to $base_url
  • string $etag: The etag of an existing resource to be deleted, or '*' for any resource at that URL.
DoGETRequest (line 243)

Get a single item from the server.

void DoGETRequest (string $relative_url)
  • string $relative_url: The part of the URL after the calendar
DoOptionsRequest (line 209)

Send an OPTIONS request to the server

  • return: The allowed options
array DoOptionsRequest ([string $relative_url = ""])
  • string $relative_url: The URL to make the request to, relative to $base_url
DoPUTRequest (line 259)

PUT a text/icalendar resource, returning the etag

  • return: The content of the response from the server
string DoPUTRequest (string $relative_url, string $icalendar, [string $etag = null])
  • string $relative_url: The URL to make the request to, relative to $base_url
  • string $icalendar: The iCalendar resource to send to the server
  • string $etag: The etag of an existing resource to be overwritten, or '*' for a new resource.
DoRequest (line 172)

Send a request to the server

  • return: The content of the response from the server
string DoRequest ([string $relative_url = ""])
  • string $relative_url: The URL to make the request to, relative to $base_url
DoXMLRequest (line 229)

Send an XML request to the server (e.g. PROPFIND, REPORT, MKCALENDAR)

  • return: An array of the allowed methods
array DoXMLRequest ( $request_method, string $xml, [string $relative_url = ''], string $method)
  • string $method: The method (PROPFIND, REPORT, etc) to use with the request
  • string $xml: The XML to send along with the request
  • string $relative_url: The URL to make the request to, relative to $base_url
  • $request_method
GetEntryByHref (line 473)

Get the calendar entry by HREF

  • return: The iCalendar of the calendar entry
string GetEntryByHref (string $href, [string $relative_url = ''])
  • string $href: The href from a call to GetEvents or GetTodos etc.
  • string $relative_url: The URL relative to the base_url specified when the calendar was opened. Default ''.
GetEntryByUid (line 445)

Get the calendar entry by UID

  • return: An array of the relative URL, etag, and calendar data returned from DoCalendarQuery() @see DoCalendarQuery()
array GetEntryByUid (uid $uid, [string $relative_url = ''])
  • string $relative_url: The URL relative to the base_url specified when the calendar was opened. Default ''.
  • uid $uid
GetEvents (line 370)

Get the events in a range from $start to $finish. The dates should be in the

format yyyymmddThhmmssZ and should be in GMT. The events are returned as an array of event arrays. Each event array will have a 'href', 'etag' and 'event' part, where the 'href' is relative to the calendar and the event contains the definition of the event in iCalendar format.

  • return: An array of the relative URLs, etags, and events, returned from DoCalendarQuery() @see DoCalendarQuery()
array GetEvents ([timestamp $start = null], [timestamp $finish = null], [string $relative_url = ''])
  • timestamp $start: The start time for the period
  • timestamp $finish: The finish time for the period
  • string $relative_url: The URL relative to the base_url specified when the calendar was opened. Default ''.
GetHttpRequest (line 137)

Output http request headers

  • return: headers
HTTP GetHttpRequest ()
GetHttpResponse (line 145)

Output http response headers

  • return: headers
HTTP GetHttpResponse ()
GetTodos (line 406)

Get the todo's in a range from $start to $finish. The dates should be in the

format yyyymmddThhmmssZ and should be in GMT. The events are returned as an array of event arrays. Each event array will have a 'href', 'etag' and 'event' part, where the 'href' is relative to the calendar and the event contains the definition of the event in iCalendar format.

  • return: An array of the relative URLs, etags, and events, returned from DoCalendarQuery() @see DoCalendarQuery()
array GetTodos (timestamp $start, timestamp $finish, [boolean $completed = false], [boolean $cancelled = false], [string $relative_url = ""])
  • timestamp $start: The start time for the period
  • timestamp $finish: The finish time for the period
  • boolean $completed: Whether to include completed tasks
  • boolean $cancelled: Whether to include cancelled tasks
  • string $relative_url: The URL relative to the base_url specified when the calendar was opened. Default ''.
GetXmlRequest (line 153)

Output xml request

  • return: xml
raw GetXmlRequest ()
GetXmlResponse (line 161)

Output xml response

  • return: xml
raw GetXmlResponse ()
ParseResponse (line 121)

Split response into httpResponse and xmlResponse

void ParseResponse (string $response)
  • string $response: Response from server
SetContentType (line 112)

Add a Content-type: header.

void SetContentType (int $type)
  • int $type: The content type
SetDepth (line 93)
void SetDepth ([ $depth = '0'])
  • $depth
SetMatch (line 84)

Adds an If-Match or If-None-Match header

void SetMatch (bool $match, [string $etag = '*'])
  • bool $match: to Match or Not to Match, that is the question!
  • string $etag: The etag to match / not match against.
SetUserAgent (line 102)

Add a Depth: header. Valid values are 1 or infinity

void SetUserAgent ([ $user_agent = null], int $depth)
  • int $depth: The depth, default to infinity
  • $user_agent
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/_inc---caldav-client.php.html0000644000000000000000000000562211776301332020753 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs for page caldav-client.php

File/inc/caldav-client.php

Description

A Class for connecting to a caldav server

Classes
Class Description
 class CalDAVClient A class for accessing DAViCal via CalDAV, as a client

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/RepeatRule.html0000644000000000000000000004204111776301336016467 0ustar Docs For Class RepeatRule

 Class RepeatRule

Description

This class is an implementation of RRULE parsing and expansion, as per RFC5545. It should be reasonably complete, except that it does not handle changing the WKST - there may be a few errors in unusual rules also, but all of the common cases should be handled correctly.

Located in /inc/RRule-v2.php (line 590)


	
			
Method Summary
 static void date_mask ( $date,  $y,  $mo,  $d,  $h,  $mi,  $s)
 static void rrule_day_number ( $day)
 RepeatRule __construct ( $basedate,  $rrule, [ $is_date = null], [ $return_floating_times = false])
 void current ([ $return_floating_times = false])
 void key ([ $return_floating_times = false])
 vComponent next ([boolean $return_floating_times = false])
 void rewind ()
 void set_timezone ( $tzstring)
 void Start ([ $return_floating_times = false])
 void valid ()
Methods
static date_mask (line 827)
  • access: public
void date_mask ( $date,  $y,  $mo,  $d,  $h,  $mi,  $s)
  • $date
  • $y
  • $mo
  • $d
  • $h
  • $mi
  • $s
static rrule_day_number (line 813)
  • access: public
void rrule_day_number ( $day)
  • $day
Constructor __construct (line 615)
  • access: public
RepeatRule __construct ( $basedate,  $rrule, [ $is_date = null], [ $return_floating_times = false])
  • $basedate
  • $rrule
  • $is_date
  • $return_floating_times
current (line 702)
  • access: public
void current ([ $return_floating_times = false])
  • $return_floating_times
hasLimitedOccurrences (line 668)

If this repeat rule has an UNTIL= or COUNT= then we can know it will end. Eventually.

  • return: Whether or not one of these properties is present.
  • access: public
boolean hasLimitedOccurrences ()
key (line 712)
  • access: public
void key ([ $return_floating_times = false])
  • $return_floating_times
next (line 696)

Return the next date in the repeating series.

  • return: The next instance.
  • access: public
vComponent next ([boolean $return_floating_times = false])
  • boolean $return_floating_times: Whether to return dates as floating times.
rewind (line 686)
  • access: public
void rewind ()
set_timezone (line 673)
  • access: public
void set_timezone ( $tzstring)
  • $tzstring
Start (line 678)
  • access: public
void Start ([ $return_floating_times = false])
  • $return_floating_times
valid (line 722)
  • access: public
void valid ()

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/CalendarInfo.html0000644000000000000000000002334011776301332016741 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Docs For Class CalendarInfo

 Class CalendarInfo

Description

A class for holding basic calendar information

Located in /inc/caldav-client-v2.php (line 19)


	
			
Variable Summary
 mixed $displayname
 mixed $getctag
 mixed $url
Method Summary
 CalendarInfo __construct ( $url, [ $displayname = null], [ $getctag = null])
 void __toString ()
Variables
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
mixed $displayname (line 21)
  • access: public
mixed $getctag (line 22)
  • access: public
mixed $url (line 20)
  • access: public
Methods
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
Constructor __construct (line 24)
CalendarInfo __construct ( $url, [ $displayname = null], [ $getctag = null])
  • $url
  • $displayname
  • $getctag
__toString (line 30)
void __toString ()

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/RepeatRuleDateTime.html0000644000000000000000000011007211776301337020105 0ustar Docs For Class RepeatRuleDateTime

 Class RepeatRuleDateTime

Description

Wrap the DateTime class to make it friendlier to passing in random strings from iCalendar objects, and especially the random stuff used to identify timezones. We also add some utility methods and stuff too, in order to simplify some of the operations we need to do with dates.

Located in /inc/RRule-v2.php (line 204)

DateTime
   |
   --RepeatRuleDateTime
Variable Summary
 static mixed $Format
Method Summary
 static int daysInMonth (int $year, int $month)
 static 1 hasLeapDay (int $year)
 RepeatRuleDateTime __construct ([ $date = null], [ $dtz = null], [ $is_date = null])
 void AsDate ()
 void day ()
 void epoch ()
 void FloatOrUTC ([ $return_floating_times = false])
 void getTimeZone ()
 void hour ()
 void isDate ()
 void isFloating ()
 void minute ()
 void modify ( $interval)
 void month ()
 void RFC5545 ([ $return_floating_times = false])
 void second ()
 void setAsDate ()
 void setAsFloat ()
 void setDate ([ $year = null], [ $month = null], [ $day = null])
 void setTimeZone ( $tz)
 void setYearDay ( $yearday)
 void UTC ([ $fmt = 'Ymd\THis\Z'])
 void year ()
 void __toString ()
Variables
static mixed $Format = 'c' (line 206)
  • access: public
Methods
static daysInMonth (line 453)

Returns the number of days in a year/month pair

  • return: the number of days in the month
  • access: public
int daysInMonth (int $year, int $month)
  • int $year
  • int $month
static hasLeapDay (line 442)

Returns a 1 if this year is a leap year, otherwise a 0

  • return: if this is a leap year, 0 otherwise
  • access: public
1 hasLeapDay (int $year)
  • int $year: The year we are quizzical about.
Constructor __construct (line 211)
  • access: public
RepeatRuleDateTime __construct ([ $date = null], [ $dtz = null], [ $is_date = null])
  • $date
  • $dtz
  • $is_date

Redefinition of:
DateTime::constructor __construct ( [$time = ], [$object = ] )
AsDate (line 308)
  • access: public
void AsDate ()
day (line 494)
void day ()
epoch (line 510)
void epoch ()
FloatOrUTC (line 388)

If this is a localised time then this will return the UTC equivalent. If it is a floating time, then you will just get the floating time. If it is a date then it will be returned as a date. Note that if it is a *localised* date then the answer will still be the UTC equivalent but only the date itself will be returned.

If return_floating_times is true then all dates will be returned as floating times and UTC will not be returned.

void FloatOrUTC ([ $return_floating_times = false])
  • $return_floating_times
getTimeZone (line 432)
  • access: public
void getTimeZone ()

Redefinition of:
DateTime::getTimezone ( )
hour (line 498)
void hour ()
isDate (line 322)
  • access: public
void isDate ()
isFloating (line 318)
  • access: public
void isFloating ()
minute (line 502)
void minute ()
modify (line 332)
  • access: public
void modify ( $interval)
  • $interval

Redefinition of:
DateTime::modify ( $modify )
month (line 490)
void month ()
RFC5545 (line 404)

Returns the string following a property name for an RFC5545 DATE-TIME value.

  • access: public
void RFC5545 ([ $return_floating_times = false])
  • $return_floating_times
second (line 506)
void second ()
setAsDate (line 327)
  • access: public
void setAsDate ()
setAsFloat (line 313)
  • access: public
void setAsFloat ()
setDate (line 460)
void setDate ([ $year = null], [ $month = null], [ $day = null])
  • $year
  • $month
  • $day

Redefinition of:
DateTime::setDate ( $year, $month, $day )
setTimeZone (line 422)
  • access: public
void setTimeZone ( $tz)
  • $tz

Redefinition of:
DateTime::setTimezone ( $timezone )
setYearDay (line 471)
void setYearDay ( $yearday)
  • $yearday
UTC (line 361)

Always returns a time localised to UTC. Even floating times are converted to UTC using the server's currently configured PHP timezone. Even dates will include a time, which will be non-zero if they were localised dates.

void UTC ([ $fmt = 'Ymd\THis\Z'])
  • $fmt
year (line 486)
void year ()
__toString (line 303)
  • access: public
void __toString ()

Inherited Methods

Inherited From DateTime (Internal Class)

 constructor __construct ( [$time = ], [$object = ] )
 add ( $interval )
 createFromFormat ( $format, $time, [$object = ] )
 diff ( $object, [$absolute = ] )
 format ( $format )
 getLastErrors ( )
 getOffset ( )
 getTimestamp ( )
 getTimezone ( )
 modify ( $modify )
 setDate ( $year, $month, $day )
 setISODate ( $year, $week, [$day = ] )
 setTime ( $hour, $minute, [$second = ] )
 setTimestamp ( $unixtimestamp )
 setTimezone ( $timezone )
 sub ( $interval )
 __set_state ( )
 __wakeup ( )
Class Constants
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

Inherited Constants

Inherited from DateTime (Internal Class)

ATOM = 'Y-m-d\\TH:i:sP'
COOKIE = 'l, d-M-y H:i:s T'
ISO8601 = 'Y-m-d\\TH:i:sO'
RFC822 = 'D, d M y H:i:s O'
RFC850 = 'l, d-M-y H:i:s T'
RFC1036 = 'D, d M y H:i:s O'
RFC1123 = 'D, d M Y H:i:s O'
RFC2822 = 'D, d M Y H:i:s O'
RFC3339 = 'Y-m-d\\TH:i:sP'
RSS = 'D, d M Y H:i:s O'
W3C = 'Y-m-d\\TH:i:sP'

Documentation generated on Sun, 08 Jul 2012 12:53:50 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/_inc---caldav-client-v2.php.html0000644000000000000000000001273011776301332021276 0ustar Docs for page caldav-client-v2.php

File/inc/caldav-client-v2.php

Description

A Class for connecting to a caldav server

Classes
Class Description
 class CalendarInfo A class for holding basic calendar information
 class A class for accessing DAViCal via CalDAV, as a client
Includes
 require_once ('XMLDocument.php') (line 13)

A Class for connecting to a caldav server

Constants
Strict Standards: Only variables should be passed by reference in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 712 Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
_FSOCK_TIMEOUT = 10 (line 36)

Documentation generated on Sun, 08 Jul 2012 12:53:46 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/RRule.html0000644000000000000000000001470611776301337015460 0ustar Docs For Class RRule

 Class RRule

Description

A Class for handling Events on a calendar which repeat

Here's the spec, from RFC2445:

At this point we are going to restrict ourselves to parts of the RRULE specification seen in the wild. And by "in the wild" I don't include within people's timezone definitions. We always convert time zones to canonical names and assume the lower level libraries can do a better job with them than we can.

We will concentrate on: FREQ=(YEARLY|MONTHLY|WEEKLY|DAILY) UNTIL= COUNT= INTERVAL= BYDAY= BYMONTHDAY= BYSETPOS= WKST= BYYEARDAY= BYWEEKNO= BYMONTH=

Located in /inc/RRule.php (line 691)


	
			
Method Summary
 RRule RRule ( $start,  $rrule)
 void &GetNext ()
 void WithinScope ( $base,  $relative_days)
Methods
Constructor RRule (line 723)

The constructor takes a start date and an RRULE definition. Both of these follow the iCalendar standard.

RRule RRule ( $start,  $rrule)
  • $start
  • $rrule
GetNext (line 829)

This is most of the meat of the RRULE processing, where we find the next date.

We maintain an

void &GetNext ()
WithinScope (line 769)

Processes the array of $relative_days to $base and removes any which are not within the scope of our rule.

void WithinScope ( $base,  $relative_days)
  • $base
  • $relative_days

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/awl/caldav/Rfc5545Duration.html0000644000000000000000000002222611776301337017166 0ustar Docs For Class Rfc5545Duration

 Class Rfc5545Duration

Description

Provide a useful way of dealing with RFC5545 duration strings of the form

^-?P(\dW)|((\dD)?(T(\dH)?(\dM)?(\dS)?)?)$

Located in /inc/RRule-v2.php (line 77)


	
			
Method Summary
 Rfc5545Duration __construct (mixed $in_duration)
 void asSeconds ()
 boolean equals (Rfc5545Duration $other)
 string __toString ()
Methods
static fromTwoDates (line 192)

Factory method to return an Rfc5545Duration object from the difference between two dates.

This is flawed, at present: we should really localise both dates and work out the difference in days, then localise the times and work out the difference between the clock times. On the other hand we're replacing a quick and dirty hack that did it exactly the same way in the past, so we're not making things any *worse* and at least we're making it clear that it could be improved...

The problem strikes (as they all do) across DST boundaries.

  • todo: Improve this to calculate the days difference and then the clock time diff and work from there.
Constructor __construct (line 87)

Construct a new Rfc5545Duration either from incoming seconds or a text string.

Rfc5545Duration __construct (mixed $in_duration)
  • mixed $in_duration
asSeconds (line 116)

Returns the duration as epoch seconds.

void asSeconds ()
equals (line 107)

Return true if $this and $other are equal, false otherwise.

boolean equals (Rfc5545Duration $other)
__toString (line 145)

Returns the duration as a text string of the form ^(-?)P(\d+W)|((\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?)$

  • return: The stringified stuff.
string __toString ()

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/blank.html0000644000000000000000000000156711776301331013474 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 DAViCal

DAViCal

Welcome to davical!

This documentation was generated by phpDocumentor v1.4.3
davical-1.1.1/docs/api/todolist.html0000644000000000000000000000446311776301337014252 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 Todo List

Todo List

davical

CalDAVRequest::IsLocked()

  • This logic does not catch all locking scenarios. For example an infinite depth request should check the permissions for all collections and resources within that. At present we only maintain permissions on a per-collection basis though.

DAVResource::IsLocked()

  • This logic does not catch all locking scenarios. For example an infinite depth request should check the permissions for all collections and resources within that. At present we only maintain permissions on a per-collection basis though.

local_session_sql()

  • Make this a defined constant

awl

Rfc5545Duration::fromTwoDates()

  • Improve this to calculate the days difference and then the clock time diff and work from there.

Documentation generated on Sun, 08 Jul 2012 12:53:51 +0000 by phpDocumentor 1.4.3

davical-1.1.1/docs/api/elementindex_davical.html0000644000000000000000000073771511776301331016564 0ustar Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370

[davical] element index

Package indexes

All elements
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370
a b c d e f g h i k l m n o p q r s t u v w x _
_
Method __construct
FakeSession::__construct() in FakeSession.php
Method __construct
Method __construct
SqlToArray::__construct() in SqlToArray.php
Method __construct
CalDAVSyncState::__construct() in CalDAVSyncState.php
Method __construct
CalDAVSyncCache::__construct() in CalDAVSyncCache.php
Method __construct
AtomFeed::__construct() in AtomFeed.php
Method __construct
Method __construct
AtomEntry::__construct() in AtomFeed.php
Method __construct
DAViCalSession::__construct() in DAViCalSession.php
Create a new DAViCalSession object.
Method __construct
DAVTicket::__construct() in DAVTicket.php
Constructor
Method __construct
iSchedule::__construct() in iSchedule.php
Method __construct
squidPamDrivers::__construct() in drivers_squid_pam.php
The constructor
Method __construct
imapPamDrivers::__construct() in drivers_rimap.php
The constructor
Method __construct
ldapDrivers::__construct() in drivers_ldap.php
Initializes the LDAP connection
Variable $_is_group
DAVPrincipal::$_is_group in DAVPrincipal.php
Method __construct
Principal::__construct() in Principal.php
Construct a new Principal object. The principal record will be retrieved from the database, or (if not found) initialised to a new record. You can test for whether the Principal exists by calling the Exists() method on the returned object.
Method __construct
DAVPrincipal::__construct() in DAVPrincipal.php
Constructor
Method __get
Principal::__get() in Principal.php
This will allow protected properties to be referenced for retrieval, but not referenced for update.
Method __isset
Principal::__isset() in Principal.php
This will allow protected properties to be examined for whether they are set without making them writable. PHP 5.1 or later only.
Method __construct
pwauthPamDrivers::__construct() in drivers_pwauth_pam.php
The constructor
Method __construct
CalDAVRequest::__construct() in CalDAVRequest.php
Create a new CalDAVRequest object.
Method __construct
DAVResource::__construct() in DAVResource.php
Constructor
a
Function access_ticket_browser
access_ticket_browser() in principal-edit.php
Method addAuthor
AtomEntry::addAuthor() in AtomFeed.php
Method addAuthor
AtomFeed::addAuthor() in AtomFeed.php
Method addCategory
AtomEntry::addCategory() in AtomFeed.php
Method addEntry
AtomFeed::addEntry() in AtomFeed.php
Method addNode
AtomEntry::addNode() in AtomFeed.php
Method addNode
AtomFeed::addNode() in AtomFeed.php
Method AllowedTo
FakeSession::AllowedTo() in FakeSession.php
Method applyLocalChangesToRemote
Put/Delete to the remote server as appropriate
Method applyRemoteChangesToLocal
Apply remote changes to local database
Function apply_filter
apply_filter() in caldav-REPORT-calquery.php
While we can construct our SQL to apply some filters in the query, other filters need to be checked against the retrieved record. This is for handling those ones.
Class AtomEntry
AtomEntry in AtomFeed.php
Class AtomFeed
AtomFeed in AtomFeed.php
Class AtomXHTMLContent
AtomXHTMLContent in AtomFeed.php
These two classes here sort of emulate the interface from the Zend Framework API with regard to ZendFeedWriteFeed for constructing an Atom feed. Except we do it in a DAViCal way, and we have some huge limitations:
  • We *only* support Atom feeds.
Constant ATOM_XMLNS
ATOM_XMLNS in AtomFeed.php
Page admin.php
admin.php in admin.php
Page always.php
always.php in always.php
Page AtomFeed.php
AtomFeed.php in AtomFeed.php
Page autodiscover-handler.php
autodiscover-handler.php in autodiscover-handler.php
Function AuthExternalAWL
AuthExternalAWL() in auth-functions.php
Authenticate against a different PostgreSQL database which contains a usr table in the AWL format.
Function auth_functions_deprecated
auth_functions_deprecated() in auth-functions.php
Page auth-functions.php
auth-functions.php in auth-functions.php
Function add_failure
add_failure() in caldav-PROPPATCH.php
Small utility function to add propstat for one failure
Method AssignSessionDetails
Internal function used to assign the session details to a user's new session.
Method AllowedTo
HTTPAuthSession::AllowedTo() in HTTPAuthSession.php
Checks whether a user is allowed to do something.
Method AssignSessionDetails
Internal function used to assign the session details to a user's new session.
Method AuthFailedResponse
Authorisation failed, so we send some headers to say so.
Function array_values_mapping
array_values_mapping() in drivers_ldap.php
Method addressbook_home_set
Get the addressbook_home_set, as lazily as possible
Method AsCollection
DAVPrincipal::AsCollection() in DAVPrincipal.php
Returns a representation of the principal as a collection
Function add_proxy_response
add_proxy_response() in caldav-PROPFIND.php
Add the calendar-proxy-read/write pseudocollections
Method AllowedTo
PublicSession::AllowedTo() in PublicSession.php
Checks whether a user is allowed to do something.
Method AllowedTo
CalDAVRequest::AllowedTo() in CalDAVRequest.php
Are we allowed to do the requested activity
Method actualDeleteCalendarMember
Writes the data to a member in the collection and returns the segment_name of the resource in our internal namespace.
b
Function bindings_to_other_browser
bindings_to_other_browser() in principal-edit.php
Function bindings_to_us_browser
bindings_to_us_browser() in principal-edit.php
Function bits_to_privilege
bits_to_privilege() in always.php
Given a bit mask of the privileges, will return an array of the text values of privileges.
Function BuildSqlFilter
BuildSqlFilter() in caldav-REPORT-calquery.php
Build an SQL 'WHERE' clause which implements (parts of) the filter. The elements of the filter which are implemented in the SQL will be removed.
Function build_dependencies_table
Function build_privileges_html
build_privileges_html() in principal-edit.php
Function build_site_statistics
Method BasicAuthSession
Handle Basic HTTP Authentication (not secure unless https)
Variable $by_email
Principal::$by_email in Principal.php
Whether this was retrieved using an e-mail address
Method byEmail
Principal::byEmail() in Principal.php
Method BuildSupportedPrivileges
Returns the array of supported privileges converted into XMLElements
Variable $bound_from
DAVResource::$bound_from in DAVResource.php
Method bound_from
DAVResource::bound_from() in DAVResource.php
Returns the dav_name of the resource we are bound to, within our internal namespace
Method BuildACE
DAVResource::BuildACE() in DAVResource.php
BuildACE - construct an XMLElement subtree for a DAV::ace
Method BuildDeadPropertyXML
Method BuildPrivileges
Returns the array of privilege names converted into XMLElements
Method BuildSupportedMethods
Returns the array of supported methods converted into XMLElements
Method BuildSupportedReports
Returns the array of supported reports converted into XMLElements
Method BuildTicketinfo
Returns the array of tickets converted into XMLElements
c
Class CalDAVSyncCache
CalDAVSyncCache in CalDAVSyncCache.php
Our SyncCache holds
Class CalDAVSyncState
CalDAVSyncState in CalDAVSyncState.php
The CalDAVSyncState is a very lightweight object holding the data from the last sync process.
Function caldav_get_feed
caldav_get_feed() in feed.php
Function catch_setup_errors
Function checkiSchedule
checkiSchedule() in iSchedule.php
Class CheckResult
CheckResult in setup.php
Function check_awl_version
check_awl_version() in setup.php
Function check_calendar
check_calendar() in setup.php
Function check_curl
check_curl() in setup.php
Function check_database_connection
Function check_datetime
check_datetime() in setup.php
Function check_davical_version
Function check_for_expansion
check_for_expansion() in caldav-REPORT-calquery.php
Function check_gettext
check_gettext() in setup.php
Function check_iconv
check_iconv() in setup.php
Function check_ldap
check_ldap() in setup.php
Function check_magic_quotes_gpc
Function check_magic_quotes_runtime
Function check_pdo
check_pdo() in setup.php
Function check_pdo_pgsql
check_pdo_pgsql() in setup.php
Function check_pgsql
check_pgsql() in setup.php
We put many of these checks before we even try to load always.php so that we can try and do some diagnostic work to ensure it will load OK.
Function check_real_php
check_real_php() in setup.php
Function check_schema_version
Function check_string
check_string() in check_UTF8.php
Function check_suhosin_server_strip
Function confirm_delete_binding
confirm_delete_binding() in principal-edit.php
Function confirm_delete_bind_in
confirm_delete_bind_in() in principal-edit.php
Function confirm_delete_collection
confirm_delete_collection() in principal-edit.php
Function confirm_delete_principal
confirm_delete_principal() in principal-edit.php
Function confirm_delete_ticket
confirm_delete_ticket() in principal-edit.php
Function ConstructURL
ConstructURL() in always.php
Construct a URL from the supplied dav_name. The URL will be urlencoded, except for any '/' characters in it.
Method createEntry
AtomFeed::createEntry() in AtomFeed.php
Page createdb.php
createdb.php in createdb.php
Page caldav-LOCK.php
caldav-LOCK.php in caldav-LOCK.php
Page caldav-REPORT-calquery.php
caldav-REPORT-calquery.php in caldav-REPORT-calquery.php
Page caldav-REPORT-cardquery.php
caldav-REPORT-cardquery.php in caldav-REPORT-cardquery.php
Page caldav-REPORT-expand-property.php
caldav-REPORT-expand-property.php in caldav-REPORT-expand-property.php
Page caldav-REPORT-freebusy.php
caldav-REPORT-freebusy.php in caldav-REPORT-freebusy.php
Page caldav-REPORT-multiget.php
caldav-REPORT-multiget.php in caldav-REPORT-multiget.php
Page caldav-REPORT-principal-match.php
caldav-REPORT-principal-match.php in caldav-REPORT-principal-match.php
Page caldav-REPORT-principal.php
caldav-REPORT-principal.php in caldav-REPORT-principal.php
Page CalDAVSyncCache.php
CalDAVSyncCache.php in CalDAVSyncCache.php
Page CalDAVSyncState.php
CalDAVSyncState.php in CalDAVSyncState.php
Page check_UTF8.php
check_UTF8.php in check_UTF8.php
Page collection-edit.php
collection-edit.php in collection-edit.php
Function CreateDefaultRelationships
CreateDefaultRelationships() in auth-functions.php
Defunct function for creating default relationships.
Function CreateHomeCalendar
CreateHomeCalendar() in auth-functions.php
Backward compatibility
Function CreateHomeCollections
CreateHomeCollections() in auth-functions.php
Creates some default home collections for the user.
Function component_to_xml
component_to_xml() in caldav-REPORT.php
Return XML for a single component from the DB
Function controlRequestContainer
controlRequestContainer() in caldav-PUT-functions.php
Work out the location we are doing the PUT to, and check that we have the rights to do the needful.
Page caldav.php
caldav.php in caldav.php
Page caldav-ACL.php
caldav-ACL.php in caldav-ACL.php
Page caldav-BIND.php
caldav-BIND.php in caldav-BIND.php
Page caldav-DELETE.php
caldav-DELETE.php in caldav-DELETE.php
Page caldav-DELTICKET.php
caldav-DELTICKET.php in caldav-DELTICKET.php
Page caldav-GET-functions.php
caldav-GET-functions.php in caldav-GET-functions.php
Page caldav-GET.php
caldav-GET.php in caldav-GET.php
Page caldav-MKCOL.php
caldav-MKCOL.php in caldav-MKCOL.php
Page caldav-MKTICKET.php
caldav-MKTICKET.php in caldav-MKTICKET.php
Page caldav-MOVE.php
caldav-MOVE.php in caldav-MOVE.php
Page caldav-OPTIONS.php
caldav-OPTIONS.php in caldav-OPTIONS.php
Page caldav-POST.php
caldav-POST.php in caldav-POST.php
Page caldav-PROPPATCH.php
caldav-PROPPATCH.php in caldav-PROPPATCH.php
Page caldav-PUT-default.php
caldav-PUT-default.php in caldav-PUT-default.php
Page caldav-PUT-functions.php
caldav-PUT-functions.php in caldav-PUT-functions.php
Page caldav-PUT-vcalendar.php
caldav-PUT-vcalendar.php in caldav-PUT-vcalendar.php
Page caldav-PUT-vcard.php
caldav-PUT-vcard.php in caldav-PUT-vcard.php
Page caldav-REPORT-pps-set.php
caldav-REPORT-pps-set.php in caldav-REPORT-pps-set.php
Page caldav-REPORT-sync-collection.php
caldav-REPORT-sync-collection.php in caldav-REPORT-sync-collection.php
Page caldav-REPORT.php
caldav-REPORT.php in caldav-REPORT.php
Function create_external
create_external() in external-fetch.php
Functions for managing external BIND resources
Method CheckPassword
HTTPAuthSession::CheckPassword() in HTTPAuthSession.php
CheckPassword does all of the password checking and returns a user record object, or false if it all ends in tears.
Variable $collections
Principal::$collections in Principal.php
Variable $collection_id
Principal::$collection_id in Principal.php
Variable $created
Principal::$created in Principal.php
Method cacheDelete
Principal::cacheDelete() in Principal.php
Method cacheFlush
Principal::cacheFlush() in Principal.php
Method calendar_free_busy_set
Get the calendar_free_busy_set, as lazily as possible
Method calendar_home_set
Get the calendar_home_set, as lazily as possible
Method Create
Principal::Create() in Principal.php
Page caldav-PROPFIND.php
caldav-PROPFIND.php in caldav-PROPFIND.php
Variable $collection_id
CalDAVRequest::$collection_id in CalDAVRequest.php
The ID of the collection containing this path, or of this path if it is a collection
Variable $collection_path
CalDAVRequest::$collection_path in CalDAVRequest.php
The path corresponding to the collection_id
Variable $collection_type
CalDAVRequest::$collection_type in CalDAVRequest.php
The type of collection being requested:
Variable $current_user_principal_xml
The 'current_user_principal_xml' the DAV:current-user-principal answer. An XMLElement object with an <href> or <unauthenticated> fragment.
Class CalDAVRequest
CalDAVRequest in CalDAVRequest.php
A class for collecting things to do with this request.
Method CheckEtagMatch
CalDAVRequest::CheckEtagMatch() in CalDAVRequest.php
Check that the incoming Etag matches the one for the existing (or non-existing) resource.
Method CoerceContentType
Coerces the Content-type of the request into something valid/appropriate
Method CollectionId
CalDAVRequest::CollectionId() in CalDAVRequest.php
Returns the ID of the collection of, or containing this request
Page CalDAVRequest.php
CalDAVRequest.php in CalDAVRequest.php
Variable $contenttype
DAVResource::$contenttype in DAVResource.php
Method collection_id
DAVResource::collection_id() in DAVResource.php
Returns the internal collection_id for this collection, or the collection containing this resource
Method ContainerExists
Checks whether the container for this resource actually exists, in the virtual sense, within the hierarchy
Method ContainerType
DAVResource::ContainerType() in DAVResource.php
Return the type of whatever contains this resource, or would if it existed.
Page capabilities.php
capabilities.php in capabilities.php
d
Variable $description
RRuleTest::$description in test-RRULE.php
Variable $dtstart
RRuleTest::$dtstart in test-RRULE.php
Function DateToISODate
DateToISODate() in always.php
Convert a date into ISO format into the sparkly new ISO format.
Constant DAVICAL_ADDRESSBOOK_MAXPRIV
Constant DAVICAL_MAXPRIV
DAVICAL_MAXPRIV in always.php
Given a privilege string, or an array of privilege strings, return a bit mask of the privileges.
Function DeconstructURL
DeconstructURL() in always.php
Deconstruct a dav_name from the supplied URL. The dav_name will be urldecoded.
Method deleteRemote
CalDAVSyncCache::deleteRemote() in CalDAVSyncCache.php
Delete this from the remote server
Method doNormalLine
SqlToArray::doNormalLine() in SqlToArray.php
Add this line onto the current statement, detecting the end of the statement.
Function do_error
do_error() in setup.php
Page dbexec.php
dbexec.php in dbexec.php
Page davical_configuration_missing.php
davical_configuration_missing.php in davical_configuration_missing.php
Function delete_collection
delete_collection() in caldav-DELETE.php
Function deliverItipCancel
deliverItipCancel() in schedule-functions.php
Delivers the iTIP CANCEL message to an ATTENDEE's Scheduling Inbox Collection.
Function display_status
display_status() in caldav-REPORT-sync-collection.php
Build the array of properties to include in the report output
Function doItipAttendeeReply
doItipAttendeeReply() in schedule-functions.php
Do the scheduling adjustments for a REPLY when an ATTENDEE updates their status.
Function doItipOrganizerCancel
doItipOrganizerCancel() in schedule-functions.php
Handles sending the iTIP CANCEL messages to each ATTENDEE by the ORGANIZER.
Function do_scheduling_for_delete
do_scheduling_for_delete() in schedule-functions.php
Entry point for scheduling on DELETE, for which there are thee outcomes:
  • We don't do scheduling (disabled, no organizer, ...)
  • We are an ATTENDEE declining the meeting.
Function do_scheduling_reply
do_scheduling_reply() in caldav-PUT-functions.php
Do the scheduling adjustments for a REPLY when an ATTENDEE updates their status.
Function do_scheduling_requests
do_scheduling_requests() in caldav-PUT-functions.php
Create/Update the scheduling requests for this resource. This includes updating the scheduled user's default calendar.
Class DAViCalSession
DAViCalSession in DAViCalSession.php
A class for creating and holding session information.
Page DAViCalSession.php
DAViCalSession.php in DAViCalSession.php
Class DAVTicket
DAVTicket in DAVTicket.php
A class for things to do with a DAV Ticket
Method dav_name
DAVTicket::dav_name() in DAVTicket.php
Page DAVTicket.php
DAVTicket.php in DAVTicket.php
Method DigestAuthSession
Handle Digest HTTP Authentication (no passwords were harmed in this transaction!)
Variable $domain
iSchedule::$domain in iSchedule.php
Page drivers_imap_pam.php
drivers_imap_pam.php in drivers_imap_pam.php
Page drivers_ldap.php
drivers_ldap.php in drivers_ldap.php
Page drivers_rimap.php
drivers_rimap.php in drivers_rimap.php
Page drivers_squid_pam.php
drivers_squid_pam.php in drivers_squid_pam.php
Variable $date_format_type
Variable $dav_name
Principal::$dav_name in Principal.php
Variable $dead_properties
Variable $default_calendar
Variable $default_privileges
Variable $displayname
Principal::$displayname in Principal.php
Class DAVPrincipal
DAVPrincipal in DAVPrincipal.php
A class for things to do with a DAV Principal
Method dav_name
Principal::dav_name() in Principal.php
Return the partial path representing this principal
Method default_calendar
Return the default calendar for this principal
Page DAVPrincipal.php
DAVPrincipal.php in DAVPrincipal.php
Page drivers_pwauth_pam.php
drivers_pwauth_pam.php in drivers_pwauth_pam.php
Variable $depth
CalDAVRequest::$depth in CalDAVRequest.php
The depth parameter from the request headers, coerced into a valid integer: 0, 1 or DEPTH_INFINITY which is defined above. The default is set per various RFCs.
Variable $destination
CalDAVRequest::$destination in CalDAVRequest.php
The value of any 'Destionation:' header, if present.
Method dav_name
CalDAVRequest::dav_name() in CalDAVRequest.php
Returns the dav_name of the resource in our internal namespace
Method DepthRegexTail
CalDAVRequest::DepthRegexTail() in CalDAVRequest.php
Returns the tail of a Regex appropriate for this Depth, when appended to
Constant DEPTH_INFINITY
DEPTH_INFINITY in CalDAVRequest.php
Method DoResponse
CalDAVRequest::DoResponse() in CalDAVRequest.php
Utility function we call when we have a simple status-based response to return to the client. Possibly
Variable $dav_name
DAVResource::$dav_name in DAVResource.php
Class DAVResource
DAVResource in DAVResource.php
A class for things to do with a DAV Resource
Method DAV_AllProperties
Return an array which is an expansion of the DAV::allprop
Method dav_name
DAVResource::dav_name() in DAVResource.php
Returns the dav_name of the resource in our internal namespace
Page DAVResource.php
DAVResource.php in DAVResource.php
Constant DEBUG_EXPAND
DEBUG_EXPAND in expand.php
e
Function early_exception_handler
Function edit_grant_row
edit_grant_row() in collection-edit.php
Function edit_group_row
edit_group_row() in principal-edit.php
Function edit_ticket_row
edit_ticket_row() in principal-edit.php
Function errorResponse
errorResponse() in autodiscover-handler.php
Function expand_properties
expand_properties() in caldav-REPORT-expand-property.php
Expand the properties, recursing only once
Method export
AtomFeed::export() in AtomFeed.php
Page external-browse.php
external-browse.php in external-browse.php
Function export_iCalendar
export_iCalendar() in caldav-GET-functions.php
Page external-fetch.php
external-fetch.php in external-fetch.php
Variable $email
HTTPAuthSession::$email in HTTPAuthSession.php
User e-mail
Variable $email
Principal::$email in Principal.php
Variable $email_ok
Principal::$email_ok in Principal.php
Variable $exists
Principal::$exists in Principal.php
Whether this Principal actually exists in the database yet.
Method email
Principal::email() in Principal.php
Return the email
Method Exists
Principal::Exists() in Principal.php
Variable $exists
CalDAVRequest::$exists in CalDAVRequest.php
The type of collection being requested:
Variable $exists
DAVResource::$exists in DAVResource.php
Method Exists
DAVResource::Exists() in DAVResource.php
Checks whether this resource actually exists, in the virtual sense, within the hierarchy
Function expand_timezone_onsets
Expand the instances for a STANDARD or DAYLIGHT component of a VTIMEZONE
Page expand.php
expand.php in expand.php
f
Class FakeSession
FakeSession in FakeSession.php
Sometimes we need a fake session when we are using the DAViCal libraries from a script POV.
Method finish
CalDAVSyncCache::finish() in CalDAVSyncCache.php
Page feed.php
feed.php in feed.php
Page freebusy.php
freebusy.php in freebusy.php
Page FakeSession.php
FakeSession.php in FakeSession.php
Page freebusy-functions.php
freebusy-functions.php in freebusy-functions.php
Function fetch_external
fetch_external() in external-fetch.php
Variable $fullname
HTTPAuthSession::$fullname in HTTPAuthSession.php
User full name
Variable $fullname
Principal::$fullname in Principal.php
Method FetchCollections
Fetch the list of collections for this principal
Method FetchDeadProperties
Ensure the principal's dead properties are loaded
Method FetchProxyGroups
Split this out so we do it as infrequently as possible, given the cost.
Method FailIfLocked
CalDAVRequest::FailIfLocked() in CalDAVRequest.php
This will either (a) return false if no locks apply, or (b) return the lock_token which the request successfully included to open the lock, or: (c) respond directly to the client with the failure.
Method FetchCollection
Find the collection associated with this resource.
Method FetchDeadProperties
Fetch any dead properties for this URL
Method FetchParentContainer
Fetch the parent to this resource. This is deprecated - use GetParentContainer() instead.
Method FetchPrincipal
Find the principal associated with this resource.
Method FetchPrivileges
Build permissions for this URL
Method FetchResource
DAVResource::FetchResource() in DAVResource.php
Retrieve the actual resource.
Method FetchSupportedMethods
Returns the array of supported methods
Method FetchSupportedReports
Returns the array of supported reports
Method FetchTickets
DAVResource::FetchTickets() in DAVResource.php
Fetches an array of the access_ticket records applying to this path
Method FromPath
DAVResource::FromPath() in DAVResource.php
Initialise from a path
Method FromRow
DAVResource::FromRow() in DAVResource.php
Initialise from a database row
g
Function generateKeys
generateKeys() in iSchedule.php
Method getClass
Method getDescription
Method getInstance
VTimezone::getInstance() in vtimezone.php
Method getOK
Method getStatements
SqlToArray::getStatements() in SqlToArray.php
Accessor for the array of parsed statements.
Function getStatusMessage
getStatusMessage() in always.php
Return the HTTP status code description for a given code. Hopefully this is an efficient way to code this.
Method getXML
AtomEntry::getXML() in AtomFeed.php
Function get_address_properties
get_address_properties() in caldav-REPORT-cardquery.php
Function get_freebusy
get_freebusy() in freebusy-functions.php
Function get_href_containers
get_href_containers() in caldav-REPORT-expand-property.php
Given a <response><href>...</href><propstat><prop><someprop/></prop><status>HTTP/1.1 200 OK</status></propstat>...</response> pull out the content of <someprop>content</someprop> and check to see if it has any href elements. If it *does* then recurse into them, looking for the next deeper nesting of properties.
Function get_phpinfo
get_phpinfo() in setup.php
Function grant_row_editor
grant_row_editor() in principal-edit.php
Function group_memberships_browser
group_memberships_browser() in principal-edit.php
Function group_members_browser
group_members_browser() in principal-edit.php
Function group_row_editor
group_row_editor() in principal-edit.php
Function getPrincipalByID
getPrincipalByID() in auth-functions.php
Function getUserByEMail
getUserByEMail() in auth-functions.php
Function getUserByID
getUserByID() in auth-functions.php
Function getUserByName
getUserByName() in auth-functions.php
Function GetItip
GetItip() in schedule-functions.php
Function GetTZID
GetTZID() in caldav-PUT-functions.php
Get a TZID string from this VEVENT/VTODO/... component if we can
Method GetRoles
DAViCalSession::GetRoles() in DAViCalSession.php
Method used to get the user's roles
Variable $groups
HTTPAuthSession::$groups in HTTPAuthSession.php
Group rights
Method GetRoles
HTTPAuthSession::GetRoles() in HTTPAuthSession.php
Internal function used to get the user's roles from the database.
Method getCapabilities
get capabilities from remote server
Method getServer
iSchedule::getServer() in iSchedule.php
finds a remote calendar server via DNS SRV records
Method getTxt
iSchedule::getTxt() in iSchedule.php
gets the domainkey TXT record from DNS
Method getAllGroups
ldapDrivers::getAllGroups() in drivers_ldap.php
Retrieve all groups from the LDAP directory
Method getAllUsers
ldapDrivers::getAllUsers() in drivers_ldap.php
Retrieve all users from the LDAP directory
Function getStaticLdap
getStaticLdap() in drivers_ldap.php
A generic function to create and fetch static objects
Method GetProperty
DAVPrincipal::GetProperty() in DAVPrincipal.php
Return an arbitrary property
Method GroupMemberSet
DAVPrincipal::GroupMemberSet() in DAVPrincipal.php
Accessor for the group member set - the members of this group
Method GroupMembership
Accessor for the group membership - the groups this principal is a member of
Function get_collection_contents
get_collection_contents() in caldav-PROPFIND.php
Get XML response for items in the collection If '/' is requested, a list of visible users is given, otherwise a list of calendars for the user which are parented by this path.
Method GetDepthName
CalDAVRequest::GetDepthName() in CalDAVRequest.php
Returns the name for this depth: 0, 1, infinity
Method GetLockDetails
CalDAVRequest::GetLockDetails() in CalDAVRequest.php
Returns the DB object associated with a lock token, or false.
Method GetLockRow
CalDAVRequest::GetLockRow() in CalDAVRequest.php
Returns the locked row, either from the cache or from the database
Method GetACL
DAVResource::GetACL() in DAVResource.php
Return ACL settings
Method GetParentContainer
Get a DAVResource which is the parent to this resource.
Method GetProperty
DAVResource::GetProperty() in DAVResource.php
Return general server-related properties, in plain form
Method GetPropStat
DAVResource::GetPropStat() in DAVResource.php
Construct XML propstat fragment for this resource
Page get.php
get.php in get.php
h
Function handle_subaction
handle_subaction() in principal-edit.php
Page help.php
help.php in help.php
Function hyperlink
hyperlink() in feed.php
Function for creating anchor links out of plain text.
Function handle_cancel_request
handle_cancel_request() in caldav-POST.php
Function handle_freebusy_request
handle_freebusy_request() in caldav-POST.php
Function handle_schedule_reply
handle_schedule_reply() in caldav-PUT-functions.php
Deliver scheduling replies to organizer and other attendees
Function handle_schedule_request
handle_schedule_request() in caldav-PUT-functions.php
Deliver scheduling requests to attendees
Method HavePrivilegeTo
DAViCalSession::HavePrivilegeTo() in DAViCalSession.php
Does the user have the privileges to do what is requested.
Method HTTPAuthSession
HTTPAuthSession::HTTPAuthSession() in HTTPAuthSession.php
The constructor, which just calls the type supplied or configured
Class HTTPAuthSession
HTTPAuthSession in HTTPAuthSession.php
A Class for handling a session using HTTP Basic Authentication
Page HTTPAuthSession.php
HTTPAuthSession.php in HTTPAuthSession.php
Method HavePrivilegeTo
Is the user has the privileges to do what is requested.
Method HavePrivilegeTo
Does the user have the privileges to do what is requested.
i
Page index.php
index.php in index.php
Page iSchedule.php
iSchedule.php in iSchedule.php
Function i18n
i18n() in setup.php
todo work out something more than true/false returns for dependency checks
Page interactive-page.php
interactive-page.php in interactive-page.php
Function ischedule_get
ischedule_get() in well-known.php
Function ISODateToHTTPDate
ISODateToHTTPDate() in always.php
Convert a date from ISO format into the sad old HTTP format.
Function import_addressbook_collection
import_addressbook_collection() in caldav-PUT-functions.php
This function will import a whole calendar
Function import_calendar_collection
import_calendar_collection() in caldav-PUT-functions.php
This function will import a whole calendar
Function import_collection
import_collection() in caldav-PUT-functions.php
This function will import a whole collection
Method importFromDirectory
Method id
DAVTicket::id() in DAVTicket.php
Page iSchedule.php
iSchedule.php in iSchedule.php
Class iSchedule
iSchedule in iSchedule.php
A class for handling iScheduling requests.
Page iSchedule-POST.php
iSchedule-POST.php in iSchedule-POST.php
Function ischedule_cancel
ischedule_cancel() in iSchedule-POST.php
Function ischedule_freebusy_request
ischedule_freebusy_request() in iSchedule-POST.php
Function ischedule_request
ischedule_request() in iSchedule-POST.php
Method imapPamDrivers
Constructor.
Class imapPamDrivers
imapPamDrivers in drivers_rimap.php
Function IMAP_PAM_check
IMAP_PAM_check() in drivers_imap_pam.php
Check the username / password against the PAM system
Variable $is_addressbook
Variable $is_calendar
Principal::$is_calendar in Principal.php
Variable $is_principal
Principal::$is_principal in Principal.php
Method InitialiseRecord
Initialise the Principal object from a $usr record from the DB.
Method internal_url
Principal::internal_url() in Principal.php
Method IsGroup
DAVPrincipal::IsGroup() in DAVPrincipal.php
Is this a group principal?
Method IsAddressBook
CalDAVRequest::IsAddressBook() in CalDAVRequest.php
Returns true if the URL referenced by this request points at an addressbook collection.
Method IsCalendar
CalDAVRequest::IsCalendar() in CalDAVRequest.php
Returns true if the URL referenced by this request points at a calendar collection.
Method IsCollection
CalDAVRequest::IsCollection() in CalDAVRequest.php
Returns true if the URL referenced by this request points at a collection.
Method IsInfiniteDepth
Returns true if the request asked for infinite depth
Method IsLocked
CalDAVRequest::IsLocked() in CalDAVRequest.php
Checks whether the resource is locked, returning any lock token, or false
Method IsPrincipal
CalDAVRequest::IsPrincipal() in CalDAVRequest.php
Returns true if the URL referenced by this request points at a principal.
Method IsProxyRequest
CalDAVRequest::IsProxyRequest() in CalDAVRequest.php
Returns true if the URL referenced by this request is within a proxy URL
Method IsPublic
CalDAVRequest::IsPublic() in CalDAVRequest.php
Checks whether the collection is public
Method IsAddressbook
DAVResource::IsAddressbook() in DAVResource.php
Checks whether this resource is an addressbook
Method IsBinding
DAVResource::IsBinding() in DAVResource.php
Checks whether this resource is a bind to another resource
Method IsCalendar
DAVResource::IsCalendar() in DAVResource.php
Checks whether this resource is a calendar
Method IsCollection
DAVResource::IsCollection() in DAVResource.php
Checks whether this resource is a collection
Method IsExternal
DAVResource::IsExternal() in DAVResource.php
Checks whether this resource is a bind to an external resource
Method IsInSchedulingCollection
Checks whether this resource is IN a scheduling inbox/outbox collection
Method IsLocked
DAVResource::IsLocked() in DAVResource.php
Checks whether the resource is locked, returning any lock token, or false
Method IsPrincipal
DAVResource::IsPrincipal() in DAVResource.php
Checks whether this resource is a principal
Method IsPublic
DAVResource::IsPublic() in DAVResource.php
Checks whether the target collection is publicly_readable
Method IsPublicOnly
DAVResource::IsPublicOnly() in DAVResource.php
Checks whether the target collection is for public events only
Method IsSchedulingCollection
Checks whether this resource is a scheduling inbox/outbox collection
k
Method kill_on_exit
CalDAVRequest::kill_on_exit() in CalDAVRequest.php
l
Variable $local_etags
CalDAVSyncState::$local_etags in CalDAVSyncState.php
Variable $local_token
CalDAVSyncState::$local_token in CalDAVSyncState.php
Method localChanges
CalDAVSyncCache::localChanges() in CalDAVSyncCache.php
Function log_setup_error
log_setup_error() in setup.php
Function logRequestHeaders
logRequestHeaders() in caldav.php
Function local_session_sql
local_session_sql() in DAViCalSession.php
Method LoginRequired
DAViCalSession::LoginRequired() in DAViCalSession.php
Checks that this user is logged in, and presents a login screen if they aren't.
Class ldapDrivers
ldapDrivers in drivers_ldap.php
Function LDAP_check
LDAP_check() in drivers_ldap.php
Check the username / password against the LDAP server
Page log_caldav_action.php
log_caldav_action.php in log_caldav_action.php
Function log_caldav_action
log_caldav_action() in log_caldav_action.php
Log the action
Variable $locale
Principal::$locale in Principal.php
Page list.php
list.php in list.php
m
Function make_help_link
make_help_link() in page-header.php
Method msCdoToOlson
VTimezone::msCdoToOlson() in vtimezone.php
Method MatchesPath
DAVTicket::MatchesPath() in DAVTicket.php
Method MatchesResource
Variable $modified
Principal::$modified in Principal.php
Variable $method
CalDAVRequest::$method in CalDAVRequest.php
The HTTP request method: PROPFIND, LOCK, REPORT, OPTIONS, etc...
Method MalformedRequest
Send a simple error informing the client that was a malformed request
n
Page newfile.php
newfile.php in newfile.php
Method needsSync
CalDAVSyncCache::needsSync() in CalDAVSyncCache.php
Method NeedPrivilege
CalDAVRequest::NeedPrivilege() in CalDAVRequest.php
Send a need-privileges error response. This function will only return if the $href is not supplied and the current user has the specified permission for the request path.
Method NeedPrivilege
DAVResource::NeedPrivilege() in DAVResource.php
Check if we have the needed privilege or send an error response. If the user does not have the privileges then the call will not return, and an XML error document will be output.
o
Page other_translated_strings.php
other_translated_strings.php in other_translated_strings.php
Function obfuscated_event
obfuscated_event() in caldav-GET-functions.php
Variable $original_request_url
Variable $options
CalDAVRequest::$options in CalDAVRequest.php
p
Page page-footer.php
page-footer.php in page-footer.php
Page page-header.php
page-header.php in page-header.php
Page pubsub.php
pubsub.php in pubsub.php
Page principal-browse.php
principal-browse.php in principal-browse.php
Page principal-edit.php
principal-edit.php in principal-edit.php
Method PHPTest
RRuleTest::PHPTest() in test-RRULE.php
Function principal_collection_browser
principal_collection_browser() in principal-edit.php
Function principal_editor
principal_editor() in principal-edit.php
Function principal_grants_browser
principal_grants_browser() in principal-edit.php
Function privileges_to_XML
privileges_to_XML() in always.php
Returns the array of privilege names converted into XMLElements
Function privilege_format_function
privilege_format_function() in collection-edit.php
privilege_format_function is for formatting the binary privileges from the
Function privilege_to_bits
privilege_to_bits() in always.php
Method putRemote
CalDAVSyncCache::putRemote() in CalDAVSyncCache.php
Write this change to the remote server
Page public.php
public.php in public.php
Function processItipCancel
processItipCancel() in schedule-functions.php
Does the actual processing of the iTIP CANCEL message on behalf of an ATTENDEE, which generally means writing it into the ATTENDEE's default calendar.
Function process_ace
process_ace() in caldav-ACL.php
Preconditions
Function property_response
property_response() in caldav-REPORT-pps-set.php
Wrap an individual property name as needed
Function public_events_only
public_events_only() in caldav-PUT-functions.php
Check if this collection should force all events to be PUBLIC.
Variable $principal_id
DAViCalSession::$principal_id in DAViCalSession.php
Method privileges
DAVTicket::privileges() in DAVTicket.php
Method ParseDigestHeader
Parse the HTTP Digest Auth Header
Variable $parsed
iSchedule::$parsed in iSchedule.php
Method parseDKIM
iSchedule::parseDKIM() in iSchedule.php
parses and validates DK header
Method parseTxt
iSchedule::parseTxt() in iSchedule.php
parses DNS TXT record from domainkey lookup
Method parseURI
iSchedule::parseURI() in iSchedule.php
split up a mailto uri into domain and user components
Variable $password
Principal::$password in Principal.php
Variable $principal_id
Principal::$principal_id in Principal.php
Variable $privileges
Principal::$privileges in Principal.php
Page Principal.php
Principal.php in Principal.php
Class Principal
Principal in Principal.php
A class for things to do with a Principal
Method PrincipalProperty
Returns properties which are specific to this principal
Method principal_id
Principal::principal_id() in Principal.php
Return the principal_id
Method Privileges
DAVPrincipal::Privileges() in DAVPrincipal.php
Return the privileges bits for the current session user to this resource
Method PropertySearch
DAVPrincipal::PropertySearch() in DAVPrincipal.php
Method ProxyFor
DAVPrincipal::ProxyFor() in DAVPrincipal.php
Accessor for read or write proxy
Page PublicSession.php
PublicSession.php in PublicSession.php
Method PublicSession
PublicSession::PublicSession() in PublicSession.php
The constructor, which just calls the actual type configured
Class PublicSession
PublicSession in PublicSession.php
A Class for handling a public (anonymous) session
Class pwauthPamDrivers
pwauthPamDrivers in drivers_pwauth_pam.php
Function PWAUTH_PAM_check
PWAUTH_PAM_check() in drivers_pwauth_pam.php
Check the username / password against the PAM system
Variable $principal
CalDAVRequest::$principal in CalDAVRequest.php
The 'principal' (user/resource/...) which this request seeks to access
Variable $privileges
CalDAVRequest::$privileges in CalDAVRequest.php
The decimal privileges allowed by this user to the identified resource.
Method PreconditionFailed
Send an error response for a failed precondition.
Method PreferMinimal
CalDAVRequest::PreferMinimal() in CalDAVRequest.php
Returns true if the 'Prefer: return-minimal' or 'Brief: t' were present in the request headers.
Method Privileges
CalDAVRequest::Privileges() in CalDAVRequest.php
Return the privileges bits for the current session user to this resource
Variable $parent
DAVResource::$parent in DAVResource.php
Method parent_path
DAVResource::parent_path() in DAVResource.php
Returns the dav_name of the resource in our internal namespace
Method principal_url
DAVResource::principal_url() in DAVResource.php
Returns the principal-URL for this resource
Method Privileges
DAVResource::Privileges() in DAVResource.php
Return the privileges bits for the current session user to this resource
q
Method queryCapabilities
query capabilities retrieved from server
r
Variable $recur
RRuleTest::$recur in test-RRULE.php
Variable $remote_etags
CalDAVSyncState::$remote_etags in CalDAVSyncState.php
Variable $remote_token
CalDAVSyncState::$remote_token in CalDAVSyncState.php
Variable $result_description
Method remoteChanges
CalDAVSyncCache::remoteChanges() in CalDAVSyncCache.php
Method removeComment
SqlToArray::removeComment() in SqlToArray.php
Return the empty string if this line is an SQL comment
Function removeComment
removeComment() in createdb.php
Method Render
Method resolveConflicts
Method RRuleTest
RRuleTest::RRuleTest() in test-RRULE.php
Class RRuleTest
RRuleTest in test-RRULE.php
Function rollback
rollback() in caldav-MOVE.php
RFC2068, 14.25: If none of the entity tags match, or if "*" is given and no current entity exists, the server MUST NOT perform the requested method, and MUST return a 412 (Precondition Failed) response.
Function rollback_on_error
rollback_on_error() in caldav-PUT-functions.php
This function launches an error
Method render
Tools::render() in tools.php
Method renderImportFromDirectory
Method renderSyncLDAP
Method requestUser
ldapDrivers::requestUser() in drivers_ldap.php
Returns the result of the LDAP query
Function RIMAP_check
RIMAP_check() in drivers_rimap.php
Check the username / password against the IMAP server
Variable $resourcetypes
Principal::$resourcetypes in Principal.php
Method ReadProxyGroup
DAVPrincipal::ReadProxyGroup() in DAVPrincipal.php
Accessor for the read proxy group
Method RenderAsXML
DAVPrincipal::RenderAsXML() in DAVPrincipal.php
Render XML for a single Principal (user) from the DB
Variable $raw_post
CalDAVRequest::$raw_post in CalDAVRequest.php
The raw data sent along with the request
Variable $resource
DAVResource::$resource in DAVResource.php
Variable $resourcetypes
DAVResource::$resourcetypes in DAVResource.php
Method RenderAsXML
DAVResource::RenderAsXML() in DAVResource.php
Render XML for this resource
Method resource
DAVResource::resource() in DAVResource.php
Returns the database row for this resource
Method ResourceProperty
Return general server-related properties for this URL
Method resource_id
DAVResource::resource_id() in DAVResource.php
Returns the definitive resource_id for this resource - usually a dav_id
s
Page setup.php
setup.php in setup.php
Page SqlToArray.php
SqlToArray.php in SqlToArray.php
Function send_page_header
send_page_header() in page-header.php
Method serialize
CalDAVSyncState::serialize() in CalDAVSyncState.php
Method setClass
Method setContent
AtomEntry::setContent() in AtomFeed.php
Method setDate
AtomEntry::setDate() in AtomFeed.php
Method setDateCreated
Method setDateModified
Method setDateModified
Method setDescription
Method setDescription
Method setDescription
Method setFeedLink
AtomFeed::setFeedLink() in AtomFeed.php
Sets the feed link (rel=self), ignoring the parameter which is for compatibility with the Zend library API, although we use this for the Id, whereas they use the first link that is set.
Method setId
AtomEntry::setId() in AtomFeed.php
Method setId
AtomFeed::setId() in AtomFeed.php
Method setLink
AtomFeed::setLink() in AtomFeed.php
Method setLink
AtomEntry::setLink() in AtomFeed.php
Method setTitle
AtomEntry::setTitle() in AtomFeed.php
Method setTitle
AtomFeed::setTitle() in AtomFeed.php
Function SqlFilterCardDAV
SqlFilterCardDAV() in caldav-REPORT-cardquery.php
Process a filter fragment returning an SQL fragment
Function SqlFilterFragment
SqlFilterFragment() in caldav-REPORT-calquery.php
Process a filter fragment returning an SQL fragment
Method SQLTest
RRuleTest::SQLTest() in test-RRULE.php
Class SqlToArray
SqlToArray in SqlToArray.php
SqlToArray class for parsing a file of somewhat structured SQL statements into an array
Function SRVFormat
SRVFormat() in iSchedule.php
Function SRVOk
SRVOk() in iSchedule.php
Page schedule-functions.php
schedule-functions.php in schedule-functions.php
Function send_dav_header
send_dav_header() in caldav.php
Function simple_write_resource
simple_write_resource() in caldav-PUT-functions.php
A slightly simpler version of write_resource which will make more sense for calling from an external program. This makes assumptions that the collection and user do exist and bypasses all checks for whether it is reasonable to write this here.
Global $session The session object is global.
Variable $selector
iSchedule::$selector in iSchedule.php
Method sendRequest
iSchedule::sendRequest() in iSchedule.php
send request to remote server
Method setTxt
iSchedule::setTxt() in iSchedule.php
strictly for testing purposes
Method signDKIM
iSchedule::signDKIM() in iSchedule.php
signs a POST body and headers
Class squidPamDrivers
squidPamDrivers in drivers_squid_pam.php
Function SQUID_PAM_check
SQUID_PAM_check() in drivers_squid_pam.php
Check the username / password against the PAM system
Function sync_LDAP
sync_LDAP() in drivers_ldap.php
sync LDAP against the DB
Function sync_LDAP_groups
sync_LDAP_groups() in drivers_ldap.php
sync LDAP Groups against the DB
Function sync_user_from_LDAP
sync_user_from_LDAP() in drivers_ldap.php
Synchronise a cached user with one from LDAP
Method setUsername
Principal::setUsername() in Principal.php
Set the username - but only if the record does not yet exist!
Variable $supported_privileges
A static structure of supported privileges.
Method setPermissions
CalDAVRequest::setPermissions() in CalDAVRequest.php
Permissions are controlled as follows:
Method set_bind_location
Sets the dav_name of the resource we are bound as
Method sync_token
DAVResource::sync_token() in DAVResource.php
Returns the current sync_token for this collection, or the containing collection
t
Page test.php
test.php in test.php
Page test-RRULE-v2.php
test-RRULE-v2.php in test-RRULE-v2.php
Page test-RRULE.php
test-RRULE.php in test-RRULE.php
Function ticket_row_editor
ticket_row_editor() in principal-edit.php
Page tools.php
tools.php in tools.php
Class Tools
Tools in tools.php
Variable $type_id
Principal::$type_id in Principal.php
Variable $ticket
CalDAVRequest::$ticket in CalDAVRequest.php
A DAVTicket object, if there is a ?ticket=id or Ticket: id with this request
Page tz.php
tz.php in tz.php
u
Page upgrade.php
upgrade.php in upgrade.php
Function unicodeToUtf8
unicodeToUtf8() in check_UTF8.php
Takes an array of ints representing the Unicode characters and returns a UTF-8 string. Astral planes are supported ie. the ints in the input can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates are not allowed.
Method unserialize
CalDAVSyncState::unserialize() in CalDAVSyncState.php
Method updateETags
CalDAVSyncCache::updateETags() in CalDAVSyncCache.php
Function utf8ToUnicode
utf8ToUnicode() in check_UTF8.php
Takes an UTF-8 string and returns an array of ints representing the Unicode characters. Astral planes are supported ie. the ints in the output can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates are not allowed.
Function UpdateCollectionTimezones
UpdateCollectionTimezones() in auth-functions.php
Function UpdateUserFromExternal
UpdateUserFromExternal() in auth-functions.php
Update the local cache of the remote user details
Function update_external
update_external() in external-fetch.php
Variable $user_no
HTTPAuthSession::$user_no in HTTPAuthSession.php
User ID number
Variable $url
Principal::$url in Principal.php
Variable $username
Principal::$username in Principal.php
Columns from the database
Variable $user_active
Principal::$user_active in Principal.php
Variable $user_no
Principal::$user_no in Principal.php
Method unCache
Principal::unCache() in Principal.php
Method unique_tag
DAVPrincipal::unique_tag() in DAVPrincipal.php
Returns the unique_tag (ETag or getctag) for this resource
Method Update
Principal::Update() in Principal.php
Method updateableFields
Method url
Principal::url() in Principal.php
Return the URL for this principal
Method username
Principal::username() in Principal.php
Return the username
Method user_no
Principal::user_no() in Principal.php
Return the user_no
Variable $user_agent
CalDAVRequest::$user_agent in CalDAVRequest.php
The user agent making the request.
Method UnsupportedRequest
Sometimes it's a perfectly formed request, but we just don't do that :-(
Variable $unique_tag
DAVResource::$unique_tag in DAVResource.php
Method unique_tag
DAVResource::unique_tag() in DAVResource.php
Returns the unique_tag (ETag or getctag) for this resource
Method url
DAVResource::url() in DAVResource.php
Returns the URL of our resource
Method user_no
DAVResource::user_no() in DAVResource.php
Returns the internal user_no for the principal for this resource
v
Page vcard.php
vcard.php in vcard.php
Page vtimezone.php
vtimezone.php in vtimezone.php
Class VCard
VCard in vcard.php
Class VTimezone
VTimezone in vtimezone.php
Method validateKey
iSchedule::validateKey() in iSchedule.php
validates that domainkey is acceptable for the current request
Method validateRequest
checks that current request has a valid DKIM signature signed by a currently valid key from DNS
Method verifySignature
verifies parsed DKIM header is valid for current message with a signature from the public key in DNS
Method ValidateLockToken
Checks to see whether the lock token given matches one of the ones handed in with the request.
w
Page well-known.php
well-known.php in well-known.php
Page WritableCollection.php
WritableCollection.php in WritableCollection.php
Method Write
VCard::Write() in vcard.php
Method WriteAddresses
Method WriteEmails
Method WritePhones
Function write_alarms
write_alarms() in caldav-PUT-functions.php
Given a dav_id and an original vCalendar, pull out each of the VALARMs and write the values into the calendar_alarm table.
Function write_attendees
write_attendees() in caldav-PUT-functions.php
Parse out the attendee property and write a row to the calendar_attendee table for each one.
Function write_resource
write_resource() in caldav-PUT-functions.php
Actually write the resource to the database. All checking of whether this is reasonable should be done before this is called.
Method WriteProxyGroup
Accessor for the write proxy group
Method whatChangedSince
WritableCollection::whatChangedSince() in WritableCollection.php
Class WritableCollection
WritableCollection in WritableCollection.php
A class for things to do with a DAV Resource
Method WriteCalendarAlarms
Given a dav_id and an original vCalendar, pull out each of the VALARMs and write the values into the calendar_alarm table.
Method WriteCalendarAttendees
Parse out the attendee property and write a row to the calendar_attendee table for each one.
Method WriteCalendarMember
Writes the data to a member in the collection and returns the segment_name of the resource in our internal namespace.
Method WriteMember
WritableCollection::WriteMember() in WritableCollection.php
Writes the data to a member in the collection and returns the segment_name of the resource in our internal namespace.
x
Constant XHTML_XMLNS
XHTML_XMLNS in AtomFeed.php
Method XMLResponse
CalDAVRequest::XMLResponse() in CalDAVRequest.php
Send an XML Response. This function will never return.
a b c d e f g h i k l m n o p q r s t u v w x _
Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/share/php/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/Smarty_Compiler.class.php on line 370 davical-1.1.1/docs/website/0000755000000000000000000000000011776303360012403 5ustar davical-1.1.1/docs/website/clients/0000755000000000000000000000000011776303360014044 5ustar davical-1.1.1/docs/website/clients/Evolution-details.php0000644000000000000000000000330511653644571020173 0ustar

Evolution

Evolution is available in most Linux distributions. The CalDAV support was supposedly written in a frenzy of hacking one day when the draft specification was at around revision 8. As a result there was little in the way of a repository available to test against until recently.

  1. Select "File" then "New" then "Calendar" from the menus.
  2. Choose a type of "CalDAV", enter a name, and a URL such as caldav://server.domain.name/caldav.php/username/calendar/, enter your user name for DAViCal and click "OK".
     
  3. You should now be prompted for a password for that username. Enter the password and your calendar should now show.

Caveats

If you have problems with Evolution, you will need to quit evolution, remove the cache file which will be in ~/.evolution/cache/calendar/ and restart. If you still have problems try doing that, but killing evolution-data-server in addition.

Sometimes Evolution writes error messages into the cache file, so if you have ongoing problems you may want to take a look inside that.

There are some quirks with Evolution's handling of CalDAV too, prior to 2.12.0, so perhaps take a look at the following bugs (fixed in 2.12.0):

There may also be bugs in Evolution's handling of SSL with CalDAV - I couldn't get it to work reliably.

davical-1.1.1/docs/website/clients/iCal-icon.png0000644000000000000000000003177411167760073016366 0ustar PNG  IHDRxuosRGBbKGD pHYs  tIME  5fQz IDATxyU>U3d% J@ T";.^KD@ _\D@.*"d =DB$3$鞭ת:?{rɫ_:us447L,㬳Ga``C;_x:>_|3fl2BӦMc…wy!];$@gG'0?@,cڴidY{km$šͻP2~x"Hs0 ͛Gww7/ .D}1?-*o&Gy7o@QҙtnNuvvJ@T_2HzA2I(Ia  SUuTU% IL&Afta9f1!vu9G3{l(Хx N>d{8&Jc6Y3AJP T<-Nq71%H@U7AWWW]uZ@>80H6ulpnmI':Bd2,}r'n6MSx%u4 :4gi;dz71?VAa>0vų l\:+$# F8裩SsH]$L!-GQ{ϚʪH$ ogppA6nȫ+W 8 •( s9]Q,-xlMU:::J՝J|oO[l!~!B fE ôi"K@k[+Mͻ]\~`vZY:3 {ڞ6f>`*mww73gf)P]Qz**D SOF!PN C,Ԣia)SJro},N";Q?ϾiM_gp8Drzs/W]uҔU?_1\k!{7+,ę߹%?'yRNcNcOC^X[|o-"|m{l+-w}) {XaQz*d}cXUfeVd(|1Ye|D#KstnF?exh!.έkV־d2p<ƺM] ʝ~8c(pA\բ( A⽻ \{lenFo9I)޺NQ^~o%oz±16nڄ";@oc]y9=_+k7(m~1/_>+\R !Qbkl^mCw!MUS ^nT؎Bkf=Xb3 1eU䅗b^mDmB`ݖGz8Ko}o5ʸda͉2".݉cul1̦w6p)gB#q=tR#C-Aur~l[8//"b9Գlꫴ903 ښD&EYɤSi 4G-RlXJTCx}ޣN:`SW//J-N>ߐ%n+ hW]ո113 La:YCPe D,e@?,TkhBǸ1v3>b5`1{ Za #`'DZ#\uăM,;ʹiJYv&xMX,VQ_&_t] p|61'6J&mh: {y%!=tk{/ZL^fܶ!+VDl啶έ]7!ڵ4gήB+!:oz:' /Ĕ1R.u9?oM!L#Or~n>ޡ9+_%D5nck <xLXdML>*Zޅ@1\n{!XLiЙ @tf0qZkuUUįo``ƚIR2}hMS$h¥ͧ?yœnj[8 u0!kO'!TP(h4@8$) =!_F2 UAdUvKL w32D9/'oBrmc:K߹lϻ}%C+1&#Iz=D#dw[HOJX3[pʕr!sLJˏMk̚vٿ+oUf9Fr}:*U~Tf4rQNw2cHF4stVTfNPGQ0L$ZG"@4rrE0D :wd9475y>)nFR=kIP:rw}JЌ& !4Q^?*09<Į>ô r!{4lޕҭRa%jͽk]>*F>^M}A΅~wXxoHsUwy>NLÆayz+/]~qDV%w:^vQ) Ef`J7/LJ)ǂ~!>s6q fwRL_m^ED4}#]O@>:}FO ?SuEQ)QSnRtֲ\9Duv15: ]=f4/3N9|{w)SQA72Je-CA2$ $"{ѯ4'N5i}Rv^ʲ$f5;`(Rs t B7 yi-yXoV?^FlPhA"ϫo] ?Y~^VWA~8{nB7/~̅#N>*L`?S:Kr٢X~>'+rr_) 6YZW.ѨXN9E|-43#/KZYȹw7Ea84 NژrژZ4acP)Vl)(L@3ԢF7Ϡ<LEnȕ!MGx((jRkű*}׮~o&z͝`q@AH PPBadȻq)FٟUAi 4UL*t,NRu%ပcU9=|M+.GW _s3< rl̕!o@p[%rd~u#z3'UũAowV9W5ʊ۹;vd@MAt#&#@&A !{@( \n4ʀnq Ȁ26үt79q@X/ZMyt+զL|&":-Ҟێ1")'Y/έ-iؕZѴS&O.Z[۾};3f]mJRͼT>75GXI[-R<' 3VKA2$}{\z6]d;'gvaըc -˻J:'zzz $}j(g*~V3B ݝb:#T.i\y啜~<\tE\x79=P"vr O?47#!ghpl޼O}S̚5^y;0NJC}+_[IgG?X$cc湓fS\au߸ɳ!k+.]P[zIx걥}+Ԝ=R;him6bsE[oĉioo'HŘ6m[lh43gBO"]]]L<[׿hK 'a̙3WeF?\n?}^il2gIW~K~$bj[']ߞ'0;>C6䗣aʔ)|tEUBJIss3[n%Ln *%+ |&v)%;v`ڵ'r5μKi7P1=5T?a^neO>I0O&?{7SCڗǂ~6 sL*_)fIӤiO(D"2H:Ǐc׮N4];QUl6i43go( ݷVirӱXwd]ucU'NhiYBBB??X~]{E {bXǏϽX~>+DlZMnڰɆJt]GAGG}oI^L9V$$)*]IFutX@ jnwO7nl6ԩSm3Z  JF dѴ`!tH$1H$"Hd2idY tw/m܌nFq/&7J0V? |Wq;~vJX %B;hl;Q@ Gn%mP{]} M)܊iyser .r B^>,m AKc/=K, S_R-<-}8=Iҹ9sݝVJx1GnakBo\Ym8|񕯌r"{[lx ~W~WqIVʵC?S**_~ljjl&x^;K$DѢA2ٌ}ZLh%Fy%YcOBVILH-4̯}cE (6$"`JS+s)G} =c8=knºWsI s^AINp*P^+X UPUΎz)EA4^z%)QDn ܷdu466EAbxz>'p/iG[/<]Š7cNW wl~sD[zJra Oɻdٵ;k+%۶w2~xZI$a{g'=9UDfYbZ[馛_VT %:ro%\5'ǐ~^@X~D4U# L&@@]@@#LG$I4X I&A4obvd3464JгY̞=-)Ӄ;ewWuk";V XKv±U˩0,JP X_ efhqL&gЍ]hb!MrW929pIDAT\r&jT'V~ТzB9P6TUCQFB0סEUimmEUU4-w}ss3sECAUUWGRi|/.Vmd5*Я44~Jdq9Wy.|!P֙|fš܃\ eYT_l.}RJ io+,Bfߦ4GCcFN~T"ۉ#؎4V=ô?Qn֗Nf%RU.`W_¤O[n`?S{\H6%T,C\s8宻nJ~ǝ-0(yrؠ9?e#EQY۸;m#7s!{D2_$gZOW%D-"kײfQ`d999iɭ,/K]N(S?EF&y>hގP٭$noEX}6iW1wB3ǞeO)w)Nj\~G{5v[vH$կns['6cyY8c>Laٰ]4Mcĉ4seqWrUw{ +Wg?xhn\İm .K+%N8W:[f[ƏK_Z tB9jj D#F)~dƍ#z<1 ! pR hĶ5[ Dm XZ -&dh{Depf(J2JtH \1Wມ=0>jo3 5AJ`iiDl9|'c|Kq;xU… yY|9w*ϧ?=uW^yeTrpJھyΏu.r1ImݺUlٲYfNfΝ̚5fhkmcWw7M0 V6nHss3mmmDI&k $--`1V)~CZCxj V̯`0h{J:Al5koG74MnVX?a,Z;뮻LGJ_ϒ%KoK.alݺoիWsNn6ol[K/_?< EcX_dϽyRNJJ{'6l t0vNjDT*e֜,NZhdA+躎iVt,|+%aߋY3)!@N6s, ګd4lޚ `@ @]]MpUU, BhfO`7_!-qQO9nWX(!nN A?r8!P'xbSҕVZ/hs+#?1z(˗/ . 1c urb{.?gq5$)$|✏iv L@5XgF.DV(vjǤ(jNHrYDp1==hs5js#H2 R>k1r$CE3b۶m|_%Jb#宕LfժUH)9c&v}ۗ:|ɪkT՞|MAU5PFer ymuQ3ďIe|z,D1k*=s +$umP0TUfhbXj<斜:`\^ia$9dzrfaf{ A% )w3l JkV{LH0 &==kedD$/ѱV|P ,|` 2Lxm)X9jIĮĊQNMo͒oK3xc,Yg+9%0 YSpض`X#A7 ֤u@ `sC/ͷLV^Q]fHuKV z. &*ίEbM͛7s]wе^K8930a\rkƮF[Kmϗ%./ovZزu˨ 㕠zYn1)~LUf/X,~lN}NR/?+l~f~ibq>ٰq#ǍCUU:::|}m|>=)."$Xdi{-Oܹg(-~/{WCJrD;K~ Քk*ěo)Eq*-\09U֒ YFVM(-ѵI`?^/DԩiV"{˭:fG)VEBDB t+cͼ_.F9kM9%"xZcwr pG,~Oرc\pJ.c hmm%d2<<ڵkG{ŋۓog׮]\q}?gӦM־n:j֬Yy(yey}[Ir* t;Rs$SJZ[[Yx1v(`4cż|N'O;f{ ͚OSM%\hsэ7rGqr{0R]0L5M)zowyGIVQ1VP(|d*E@r$T|  rD. o~%A ]qBUe9,UJl/taV71r^2`5Va 赕_:$:* *dw,jMp LR4 ٶ}m3qD$bWadO̓׺a* t3!A&*%P|21@tQ-O~2Vq寄~~I?!BxLjF"H75'L Rܹ3iyl ޫ̀<*^ fLWk~ a쟟%H ca˖-0LRd'd477LJds|"?1M(p@ + )|j.X~~˖-VEf+gY6XB 'k>V:Vq:!TIVTRKSUuT5ԪY׎.ul(( PT ,$Ҷu|jO ƆFLd޼yKhF*fio2=đ󻅟`hxz=hW*ۻ䳄icǷ:h{/7fF&ɥӽ pHYs  tIME 0 ]AIDATx >*JJຬz& 9^ίcW%ҚF;lep.D:#-VLj/W?R˸T= ^ƃCYOZi \?K=ݓ\ٌe[jmf{3v >"gX#K }ac[Zd^vUڎݭ gt5oX^=4YQ|@=SVŲgrvh^iѠZe 3We$bre5pkp-ԶOzz( [I2Ep)D;U=fiY֌nZ G%AXL_?ͻج)X4SYjE7*1#STӸ%a&v;I7z4 -q|p܎c-uD+rՂNUX*O=7\0jj-^ 3@,i&jeն4fI||$QUyF (sA_n(P4&c8f5;yXӣ`zt&kU0]][ϵZvQ]3Ko΀vZw;BZ>˝Y [(p6R fxmun׊l6H6D3;f3A3Uʱ`g Ҷ@}o Ws!jD5 Q5 Q.^?~'is5T62w,Qw[΂zP0*wD;9zԷopԛ,cL:jav;d;&#Wޤԧ2d&3Ad63wXP6J96efi__ʉQC-̱^B_uZ/߇.NwYM3}w=:ɘbӵׄt΄:k5f&^j3K6ǤF,G)F<_s }uT@6PS N^kMP\cbD^Y6)AO7&*=߸cR#dcc}1+#Z$hթtW o')' ׯDY_"_҄&I=-$6&5bDkP32P3jcb7y#[sA4w5}"r(Q\?D5 Q5 Q.5^ueBԈQ5~?JB(DBԨ@_fP!jF!jF]:l2!O6a9[ar=e$H)3$T>_H7F٠^g9m4|Z{6E:܁zU!:j1Yba}=aPg܉fSb2<Z/yǦF)oaGijԙv)܉~H;e¨O 3cڬm6!5g=כ=^c_$ԕOI 5>Z˜D ^.mB- u㛷 Xyx͐ 5z4ȭ˼)mBGm:7'2Փ4fSD'p3jj`ݗ6$N@=2%'ڍEihu3,[11_% d82K!́O dU/(#22 (L$2WGC#Q{_m}~EOqmȶ>"Baptm`~j屭Afk+֞j*{{.>gu6n7d#PͯFB(DB(DB(DBԈQQ>+FR`(>㏈Xԟ"C G@)j2Q73w?D}ɨIdg1GEF~lqV_>ށr@_4HzǬ& 2yP5BrsOˈTԌ=\nYM聩7g7jVzSQZd8H"[Qg9!ks:i>8O1.2K#>5~O7"_'׮:Ab5$8嬑 l9ӝ7PHw˛{JFtt{{fnʭGzCzo;ǮztIJԐlVsdHoԭc'jd$ZEX]: >np?hgŗ&F9jӺY}I`V;!0`¸a QmV  ^1tѢM>7@ _Go`plzH㢲Z[)zSmڎI;jB4cϱV"DKX<#o85jDݬ>Y5FKP^H$Q%Q#ju5F!jF!jF!jF!jF!:\ PZm_%G'rħ?/P_Fj 3Oh?IENDB`davical-1.1.1/docs/website/clients/Mulberry-dialog2.png0000644000000000000000000003032410705234304017664 0ustar PNG  IHDR,߶ZPLTE *+)+1B;0&677FGFBNa[L>SSRH2]bibb_My>VjxfUlqxrrngSZOgx|{X}wv}MĒkɾ\̿hvk~1?bKGDH pHYs  tIME 9 <2f IDATx ccht8tHX VםNiGR-#Co͍'\͍܀7z7 H,םa2c4f `JB( S>V>NW?o/S7ur;ieOw_&e>E>q j.6.mD,PưUr{LM3nX7/"f|?p,"bvw~Ŗmko>v:ߋw|?ƧK*YevTnW8{׻X8w@lG 1]E@gzHU"lxE,`2]]F&p ! I>gl^]C`neZCt֏Y௭%4P,[?e6N9aWђzzU-pǀ?.<^/\'.xTV _mNb~\O}>k?blMnÖ&tb 7$_%7e*^m冹HaGpd3 =n7SK.zni륚هr@6dR|3ȧwg= ]%` Wazplb@Kk52fXw1B\5"(,Aj}cx^ ^ | ŇwIc/w>lQ6vͰnomVb[r^6p/mIug.BU 6Ě"_/i ՠ6vYqߑ 6/q$ k׋z9VҴłWd'd1&K.kc3.}ztOzjdn$~x,1nlBtmk/2.ϴ= Y>0P`.(2J䰄m`k܎F~졝-#EN&M)+LIYbx>65 n67zT7w3pC;ZD;`6',Iri${t4Bӣtpg$q:Цu7F¥ OoJ2VL<➛A{Emن}lXcښ£$ChW9 6<3,ݳg|QLJ: #l}4]-c(5^Fu"J!)cg=j;f/OieT˨ q1e֒bq${b0aD9l3)MԿms+o@g̮FhqY'x_ib7i8zqAHP blᓉmBT6 Ԓˁ':hfz{IJ.j]V<)4hW/_+КeX3| KOHTANsTCØ OgEÉbFxoLs [[ ^GBHd%F~64ZW6!%F)x,ghh͠@ *7c EABLu#T]<*$ W.Iꗓ&#B^$i͹?tR*'NZscLƦ_C":h>6K.'  6G  5K=B<=~15ٰc j.)W `quUj>1iYz:MG14z"!jq.0^ifd~.3{ M>_O^DC2} TCޜ%=K@#s&I"::JIEUH־1hFD@5]m_ZFoK |UhU}%%p'A hFK$r?&> ) 4SmW7 v 9)L]4<֖䵟+ed,j+ wǴrvQ 4(ݩp=WFef{ ao=%yZYDV`E\Y-ERab* -+hi"bIpb9!D gG@ Qcr4h*|Z G ”SƄQ*9  B!֠=M*(.Ffc+˸&vʹ7;xHL:h"4(mm&JKIt|Д&Ch檥cdc6뢍qlJf=a$0p*[OdUJ)UCfĎm=QĚUB]NXK( DĦABGNӐFXڏQB rP[AV#FYfqeXCmA`?|hmu{x4"|q}0- 7to5~4H!s-ZF04gOIƸ0PЫ-1,fk;(ap y*,h>aѰ8?άDϧo< vZ{CSX=}BՐeLYR M_R =n? giNws9/ {h_BRߧj 'v6ጌ 6<ZkWэx{9A[:ֹw_aFy:3[dfJՆ07"O#Fy}5_CNˍ=~rи{Iꪡ%kFMp҂jIdGdmLCkpznf̱>jR/gF!O%?jjcr1zЖ} = lU k=Ҩ^@/q\"2g~tXQRBNgX&MtM&A8r8c.B|pȮW Q8sB/B`T:h H -|xA1]chp*B,O&#chU*4ofܞRgvC7bXvmy+튮 Rm|9St]nl87F# h@n4Ih Tp;&(y'>4a e'xc@ZT$mKtdm>A{ |\uHRP)i*u? &Uy,79hmWd[\"4YnZo ze/uOX ŕֈXS @ℇ;жn+VRU̸ҔQ͈"h}م<%J/بI'8ptn2m6n~暚/*_ϧ43%Dr,N~SGh̚%9Ϳ.:uAyV*9Ք 1 4hCi-*)>&:he!9L[Z.C`)C._VK-YiT= p pI~e^Ce8 HgP_(?l8?z"ox+ ǯǕ8Ppe,YSh vz@Lg BpϲyL1R#"#";h嬮kmY^DVG cbj?}k6URU{m;s>g3[^'Vzh}}G›+sZMP9{T?Ψ{%z BUt Gf!ڭjRe=@K!sI4p\}*߃v7{Fh܏VʟWNPB}HM3о )+]8S4A|2|8_sS<򂲬^0F9#;])c ݨ')Вqg|Z8jFjSBKV*_LKxE*̍zh@J 3!x ОOYE $J*4q$蔆f)ja9l>RN&=CM)zL0qOh')PHc)Di!J)JJ (Y7Df *NVxeI7BBA{hJJ:;myT9xAňNuTd0e\9핔 ?V[2byAnG*H}U ߩN}`%j %< %Q5ލr%3Ӊ7C eEheYvw.84hϪ~n@8+F B g܂TRUb$єYCJhhskw:׸t`UMukwZݷ'p$tExT Vj jl4HTh f:<~sZ M?Y6頙ZIANDB^%b&Yy09ZUC̈́W}N->'0 ! ᾣt&rDZB{L4İDhL18| s~Q@^kdh.+uq >@ 6sT "id*εANX t'e4,ʢsԤ,삉AW0u6Dfgi`1S[YClXJpZr-/e\P.wP^ c>ơ~hkk]Rp\)Hv24V) 3)2EBoDn଴bF,7 oCAjX2NQ#4g[qRl*Зcչ!$ g//Lgj$@A7j-̠C8u:.G "Q|2&Ņ`\ŨWඇvqh;gu s|ΛDrо\@IKHs~ }\%^>k)О=j`?-?=2sZ.qD!8d6N :kPݰ:u {h{RBNaza"FA: *muTC݊9!^ sU)c*QD .eEN]9_LUVUYׂZwAZ E!t/oeӀZxUR-T)#YrѓVh+:iPhfoXvhC2%ٳUp2G\&aYAGh ‰%UMj36Vv?:>zz;/&I`2fU{3 />vW77Fh 89%^T]xBLb F(gq[ڐXghRhJe75y3͢㡅-qnƯ7&;hh!FDL3 5Lljԯ3 K\:VĐ.0ʆesMq0ݖ?(Sl *hjeDp/вfѤ3ICi’K ǦM-7Y'bPqb!XО7cMJag@h^Yx6[gkǯ d@4W\vUZqAڤ9N͟"j;Ehp,q Рg4ՠ)&]7P1~z;hƗ:ڣTc\S& 3SG8gXKYez4dS'1yyHT$.&Y2ZDÈ3g_-x UCqºsxç05c e%FPF ДXiIDAT)QG冇0dCeUR%NE_YZ([buZBpɕBc~^^]|gD ފ*#RVhn9"~dfܤg3gJ4#zh/T<Лz8VCQY&ΰkZjf{h/mGY8 6S쪉JZbp[Gxȥ(F '.=S:f!MRYg/W 2:h$a7!8a Ɗ('O]zhgv9M~DTE"Ϙ?%P#vyO]zhgBAfA5ש J4eO]zhAkS#%eQmLV}ٓg!Ь>g"U:0z*LI Fi, 3Xw]^<Չ9ڙan't:Eoډr>rs:9ٿ Jhs{玼 9kD[OsV|/9s7-کwU*tЌ.yn-nv ]ܴj?!9l`bovN_-kz#R,mtfze\mr%P- o{hhKj4Tljذm m+l-*C3{I^R;prfhZm`WՙC;hob{etH;ӛ J]4Ţ)@dFj ҙه&VK9Ma Xۡڈrm7ZՕAK#- c(٢q;4Ɯ%0~Ʌ"iU ΊC2n1 ,Wj5MpņLm^4TR+Yx)cemF CQVx \Ebڠؠ:L=Vb\K KzţE#%:d!5"Ti6 h^J&~c<55#;hn?+n*FEP)_AQm6"NjkYv/ Tr 4? C3ucTȜcCASr 8OuG4^8W1 >QZPB!싔&ʲA,!yI?mxFޙ~agah%eVLJ4V4k)mFidLQ|)]T'p'|4-:]I`iAZmP(&?^mfCIh0hB R2zlḇvua4tje),ƅij9Q.;{C3ϴ~N;]zh?^#r|g3W*ropJY#+*Y#7D^XquhR)(m:4tͩ#]PEi:-eEvz][i)5Vf0CD.O3NhbׇN&.zFh^ڝP*zht24u|/swz#huֈu+B;W (']uHA6 ]45NPX ;zţ7 11g6n~bA;gWK{4f^Ra< #y2S#:X/$c4(zoC{Iy/nS*\ftJ땚Re^{UB# `3 +Ӻ~tzgFT(avIhdQgr Rq9抋41:S*]A4wJ *ByA39&]ORF*#˪t R&qr{= B ڲW*>hR@½7u竣~C{#о܏&%tC{ 1JRᛀYC!SڋHN ڪڅzh]NWUmB+|Ec3&5 ngt|0`F;b!AMJ꡽MhsFJZ:tVDJif^345g uzRC{hiZ1ּ졽#ګV$ P->f?MɲmSįoLmU顝x=KC;cW%vYhKCzh=ZCzh747y~)h#we]UR})KAZ"PA2&oZ~S)Qڄcsyh<=:]5zc/@cXixu@d:{h>z,)h:CQset̓nܙ_/hMd)ņ]7-@=2M:x|'tΣ*z+;>g; }ʺ&-mn;hܚpՆNh\tY)eg%!,ihe]~3Sc6:C g5>!P5%$CF\5VB+_W|LU, 1 mӭ;Zz3Rmx;O'y;=X):>U SA*4Vbe?AX- o3}?z,##r2P*RIPY* 4DJp9hE>jI+E5٧~N[pNk]%\sr20O#? 4Nq&Dql8VSMgTPkV?B+Zei|l^A s0OnyRr1օgQz;9%"H?؇ 4e~P)b3p yjBF(Z) q 'hx>%PQ:f֌&iW ǡV41(E.ة>4贁ՍU Cs `eܩx!.E#"=ZK^]+rzyCB}Z${z6'geSdV^JfUW\?8N' IENDB`davical-1.1.1/docs/website/clients/Mozilla-dialog2.png0000644000000000000000000001425610705234304017500 0ustar PNG  IHDR<;c PLTE 32/-3>B0 JGD`I4FPaTRQVSLeQNE0iaZbcdbl~fToqryqis}ozkeoaзͻľ®ȻӼEbKGDH pHYs  tIME GIDATx {<]hh(a VwLY:83J,w0PuZ R7]:d8nxDvw* ӯ D33 ÌGحP6y\p4s! ґs5uUۈ9knl쀱V4Q& k2m/Lz@H ]B7+w~#3ȅCgGɨ :dNZop2L dP"oֈǤS6vq[46O5EFh0/eKrrb뺁8,_J߫=RoGjn\PޛK\,|:+%%7u֟ ޲JkClRxe!/n¤|לۃBJ~ǹ$rA-j~ês,&7 ,,K,D,%6dPy?7.:ܼ۞23 |9rUi6WCVt7k3/Rd;\>"׹t#?:"R\R ?3 ·H9k^(6Gt>4 'aE"@)|Y/68<>P\y2T*0|@ /x4%:>$I.rO }/H !|k|m`\\nΠ᙭agD=dbrf01~9e7M_y\D{&DUuɥ+Dx4$HI ĸ"[3\"E!ֆ vתK>璛(D]界#~^>ٗyٓ(z=po=*}B.\ 4_cpў͢Mv+.OƋqpgLub$ PC4_+riz \Db|=!6ɰ˥|"e CҀjJ47!N4#y0Ւ />\肛Ra\͝lc,qsZCeU^[9|xsA3m ZBvI-z0*QLy.Lp .f+rďi\nBxe,cىN񆯴L.*]:?徳33nƌ/͍/ ؍^ȥ26/whs7&rYbnMk.BM4ׅ sn[ؐ䭔Wf-¤إY (AA,L_<ex+ܩNK\ rA!?KP'K|:%m\ rA!B..ȏbP0i֯d_zG0_r0{!e|ؐܦ$6QbIdž%q*\PSCij RlZUmdqaE*Y@uʊ<>HN\E 4Vi:T4o6\D&e<2躸fZZӎK/ոLROLx Bb-,cmr0KjfZ\K, .3X{k7j0Y -姂KhSij#[83N=gڭJa>.zY#c=c.:SY\`ǀqL)rV&M̅tW~:5M NL}حzò{.]ؗ Qb*&9ia`rrav͍a:{.Cto\LI&,ל9Ӯb2viڏ8#M2snc=+[<)n 2Lh\f^;.^$3K }RLJ;"AkYs hzKzE2,R:q) Y=?rk25o~δ"*1\A2>*[6m \rӝ]ZXek=/ J d2'=|+$n0>l,h2^QK+|s0ƛ. |]VN,݀V3+C&o^}NVzEezz"OU*]aS,,RFnYL(ƍSJ"ʵVa (+JV0EĪ5P(ZW|(VEu v{lAx }&3iC1Ti<Ye?Q\QWjW=i'oUb<FOr: ^C!B.{d l†mv4e?ǥ^.ݵ"' ,K6L.qS+,v';-+3_˘B~̯D(F./q|]ph&El=ԳwBo4 g-KSW۾  egۆŗS\?F3m#ꌋifBm';=s7_6:{V":;&-^q=Ĉ¹w3j^,ŵ`\c,q"oJ剒IFˬgk^ W6K1 ˕pY?yKK\ZNr0G$?eq4 /σpip%HR🹉$\Pp(%Eӌ QumDgm[\H'd´`IcZkS%|}:BUS+4\VWH|(Fp1S(sƬc_ƴ7+嗈"K+r|Ѵ,5su1KWPV\~T:O*+RghWɔu3"N]xu|wU"rA!B.Q\qawP'ÅQw2s[hk 9 90>wzzi갻3׃_I!\0xD\Ura| 沍o +ܦXuC5D̓قFl0>K2i@VZt2T:t@b 3Eq9_ʑke+>cź~{2]J\r]9s؂q~[9ڂ{.)j̸|4Ⱥ QxCbJ1G8.WN rA.(B.'pa Eտ kP/\ZKj rA.K)B>/ڻriui( &_vl^)\o{AW6!o4X.DjzRմ-WGQkµlRr Ƥ+L~?ק?O=ø7׬ ?2&ZTLlfWє=kQV\P|׶[ 6 iN6s+\*rh̬ 4rqkU]*qN Vjuێ?m`hG`a`7KGuԬ:2!$)ox﹀+F}sv0ue\uDU['Ko]KC @aWq>ms3> ź?h`t%(=w}Z7ZHvLtmNiSLtmX\zzݶjL |j\jE.+#&~y_p$I*h1:t\Z3m*k1h1,#, &reYYo&tVC#=ε3˝*LHk &Iڞ\?ƠÂ0>?}i\/bw_}#.i.je+k#孯/%iW־%w4ty #ѴX,LE1"C^8L옴9u7]E $E#.iSG܍J.*!$(|bFmnW*>DK  iNt*hu};ҽ޴w&W"9ԅ23}k]w.mD?֌.maݜ@Vz)PЯUyerJYi{ D##X2pC:8 Yh91ʛNXd):"_γط- 2kl: ^A.gܢ^rw^(\P\ rA.(B.\ rA!B.\P/qg\P rA!rA. rA!B.(\P rA.\ rA!B.\ rA!B.(\P rA!rA.(\P B.\ rA!B. rA.(\P\ rA.(B."?\ rA!B.\ rA.(\P rsJ\ rA!B.\ rA.(\P ԛ\oP$v[)~ rA.(\P+&0zGri޴{ɯڟM0zυ$ 31eݔ<20\ޏA 2%DNv 6ryG.O r./m}y}W\gտ_efљ齐Ԟf{(Vɹԑr^ Ћ9[ƫHxM1R5.8:J.P1zk˸pN [ጯt;o,K&SN^7qRC &)p io%L%v<<+5T>m7ֽm\4MS{i['M~,x & _ųaq˶(L7цj roN,9V?<vh:<\%1_ i]DoRE#.̴k_EtXdx8f_x6#G*1`Yk8*qer!0`F`-/7äDζMxx^Ow T#\_hgE+_7Q/ Ç)/T䒼Mݼ(V66@ rA!: .hb5=k\j)1#+IENDB`davical-1.1.1/docs/website/clients/Mozilla-icon.png0000644000000000000000000000311510705234304017077 0ustar PNG  IHDRxB| ]TPLTETEɵͼş-ۛ5{P pHYs  tIME r/IDATx\ c: ՍAEe}Cm=˶3:Бs Ȑ38+s = e|\3ז X^MdQEQ0rt-(cPnɎrn2(0o:!kS=arpr2(`Ѧ+sT0챌I@3H{|kZ4-J``,($) aH|f+.#ͤMla O:z 6x:bYj Ds8w~GfpUd;/㓘 I1VW7HBÑASrW',&jd$_3й}~ f"ڦ{;mo 0&iF&/11S=D@>. D s !Ton3+QɤoAz4`3%Yc-,&0gq`G ' __u.<ӳc:Fv <9 Ȍxr/ B"J)Ĩ,"]aFȀ cEYñ D%G[0ʶ[ ># xm-ʖypf_(ėca:Hm AoMǍƠHTB K DsdW%Vd"U"֏`Жw oH[08*1WUͥjI>@_Υqj tOؽ<4eUV*r&SϹq&ߨ:y7 :='.Z]Z|{SG"܆*&ki@7xx'TUas[[~j@]9F iTҰUjoo4$1K%%`9WY,q^sY-1Kuxde3Dv$uoê$L!X*1vX*q,\bؽ(dMj !K%&Gwۭ׷9"-ٜoozhmU~nxN!kbjoVMb@`$koY ynUDm*V·Xg.u%CߎS'$>%LIP',v~s-~s~yAiK6&1k5 ˟Y<pz"1fo~c8',q8K%ۭ,q8K%'N7fN_2x~4}֛6_d>iIENDB`davical-1.1.1/docs/website/clients/Mozilla-dialog3.png0000644000000000000000000001253110705234304017473 0ustar PNG  IHDR<;c PLTE 40,.3<4JHGEBFNZ`I7RQO]MJA.k_Uda^^Pckw|hUupl|nd|q}h{^ynk^xmx|rθǿҼebKGDH pHYs  tIME *Q+IDATx흋cǥƑb<`>֩mnk=q$$\"m|Ej5hZ'i~n@Tkb(8{r8Uv]pp6 %$,]GZpݵZIоkm7MZb9 ݰr} ?f|M4`N6h?m*>ߘ'ج`k鲉ScezYfj5||: ]fn!{ #\8%lQ0L?Mzeeb.3!$ V2a4j\Ԃ*V'ed9-3ޟe~˗/?O .ŋ*\-Ze2t\= p5]Xrk0Die5<2zjvljX0ixtok"!ڛR6imێ7y A.mwă2ژiy k^6X&j~Bf)i=Om;Y-itp/e,mgY\ q[]a޵sM&[ALP6gSQ.l;k_|gtd 3ʥd872(ry&"Pٛ%^ ;t+6]` W.so˖NGs]wYռ^vl0__.S9wTa)>!Ѣn,.}МN j[z #lY?[xsimR犒,uK0Zۨ9=)BA?2b.lVgS] ƥ଀u_\ yVQ: tk/UYNkG,JV˲Ir91B.\ ݹ\Hהq(?ˤKYH%Z)Pn?K6R)i1TiZZv!M&ОJSHgFA\qi6S:PaH.\V<"?4f^lHIBb`\-ft;a}]OZs1O0Uw%p0hEy{:9os3UFʖ9Kp43U+JgSvgKo;. !#G5:6?xNS{[L&P1yK k}"e)<з܌<=⸈x9q\(D)svڃ]s EZs_gRH+e4b]OC./AryS ١aLY w\FHr= P$>` \`hӳ\!/U\+*!$ T!wn ]T `7rA!B.2?CS'/2 &>|d3䣹^ u'=־GR4r( H<JK'εFiDŸa#8$AXӅd&+h+> 8RxKJAT/6Ue"IPT6z˪ ӽr grx&y]pNʈҰLȊlLT!6hssQ1vȶDFbz5dSBΝ ^!528Xad{T2(k~hNinږȎΞ.k`6Kl ӛsM~B 5 .#x*K NC{% ',SIlt/2hhh.bu$!$T% j@1P R#w)/o$"=x47U]ZNR?Jij A4BWmh[7/\Ј8`; FDZCD^9-8 a0\P4ꤴRNJ5cؿ rA!B.(\P?˥3[F)4D53yx㲿{~t!f/WCj΅>BRwrt!L_7j)+M%ay_I " $t0y(JhpƮ zĝ#%!$s?3`/-ˎ&Խ7ˀDS%~#dh+f Cӛ.glk.lʖ|Ly.[P߳i+jky')gŖ?,$9m6޸m`ݷ,yV\A;l\o _Ʀ[ڡd74ZBi4sw)$W'~z qQlf]8Wݓ[s`\K,7y>]'PG\lciHB47\?!8'_d/;\`9qY1 neNáy_<;f% %;S'yGpѱ\&g6SI {.a\ࢗ6\n{~+&HpI=Iyϕn#v\l=}W ۨ[ (||o8:Je -`.;f]U=ʲT2XR+Q?"jK\洫}V)ia 5ؑ4D6/L(EoAvC}`]ִߥp9ۈ]Jf}hʮMSRuH^}W;od1 5l1c7r |?J_ ?~;e s:.p'9];-\qY?%88.j bohk9\=gf"x\F>z9}gh?ύґsݗu"JC2^R1\Ͽh(#JMжr;a!.g Nz4Үb$, W"\ Ը|CŬoz8QX.P\V;rjv߱?">=\ޓK,ؽia\>!2OrqKser@.Ϥzє)XЀGc1o|s Sͷ)~ %D~UUK9v ˇrQPf`5ϺBﺖ'?O\N~?O% >A.5;5\49,tB.\P rA!B.(\P rA.\ rA!B.\ rA.(gs F.\ rA!?Ir\P rA!rA.(\P B.\ rA!B.\P rA!rA.(\P rA.(\ rA!B.\P rA!\ rA.(B.\ rA=Nq_\P rA!rA.(\P B.\ rA S:I.8~ rA!B.(\P rA.\ rA!zb:%齿ܢNI߰\ ryq_%FVߪj$v>fU#|{U=|3zJ=*Os7aROMmqa*áOc~ɐ;rID\2\?H-_ErZ8`%vKu\FL.Aj .$Mew3kq9P 9˾O6.UbjdIZ~&ԘhK?rH2t\~l2qce\DPB19 W<^.CFi/!G`m/_SNRќz7sߐ!c]PtbSqΘ֦ߏf/_Sۼ+SA|=$rnabHz<_ݎUTW/_(b9:S/&&^y;.$f4\K/JkMyikj Niyb( acjj>M %`4sS$kz5PȀD: gfwW_6!ˑFS┿lLp{>&9\qIp.R9ryG.oS?8a4Wo[5wqB.\ ipy0P\Zf{@ue?m,gSSe:=?r-nʟIENDB`davical-1.1.1/docs/website/clients/Mulberry-screenshot.png0000644000000000000000000011415110705234304020521 0ustar PNG  IHDR X' pHYs  tIME  2]-P IDATx{\B!$@!" RH)j}zk^mmRRkmRjH)"""DCxeCx_u39sΙݓɌQOO#=F}{0@ #c#oDA Ӂ#k8B8ZUؐ{Fssw@HGPM U- iSM$sgy!!B3HčpbOOC@|5?y pF(GHZ%(L?}ͷ=gy?#)RyK⎐WWZ/<1|$O©fJkGUZw+u/Yf{E`ẖ>!B+mh^ף֍6ԝ.z<"d1JKveQRw;>±;JZrl׎yplΤ>9O (Oؖ6j1ޮ詃@v%O;@ܿƮH˽Բ!JQkΖ?ȗ"Ig3HP.K kw'񶬫uJղMvi恣/cF3$\u%`๗4jj O2iim-mӧM)SvG§ 8μ\h3*<;N!.s5cf6M+&M[@ j&XGw;B~G 0x󯱟[juq&OC-|gS}3wnT_ ok~?Ҋ&a>+^}3` `Ғq μd-S QՏfāE+رOﰚ٨[S?s6G})>͓_ o/ غ ' }}LLM& kNojw1E#0ܔQXKRumXhzjw2q;QdtuYxceS]-3S3zI ƔO~'T A%MJ"DJHP7m7 @R{9I}&e{/|'V{!^I(oU0!T*cԭ@JhT7@D _~Is 1nmU5 'GvbP(d(9+qsWN`pFCEw ;f3ܽ5  ,/idLp/i`occ&(ݞqğÙ 抷$Ė,PZD}E<濙Ճ2i᫦tS4l:KiђgGu݆X 3"N)Z nC,zο\UYYrDɁ%{7M|zS?iе:Sv Jtb7o2 p0_GCyY93B7:Ia̰nnm50 4"9qSkܒYp7J[\c/WXg֖F0y_235ߚda ORؿU:uջ1Ipfm4~ӑ3,gBŹO q]ꎴ^/+u'cΛ1aFī?gY;4{ϒ|,n}Wl/;rugwVON<tȝ|}gU+ػ0:JYv;!O2T0!Tccc_ߦG3paF Mx扂\9<&ohk-|9Jel=]d(VqxJ9'?##{7vq׽6snG%/GY@jb2i~:M"ph0fÖ݃}}E;~?^,?|d8&3ۊi#EBslvFOC(M%+@FPBVzIBn:tƍ@m{ٰ#*IƜ 9*m3Gprr˧{ O|PSqHS\`!׶nU_.Mvw`q΄ʸ8(-/*)8{dkK m }4%bw'_kEc"G@VNNNBBBBBBJ#no>;gu@*N 3u)3W6'r 83vlZ[\,6'V6-%0a ݝZn_2E⾌sg^齩fϝ~zek/5]ΒJњ0gO_CRU:rZ^8/?&m#? s-lrYqwHՆ6+y7d䞯m#&Eqݴ~fxWw5^1QdN+s,#rn3kMh&AY4{3Wh#' {;J"!Rn8%]R~A> 2鶸^&ĠxQkbt7_%{^]q5vT!!k1j̹Y3gNrP-痌5Mq}8er5vWn&"J][Zv .L-Y #89r…k.n:vNDnjRwzY [`5*JYj٦ϒh+yۍo;Ij*/d ip**,‹zegS8/6WVgi}Hn~Sbw[hމ$?ѴTWnpkxeu]N.8 [@ /vrvaբ2^Y -[hY'ʯ_)u~|KS,q}[m #Ď8 WOOZ{{{[sY&#/ΪY E_ZS.vd]&: BL#7lyi+cO` g<[vK._)G,~m-GR]B~B[؋^v צ=;Piqch|I(J?q{"g60!M53T ,--3Oo0:a숀t75 PWsvk3󬭥i鹈jac}řSЭ@ #Y$}A3:Xuت`ǽyτD"r@ aQQ^6+ G.ގU+, rş ]!bBEP ' ÂmL&Cd${Zf3oh@  p)/+pz(b"il3 `»V=ջnPq=@v` l3C݀`4 5tϨ +- EQ<>+67aAԓ@>{&Zu9` KB̐!}$P- 'KKNXq,0>ęYɊK%=][VQtՎQm=j#BR-<#և"&h@Lrwwwet;-0eǒ3:{ V@HRH(2Xvi3{D{}khTJUbs;,:;Mq6R 0WQL4ݦÒ'Iǔ'4%h:4LJGeheX̊5 >)ZƎ>0?ܻ}n6in[+EMCaõV єv#N Ȭ%tP(R=IPc&hRxPZf29LHEtVA`@XXX8fl蝝$I!ϴIƷwcƔIK#92PeeJcixp$JPe2xB8)0 7\>Opi"g $`uTf'*捇[bZY@V9.A9>  3KR::g$jV2ҌLAIݬqeLc@ Ph++CEIU ߩ ӑ$8ۜ n q$Ɔ $g$Id)Kd,$IUQN=k3Rk44TR74pǕ _.Yj!H{;{OOOkKJVṧɀ9Ò$Av\ >\+'0D*}7f׊U75͕W&{Lh4$AW/@EnQbUe]LM 8fTdzvְqII%%27ini;HzZ70T;5LdЋBx V$qv̚ۃ1F\kK[ MF8M(Z<0 ]$փi08qBcfRX d}I :yAIj uc `K̃`>\h4L&N譈kHt*;[um3#igb5v2͇Ud;nl`@0e. GEQ Yn `f̨hl0ѝ@ DEuSjwL5O-~饗=:*q\Vd2 ndvV`+zU_|BqFR 3^<4S-%]'RFW=˳@39< tz9G@I^N$@xLB$1yQrbɰ%aX<\.$0c$ `X5\3´s3!BCna]ז9{:I#1?0 +.)Xp ݙ792~ֶV5J{%6k\&x] &I)kmiѝ@ Dh.T8f3%9@ŋ'yLY kUV\erܸq־ 7ۚ**ښ؍>%%*JvKV+֬mmr F޹<_/߲Ke;W;Ev:R٥&_8'x:rȥZaf{dfaIړW* W†ǎ@,HƦvh: P+upp7~إK2IPjHo1# mf Ӫʖvuu%"b@ދP###.Ϛk-]i*pеabɱP+,氖i015Zr\%h'lmlAk f4eBLpPWxƜ9s\]]3US[cbfr^Z{/&}jZ݇pHJMu}]}ScۂmcmcllW]OV(JnUCZpl6ˌctF#ȌiVMpmllVENP] Z007 û3vp<842_NDwRlaxpl'ZZۉN+ Cg 6a]pH0 ,Oee`[Vp, l—yQ>_Y&%%9 l<y'r_ ;?]#!]Xv*YѸ 55 ;99UWW&f;} ϖՐ5]6pRph@<5C{d޲C)KȥH%t[9<Ot)((\T),ws0d2f3Mq;׎J>,@ P?y{&-<#;w߷;˫*D]HӮjlhz@ӮjnR*Rn3 ES1S`cT*UBV564ZZj)Sw*&2S&W7Үn-/ ZlMڹJʋsi rҳR)E"b;^I.N/vћprrr'bT*:FunOJYW5xwٕZ5T~fjb*Eȁ},Q\Hei˪ #wߑ c.u ;,GQE3S\oޔ?ifӇ4h~R^XT*UTT=DAIJ([2#v,Om+@hgT@ ١)^Gjkm7]K"} V38Vp}j~\]'.ØҬqY umJ%CPjAR͘,3%aaVJ7gk]y 8hifLRltݼi2D"I=T^7ܾ 264, DN>}]x!İŘi1o]Ͷ7J-*)9rSfi(!*D)YT*{@'Nv8™=f8E8 e7??:vƋǰ5݃>w[Y'Oxu,ݥ7HF]59'N/8JklR֨XZuKs,OX|~5@+=E_,XiSi]@ F'?¥,YbIƶ\17>SO522jjnR yRcckeLQøYAfIؔӡjQ*ֶ10e0pUaaiwww=8ఙYR2tVl狊nf41ƒRrƌwXͪ݇=fbF6}JVa̱3'Z~1x|aXZ;bV@)|{Z_\Mr!۪euRyS;Z+._- sކ٥Ԑ0$w7Yǟ&-3W~ƗR 3 N :Ƥ98v7+y'Vyg t6'n)(<;i{ZQ}yɕ ^O lY~bgy\.vdFM5KO{ƱLf ghެ0M]Ru9fb԰MMbB7Iry\c MzG a@Or7f ;a j.ʜ/TCy WbSRκU2Bogá7{~|Qt{Zֱ-k!S=@ *+f= 1lP+^J|+[5#+;O{ !xjτ}Ϸ@ ů,=<x4(@ O.x><^C d74}~{DžcK+~ }"ٱ-[ho,UQދ~󳝅'j[oO~~5Y6Oi(N [$Uٚed{IlwlJ(L(+ -9_-zu%eBg7@ #C^bg35x#Lv/gt!R:v <{'0U_KK?qVLPfFgS4[t! cm;{fg^i{>`E8]avx9i8?X򠧃V\b\>Dvu;EQ-075u3Ĭ]_5l@3`>hFD7آD[j)&,1M(6WDSNlUkbcc4؍-8i>QK׼,ھ-18P?/7$|u7EYT7OrB7] M.cYRJ$Nj@h}*\FZâj*>.6nB`u}̜>3s#믉0{My!}n☮7zO]zokHN\'oL7Z9|o+`00Mdի) Ɲ_/yC@ `)JYLV+7 |ޡkgƕ70WbSwEX؝vu1N]EQ N:5]P$A40k 999eweuoz)bPs bX? ,8RmASNݿ _|`4On=? o->b-,_$%-mzbٲNjnס_Yq7MM}u7^n͖uR~#l1 ^ _xiyAA}fE,Y='7~EgM\6jC k5(#8sǮ4M L0hxxX_\[QH@ |XlQ.jE҆]mg5@7j˚w2ub@ XPsg-hǕ=8$v^ @ GukI&o:@  9@ btA#XOwlqԩl862z0 X  ` c+hݎ@ eu*L&Cx'|T"\*t㏇xZpe0 N1m8 Q=r*딷 nG /RTl  삻|guuuBk1<+\v]捛vCզjnjnDJJ}wݽ"[wG1\ײW녘c&MbXZMg&d27xk[lq}4_ 5(/n~Wj  -FFznG ,+Dx8'1*/MN"#ᡯV9ggS\T8}qSSKr_0L#9QT*3fώ ey)GJfGJJRZ1zP(LJJ6nz0=, <"rPo- [ߦ{,Hn3׬˾xT PPh`XLЛo}ч9s1屏>h7#5?[PYU1R[Vu(TVᡯ)qٲEvO|eiaI >"m[V5gW:ߟ)Uqr'hy+pP%+ߟVxԶl7/'9* Oy{E87 -U+w ׋e~̛g2 A{@?4s҃b˸{`8WA~-}\y<)bMc SRR/|7ʖ37*}g..` 5_OyS79_+JǾ^ET[oWueɑ&PMKW {7:hR6F$󞻺TʲZkNɾ@vNcvx,о9R]]4Ωy`ǪR%u"(>8fkW `['RűS#~úUk?۝v0ݔkeųJ.=ru!:re͊u}N1o]P_]QQvrzK"i^yy\'<Jr'@=w`̩Ӧ@ӇwZ~jMu[JKꯧDԴH=V|JLV;D _+ ESs0&8>R'Ǫ5fwnLw-H$ފ\Q]@BBX._K᎑osb% 5%[kx[+KU9sT܎@ _54$Ԕ$OB価,ΎOA<:epl3Lݮ0]6:YTk,7/#0e DkGSas:01'+u߬ej;Q;P&Y.w\l_l4󩊪#tδ^i80io>b!H$`E7| 2EzJScܼ࠻FW6}IXL滏ָ.#p2U *.M;o&bbbt 6GN,|01#l܎@  zg:\f dGoo\{'[[Çg#{ ،tdduk{GPd`& ;p`Il즯]‡ [ q3VO(Ƿ3u9^}灬6y]'YqmG(;+;;;sfkϊWY2o޺3 K$4'MnB=kܾR6l&m]ꍗsN5q6_aw4cPQZgk߷{5W5ȫL8 @9l 0bF=%L(l̝|8+ߺI_QQqkX^]kVu;@<TNyyWS G*jpyö`?Z@  ,^kL=<<\<̚Y4e|wYso[dB7 "6Nv,::Ħ=|0* }]@ ''NFhyIōqqqq.1$++ +P@]u %P0Klj$&)Rތ~s])' %P@]u %%Zk3f-3uE3ӪjlDυ0-A֐ЪvzqtBAA|y%a| \AW2!Ea )86!a+엋- <ƃnծV,@e7UKH$6`Tk}6LR(__aW&tnm'N#}y<̋Zacn0ZGeK擘--šX~zb|]SlN_XA\3aUzbҌQ' n{XǑ3~| =`ۿWfػw/,Yd`gz$)}ݝJKH$n _K:^0+ eoci<^?W`&\OO?}v[cOl{u]eҗ#k܈#ROjC:fDΏ^J(y(`Xqv|v&lsOx-ozbD?YR..' O|k賤0f䰄C0CUYV0 R.ITɷBrNzpܚ𾬲K!Ep_V0*RFMDD}h~{M<*`re>on#.ѐeW4;=\L,t IDAT&~AqHQlSҖK0&SD/ny/5&N{voV.a(wEE*Ī+7N=ݠYui?$**Z4Vj~o WVA'$Id茴3SC}۽٫>Y> 4xeCZFs'NgV;3ؽ7W+#ijH?AR(lT+BܝFSXjǖu;⩻b0Mx(`FW]^ScnBZGؿa'_e_S+ma-7N9|Ao>۹9-D̲UfDZ~X=c8/Vj(aKE켜 ;ΗM Jzx aIYQҒHmLg:=ʁh B秬KzYct "EDCt fC+\dgjK*(Msjf '`fqITЃ|Im'8YY`:f籂mNk8d8֑:zzțW\q#O`O??8eտedI, 8Lye>ޘ+(?+v=Μ-ƽZDHH@HHkEpxU@臛?XwTϥKjvF_\EW1梀wF2/ByZh]Qa =ٶ7W_E5._h6I^ѵ?\MVBM)w_<#rNWsfx-ތwޘ2ގ9Ս*^`\KY9^ϗ-GoE^:!e5u1o.Q5e2^?:U*#4tB#/;b7Ƌ7{~ex9g369vy{7wa3Oξm EoWÊ|thZ[Z[[ZUT;V G]&KU-c̗IO] RU@Βyh:`;C>v TE7=:גyY-&X=4uVl%,fC@tÁ51jE\6/&V͕x]qu<7Ӂa\vt Wz$,#??T4h*3r8_T]rz|.Rlf|`X-p`iv'zKSitsUA.\W~wݍ_iX͹gT}jg@|9@GJcFo9~, ~7R$=}`+nԴ@ýo^Vs3$[tz+)Γ+V\H߳SLƏ͹ܧ~r5,+0GYj 3ùN}EΦVpYT$5_,uyW3!8gLTnIdgsf_4.>Pi䦒]hzɽaLF9[,} )ݦYqLܓos;twh8w`򹹺\} i`J)c ׶yl{5bE̍E 4txųĠeO+..nZʅ*S?6ʊrB|]s՛=̥ D>>ScӧMW' swMN&Kfgn6{tMICaR ߲4XLDTjZvssX,a`=cȀͪa]ʟ]"Xb+%x=w(^pJ(;a~FfD$' "u\̭_rIYZmf=?Q#|>jJ(g\V ps.)U=]bϞ:=2nB)_|9b)X\?~dJ>\/2H>vۗ)D$d `XJ hv. /OM>M)D,ŭ- 1`;\\\ [Ye40WD#f/pNf/|07#awڣfDd-fwbhoݲeJ3$X6c[2[~vKsHu'Ox<jX?I+O{ww\&vv'jd7O6OKvzc{UٕI yjwJ>$X{Fu\ay;/w^ۻy#TfSM#_͎K6{ّ7Iׂp k grH-*h[-P<)&ƈQy^\)omVWK-Yr^"OrTO!sg^.8ճf iT} N~3,'-Cy&~ 6/z55.}ֺw~*/ij] :sz7.1|\Sol6MޝܚMwCƙyف|?L B8C.cJ<(t?Đffڿ'h Hٚ7\n:=;Jl|7bW'uolY;,]L9 4q\7/6.uy5i,W4_ml3'M+IZ>W8yDa\M%a"hlldtxZ`G+_-'r[ƌ RYX&U_6>FYD?:pv&i5 +H:O_hcң m.fpR}PO#!%w,!^LyL:fN6˦|}Nm|-+3-y2 xqQt;|#whkW>qq;f[i >,+U|=w7ЃS$4y<"r;>Ĕó]de3̓g09j7}ٮ~*g1-鸼Nf#kGwN5Lj&6@{HZA\-.W j/'1`h1q<"I|Jr%艷䶥ٵ'Τ!wgoSB6`6e$n=K8%foʾA&.Oi(fIt=7F8EQ7҈҄Uu{<t,mU%t5uu6gnf 4dEL1d+%J2z׮3žqeˉ8Ro̗ ˆ($$1xI^`F-ѻ*vvN)&!"Wymg K%YLu#>Ԓw7AYp絝+_^K}Qm׾ymVq w#;K;/٢/fY1SV n2ͭ=oR`!?]ըȐ^ciZ;y"HZd~dHǟfeP ͸"Kw%Ue5;Pá+za$j+LUDD\}$k[X`x#]7;g}onrHt_M355et79!dyUqyJwqwFtVw˯FXaAKrF2w\pO0zҴ[i)\8`sEVlq˕i]ct&XɶN7Ա{jvZ+S>QeEmrYfܮ8-w bkZ ׷:[HV,)2)tYU.&S+2&yX6'֝MmM1AP*g;P œ DDxi[6FFG Yp)dC#\c[bq)ݦ0m3zmglyyFl"3>Br:Sd2O m$%R;L۔e'ү3 &X- scKR"rNlA1K5xb>Ƙ[)oZtn(kh9Rbi)w`[\p ·;FD4\;U\b4xх 88|]>_̮Bm2NJQF@}`ӧO̜W5zE,a4puٗѭ'""PHD,bW6a)N`WHbNJW( ,"H$=i+S>]hE"P52۰uBy =y>|/WOHII[=N.cuK. [ZcUޮIf|6I5.{  1QYMS ܯY)TI\H$"E}qaaL{;m tbsD6e1 Cq•F#BgaOT5x پow]-̍wѡ-k/a}#^bם;"JIIK>.i߻-q2" ewƩM0rf=:X.aaK\\CY=UWK-ٰa?fWD$Iu*tlLJD#FT߼@GH3VQVx!g7/;j3uç.*OKHKI6,1>0՛^^^xbI~c+KA 2\AD$.\&C[N mVUߑK 0%%Y,;f/WW%O`ҍE9v/_v`yyy=Ku."$"^w-& /z&TYbiB"ػ.wU{kӘ|FfTΪ' ) R:$XV{!!!S@,Gx}SPq@Z`olyآ+N> iUUJU@ @q "*KǒK*as=2IQ\. %Hk`D" }eǎx555<6ό%7{555\.H^Cx}#s,.*2%r{M(>."E}yaD6> #bɐNN(;'FI [+(aBXDBKy{ |S4*xZ 3^%Q4*'7xcPIҢ_ jh\~Yk RR"iǥ0-"JX0\n~1E(K$9DV7hH^ntH]7swM{[T_͈N7yMHD.~^V{[JDI?sNe 3~D( 6,gyde7j%Ɔ%JxzM*X**YBAD K弛\An|Ī5kd6`Ѻ!K,-X?[n``2`]Ȼ JH"h.]`iީ882݇\fHb~|~736$d'0ж,"ڻ%eWD<1FAzzzDd46ȌIw Z4eHu+ш3"#s'쌱4`D%XD+"roI@al:|듶2qjj~t/(к'< RKL[_^?,b uuHX/'*gޓ+}.i߻-q2"zs` }Gk`o" wƩMm\Mw{sz{c?3k\_0`n@'I+n񠉱ӛ#L;16`j@??/P-%yݬJJ+1fH^/nuTSO X fo֧O9FD99ctM'XEHDʲ6l+p\8b[>j~ysW0iYpH׼ZOR(9I`Ao>e!pRl?M\':&KVobN!B8H$Qy^/`!S.P\G?N 1`IAA[ɱJH~o:("ZpTdĩ܍;c 9͊}}Z[T[wlQBF9YDm :Y55혌}v@q ")Fg=^u-B Vpɖ=URd=aѯyKD=yC4+>ZD$)[jmX,A*0 +U={mg)b#Q0 ?iikX 믧_Zhik)Zv; ITD4\;U\b4: 梷wϛ!<}y ^'*ZaG\fc9"L۽h@IYQVx!g7/;j3u8.Gԭ |}IDZ9~ L8];WyښDDʮޟ[bD$XL-BVǒkRPL.Wd (%%Y,;f/WW%OW5l  muKn-rm8&yNOt"bb℅a8=%XTpbjrԩrzXp fMj#CD~7[ ~1N`d} )&,\1kܚ|k~bg$vQv`=G-BaIY)(Sg#3Sg"<(298R{- PL_OڿEֲjanmnO~ tF%;u*wZ|[ό]ч {z/lOIM0oMhIi(SIyۢ{fQ,Pw{Ճ*{h ku[Q+W[`̣>E ES~^ KR:@[O^q-|>^:~Dm9r͇9'U{V=rv#y;atՓ+m!Mq*(mG9?fzh}'zp%3hdtLo v kIS{y[v>}>T* \p}Bj`%w$XH:"WQ'.W޾us{-O@,ۗg;P ">"r;oF6o!rL LG~K0 -Z4l~)EX'D$ՔP%tD(+3uқsw:yEI_qQlE}]׫Gh' c94&W޳f@1 *)|# 9SWwQ ^y-J P_b@ B8.]LLL:ȏ\{4XFA%]"21 "*pS :83%[|,iuDPW12ǐ+<[إvx+UHΣ($;$?4Σk.30:hP31 HZ`Ik rDl-bkӼ/{ҁ~721U"\* XsQܙz뛬D&WPԦ^WeH͎rz(j:yɫ'Ȍ#/3:l̻`kX\{ښ:0^h2/>&ND}顑Gg`@PS} >7%`7鱨xG!! jbC71A k)$ĶlEQ$.pWH[IŶ܇ͺ7(:@ AD=7g=mY{ȔLߗW4T|rv#SUW~_AySSz|MznM3|s$""O|!/Ljz M7,9Ogz^3kDTz+Cya%2&(!7ܙ}wbE?dA#]kpxe[dٟYY}12ͧ<<Ω "]E,,Y͛gak>}L{>e wt adͩφL_;dªsƮ1Mi|֗K+GtmXGT<;L;58Y®n%κM'{rdߞÅn%*}ImY67?Ke3ҳqx\gge3gi%N'凝i6;Zzw=>lO#}a܇YUvu V:qT=iSf#TQjjjU+髩E\]yI칳H`-NN))>=tdo6 qK&/yx{|ҚCz {#S6Ho K֮| uKPu0%~a\)oDZ;#.!ܸe]'8c)l" W|P.,~{uXXft(\]M$ml+/66܆p͍_R0f͒}1+`8g[Mr>}f_`•̿V="hMS氉eM7|oL7DeWL[bca(ճ\6 \+SK-Bo8^`NOV$ys` }Gk`o" ݕxѩRmfc#\͝nXz wƩM\QP+Bv x/-qqXL-B:5@N$ImdlDD|hꐐ~?Q(9I`Ao`sW.ⳟSNnj[N]oPQN!=y*27!,HZE]N ڲ۲UGEFݸ3?N 1`IAA!se=Ċ`(\4jgĩff617df`)!<e=t"Mƾa=R&g:xZFVur9QwҷWo/(d65-ڛre,8&! ˧Zv#ۛm;7n"H Ju ZOx;뷸`3_itf,P@ӊOlx}jj5 u3hfVKko" 'Ha},Ø@GLTK FrĴ+owlVRpY: J` B"ѾKq6kM"$y Gq8:sO<^R 2[qٛN&&&?Z0P_VOEXa)@t~YH.BO >-d4 оgZNY 3*x('l&0%CUl $3 S^,xf RoۼfpɪlǼHZgG}P w#A1%R1%ͨ$C-\\!/K@gԯaAlݼU...ߦ,68~i`^K{{+Udv$͆kkCt^2J{br,LR^5*:9`I޳Fy?pn)}S%^|!GBp)kywHLVvVRkhlXrDd\*D,KV9֬|!FPEDֆL,`-l8Ku!T*%"Dֺwr\V{}p}H^6D;DBh E]WUU+" \zTy W===zkn|G#cM]Oy\&\jB(^^vED\.7ୀ75 \p}֦8-_,xA={p!,x @bjR`WH3 z>,b HT(KF\Bf_{nWH68A$'߇%t~gw2a*Hг=\l@ڏ. Dܹv(5p|V\r](f5e#paQD|UvA1H<&v~O?ڵvǦ=6hZ{*E;<^PWdrfAvLw2P(d¬ik/VyM綝m1k޾U3qMDRcla!""ss%..B,iMŦNMe421uJݹ#'-ZXpY: J~h Y}? ^b[aú̮H&5Y%"#3SgɖfW.!&:GgmcI}:.j1''^kv65ڻWS?S"eoJ:헚0fblIDATk`C}Zɓ ɄxK荾oc'Xxv:vHK󌺺:=&/Pho;_"S=%5}¼5ijaA yN{DDdfba!j}vED]LGՉ?kb{FhaA諰6:X ,xm8 ) @=ll;xmn)) @nAa&`J`J PA/>aJo L L`#횾X,V{/v @gO2%_=z1 L ` zTWU Nj~+*-B8<%< bL " L xDd ,$XH ,$X ,@ ,@  @ ` @H` @H"6B%KVobN!B8H$Qy^H^S>>٭Dg,{3gIQmVB'ώ"Bb!DD1%h ;IaUˉHt,w{~?~M$%o^0-1z@gcOD >-܇_Zhik)Z#ŽL sD"b*Ue,x^^^(qu̜u> P($;YԬ/` @ ` @H^96 @͐` @ ` @H` $XH` $Xm!h bڻ}}SPqx8%'*:nJf@/4 `'5*-B8 O @DT^!^[iȤD[N`$Kf9\XiECfW +QY CvQPUuP]UA(yya]WZoOnlAp򼘨뉈 gE.+WsvW]>ӞG_ v@f7ϜJ]~#ɫ ߳Vo+Iek`"CK>g;%_{yp;V(>+s1AVZ9۝~{"Ѳ3Vc}`"kKo|N?&8r~[ܒʓLuE9Y4/tMV6OχӉV7w><{Q5G~I審!g"d^fID=^Csr3ۊ V}1j3X/Ⱥ's&Tl[D4#( W4f'~aDtK"7nb+TsYHanىp;뾱0ߑ;Gnhr!9%_:g3ȜgD`d20D %,6\|֩߰Eޫ ~f8t>ݗn+{U'kfDd;~,j&OuU^veZ,6DwvFt_opT}1^T^y}MPBD5yi<{' Wݲo25^+IDKe->\Oin[E.p @ .^07'ALH^8c"r_^: F{_EDnn}|s n]5x駢W\t,L8-?aN=WSŰ ?#],iTa?ikgXPީqD#8*)zǡ͎`bTa_[ @ .ro 6eq;\[?[Z?w7&n"&ryN P*׊b"7cߐh$qBZ_g憵>7i!nHb ȤAޏ'#"`YzXWfy㖬{os"편!'uv'"ц,hӧ}f+N=Q@wB;s1[ xq8 @J`=$XH`,$XH ,$X ,$X ,+?q@ll.A5w 8T;r.8pf,u8pP62,[F5}Xn_FB8 -*/Gf2% { \1/ 4H^UU?bP S`b8W4M{bॡ|,i#B5C ,@ @nH` @H` $XH`,$XH`,$XH ,$X c#]dv(*V{B8 OD8W`Jु5Ӛ Nں{QZ!QDDm :Y55>8mZO:Lȃ;Be>-dč-c8ǰ ':H#x\:C0(XamFe\q߯}L9!^MaSÈJ;&[)2^" m{v~`nhqGCd2tQ Vt B`兲DG_iJMzHqiq@`qn:^2\B20npiChgG&=X"~~ybX<O&g-_ej՗gsO>s9OK @`,X, X @`,X, X @` Ο"H:i9s)`%aDDV_p5d_:v0v(/C!rI5Nؔx X   @`,X   @`,X,  7*2AKlJd}鬟3GB-\n GN=?lX֝Gn=*:ۗ,[yyL9!^MaSÈJ;&[)2^" m{v~`nc޼yc"d2tQ Vt B`兲!#;v?g_z=>,R\Z}`(X1wL{hϚS!qKG;;>>0,A, ;wRZ,v+@V&|Cn:_N9',  @`,X,  @`,X, XO rڀH$Ng9v0EZZC""/8M/Fmk ; ;!Z$HlJdDe @`,X   @`,X   @`,X  %6%{tϙLaS|mmv!C. j'֞{cskkһ?qݳf\TBgc#/:U)ī)`wQiBpk>EKymϮ !,3f˶d2tQ Vt B`兲!T >tɌ3RT+?j'WFͤv?zMoo/z7}?_?e/( Pz{7noǓ~Bccccc+X !Nm}q梺|둆Շ/Vv>7~m{!ߨzftj׎Ï_ueUϝGΝ\5w() 5w=B2k@ ֟~}VkwЯdsKVV]U}aa[s"\үpOҰ.w~nZB ,m+?;_ژyWŧTC)xsEEEG^~uS5_$|@R)/?!I6_"ՇszIENDB`davical-1.1.1/docs/website/clients/Mozilla-screenshot.png0000644000000000000000000003232110705234304020325 0ustar PNG  IHDR XrBPLTE/C0.,f?+PsPQNSueW6}g&E5uzppo`\͂~hutquNܒu‡aĬ!ؼԶ14% pHYs  tIME %r4! IDATxc8^s{- uu뛙EVh-"`$o§BvȱsSdܹgyfճzv$YV,+fʹ%ʶ7_)ڠ%q+x[b={}mSs[n`_z͗؇:s+TlTdjhu-s{YX|utZF31̒eϪͬO곙ll)˚ ȁx<٧E_ RwW^daA܈#D\!" /_"B8 j@F58&u?ͭiN!5WAXk!:wdEbőUFq`} *StӲ,7v'K'.q-7,+ 8詺ɎRuW=UoXA ꊋy@yAj0G3]4Z` ^@R.-;iүnaQ9Iue[OxA]ñjz\,V67[%:{Z<=+Xs*|R: D`{Fзru"z^s'=8?׳{NRS)$T^v6P^ Hivwip-:yIb0XQ) Ȧz"Ha:6GQT~ kHAvp]0,+.A[Rs>j!:Odv Bv.u$lmL^ks7oQ/U @`f+AF{X{'j!8:RhhvOXU k/oqX+7SPw=!7#%?]ZHa[<.u0,޾;:o;}yޛ|fh J+M^Ӄ<`hB!6B6((seWRmoKi/]* t27Sd2)8y6CCmž$>0 ad-@Tdں9k)Έ_c%Bm@;J! +L?l O8obEI]}-V&\. Tl=&C [V T6=-O6 BG%y89 eW@/D?إbwwqq|{3 ~vݵ۾ jGH,K N&nvjŢ pw@|'ڻ(ig H(D*T)+Q~/d`AܷAw|M@6:m2$.mx3K vqH-P|tV(7wW@xο!S} Ʉc3ߏ\u/bAj߃A^ V+OZ1 o\0Ϩު2-Wz۬DZ6 n0}|QƓ36Z9K,7|īٳs;(kDyzPǗijfz+26:43 [A0\ 7 ̒>]y'3*a:jfS{5?Saط3'&_ϺT7f!Uݩ[7H# uNU$$iS_c'YQM'3v^,xrNصegG{kQ%N=èvVdL&\vxh@hKÀuw9 Sf1z(gO͔{NYc5eGP3*zmb(9JC̒$ğӿ=}S3{\9yQz3JE7؜} R5a0"ap%yo3[~2SYZs'Y-s=RKqfYUg>fv8&YZ\Wlo_NKlYfUef̜\{ el죜O1;0r7$ZneWEK_yL|ѳ.) ㆟,^=\Iܙ5:=ͨ@\K])r#B~SA?#FfUe4Kгʙ vHȬZW=̣|fe5isQ';L(p<M$uJpB MkU$3+_6 Jv6s(D AfC3 z.VSW]+͑;>c.v.` 5Oh}p@T@[g j l 7`yVAvFFOv{iE@ىm[f{~T@XU/r9ycG cl?Wm ɛk:g@@F&DeG;q]ušjuU ]QBF:W6""Ti aA䙹"mW9  'P5^#GONuрԃg)# e9Zhh=S vN~."r5VC+Uu_5]S=X5׿9d\2c: i%Uխy( dfJVz6IfGs[B*Y #BR.G ܵxʎq%vz@x,E5 k>u==>I0!f{bFsȸ՘߇vF] 3['ע*}T;) 0X'dTli=ȪUgDw,GjQRqZ??Ưey =?] tx9kJ-󥪗=:u'0"D߶AX]yB|)Z߳TMUQ *~EW%cWrMGzj3Pݘr1SwERzx *DlJz(\eΦ_>ŢbD$^-3N! RL%a5 HC__+JUT ȃ(mtxWEċ*y@B, :K |RڭL;*1 YT$AT%D ( q ]S |+YQ WI#1VVO UI+V/'̈́XQ 64({n&B/~\E%9뀌=^}Vz>_ײ;y?Hͳ,OaaS3Q`5V7e![Vg2{XMt_j-Ԃތכ}kާ,H{KOqtΛeIo9<&ufU[^ Hm-~{DKNJiiyOV8՞?x'6ޟ<:%doĚ%]%9|~lsbʢW>Y<-/Nұ}\MދE#}NW]pz,L'&d-5$/=NԼo?:?bl*NT?͓Fhw'?D?ڳC_es(Ix 7u@V{K;}tXu_|OOY]OԿX2{ "5AOBkfd!{x\f,&:?ť ̣Hf"Xf2BNtvrܝm8gF*QVb-Ol#Nzb$V'HMr{ 4:,:YV/v81-;kc}QPGGA/b.=SG9s~:YMەeٕܶm+1wߵOWz'ׇw"y& N$GҞlŸNpDD*!M/ytăh>|IGWLOwb]˹2DIGW $_jRͤMJT[u #b/\OuwwG,^x C$ȴ];uKϴ/,6sediwtޕn d $Anۏör$+t{E{f^ylHk) ٝfL[fM=AO:bzҏ .co!>ZIkC>Wz=1⥛7򅵍ȯu'ϟdc=l@[tW+T}n%0kPtCk٭}inJ]Mt =J}Y{yx:V~!}Nd-id,N4 8Ī'eNm ف2 KGX?;k=өa5F0̎}Ԫ fշ*h45w`}jҝocȀ@oY(uO^֝~WRjkaU,F~x:{?mXsKvpҹS!y0,gZ`Lj$k#e}G!^l 0)=3I€NIԽIOmYm:1{;&%O0{1c$fwkrƤ/961{;&=mݫ_0{1c$fvOJƤGg~ݓ1oUČI7Ო?O rtLIO>*c$z7Ngy?a%dkL Ymƣbjw)[cWE~^ԃ`j I72 e܁t=&]ޯ:~ٶǤwOǣcjJbaAO: = 0B,  0@`` 0`ۿ @`_d@`0 ` @ " 3Q/md}Nb`R`ʛw $ gd$۫ݓd>b:w!9-u=L$I{hwc?0L6iKKł SWܶW,ߥp8꼝mOqcZ E2 ۄK;Sδ/Y{W 6>o9Ixt󏺾xۏ&SEz%/:gg9 }l 9&;D[44=?>M|J\~+k0 6E :sk Hx [* ɠt7'I{{b}k&"vvp%^e>PnC*;>!t8:*_!@S"5 q2XL؃?2lOwJF ydYLnHh TuQpVkLC$^}1 , ai.ڃw:.SvJaf%`BD Ku`;$!n/Òp@Ք\KO:ja>%TTBǜzeig^jOpY O שZ~ ?aEY AG51UDCI$kF:Z#|`QWP SąK^6*n@$A|A1bqD<1/&ٺdÃp%O*Huo6;Z w͍k{" m17'˗i7I{raTÃ,. fR8R6B3v/X(sа -S5:\5{sʋqyvB9"âiU"rI\eƼHS,Ȭ%2bG5PV,AR jyy+;&TgջBj~j v?S?r5[Vkk 0 @`0U.(IZ΁ #~SI2$s T  Zq&bkNsZ~D )3aNZڤCe79IO!㇖A? hޗ`-9;pzJNؤڤ$im08rJ?8異;%|51A ciDsĒWPM/hC)87''C؟ttFpZMx Q%c9ˇH86PpC{%|y+SSx4C$2m3Z"zG Q~gτeUbxcX3>3(]I u:bpMa_F9|8@œ_q)sDⷚ:,7ٜs5O2s_w=xu6fy GawǜWĊMg: F7 ߙeҜRkSB96M%$rwV+>%brt,Hw%;LМN8|zf7#xP iJO'jsߜ^ōs,OKq6=sV_DU. `Kܑw, ^i ȔJAk4*9ͰbS;7 tJGTPE ut] JCP8XX~<}G$ܔSԋGI7 ;_q&8%,^~Hn3 s@&GRҼo}x@2}&$XA9}9Aa$Z1EY Ē< <0<C,ZtK% 1.;c59r x 8a]5j1nVztm> 8InqA?~`$p0)IDATá58,I3P68>X IC @ @ @ 6@ ,@ @ @ @2h`z ȃ@~'78Z{_o qY8N  <qd7yȂY g:,m@ @ @ 6R-@}@11 aqwb)bqL@@H]|{ c)nrw@ @ @ @ wrwAAb@DyE w Hrw@ )C@y @ @C;<<B,@QG; b}C@H4 w $_'f^@ @ ;C *rw@rqSWC@H=rfw @>rw@ZݹN@@y @X, , rw+/wA@v_y!w $On<"; rw @>u=;- w ͼ@ @ rw!w}RA gۧzrwɑi; ryevwrɗ{#gp; h @ @ Urw!w tvwrw@z@@H=rw@ 5'1cǐf^@ @ ;C *}@Hݣ݃!w $_>Ń@@y ,I @ ;à  wrwR1@fhg{`xT*w"BޖG; 7rw@ fwᄐT 42 ;r.Pdvl A%F :YA wv|}0 Ք,J@@C,fYY^A戀L}'C^ )d?5TSЭSOFHLww2~@HjaV4jӄXMyU@nWͲR j>^drW.押׫ϴzuwuswF+@JĥƓrUSVDoAN(!w}qssE\ݐ19  ؓ4ra$>KLus#8|e.@ 5؀\Д\QN 5~HY?  2bzusM^fiNܜ[t)h H/1LQT8VUU=f} w?vpj^3r@TUu5xj(հ^&GϬQ1Tw9v;}wvN2K@ GݎWZ~,2r!M6B,NKC,#U/b5h+!VJ%rwYM~?VǾ~ h}]XQG_w%|Yo@ r4{ ~_햜mKQNOC9=8rk.Wߥ 5Nƫ>o컺5" ǒhrkM I& \& ͚US+Lf}gw"as}vSK Hxhkg-ӋT)n hhJYA2љr+ @Q@r(u5]]źnU|x@?UK 4kY-Uh[I5@8r%ě."IxBk^/]@.& =sS@ŚpB%2 g5@}K@r%b񦱟 /J, ,I^bG<)7lN!w Brw@ rw@גLA@y @ @Cr9<< Q@@Ho> !w ͼ@ @ rw!w! ap-{t? w Ⱦi;ۚrw@r C@6Mp4@ @ !wrwxxX#wSC@H]x|L ; rwrw@) #w)!w ͼ$@ @ C^y;<<<B,@.ܝR$wi; rw^@@H]f^@9W@@H 3@ rA@{ @XA@Brwrw@ !w hvwr/wA3/ @ @rwR 7 xxA @ @ drr@fdzW؝s*x^pTY Vy@ @`0 ` 0>* ALMUTG\\.[}8ǎ=yYVjbUG'׃`EY?vIENDB`davical-1.1.1/docs/website/clients/Evolution-screenshot.png0000644000000000000000000004626610705234304020717 0ustar PNG  IHDR XrBhPLTE (!4@110=5c:'1OcKJ@GKKn<@aT890q["=j|LqHabcecYV]uqVZwczhmsxwqisrpp}|}~ttn_mb|ohMyrOГ7^疀ŭ̼Ѩûο­ǿʈȟbqΧӿԺϼt[hۯ pHYs  tIME :yfZ IDATx흍cFl6\;bHh;-[1Loxeߴ(ȉmZI_l910 ͏GstW4z9;?7`k=ܱf&T܎dEՃ&lcp]$-rqʁ?GȬf^/f~phT*V ,o.jYj6+m&# .a@;DMyVV>`K4%J?@b/2J R9pQ zzA[/IG9n*OT\t0UB'OuD6bv5f9oVq' v bp" =tfB'˅T \F&T믯O6!f\fWӪQS]wym fU!xtRc)6- uȳ/=-ȅ.]R9%~KJy&!=fEaX1f8s ss0'tm )?_>ެv}@fhb%7Y)tBbZYMM[l. D.rl*ú._?T"+S%]n秀d-ȅ.Zm9իҁ\F%dN@iu:D sBޱ! ~#A K"T'O( w6((j'IQT mϭXrz74]c ., dw gD\6u5e"-fz?@(_tgWioݍ* R]"sI77v "q2')Q5Tcm [. 1W _n5mZV Uʥ媙bf=],K\je`F{IQd`}; v],]V6¯ ώ) խ3ZŵNC,Gz:S@.ܷvBmM@:=,@Ę8 L پ'T*,\ ^ Zٵx\Bɐɡ6C+7͊8Bbn@& DpHSUx#I^')x*MؾXN{UZdXA[+cu R/ |wVȘݙGe2RY(n@b~<`̚VKڒ,e0})u)lnfV,I'2᭰H'Ea'\d |sV(AWHlDMMQˡ 6eXSm@RCFsFϸQ4q62J 旈]75.4 fE)q@?sV5g4Z̟-C/6J1Zl<}KXQkkZ5GSm@*Z+'n@_or@cxI{uV谉fxˮaq`+TkB{x#ɷVm6x8A"k$ZJ"OYL)ˣSaRSaQeLf.r7/0DE+4yd^\KI1'ȶVd ;KT.Vck;wVy9Tdŋ|=QX*Xq*942@~r}iV8K)+ z.<~ ̯n2ť<1 &PXg2 #*gi1g #2{bL4UZ^ZE.6]2#QAT3{` c`32@bv2q|v( uj'v0N@.Dy MH\Eg]}lv~]ʃ.v/xr]bRmYC)@lX4b<8?3cF1$k G壡/9%i ' vSDVLO2—(?p²vQR$ϖ}م0-L|,!lqB{AVםI?nA҇& †YV ' Yo*@[t ]a+Iƃ։v: *]r[NNH-y݋`v ՈW(r?}ݬ3#C~Q/= /`V h"]-{U_ լeb~>D'(/C߶ O+`exDwq 0 Ckw9rk-c{BY$q) )RHJ҂ln!! )sŶSFY zVe?oCW+; 2Wg(N;$k!iX81P vȾ$/f d][metk]1jUk%zR}lj|dEk懹V~ ߎZ{ }G`G,Rʽner=io HVOw`}i}䮫jN#j.T4{s: A|ZQquMK |țptWoĸ1&iu3I?4ݯuãPrE[U76""aǪ>/GosBq^j4|Fǰ ww H~NM /m :&~y.Y}櫸p_tWσ\[L _Fm^O Ǎ@x3|G/den.̮.?ؙ52]N /0X>4u]N@R`ΊFe,R+,~.|؉b7?ŗ/yB MBP"/O:x_|Y&}jZ!`2z %W+oF+˗6X˕vVS&Vv>|Kgͭ-_?x1V>؀ )bٽ_}b_' c qѬy?<N 2jN<7y˼fK Z2q \/.R*KI3W^~xJqAzqe{+>hBil^L@rf_{·^~g65xb΁S.n}o{ yidϣdLCt2c_,7 ]E? @ ~:0sv~jȢ<( &ZPUk!Aȴud#fz#𣄜8XHf>ªx SAУVdQ~T_P K dj5g!߲"v%#"=S*[ t@ gFUR< )klE& ł/ / hqxA @43 b;oBhdfF3ӎ4ZpY#)\GAT=_)dV+UOX,y=?4VjEy4B<+\Vl~ζ~# DTs!Eͧo᙭_O+'nL@aÊelr ( ]7n5ʉ.-*6V34 |+%(+FJ&G?|$+O 幬lH-: /UEYKe?Q PBXȧk|Dˡe϶KM_WB#|[>jA>ٰ"GƢAePVr/ d,϶dExEiNW%_#iډ-|4@F LT[95V%HYR& + %5M$ڀҥE[5qE)Zy@nź 0N،{F8Ӛ'V⒞ӏ&,d̂ ԚlSoװ֦C 3ibz馺ͬ2t hAnsDI}( <"Oj\4 $ˢX dJ|V/W;a@{‰yD]HM' ?rh x ŚAV(_,2\@KF#}9zADtBX뱏g/ɁF(F.@=G! C }X Y/'Lm!\=NȢv2hGoYUI@ӿ_&,3 ٝ,~y( & 3z/|Fz,!HFA,ਪ*>hz_A qat*wp1+WLO9q0˄A 2\1?H@ԉ d cu;o*Jv&d@ 8ؼ1"ZaX:?HLG\,2ŀ@ ]1k#fbG؎'o7H2D ҌQqB7ia<;ZF|v4 CbXb-XN\,@d~,zA1w4g=8H9 =2l r]gK@N{l@XR[q|jh+@.C2 R<{-Ei\_Z/%yI{r4:e,}D,3.֡.+nM9=\$O.'֒1+k~>OJr)Fq,_lI9ɹK^s'.MI$d2n&Rg%y.wX}֧Z^R"ޕP6 4t7È슋@Ȉq,#\_J$*_'"=\f^ EN"* S;r| \&dqd Fү D A@F@CTqY&s21No2? iq ij.օo,π ̜im IDAT6!UV3<670yibzz_17T\ah\HWVZbdu4|5/51EsHNbdbᗋ)Y1 r]<3a^FeE^C5]5KF|)7ҡ!aQ :50,2GF !yӁ@L b>E][FȐj,<21rx8H^".>q@NϨ(CِH,Z ,;BX[@XkP"6@\,20 qLZ8iQo4~y`ҚPSs5uil^懵D\,2.-3]Ar! oWh cȍI vO<LyXBڞN^?ӥA0G!( htjL) .f@x&= DA\,2 DjT- 2$& jX":bh # cX 2q0@b-  ? \T4K ? 5XAó2Z{|>},}vל6_ ՜Ȣ( soX=7C_~y揻bG{ۨdI>44jv; d`XjG+H仹C/޼yݛ/|g~ij7ô >.~+.'{&vhGo[d|47YWW_XXL,+.mA=yŒ3?aZ^D Jó{Gd<4U)q^ 4Xq̂ŋE7wՂd[,Ha;eLာҷ'aI [qh̳gO>|dʏ/={pK@/O>YGw,eȴp@{#s` " >ά̮RtX ,,,g)]mv| cA,@LJHۼR83b.Sɻ)d|5H帻5O/T O*Gl] 2@X4yPӫ[ {cU @A2߯dt_z N: #@j% _*]U-アh4lxi=by=? N{yB?^7W;?y'sv 2{_ iB;Z p4ȥ١A>_=.WbYb+?+Y7EKJwpߺX]hQdHe?zg٣Z,GkAzX?d3i)b^W)IƯ= l!N|@2\/Gγ d]iW᧯^-f{޲%ӧ&Ђ,H^JGD$tO?# \{1qWRͭD/@x?Ж6 ￷yWګz,+_}p]]OygYm)'IﶣM{'4Nbwަ6ehZađѴ m*igSf=y43<{"49{Ok ~-Dwk}EڏFYmXj. A^y_=؎]œQ ȵ(Zj|]MXd5ckA+w@)>e bLL hAȵ5H/I\,oXƤQw+K@*.ִh.ўG.$h\ bM  jjŚ" 7 BŠ- INS rCkB4\{yw- 7 ]w& # S1 A&{~iiA GŚ9 y1D/wܙ/wL/Vn|i|bM/Vx*4o ]1 ;.4jNb*Z2 A aoqЂAA&SD2, )_LC qr q ؔry oy o 3@~$@v[bMqÛG?N揻jAG(=^i| _û::q;p|6'BocޑߐuuXA&;y] &sOڮXRc/@dc*- ٜg+mXkbbYq= D2uW [q5 q.R k@Ȕ" @]49 @8 ~,뱘/ tjOMuk|*+h # Ai` @`»FC5wkl5HqR>-vwtX b‭y?!]^)\^~Bk$x&}t1?6'>{(fwmwWFCG{6\>?] qFقd?}'e.tQ& v W<.$k-HvF_b]j3dy) ڄjZ% Ͼx'nR,Ѩ]N A4(9Qg}wF#:\>H4bY_ZCNDDQdyvt`ܲ.4m r@Vk! /pقu΅#JˉbkX cw" /%|HJf}̋I+G~mXwA~! {]З$i}L4BbBK 3Gkɥx⨐bqt ^{ua)+Y HIw4wOI 5oDyg^ےĒ^dEw}Z̒}7NNI2ܲu) IP? P_yb_c dH/J_i~N8#.~A\;nAb[ {Skcr-XcAZa2W4HKc9osz;_ҙK^R9=sk'nXG{XzzԢj@F[2Ě'ǽ4kVX2D)M]Li:A\ ^ cAL@ iwXk5hRC\j2&je wЂ@thW+0 @Ђ@ BxՂ6hmUm=鐐 ^ o12QAL_by|nHE~8b˫.>| Ś` . =(5b 2%) WB -l- 5*@rP} rtsL!zX.Uį".AApZ]o d4@[ h]h2$~5Gdbm{߽}Gߥ/֦6qX^4jk6:X b5l j(g4H/+ d QM`L1M]H .I  q4H_ BUXdjh@ź dxL<|^p미=QYq'&X^ں,yKNO5ȸr@ ]Qvu:E =ހ\1uC\,2` 2[au  A"e ۘd :b'Y. A qb x:P @T5HJC\I8Q+ |kXc~ .XA5cj@Ȕr'GL*  9=R,nWK ,&b&Bfj$O[σ\B\,B ],tzjjOǶE͙B\,25|+L,&bs bSM]{)M'@d24HXsXL, n@h+oE^L) ,bh5>@Azkj;ASr+鱍b S>j9 59 uϓubU ߐx+N0O:Xb]5bi b[ rZҮDU@dr5kbh>|t Xw4E 9 45 jb Xh^L|zEbqϩ3Gv],tnAr!XKjqȀljꋥ.$ ȤjZ @Az[@Q@AnA 52}hkl74v1==_q{iȫAO׎_,bif8H1~/htFyD6Vw5V jU @BN  Ϥ@  8M !QPku b=pC#+ϲ& @3 _,MCYbݏet=N64./$FHr)5̞ o8Y@ ֭QJ=^cmZUcJ5jIg+t>z*$[YUsBt=%X;;{/i#qD a=P*KJR9z],oX]#yj䉤Dt!DyYdUծDleQVDy1AtH(Em4)kj@ ȦОZC#t ^b,2D+̛EI=@[bE5a;{Ilښ$,1fjE^fLPXsڰXH"zh3^Քj^Չ͇O_{ꥀКvg/sG쏰YG|PN(+|hcb]bG4[:CH񎐧2ϔoX*"%] UH[( ^.eH`;,Ѭ#QS$4ҁ~ؼby:ۼ'n݊h  qdX1;f9Ͼbb!.S4cg hRMjj| p RՖG`ܩ09'k[p@R3JŦB\,2.]%G$ݯ[ >!lbb!.b@݀R0XddfgZ8;CL]lvb ߩ{ً;nGq/ g9 w d7ji;~7{!+f ۩>޻selGw.h_^2.  tE*ٙδ LtVDRŸ/ @ax\4͍~VHg란umҝDQu=7s爽5HG%zw E3߳qdֵ\dBOCv^ӓdO%}ȵ•]v]3}6srbv5|mKAz!." K#0{'!:8Hs3®z&jqPAJymWi r7\_E\,2L@YFpCtw9~9!UYWlHi B+og;t]{$v_r.7&.-ѕ&  Z[ (V"ë49ܮX(;<@AW  jڂ o.24E{ﭖN H5Iki@ ;dv~<9Tt϶EnAd? $C^B&s5ۻXqlA""  kTU]#y8,W ,H%L BkrVκ>]_#4ĆA[30NÂq}HoU<k\YF:itf/AbQQ9壓7ݭꑫڃu@WCw6/@ncwsXk @_,( L܏ IDAT(Nid}E1اw;mU'M䢓:iY^ADWe  Qi+ ġ1Rv:vu5&EN Af~.&'-'Xm Z E_q!k1dVQXiaHmB? N Wۀ(JT*^ODG\,2d@ZFh``:UJ]-I,B-݂-3 Kȕnr@!XE9N 3Nv_,Hm_c0O;K+o_s`I[@dbax/;E KZn% sb([@& M/]LO+'nNIoyibzz_1=tbiə;ߊg''2H]qneӧJ;ӎviM켈 Z(KfH]tA1o̲}v(8ed+K*9m,m`0dga`= BӲUL/;vv|Ğ.H qka3nɱ+Ned~#wiHNZv߉s$J7v쇊㋥.qtM'XуUw`UYf@N]zg5``#ֈy<Y/ֶ,Mis:<-Hf/@bR ;m 쳢b9qb0t^7)\I8AXeǢn~p؀fo^Q̷b20 0A'8i Pu^ Bk]G6ڵv^͚AJr8I AX`o:i\tҤc% $抋@4{vHeARY'Cq!댶_>Ah njI5vGl+6ja [AXPPZ粓0p` 9'NIhAz& [R9>RaUW0t ϖi ,ma`i;K-YgA+e '_yu;. bL3įZ2( c?XddI + g @h~qjWQbyԂiaI7\iIjSǍv~Q/ 4HBfHLO† bM9tߢuUƁ B)Y2&UugS59k<mXZWinR!G\,2( 94Hå;\ӆy̕V2e-$ ` b1懅XdJA.N&t@A0@A@9G;/\MFjDG۪2z_1DA# BkM_  C =s}s/~=x`+:p  m M0R bzY\,D5 m r pV C WWZELhAuB Wk hmE)-X1-#\- -{ssfSi dՂl=qЬIg "fTnՂ?s{\Ղ̭cq-H@4s++UfVYմzrɷZu 3Em- jr;Vv *1o$-HS%ji O}sZÃft-Xc BOʇq@EEu %Q+[ 81988CnA.2dW!gJQVO-fJL 歩v !UA= k.\kuh@F~-$x4f/@ngƬ1;GcDUW siPhone

The Apple iPhone, from OS version 3.0 is generally well-behaved and will discover your own calendars when configured. It will not allow you to manipulate other calendars on the same server, however, unless you use different credentials to access them.

  1. Open "Settings", "Mail, Contacts, Calendars" and choose "Add Account".
  2. Choose "Other" and "Add CalDAV Account".
  3. Fill in the fields with your server name, username & password. The description can be anything.
  4. Press the "Next" button at top-right.
  5. At this point you may get an error message about SSL connection not available. You should choose "Cancel", to get to the advanced settings slightly quicker.
  6. Open the "Advanced Settings" area and choose whether SSL is on or off, and enter the port number (80 is standard for http & 443 is standard for https, but the iPhone wants to use 8008 & 8443 for these)
  7. In the "Account URL" change "/principals/users/username" to "/caldav.php/username"
  8. Click on the "Caldav" top left to return to the basic settings and click on "Next" top right.

Other Settings

You may want to go into some of the other settings under "Mail, Contacts, Calendars" and set some of the other settings, including:

  • Fetch New Data
  • Time Zone Support
  • Default Calendar

All of these should be obvious. You can choose the calendar which an event goes into when you create the event, but if you want to move it to a different calendar you will need to do it with a different client - it's not an option in Apple's one.

Similarly, in the events the repeat frequencies are fairly limited, but the calendar does support the more arcane possibilities which you could create with a different client application.

Screenshots

Screenshot of setting up an account on an iPhoneScreenshot of setting up an account with adanced settings on an iPhone
Adding an Account“Advanced Settings” will appear if service discovery is unavailable.
Screenshot of the advanced settings on an iPhoneScreenshot of common advanced settings on an iPhone
Security, port, and pathTypical settings for non-SSL, port 80 and 443 for SSL
davical-1.1.1/docs/website/clients/Chandler-dialog2.png0000644000000000000000000001274410705234304017611 0ustar PNG  IHDR5SPLTE 1+ K=n .;_1M;,6JaLFD4N2fL8*Z>>}V,NjqYled=͍}t2vjwpeяʝxСXtīoŜ˟Ѽֽ'>V pHYs  tIME 07!IDATx C<SeÂpTZ-+}9ZmIE$B@kiLKl|"B@,' O&x"/MEqInz)X:'L#gV8S7?W:Adu.Vy,o]FB5rΰaΩnVxWR 姠<@{蔢8yfck1 #ũbU)o 7VrQȺT< a Rհwޜ׃^A7$D|;L%K3AϨn ÁhՓVn.K~{$}Ś_0+#^u՘h˸T-meIbnTND4fD^jU,~t&ꗗ&=Akez%S-ʭ.wR=4/ۓ{L`ksD5ͤzRDZ@n/v#^z@Bf kkdSusTHISu5Kuz^8/=@pĮ(;WjQM#Ncmet1J7je4q,)3xn$*}^EsT8l`B7e=lDt8Q|JL\;O? O2%'8mE-(xgȼ28vc<­I%j1=^ 5,rlNfan?>]ݱܝ$4zTN6L16V6BQ؝ȧ0U-eb ˜k>ڥ^'C1,=֥ P߄9;>dq/ w'o8tCF{MS|TS~>S4o<6F2FGԉmUdYtD;ij )YmZrX[uث]FcO?ճo.|ƬH6Xmؼ4J\d'm-SyV1RmUfYTD$4Vf+gh1aFaSl C+^0Ph9S5@^t`z""^>jZty= P4z(E=qSߠ:hq@ PC@ 5PC@ 5P5PC@ 5PC3_ndA Y'Z}jzz_,SzZB, {:{,moW\(G "r;!?OF=]ǁ1QԱiPXD;*^;pƌe@;C=] 5S!Av@]fQQSI&lLJ`dG[.;LEꢠºhd a:u#zSq~P?x 답eѼaI75_ 4ju^ A*]}ONיlYtOYċkM_:@1Pbj!jOCFxcj!'Ws5P5PC@ 5^k޷SuXO$s5Yy)WXTloJʨSN%Tg 2KIr͗2POVMNFq>__)^Ady84 kK#.x;n@Y:ZQ4++wɘpWP4jPV@gPsscVFYG~^ =mqܱC̢1:::`Vdy_TU`Х3Z _zj#$zXfwRq_$j1?ZX( /Kɠ!vݘݿpe4MnOQژ&!7L)wre%3~([ɖ&[gP'wb# 3'M@:b6"P:9&b׍O*$;ҬSRXD4_53[G W?0{sͿGYc/;GD^~ωȇky4񉨉I{j}@[u4P5tP@ PC@ ?j 5PC@ 5/:0JB/,_Ȑ~*J9aBAs_O<|POl㏶iiw_3+ksb@4|m_֘}`u#ެ!a*)7F#M3M`)#}65G}_/Q>u jiHUGWQ+W)nF-qIuh,MĠsLօ.L#􌓶QSMk_tW`l(~,MϧI 52;{5uO8|~feJ1HtCք*!}!e5R~_A/"eE+9Y.r sp[|x.L">cv"}#Uf t۠#6ǁz迀QïF 5PC@ 5P5PC@ 5Gxh3?GQ* +zu?]P3jҠ;1Gz[HÁ}i=o;lKP@EzjC&uFWiEILt֓Z5剫0@W [?EA; @j䄄껿f_M!ۤ꽎i.^I;m[g5ˏȻn3uA8lf .NiјGV;jΊ5[CuM.uyYBX>&.Wx- Ջlefw֪~u9'汪vHGE^ZBC5C#v PoݪEbӽٯ5[#?Ϧr7p٪)+ujfbќ۪-aMOlw7[G7"9Vf/Vv1XuvժdQC@ 5PC@ 5PC@ PC@ 5t{+ #Gᣎ&s5B(P5F@}:oԙufXVŧׯu$(:Y_:n^SwׯuP;d\O;:40U ̺y{N]_U)<̺#wRׅFw.l@ X>f6n~:]u2n3:U.SY7rz}0=g?נ 笛_N=nUd\0+ir{Be':P`O'Aҍ欛_N=]]dJ>Κt `uCx5@ @ bPg 5yPC@ 5@ @ 5P+4x قjz;dj`gu$9WQGoO@朜wg+PQFGW-.?Y∏9>EٞV?=b`\ehm]k}a=eOvoihyzYzmj]ƀgɾʦv緤ļŸȓɯ˪@(bKGDH pHYs  tIME % 2u9IDATx il Vd?(F7uџtsPb9Rȕ/ pL4McY˶3$cvW@Cq;_(OD?g@5w,-}@U9N%s:8xѴ^x$ƼDmJ)l;E}@\^& bm5cp<ƑEN:2΢Y$#}8:9- 2liW㎦ /g/ދM/9c5"u"itYDv3w;-BWd@E?Jk֫=pPeJgrfB*Rd-}-E @,AHZ2, 2h-1=@  )d lʲmv\@S0eprYmlYsVYI/2Gen6)gQ9~!MA( &ՁSmrQ_MddXbHl;w;@tDSgbVzRmODGh;uH D a- N. [.)d̀ v ?"5[53I툉sۑFsj3}|<^ zXCnĒ_Lvky2We3McC@autpd ]V@ Ɏ!vIM^/ׇ.k{s=2"6žlkH &o G&2˶uH]@z @Oag) KײW`;rdGםJXQu?2% ǀH[$-ily`4 {$1_ԛ< ]sW;@8lr;@\E j7c^} )IDZ:! ' 'd@6T'dEs/#Ʒ%$O;*$9G|{0$ <|^TH)ג^ˋxr&<ƘᗍO4=񣧶Ǯ]TO7$>|:4uZ@tLא@nokW?t b}pCܹUA똠9C}hsZZ0# "a04? BJ aB1f%o$K俋 -!/;-= & hQLˊeƢ/u&žmoD]T]ͶkS!pz85=lXv 4s:p-ZFm ] Xp Z,bvcƘ/Z زLuƬmUܿ`$# ١eL:~uF/ Gkܿ ow`h7qjP@X&O.O͔O(i@߽6cq^ ,.|j"ќmSmF5ôh3nޱ hih6nH 3]I`-~?ֺ'Sy֒:BVf0R&̉< beց' 8`hCcVT!th7Wsqg| C׃W=PփI56SB/Wfi?:\ܤh7"8 7Ԅs9 {JXmo:B+c+7꼲ܹE'-4@uA/b+絀S l3uȯ@717Y㮯.fVn@>ҶnDbˊYd:宿C31zq@dZ_V{{iVroEA7y2>[n/@"+ >?IqL]͟`kTMQΪunrxoӉJ]me"}~7Ly&n݆+wQk&$}}mrحnv6ZvMv .U$^?DV=&ﲸ?o:"\$9 ʑǓY ! $O f%ҤGg*)E{8lY?6' o1j[) _$rҁ7s\uaW 䵁X`7*dZ{F"D`G"5d4\厀7/F56aG@ L>u{ݚfܗ9y7 E~=ĉs43y(m&}CI/ y_Iqlh/mJljys"Lv vF6ʝ1NC'1#Ʊwv!6 ].B@H!yk o'-eHI% #@bmSN@rxVV;6=zuB@! 䭁Ly R?hut` '¼cl~ ȳԲzl6 @뒫_{G-gH@eG{4ND@^H`; K ;D iDKj@E~5T@H;]wMˌ s tQJ>:fv d(b/B?0?/ObrWrBB@! 4$9BsB@H!l@g>O3:ߋKU ovϊ~`Gنu >M]̧ ah_x1})͒G5m=Ξ 5MLà ] z %BM4.KC+ 5Q!_bӁnۮn@p)9kˏX]~ҚqtvZ[u2 <0xBs)]<c]69y_c:JO;}&h`ho骕<Lt'<05gbNd'nq3Ad/~q )~2 o~<}~V6OnMewCyH'x`MHa)0%=6fBrW\9.9y#9 ,2[^Tq}k,S`Ֆ]{9xx2fH^_~u v9vS~b ;$yd!! |x 9 ! ݓo+0oho񻄹ks5?^sừǭ7;dQw'3F@UE{˿k<3\A~8GW2z9hl(, H,yl2 !;Ѭ#8wu`Cz${7uj|8wt'C %-D]~HCK(cf g~&ܾZ1wuN׍DH3ʴsPl[~݃ 3uE>D'JrEzˋ *24u֬8Vf6o,JJ:\2wv/6.pH$Q uߥG/n_iLxxA@½,>,Li OH~@~_Vce5~q&sB80#2Ѭ\o[ĵU)tYg<  uD~|`F dHض-[|l&sԴm˗0CE&Z"2ihb[]K;Ls8G+xK7B*C8 *y<_F a'ʵ !GNX"ɛ!! RR*m# $BB@ ! BB@ ! ^E^97!<y\vkRvB@ȡx8gM@NoA1 @| '%v Ζ ޗ%aMi%1<# .;wvi)!H]ąHQF@b_^IQ&P]ӊum lh*x4/ _Z }PL֩yߴDIܹKl&(c2BCross-client Interoperability Considerations

If you intend to have users accessing the DAViCal CalDAV Server with more than one client then you should attempt to structure the URLs which they use to access the system in the way that Mulberry does it.

Basically, Mulberry breaks the URL into three parts:

  • The host name
  • The root path
  • Calendar namespace

The host name is, of course, up to you. The 'root path' should be /caldav.php/ and anything following that is the calendar namespace.

Within the calendar namespace DAViCal uses the first element of the path as the user or 'princpal' name, so that a client connecting at the root path can see all of the (accessible) users and resources available to them (Mulberry displays this hierarchy) with any calendars below that.

This means that in Evolution, Lightning and other software wanting a 'calendar' URL you should specify a URL which is something like:

http://calendar.example.net/caldav.php/username/calendar/

DAViCal creates two collections automatically when a user is created. In recent versions these are called 'calendar' and 'addressbook'. Some software also makes it easy to create more calendars and addressbooks, or you can create more through DAViCal's web interface, also.

In older versions of DAViCal (pre 0.9.9.5) the default calendar was named 'home' and there was no default addressbook.

davical-1.1.1/docs/website/clients/Mulberry-dialog1.png0000644000000000000000000003267210705234304017673 0ustar PNG  IHDR1=^PLTE/2652/DED?FQx9-@Mh[J/VKCRSQKT_`aaGy8\k|rf[S@VkgNiBoqpgPZPvxHszh~|KİâiU°izbKGDH pHYs  tIME 72% IDATx흏cW^=$K|춻mj[k٭b|/_춗[oAn^>ޗl{ssc#,]ݴV\w5gɛ˥( G7J'\ph͞H#'ߗ=Sn}Ҝ˛dO S&,No2\l.nz'j.Wk=Ye[Ȭ{GL^ּ҄8aO$ECTǚ- [﬿Ϋvuuۿ Gw?_y?Êlݰ5+"m"-ڭ/"m +?4lMAIY_4[^Uߙl"J뭟DADt%I[:j#fl', rm J1A&:݈mi8{3 ]= U7 ~'kr̮8 u~ . ICMr?N~8?+_N*nl3oj[7XGt֠F\ߘuïL7}әɲ-֭f3o|]RZExl=\d\\6^Ap2\z^R0($Hus׋5\K835_|{,nd& o)kkx0CU]U67e?ڠR.›=,.װJQ0VJ5L畳&B)^52pָ5V6Xm O=շx4Bx\9Oan $)~K:#î \udyvZRHr^YA" ReU wi*Wn7+nOR$ Ct[ÞE޼XdG,-6mQ8fIe2TRCv$IR;nb_(tRBGWtH\b} <`,7ʒ9fFR- \s&겨L"w }6+Aj?*U*@ tӺ=jmŐajv6`8SfXL"&)ojWcMzg?$l.jQ`S`0Wn&L&Nԍ E.wIz `>uà _ah091$7vmwW۟Yi^4n_^`:{JkT䭅@ns,˺ڝ_d[mCg9cC͚Ex<զM$9͸K|.) DCk-1ftRDUV˜X}CwH_Z@[=xڡs_\wV nyM{xj$?@ֹM 趠&~bZZ9|+?ߙ`sjnݱu;y.([(y SyKi\;wӛuf]R uX✧vJZJSr/!kF}ďIRqgP!SkJeVw?4_ ݍ}L+Zc +4Ʈ{9Y9w@W} {S:YIޣңGףB^>tJz/\ ޠ=HĠ{CoO`\xXU_$y|kG J֦5EL]L9˿>x/r |z@=W@ )%B*6R˺Z%LVi}LGͿ KGjvWD=WisQDu ZeP3`d%*B|u: 8 $bȽt^ k8~qK0=cxBSxp@qL,j&ǵ];Iv?߈ehzRx].tbءih)e.UF:tp?Ƌ%j|dݯG$*]|yvzȡ3trvn%^̘$`<RK`{l4(S 盵VC2xrtR뷪a3:봺.Q ]^Xr@eDtmR̈́L 'j $$ݢTX4Wp&C]vF9ʅ7΅4v-tl/b@wKdku*xr+Z膕l!d 5 alpRj=n|h 4$~GGS@ fyaD3.%Á9ښEGoMzI{W9st!t8VExSQj:b?.( (f _Kn~M)Ռ1;ʱUt>W>Z&P/ tB8A;|:*\ElumR}[li̠*Za}>re]yNU_+U6CJ>ՇZ{tnsL ѝ]_֝3:S)*eNNsUiiL$]iO%_g̵c4mgb WѭL*; ~^DWF?f!ct-,yv!C})S˥Iβ WY;ALJet,uun:Gd5=Z6eU=09l-DFrj]dw3L&K:t; Q=xDJf|sE'˘l.ÀDPQ爮S8EmF`PMĸ Wո\̶hUec9cYơm%LwX+j N|(պ5*(w!,ka_D? :gF>8BYH7GhH Yl 5k| &= A^^Cw{sk%\eOй*""_+۠3cC2Y(fs6rБ%!:c^Qkm?BtG>j}t&u]2(ZIitzm߮ꓠSgvV ^wzwcR#uZ{t=]@tMtÝIQBq{t)Z>Q AV3q{tOSt>Ok+/kgHW(MYLcsz*}@ڣᵲ@;thtSnP% RœXj1Jkun>g^{7/y`LI Nh̡`Ao-nyBˀ `J:c硿4<7aCV|\K^ x(}*HFU1^ 9*8?weH: JKcUf3MbVf:IRkV Wn>F +@WPYhK :{2ukVQ~DEY6 TWcxHPeOI[Xdv,[R$DGHgѝBйf8POFðN wyнMoJNSH&Fd [K?!n{Z U$s&v6`\B%kr>.Tz#$iC9}t&=BO|-;tV s Sd[22JsC }JP\w.B=Zz?̫"h$ V'Bf^h[t!^ ҕuӵ7t|s(uַ.!fk7adGF~ޔ*qn]ź[y`GB0s0?_1t_6ZE~UV~cq.?' 8"*ֿsKF/ongaZ%4Xj|%(onu"_Dngi 舱"a^]܏f˃-n*F63Pd;=7DG&Pᚵ)CYv<G9:n.K@1祝(ӡ9[;{+tFuF9FKqO,v<:I@,#yYZ[I+\*!G{E<|v8YײU/7F&cJ+kASE~t];tw`Fk`rʳS{y7a]ƎѵANDƵyߋQe."oNfQEr㰛Ѻ>\NZw!Sݤρ!s,3x!'0Tݡ6d wIkGFGsNњ]WU ǘJ,봮ka}CϨ~)3N5e!w n25-ć6V甆ٝD)=Dڔf2 Ggʾ:w8B~(2Gyct̟IJ휗0Z 40H `^=96ոg9zt2m} e59IqܡzSJ?7ĢiNvu#EU)DjEelЩa:kѹ9!f8~βJ~Z!.Qre3d;ta}[tΜ@NBEdtJWܵ~1]O̅7tsQ ӡS4%պs|Ũ4Rrpt[a&*i< SЛJ\[w&-$7NY7*5XsuȮhѹY‘eTHr ѵ+!qpڂ@sI#Ay5nd JI\UPuc kEDxjq*vl}sܠqS$ S9HfaLFýЙ "Pѕv'´v3h E HO=:Su]M)t[:Wt)hոt+EeCk ZGýYU -grY}Zr[}Xޡ+ MB3<0VH?Nw:|uk8Ͷ+۸?nWpxVu\8\5p.6Iv$]Զ cH%θ HA']QStl6\Bsku~?( 7%\TēѲDE%N.1y!:R5DZqۣ{\f7 2VC#uWG̽nD8BB?n kťAyۣ{knWBgL䙐 ~:t/N"9@gIDATt2`pcHmWd=4=)"J $ءv2L+h&p?BF uۛDwl'J0J)H Ik&$ '(tm Qau-FL3ml,Gg_t:|D9 Mt/ԟ(%} ^??F}]~Z,:ϢGka xPtGy1=̓ 6N4v_GR=]е.}5@tt#Ұ&QEεR^~D$Q)/ai]6Z׺BК)kXQJ3w䟠3l* tt-ER}Ŧ:NF'[r/nGkT5kb"(hhFERBx.X}r0,!x#)I4ĥ#|yl䭗:ܢ*N. 茒3pRPSX7Pr0V~%/5(~WkXn"JFcyAB?]uEѮ[\ic,cĴcu8RS؄oZ'8C༶eDNL;CsYjyJ6б BtQաsjUa,hy}C$@ʋGvy23 z3ǟqB,3#J EtHdh0i8_DIP$X_Q_ pto|Qr?7DwGӵxs:S6ֻ4ZCxwfʸv?IX,U zSPz]t{ONZu5Х<p¸ŗkC:_Uu]R]EWƟ]i;$;m͢m.ؚFlQڵ.;îUY J$$]5Ggo.6MDn43ZڬH.j:I+'`v/ bԍODJ4@6C9\FCK&PG ^4nGu?7>BGv^%t&IY/X u!I(G'е OKiÏ! fEzO:txtlXRO$VSe!R*W^Jj-BgLK5+MK<CI#ȳ>KABE\}^G%`ciRq菳"R%& q0@nZSR-} n;x`3Q$y\cFwfZT|T+iOb?/ Qud.9K4e؋k8jR"=J07w#CN=N8 8as©s?=iDY4>7j phR`8-aݹNM]\՚QVT`NM2w} YWM;>7:VsS7FwTgнy~6t{)}Y5yw3r5C?.S щzRO3u2}Oʽ^NNdZdUN*cK\W=%ElTݣ yMcљ¿ל Z"\O]وPRsDA3 PYo0C7k5 CǴ[:ų{Es@StR֒*.Lt *W˺=E8S٩GH)742|>AQ:NC~ig蘭k_q|" 1JGryQnOtg,WYj:C$W1F:Hl=RS#Shs(mW A봾"օkݞe2a=#q25# S `Viru x%2(& +D[u4s"!k :(.bGEn"tmo_j׽⼇itG !SFs_tHB r{&DhTi.HGt$ZO߮+8N)xv3MӸ9<5#L\N ޞGwL@`I1HOXy%%Z][n1k١k'wz5atOzt+W#/d0-ZO- sItXL2 ƋKQ>t|p4I]6Wݳ^U&T r;'z834TFv$~ɇYH<hTް7'FvOPٚhrnL<'.q.MmB9]nV\'DCx ٢ 5|"tg?9q花EJC 3XECtS)_א38&N)]&$OOR NfJ9ݩѹxѝݡV',w+۬OREY{{;ˎ 9ѝݛ;_]%HQ~1ѭ< ]m'l6DiV%ӥ)tԡ,̣iZWnj>fZ8~j.C\XH( -\ڄ`t祆+s|Li ,FmnIX2:tB+SԈx6*@EbCE&tt]=]#^1!u'Ũ3lc., qRHq.<0wsF۟(aܨ,/Y۠+[DfpȤNHKg[tC S2.|m 3x#ХeաCϵbeuT~E&Uvӈ9Wt| jj h0~ޡYPfy^yA}\"|tNxXl\TՔjkdd4>ݧ{᲋L/6=@c.Guݧ8Oѝ'Io0_`/Ϡ{9=D_ g߅)<w1yyrn%Z3@TtuRg8evٕ}Mi*u XRx/tM_JU.nߧQi%5G^A'»i]Bl/x:t*tdVwCgMylTcݓZOjVgJ4v_VZw, 'љC8R;@Xs3Ih1n~6ZQ;tơJ Lo茛 !A1C/aW Ce_~YXI&j0);t` &hց}C 40y?Zìu^[SO1x9354gf S3]mk8 M{*3:w_ݷ@@E҅ABP@-m5nUSpҖip2ij1ܢ]uň ߡ3vNѽER:¤' )T4:|P93~>&gF:dB/b0?6@*`z>*:靻m>+/ /"=]Gף{ t"dD=.f;[גe{Td>n)u9u>uPa?:6ߠC]Lmߏn5„*jP:?mTH,RCǴ1hOﻲ2ebhpAƶ(>W=M\q (OLDH3?.7jEAHPc4Ѱ{J!=#8#RAtExA0Z)턠N/m..I[ݯ$zt=]GwJtr6LwN9ݯ>?0^\zt=^N/y~":tfWMln}C}T$! DYrl^S- &n IENDB`davical-1.1.1/docs/website/clients/iCal-details.php0000644000000000000000000000261611633117640017051 0ustar

iCal

iCal, from version 3.0 (released with OS 10.5) is generally well-behaved and will discover your own calendars when configured. It will not allow you to manipulate other calendars on the same server, however, unless you use different credentials to access them.

  1. Open the "Preferences" dialog.
  2. Choose the "Accounts" tab
  3. Click on the "+" and a new panel will appear.
  4. Enter a "Description" for the account.
  5. The "Username" and "Password" are the relevant ones for your CalDAV server.
  6. Open the "Server Options" area and set your account URL to point to http://host.../caldav.php/username/.
     
  7. Click "Add" to confirm the new account
  8. Your own calendars will be automatically discovered.
  9. If you don't already have a calendar for your own user, go to the calendar view and long-click on the "+" will display a menu letting you create a new one.

Caveats

DAViCal does not fully support the draft scheduling extensions to CalDAV, so you will not see the full functionality of iCal.

iCal does not let you browse the calendar hierarchy to find other calendars you could view, so you will not see the full functionality of DAViCal either.

davical-1.1.1/docs/website/clients/Chandler-screenshot.png0000644000000000000000000003747610705234304020456 0ustar PNG  IHDR XrBhPLTE 0LI+51..39CBD?M^\L8WTTvM:fܰ>6BH]cieb_Qilo.thWlqxrro~wbf`ymos]-}Pdb˃oǃә㉏üٕ@eTӝիֿĻ֦򵞧gtGƋֶγʱCڵn!ObKGDH pHYs  tIME -*/ IDATx흏CHRSaN@x]k9AYݬ(ms[bӲYjvX{Wb' "EB$y'nvۀMX4hwz*tTXCٳ4Oa_ʴ4͟ʗVr폹5-;Zu<_Zu]\a@׎~|R9T^?VCt Bvkmzi=ld )2RG ֣,0ގb ~ٿ-t$sMDe-IRz4A}aʔJrD<~׏7=m¾|lFhgDyDi3/mj:D$Jɰg6 v ͦ1BA*|jIVlɚfJh| _S`=l`I$o axw_+Q77nΎOHJ}} @hM/g[[ֺ9AIY,|U1B4R q9Aof$іrX?j1ޘm#*ϑPD$FbHL$aAA b=!`_DaOJZ;mtŠ‘\6U׃A?QSjf-N Ꮘ6Bg!$ݳrG^b=I%@#|;6!yK9bhJ?.X~X=b傎f8xP`hmd bZl) Ybbb+':~I,O}0l)`^&}q5K _ }M}:5ձ~?o{f^䅰_=Zkڀ5=țibnk?^uo{*@Koy{SOkUE555Nvﯯ<ñÞe d?0BI ) p#/ŞWg_[C^٣Vk^tыn>9!r_m{mS.Q^b|RO@^*?f{VJDs[c Nڂt @SiNh:v@nҳ~n6Oh' ^q&{*W|!@`}B7oXvMeYՏz{/bVKW,2O:Dr@Ã߈}4HYUuzA>|VUd @^|oVre=@`7yMF|uxY,ŋ|\UE3I ^|0BDe@`} x%tWӯ? vC@xW#}JҚvݎx:Bt+ l6Y d;v$A<}}\2 JI ȇHTH86"{k-oa/W I'YD-mrgjڔ@rYIG=\]2-' `s69T& r2V=cyqĪx"\E^bH$kll&ufwz!qm9Z|fDa5\=L:C,EQJhSM[6 <J<1UD'X3 Mr20ܙgK좠 i1=$zK}#ъq"zc)&H@j Me4vO4x؀f-WfPQZcz9.^=ȅl܃荪{lvj%\{-/3nT|RDVjj6Ko2qv&s$fsՅ}P2Qh6:A)-y/x|9jygj_#EVQk Η64oAB`vxr . a?0Xo 0X?@F~u5 4h ' m,_ M.gSI,=ͦۀ^zz@f$+$]Prb⅒H+(zUUM@ڼW̉(閱(HٴH5FYO$Xʺ HK\U8_MZ0J<*mCUO9 M6p ZKdC,%Oו5Eּ(-m BDWqyzXHV<8FCo2@VZHXV]Kjd䀨V1r(ɒGsp|gw_Ɋbk:.BLNGR4Z}[!N쥌?ctb~6G MĢeC/ $+^$ts fw_7>nM<@K|9|$G=O۫ .dGNQF$$og[Y5C/ 2\襶TyrrC,tq#ƹmUU\$2b;^}-@t:GOm?G]D:b (gh1?νC"0B@eycO%* g?~_5>z|k?$<2:HD͑ܜ C~_M=_l40e21Gֲ?˖Z"g~90Gdg6?Ll2+*j~ZX͵kF4nd#f x$_d[EKl7rQ؏{sV!V$sc:k0DJ;Ē%ݽzYKM2PaY4T+-Y@fo~ٜ5ogR&&uu?~v,Cb%Ls, B,? j&SE2Ud>f s+'rFsw Ə%-JY c?j&cʙ݌P )S0ߏ| H@h 9+~/~@` w?2ρ'W]A$+ft5rQzC,uX'mqLi^9Z kohChnֶ\ª;$ Bd*L.7rb~Zy~ВuCssJ7@|>5PYVv*^Xj>ot6B\ѥj˨F5d\#@NS]h$M *iVDW~W|V]>c\bBn烵r *IO\ zMU?BP`ҜMmaz{@֖֗% UŜ 6VQ\]#/ 6 r$Ԉ*S%VuBیC_9U.vo%D4U ʣomRT Us7r5=yZ#[͑bD#}C,GpO#NWUqʟl݅Y-Mv|_M> ޳MA/7xѫ̗Nepu5KHZnKiA2*F=E[*.hj@WQSWů Hxr\ eQŒ7{--_CHaq6' A3 sXkK{+6 vSU׃bjGʰjZJr@J")ϧMl[՗PrD9 {fuue~{Z ul_ZXD$Xu1̇/GEMT n7z˃5?h>XH46c+1֐Z>΅aiɃʄ)]4]-i)GR)ehteIv-tZ) T{+1!uUUw>Δ2kkZϚoy`sASf3Ӕ2QCBZp5^ 562TGm:A2TaG8K <ԝY@޿y2 4Odz4Hg=WL 7oon=A>jm(FI HdGRy%XݑԩfmPz2?HW=+;_:|S ]ji 2aFMQ+rыrFJW^bDan?ϓ@%߇;O(W. v[d:4vчVwzfc2uH:gB$6a|9dzn5~-9-H|Rϰ7/qL5k 5HQLX;b7o*#hsk5}6a-PᧆȦuP[Ś> 4HUܭH }Z_WyP=7k1p#9xP"ݲ"L@l@%!N44^ge-M Jlm*XE JY,yw.] L  X@A nXYP}쇻8 ľF] d5DBD$fH$ՊS]> QY ; ƅDK?%[H}K[Z.o@ 2}i wf d5Hkp ̲b !.@e @4 ! qhAF&/$} fd+K,2/w]ՖITuDzaU1Ci4I@ij%*89yJIKS*UR H }9TonTUWA`1{H.(@l$bޤ",@lGw&b $ҵ2dN+Nb]»j)r @\ d X׵C@fh@4  [ @: 7 p%@ 5f!=A ğ"}HnhoJ5? A-P( r @f~-.ro@f.[2+B?m˷l9 *Ba9n^ PO^Ƶ0jBy-LG~7m?~?pyHO@=@Ho@}u R+)һ؂㛅ΞK =ތ_gvY[ͷ++yͷ+}-㧅oVx !ݧK+܅,[Y=~m}姅[_- 3AW7+yoor @ AX_- 3@nAb! :n @ȍ4O L[@V!@ރ|/wo+!=L +Ǖ_V T(u |[s["$H'{@&Z _~3 59Q(k q[r;ɀyx+C,s[{[:nq>d: 5oq @%ִ Z 5-BkReX;yʏd b9X -㼀 @*1G7> _q {ں^W]܎J8+A޿tC;o&;ydޙ{ґj2 zq!r{\| ֧]ۻtrtpū{ϋrH@֖!wTK6ြL Ϧ] "p'ULdk6liٳk6{l,,-,/- 2fOo~~#xp@?voaiq ȧN@66hd{![x2@pOX!Fb-tXK7 h B3:Eg>=H*}%de:gc}}B3} {74] ߎ@&Ճ 8 {A& =#[ @Fu@@ X@4    @4  @L+ Q[@L0 ڮX F !ݼPncKUX S&ҏo{H dQn)D0)Qj/@L d%tn|}Od_@|~ 2E0>rP'>WG_  l*&gggħ2=!P⫳Iq( 3!Y+v55*|b܏@C :͛~8͋k  hټkE5e䶏@ 8))tP j &-@V滛Ш~"aBb+ØsJ _1ht0vEɘɣܢ~"&ū8׃;M@8[Y&̷\ǃ8@ډM)fj%d(Hga%2݀@X@4  ĺ@*uzYI'Gn5>Ǎ_݊ q6t@b,k^wvsջuw@L: gQwGqڵ4^A; SA*Iէ3$f\A; &|u[Y&Հxw@Ȥ{T3,[Vl;Eh)Fy  @B,@ҀP>w4<$x~fڶmd°imCwbd(@dooRzxRRTy!zK )"9r-,={ZzHR{KKk BjMnoV4f[x=!곧C\EvxWD ,-q^㽗 R* R;B' ,0NZ"4ґkdl0.y/@!K+#d5^ I%Q+2*@1G!a 5F>5 Zvgٰz: v.e3rdacL 25HjOLGLk9;0JtTu;t dh2cA @\H * KIyI易ALZ~ZW"k{k{{kkk B,X3 X^w)Be—k=>q@%3b6SK{7ʂ@ԓxq{" ЈX)N^#/rZ'yYbNd b8b@f:&ZgsV+O%"9kkd`5DSȵYZcA^1@^u_XA" l;׈(.kC~yk HU AHțUelьE(>!(@fYZTO\'z;!FݼPC2quhCKS7P a8F;y样ZV"Zwgr5Yc?"B Ěp@DnGH;HRY9c?"ہ"@[(>Ef=(~6$sd5h@AA@=@@AzT4 2 ! \$Eԝ@0"8By5 B:Ċ@fUj!u'iTzh l2g9 5 2d')]4}FnU r @d;kRfĘg᫛+}H 8 / Sȑ llb60T0'E|hid  @@AA@ @j^$,Qf(|дυnE|ɓ!t@rɢ8\_W݊:; H\i-cDk g!ćX.-dGw(hG! Sn/.)8?ĻÞS2δ;Zz7Wq5 D?8HAFw*$ _].p@vC2wzӂ oUvvWV0N5 >I"wZO_B"EꚍReֵ&2W mnDNJ [5";Q9yk dY%YhWEڡl$",I"9/rEȋF 2!fN uܼFڑ1!u4t+xowiG^#5Ɗu}CZ}+"-m8kϩ[S42ADnaȉkŬG¸jei"1I-2AíEAA$IJ2CLDbx2x.:E!+. Ě@"SD0H!!/*yL ̊f-h0Z^[de.[vA[D-=o H4SEhκmP9Zs;54{   @qAϊ!< @3#Q}$EϢSܡ 2݀BD+#Q9c?"{gx4˳l2!(=i; 7qfy DȊܱy33S;Q C q_yս7=ma[;s >dDD^,r[HL9B -tH4{E3(~yaj'XӫAFz @z@@4  @ @B,@ @@b@ d9N:Au 7 @AHnTʆ ѯim,U'CաA%eCAbnr ү@2 @0~44@P Ěn@q~FM~}+[|&2|[ng>~{֤ @#/>lgZ~A Y {=V|$Nh$)Ub ^ek'&m&ꆯ+g SփVީvX|pNl%y E1p "P&.Y=j@Fq  @4  h@AnJ$fQѤ L~ cK`&Sn"wdHf8Ċy/_XH,zFޭs0h[mv9Ҹ3V-=J~Ӯ-?WVN!@fZTnOg) I̸ڃxwx% C q_K wBm͋ؓ"'IQqk9yk!v X=<4 @   4 _[PDaZ,B:yD3Yc?"A5#J;tFx"Q1 6."{g;1 @+$"Me9'kW0:"QVE hil&ͪ2hąb0ڵİfI@L GY/ ]@HWc;' V Yd!sxXS-|SM;D1y:ݲJhYc?";s = Xr,hX?T @zrV > VωV"#,~̱E3(~yvW}Y1}m,U'Cg3#Qd $JF4~Ev-{Uc@th>E}$.=}$""ގy~fE@2G" =5ȬxO gf?$@!֌b@ՀHI꜕: = 8 V\A4A!ӵtG-H 7( K\6 Iĵ`̐hsD ϑPah|5ߌ(l g+!6C, }AE4T joD0#Z- 탇oƶ#>$$s' C q_K s XX$ʚCNBu`"jZi\V6s rdr7si9pXDVj_#͑B dC,:Dl@Y`0Xk0@̟ v0c' `= ֛z'0X> a>|@`!ڄ`+5uݜ4hV~ ۴/YNl_}o'`2UxIENDB`davical-1.1.1/docs/website/clients/Other-details.php0000644000000000000000000000253611653646324017273 0ustar

Other Client Software

I would love to have more client software available to test DAViCal against, but so far these are the only ones I have access to.

If you want to point me at more free software that supports CalDAV, or send me free copies of such proprietary software, then I will add it to the list as well as make DAViCal work with it.

In the general CalDAV terminology, client software will want to know several facts about the CalDAV server. Some (like iCal and iOS) will try and discover these facts for themselves, and others (like Lightning and Evolution) will require you to enter some information. When they ask for that information they will be asking for the following things:

  1. Where is the user's "home" collection?
  2. Where is the user's "calendar" collection?
  3. What is the server's domain name

Typically the answers, in DAViCal's case, are:

  1. .../caldav.php/username/
  2. .../caldav.php/username/calendar/ (although in older versions the default calendar was called 'home' rather than 'calendar')
  3. I can't help here - whatever you called it, I guess!

There could well be a wider range of information about many and varied client software on the DAViCal Wiki as well.davical-1.1.1/docs/website/clients/ical4/0000755000000000000000000000000011776303360015040 5ustar davical-1.1.1/docs/website/clients/ical4/001.png0000644000000000000000000046441711633117640016062 0ustar PNG  IHDRiX iCCPICC Profilexy<]}߳`dg,e)bKx2c-3A M}ι~hqE 1B6@CPābxHe@9PT B;J tjZvA4 0 V5a}a8a .7J> 7 !'"a!GDHRlA*?F"ryB`06c1\L*&SsӊyyǒXC-cӱe*ql;Cp8nKepY\x{> /A`A`B Ʉ\B)a?4Y,#3[W&F&CXBLLL%|bxBE|K’H6$_M*#ՐHwICd2Av$Jir,N. ˖m%BPXLJAy&i9ȅʉ6ȵ=ȇ//?*%Z`PPТP;U:A͢S_ij4{E+ݥ+j):)F++ST d$P*Q:ԫYY]Q9F@r[,r}*T^ʩڨrTVQ٩ERVVQRwUOV/QW0`khTitj ijhjhnyC 3kطyͧOt?ov@Bр@Ma"1T428'Ȏaf ) yjzyG| +qpzm^ıH$28*rx­ EFE݉6΍эIUpcF;G;uxN|]&!Nno_󯱿vpرZ[j炝vYڻ{{B[Q!WueDe>}UUU%vwߛ{@jWTSX3GW{ΰn#k]|z{o>1ᓌ;OQOC?4$5Wx^qӵ*?]}6cH܏'IdJ![?*o2Ng>麢O_1KUMkqKG`AA@Y~Ulšq;Mj_I13P$_hQUWUԥKQXfR};#W]|M_~^1(S|$__6زb=AqXN& A@[CL}˔ie /.g]tU;:L9'~R2eWYl(KKUy\O@1W3,r3%PL|)D$y Q;qeC(n#_ԫV2e/{NC&Fc ?@@D@ߦdEl s,2WYy^uN*3=s%S|$S3ҍz3b*NeŒ+P%[?}lI(׸h$*Cz/;?le:vǯxFrs$W?|+;"^Grՙ @@ 0jOv~ǩd) Yei䨲/>S'x /mNv3WL?f ɷS\_9}3|;a$,l$)tG}K'mYge0(-%u3fbON+e,KϘ3Nc\:g!sv˞}Ne=/:::car@ rd9 :EXfR.;9)βٲ.b'85`?u C@+)z_ɷ}t}O{"GErjCuE1|Tve\+Ǐt$WXw>Գ](S@@ "6*+41K6hUg::hH_:٫׳.I!WrhJ̷cYsȟl*BCþcQ1N}ΤOz?djGv1IN2>N ?@@`,#Iǀ2_βV49uLz^$6Qκdm}=EɆa\%3|G_W<)O_:?1K&,ǥbOe(j'nH y@ jI/@2)}2CzʴYc䀓1m|;թOɞ)W;q_αPΤR 2ŖLƖ K?bi|cPG;Q{~TPNjSSv:(&.4"R@  I7<>AS9>j^ɶSoƧ3$>yPٷ?tKz}%SW,뾽_&I\I&[z֙ho~.&vU:IKLAC@&b$lվq_ɕS&_N>IFH3TME֤WC?Ȏz&MTbP&W w'WMDd/9s*R6Y|lJ\vC>"V҄L@@ 0hUhi:˚IdG)LbI\1|e$"KeCv3F1)v>~GLr1W+)W$2ŕϏ`?mJ sQAXI ɠ aGMv:M$䔱L$_Mчr|{D{'l\1_uQǥ:&ŧ 徽ʊ+U>SM[ў)>mI&W1;Nd8LjJPQ ~@@ 413D|WXM"xᯨV1dC_i^dD1䣜rО8IN*=lSǾ}e ګζ76ˌ?Fu,+~)ڧL-u%d,sE(A1&ܗ]_:ŕM<>kʷgٯGr eQ<2lO1Ye)cRN8)F Wx͸5bD=:xN2Aɰ5+iK,epcܹWH@@ @uu5V^+WBGD|")a]Oˆuj2}XYӊ)݈_I[t)j{wy@@ ADOVUUDMM RVD}{TI/v%Su9"n+i\=JZkk@@ FxL8-?VDIȖrک,ʘHYNM`iGh~:@GhB@@ e͟?~02"r΃>=?/*uW+iӧO',A%pذa[䠩Ǐ9s栤\]FK4>2˼ljE[ bzsΔ99щt1s0bZ{Ζ,Dvٞ8soq(F2mX~ո13kC߾1ģkp;NDRE@ phjjrQHH4ȒvFdL3_^qhX$sgIE`ȌXHҦNl={ܓGu ^WW7Z۝)cRFBa?2%Oř}c{g< 0Y7ѣ{:'dU]]S|7E#QB'u IIr"e3r%LdLMS{, AWHH?H)Wn$aR=SLngL)p >3ms޽LO1~{Fk^yĽ=?͚o}|>!:zX\/r.#ǯk^gP1uG2( f9 1XR TJWLL1 mK" L?k3G~/^Fna|H4\m\)cbvnWz ͸ehپف>܂}?>!FbZN6Z?G>tպkVIw( y .sc;k?'4~r*pSq?#*k#i-K?3ݯmBϴ>@_Ϳq \2.˺S|^c2W/ŋ˰ߚTDv-}wAy7k9m:D{_y{wۆqͿ݀;ϿO/ʷx;zGգͮ?#:nwNhjCwV%N&=Ӂֆ]/aݙsp1ǠmXчWҘ8/:bA¯ uF9c1tgvc8EǨ i~ӕH8h'!@}g+QO8AŢT?yBc֙1X_mZ_>.Z|"jx[SiS;j1~=ŔW>~.aŭhjOڲ'P菬(OGkD]ɍpgfhW0u6 f _݈]<.o'|?Gtrذ ?q.`8eÙ3qg=sK_'m.@"!A32a\VćͲ6Җ>}%gL1+&AmWJL1IϾ AGes#Zϫ@k4ḟ_~/^<+bZ>?|vRli4\݁KmRgsS~c]ص![Z;SӚN4t@mK =m(ZNܹ=CjٕG㹫LB@ 0*x(lWt0qV.ݡy'mK&Xlc6zk8HtqЖ>}%ʃ'DI <\"u-}J}쫽 l.=0sO??_= ~+ O5UksU0y~s]_ջ1nޙ+iFsZkMrΘwg[jn/`cV<eb.RH藧.\j‡qnKm ^|};zOqtO0 ~1YVAe_Q3uN9doTiyw񥵼O?Ї1L% Z_q_VV]LS:ߧviK]_1e?&mC`7^,bAgv0{[ſ=nexg7}5>pGF~p8^ ˯Ge W?3.=[bSspǮk"nq7*r8?{Ep./7%Q\|j _`ᑧOƊ/=p}ݏT!FV2%׊B*QWzD7V=B?W"%(\}"imO V@R^__kΒLI1;@0ޮdL&3&IIu~2._A?eI@A8bxu4bwvW.^.]2Tf%0.ɻmWZc%*`g=Է";S&[7EyYL?K*PbZK2^jA?|Xh2 @@`"pyC{)_NVXs Őyc.?J:Ө i35 '{̾|YlGzL@@ F<9?~$QDdGEo'0O# iopRFKL7@@ Dhg΃$Ie'zS.{.D;0)LI#itH@@ @|%2&HDD'9Ӷ(`tZaS,2Q׍ u7D[]kW.QAI\ 9?ڮ& xX @>h,o!~@ @`2ْɆ2&-HN~]s|I#J#4]oէnQNe}x^e"[L|/m+@@?st~在ßr_+>RXˁQAuo{k<Igʇ҇bkϷ}{_?eC< ǻwD:M)G^;_$~نo!^@ w?#$6iOZ&nT4vx8?ΏQs%hƌCj$EAӿTfדdP{*_WYl2'Y&_.[L?HV}zJīÞ;_mm]G펤uV;J-k}m#CI 4)O׾t;'|=C;!(xD!Vr_8>~2?.E|qW["~L}U7g|vGwWE]S+6 EAeg硬ԭ54v+;6cظe* 1yb#ۯLs?rtcqa@EE~;F_c8ϕ$8 Ox^D}U9N XRgl։ [vaRT,1~sfL4"od֗,Km % B]C3cö];o!O@I8߰VPnjJ_>C#;3 $l) h'dzzgƄ  N{n,\vrP+iq]Orh Ŀ`زUN_m}lԫ/;+i[2͘9w>OYp!^[[3*P6mVݦ͘ wAkK3'OLt ]v_I.X>$Yu}cϞ=_l!21"$ IDAT]v zi۝nD"BSqGr6_qc̜9\tIlقiӦt~//Sq=ij';I%z>e#Ue% Q^R|ۑf0s TNDQQ3Wik۠S܊[ A5Zr!G@sIdҥ 2;+kRt.YֶVL2EzKxp6wQX SLkJӕRr~3<0txtIɍ"]s=۷[C]YY?dXRNEԩ<&18 E>I28m$<5l\fMCg{ۃVf6Vnjnsac MyjFDz箝7{*:\oݺvpr2=f} b i$?qk#]ӃuDMG>'&)Sٌ}6BmC(>|RUUU}OnܸXlY2|e+Iy晘:bHa°LǓHPSOlmVںF_b0q،I[[gDҭu \5(܏cf+lܗb#mFfbͺuȫqX̜0j^:ɞU7 4@@ 0i1E8p@8Mq/ }I’& =HX1Мm"$#vq(#[z5-ZZf{Ђx|mŊx;A}adRƧC0#l|[v. #حN{>̊';E\e@M] HY![]-knw ,f`iCm?ѿ4hk^o>qꩧ'N"LlK\r?oj"'ڰaL/OU&\1e˱L${՚ͨB͜ &յ[Mkv$a*L>\iޡf9r[v˳ $uf7n\sg}ݖwtae]/9+ ]FIӤq8fJIBwۃTTT#jjk6iDhϽFEcq\>I:E"KC߆|j.O}IK7gn{amnnnǜqF nj+fMPnov嶶je;nř^1m_nY=5V[yv UUqF̝=yI<`c1E;>ӧs&W|"TQm]Ǖ~ HȒ|x1WuI8I2~I~,kHzI {\5$cex//ҞP ڻ%Me\qmklm@OG UN&lT=`9(4~s+jI¶nZw<$ >@)Ɖ%3vm^ghǣnWlù' QCI"i2+tՆʩgvg΃8i_DѷǦΗ@4RC[  x镵v^mUmaoE+$i MX;&.2E,_Vާk^{ۻ79nUɨ|{mG=8Pn)8ܽ#>P@:.t2YSSzs%M+@[_÷l$*Z1b^lyp%H_Qƕ_m DXÝ'/m_dH@;G ;(CuپV#}o "i`L3I9gJDfϞJMvrԞ޺_QJihd8ġlVYO'945sĉi.)?~|mRs}&ҥ88)Wkk[0k_<~ HwpZ=Hc c;L.p jse*>Ib֑aMw͏1@@ k 6'8fFNDYfb݈&R0MZq6S|\ n*- \:TGy$mއדsuYfaΝ}i~<œl\>q\w/4c+*@x>mΰ5݃v9Tr{@׋5H// 11.8-fP[k8=90_O21 F4LcDws:&}G,&sلW&YJS'Vvx%>Һj4QG&YJΖܘML".y+X'hzSO+P/g̜P,۫2b_^[-WE۞̳հmص{5۫7bOAUmqRJA=D``z׬G]}%ϙe7+~S$h54LJ f]tV<­=`|sj5'SH9 Qa'5bBr82_cNp8_ keϜI뫯Vs&Kƺˆ9L eÑlws@k5k2[%ukU,Tpl#춷uao0"OR46ԺWtW66,=b`c!F@ ~FIN[I3nil6Ɠ,L"Lj+%M\mӫ98q\_b+rdU;?;$">̜<l5=lȘrq =*#U:6Ә?Iۭ$F֦Lhˇ91>SUWGiN].U9nf堡~cWܯ܁8}!f@ c&jC.Ik7w͖7 mU\[U IVd l$_HV0񾨮F*3Ӭ<m„ 0qm(}jWvOΙ3VlǼ%ŔrqΗ,f}ma`7[nI.Q_Wkno7;BnnI>v۳kt+ 4'߷Pg}sF{ʏXbh8c1@@G`L4w:$Ă/ve"M9l9WQlդ> m|lܼV M\}=AہN I6>8"aH0g !guu#gLw:(=K,Du۷cI3PSc!]1NcĪym}g{QTRY3E%(6{Yypȵ۝9apz#{M ȶOAmZm-{M۶uVbm;@@`!0H'MUVV:SbEM&f%vdn& ݄o>dx.,6oݼս4Vm / B,HtiӦM}ٓ1) Ϻ:$ڧe6{lGwC04@~+5,G-Ɗ^2U_j[3f@ޝ;v7ytlGlZ6fþҀG.Ƹq ׎-w`)ł~; @@`#0*Hp%>ysb℉9s&$%#m"W⽍猌(nqqǹ۠CHP,K"9E`'2q=m$cyI̙WHvXx G~w%66D"W\*ȇZz QSۀկoFSs`5 Ӟ:^fմl#"g{|*'i#^ס@@ ph"0*H@&No51Oƍg>TvAc&NQK05 '9Lt2}8.6#N7L}]"89a3lgF\g‹vh#vFqQ&N s4BփM֢VeKǻt>4#Fb[yyzb Cw уApLp|o8O2MM}h|Ý$%c3es\z9}UVۊ,gJlGfHWmKi( e5>كYjQKbի-WoܾR۟wc QA҆$fӟ!=?] ӧ_G&S  Y QeYxN}w|BS+el>ZC;,`շL}8}c*lϢZ{,\0Ǒ/{b3ǔ6ɓP^6}WlH˲Wlcgj7@@ c[|x#'=D#1h%J9Iɖ/1s[|G*;h2S_t6C}yl,Ivjs\*W w :Z|C%_9¡-XxkĔIJl0?P@@`!0*H@&N_~>åD=1h$?q5ן=RG?U$h+1td$HM)NTVθ~i7R ;:&b.kѵэ+T!XF/phQϮlD~8{1 }뺻}y: s]uX~WWTVgd}:tރ' )@:1N{pd{ݵ1HZH@@ 0$m+)X_`3לŹloF=ho0&{ïطk9lnpHH`Y̼yvl//Gmسt &R߷}mGow,7αOcO\ +٫6b1S1)ÒԸ^0^S^WfFr60 F ;_zrn*r+ڷ\*c#y\}Q>s'^s.eYo> 3y-xwc c:VO$PRY9Q;^Ygg[,VN6: ۞NJ y|PҸ{l/59̶ [_x z3cغ})&.TGUc~*yh ~k\(;m/+F۪qPG~mIvr:Hj<.SsA y>a׍;8+pĄ޶1B,tѮ߹kp"i?]!g5~C`T67}=oCqVԵEΎ6$*͛pC_ ˯'VO堸yopuv|GQt&&vd)0_]׆mqN)Ŷ~.ߎy ZԗE"2r|yY)ag"w8wڼO[v}p[碽۪jeI'߯v Zg.@5oy^;KPd݃k[}9T~LTm=v ^/x_㗛/! @@ { 6Rcmhn6fk#栻 Š+֏lMm-񰻥ߕ'|G07 ˑ߰>3o¸A=U$Ksb1)Wz3]xM#va@SF>׀͛ ݍMXg;i6mƞ>--65ՠ<,.m5Xt7iG-襰Y=>r\tlWlJ.5m_޶ ]1ddSw 8()<v%m?"w2n߂KSv,4Vao0/>+lᬣߋ9ǗaÓpGކ#Xs (C7nxq㱳SsZgdy^W>enC]99(kc?ۮ=+A=\_kX<6uci# 0 f%?VyDw^g_\w1EӳKO|{pgL[hDŽ=ر7E۸pV n݅]Ͱ* IDATn{Wz:Qٵ/l2RoE2Vo۝q_w+kg?oiarlƬJ{mlƮ[u3d8*.vO6全OnN1-;-1e1_'G$v'-NZm3s #5mѪ_s-'_4κU%Ysceb0߱ k^ε1>ͻpxyl[1l\=Y=u(Yz!r'╼v4ƒ r6u/<6ہM;x϶}ϓ),re.W+FZ[o:22N!#fZ3y@@ p("͌lL=f$_a3ɖMF#eg&yV~:;&Dc ׼@wg+?ԁUwX<ջLE?J VӋ훰5-̗>nqŧnta`ϰF{k;˦-_ս+ Y M6[Va3Ĵ Qk;{d~nͧ[_G:S웭s[Fv.x/)-3nUC?JZؒ6|O} ?/9 /EuGM;]mCPx9{ΝHtֶUpIQZwBٸ,uGcD7Q^Kb-hŒ'FMk6lH3/ҩ Gao?>d{2< ?@@` pH7g\u ~sV}c2nY\# Mw&nc86q ֊} gc]?3l5m#êq|[썝bϾvP|#Nصv[!i*,_rh+=5qܩf{hG7rfyxpŨFlw f>y]6H\o{޺SFV{9Xf{p1&07ҳN.Z% _GĻ.?ͯePz;qqߗ#ozԊOm0֭wu8d?boYsZ9[̚i+X~2U碹VRg,[]։Gܥxg߂r:/ov]Y[vt6eO_ݎ;{ƘAT; 8gOZY\Co9费7w,[iNՄ=is@8twYe>m2v^ldӝ=صq3TM'nJ N끩sGm^o+c9e3{"nڀ:c=.8S6^m϶~U-%8|2iG3 n3oBK==w 6UGR̞;YF6lqHy݆A6s[aOa3dg4 %04a[$*͙,[5 :Qйաlo&rjao"{*r: eJ[=۾nQα;{~;}s1uz)zquT*xÍa}}Ϧ3QՎlN ܜlP%\APΎ6s cݶؙl#7. W-{ɵNɬ\dzGrOd7"m*G+:J bgkJƷ/3.#(ű{\['$2clo=Kߓ{2NkDn[پN{O?#|;29*hܶ5'7n':P.@@ d; G;_i6m鲉7&p>$? ca!9,QF$Po6SmDuNa|ٶV޸1|?Ks6 >"/F:op "Y n__=JI'3@@PE`̐xIP#Y6dlWY/˾o+Ŝ)f犑=@@ 0&$+=c1 I|2$)g <˜1e' QA㎃Mh3 AC<8r! +'\5r 27oK< 1pVyy[g`-Yd.iGJ!`Lm2[c@@/%DXIcYG_onD40ja%퍾\B{@@ Wq$m$rD4Y4Pa%m$\B@@ _Kpd#aD#>1^A MC@ F'"j$h$g,KQD7:Q$'X$bu45V$C r wh4H $9y@ E`d<@@ 1FJ!N ;wbƍhiiq݃$+3Հ@@ f{{+`̙(//`v ښ5kPRRI&h "Z7va?~< XCС }vL<3f!+++aTUU`A )6m***o@@` I+,,t;; +ie|:/? 2!999gf {A'> 9 H8甕d i)X%@@ -#5۝#rgFRxhY|$+% ܑKFnφ}#h$c $ᖎ4ul~ 7!^@ x#iȱ1G|R/~+׆_bс.#=N4ֶ++%*PahOFZC`wf~#hFʌt*uR -^ÿz59'̊h.֖\κp 4cUҦ?y|a% wTXK;^x[A :fIaJGzzm>ms#yb_rp'|$[twFu=ޅN4b[i?GS6_i;ߩh|׽r]vߍc2- W(Ncu LScyյ{'cl 4J#gHI&nم.V x4_ ?h߽^ևRCq{}a}3D$t+#h|7%i/ۜ"X$Oɲ#P!ȓq5+A(L}EH1gD:"}$mXYQDdmQ¯~7ׯoלF7݇mms>Lr:#Al-ב?GaL+>= Rfoⶻ{k8nއϽxѠpクqIo÷rwLscpmߋO^Ƿ JUO]s?&Y+g\_굸ðIY\KeoHZ8gmg~ |zV>#\q\{B˞MU4''ߋTH;7|^>1F9ν~Jހ@_vF}J78ޫ{fWf^ y?m٦8ϿJ2I9hoc|d}t9vRk=Kj61ws1K3 F]<.$y]%%XF ~9x[1&\s.CGe>"Ed"Q#YbT=  ܹw}xϱp?ms9k_ x|Y-Jv4g ~xŭNp5~w7Չիil'Bc¿|N|lw]K^^q366t/}VŒNVx/9 cHeGJj7[1ޝyN3RHpjq^~f%j\F[q]_tJ^N{^v[~Zգxo߅t"iN)JHb+ȯ93~?0=iBSM̥.{*)do$r}XPf8Is1[[$<( BFxF A4B_Vv$k-O%m=9v͞G2 ;5?SO97U ez;f2tyo ؅o A2s g\]71׉hY{b3yMHŰQSH*K7.:}Rmddk e7)#yL8KcfQNw'SC. 7Qx}1ڸ2bDx|ˇ}JҘ32vE,.4ɈXlJ_L]OD] F{GR׾rβ9^+DjOvzp([_vx~ZyxM$mW}%uQpޥ{zzKM~|@K׸)O"VϞW͎g~9Õsr4ͯ2pv)KXe}J/=Z2.0=q^{?1dꚯ"g 17$gm+W3#nMgڍÍǮs^Q~N{dž2/ /̥,6MGYWzqM+nL֡gO̜>o~8DeSئw&9d)BoIסFSڒ? PnʓXKy/Nh해U]b\ sr֗2丽L8̋k~xD"%'eŜMcEĊ(Emdk?券y%PDTC7}6:ޫ/汬p|(k?VbI 'V8sbΜc𡿻E;x*Q+FĖ1vǗXǽntFS[\_sI[3x71GO.}l%p/Ds#8 1V`K]g^/7݆z `Ü%~g9H*COw+\!g!(wTΓ|#zmbBh (^ hRAd7<~a]hkrsVѿŘ%i?()LjTtJZ|V,'I{D̑gq1R 6!L'"ul#P&=q[CK-6kSxc_ɞ+NͿx"NV07.?DKpxž\[p%ZBq:]4q5n]RVle*5 M͏~IQ3=C¿ކ KWރY͏DTt%o]0F_s}[͏+W/O>% ^w/9jBZ}O}qgd>\59"5RjoqSF6ARIq+~9եZ[*1)Gu"nfIRz@#EoOe8Vܑ&#N$B E(KYž%myӵkn3OǾxJF*2FēJ2—D/5IEy8)'N1y^E"H^ܔ,3!ڏNVtzO[FO 3fp+k~א^zws RL(O#|OZtea)(qts)ݹy=ڙOcuΕ$wPN{3&vIؚVS][-wG}1s ފV[hxe鶷աzTQlVw U~7i>J1zEɋSOc RF҅}؆ŘNQ>)cbߔ1td@R1<}L/YO!*އMrEo;~ RW"5]LMr<]9Ӹ|۔0vڷj X֭[ްǗP:j7~m]Uc>9+ IDATApdxx=@MQ$Y'BژO!㿨o(G%eV0Y3P1\X}]\{EO>rQR|5JQxy?~|(ة}^fzMg_zTSF{fb?b*~F_9%N)J_G,>zS~8XR3e? w`}`_XX~_oy7Z{o?,86OYƓ,0FI }:/6G'EҸ[/Т8eX`Q xh4 5WԼx$QŘh&Sh4I#GG"B$S_ȯ\BP .V/+e=8s# J(8S`,=Y49k5[Xi+aZ1\G!!Юu[;˹}p{eHؘ҄!bPĵ2 ԰"WLV9sEgum שY=2= 3NgL3:va[;95k`h欟:#+ ;7>3OiŔep )aU aG)34 ?y NhhpKxZKz4t\r kpoѭF Р;~Tba+7Ҭ4šZ>3-yỚ?5wy3JcQc<#5(4jƑ!cu!j a3OeF/ [~FÇҙ3VoO\B ^krZr&?)1Z0+1noo-446Sӯ|S-R.c㦴֖ViA'n"C*.ZBfxJhjQ˒k @n -y@)6f~(샘'o,L[i<}R__hYbEo;S :eY-gk;h@WyjPU#E,oU)?LҷPsV7ޔ8nvsfe eQ;LQdJЁ: ?JGʬH̗F(5rV^{{RztTT4%6tvjZ7Ag` p+t-[V hpjU+p,V@CiEq?0B:G0rGzsȲ:0~<>[z|*34]$s0wrS&qs(WC㐕x+7Kѫ=peLTr 5kLIo ~B֟2%F!"w׵4F6aC+V%KeUS̜9Sc ^~n G m(po8iFԀraCƾb`]јR ?U`a 奍q:ʥto= kN>mțm0{ JHoEV<ᓧa8lǩ8Yp{جxS?2F!χx7"\r X5@|K6i'THcaFZ#֞=*ll\FY~52xүo_ (e˖|(olVZL9Tעͬ i m+ݙJ_ *ӗFiF+$;ȧC6W1 Dj8.VR\4Jhx!FJlLuE94;# _j_7]Lhm3+]bڈŜP\r |4}Ȼpp4#iHcz_>YiwK#ӛE }e%Rx:d?j*]dyk|>|`qnƋ됍֛)L2p:]`Q 016Bx$>KV"QƶШ` j q%SGiLF␐qY*̥i2#ÁxDaJw Y(dh椄0B9==eм ǛЅt@ CU@\>X.\r X5(8i\+?h`|fgL*7 p%Y?0=*u1wcc,9*b Ո{gI5Z04:tZHV >73R֞2OK.WZ#<£)13^ G!PO7JpqБP#;! ӧhwN3Ff`ڳ9W`^0 #-%cA u0h3EߟCAnJq`:}*ȧ,Gh]@sMrjf nrS?i$ءPkR#q2cʴF}r ӔaF\ ȉgn鑏Q+M"Tb)Î/=!AaQY] F>BGKp3r2fq> Ȓ@<~J坧5k @R$I1-4 $PU)UM2w<++B~fޗAj-XF3p$upѳ5TLbsΤ( /!n9,Wbb}+;#BPXA:ɂ\?0RVKpi.j?85Fdd2v4s8c7h$+cg4Ĉ> *YZ(k~aXeWHBy /훨 bߌ0҇Ƙ9ѷB<7͕OLu@oӧʋsisLji|-&j~3|9_2eyu |e ۳}q]ڠhɻԐ!˒%K1!WdPyzo)7h"3iL9u]j#D4` L's|ES3V˪hl| Cu&2S[FZÛʁ^[΍|59@KsĽuMWi)Id=?c.r+:SЬrS9"trqr p>,Űo)^NHDa%<[XHOU*i SGE #qa|Ǵ+1[)mčƑ(hH h⌴׎ mN%|}F1ph4,/)הcxvFBCf%m'hbx~& @n#_JL -f\ 6l.~ύ@945|"ўr4Ċc 1|:aFBUxlHc;IP[q|W|zE`%ʯNq0&ͫx 7hq8F|3\{-u)h*zQJ>:1*] l}X-M\՝YU2Xw&: Wm}OL4~OS^|#D][NwYf Fmtf~fa1lY!^3!(ふm-jqĊ:$ TCt` ]gYbDhg0p2;X 1OvµJJbgGFVVA DAFL7:u;Uca]rR~BiYp{m\oƾΤ5G㚚keN4W/w}|N? Np` \5h 9c2sE/'VRs"搝nC 9""ĺ,׼En1ru!\,sq0Frq]}5;.HKr5L%6W/_7W#]p0ZT/_ Aj!(,7ϓy' ~gɋ^mk_\N?18z;D69KuՀsZԙ sIGiOUvZSeks> @^C ˩:*ɣnәPȍ<?=B֨!p$uwEm'nyBvԸi#~: ,So נMzbnTCsLgw됵w립Ʋi[:]ϼ;rZ'ٱt'2푫"~Y3+^X6X1]3X-7"W~K>.} ?u\H\o+<}f+V"n}yYB?L7zqV_O6 xfpĵ5-tH4! :IpjE"4ve>>׾ƔP4a.NRY朽n+1rJ4qĎV?H_?D?PD9tg1\`qȔFPy!(- :I:˜sRF c[o3LC#OQNSuVQ@.\x?Sg/+<{4'2K?Zy졛_wlYS“N&.=vTc'CwoB\OзGN9Gj9鞇ˏ]vL6k8(dԶi{?/,S{/y䪓ņϪߜ.?Gnn<0>v>[v`ej79mnc//?'NIX9 }LıF7U~TsrU!OrwKrΓ]~u@[I6\Lץ( )~FS G)3 liÒz2Iȟlaزa _ K~ng+Q4IX\]˓jpM00֌&ьrh)c0_3d Qܒ(khťMRroDPi uWAd/0^˟|n0|#ϱKSkړۭkwh?O<*0zrĿIű_^덐-oK=:'M1h6bg9cҍ|WU+c> G6{]v#~j9e3s]6L?뎗ɞl%MvrSp}~ =2W@CO:S˶W=B8Xv{);n;ԣQJ]۩7=tx&!;IS`dU7,yw=,cdذQP,E̙2f}e!V>S^T6`ql拆KsKi=DwyE n4#k}? |USh~Z.KB@/0}3/#lXʗyR|y2=30j@J{! xTըEBBT&^(#dieOtiՌ>\~PB IDATY_K85>ZؠX:REɸS~d7506zlmď\ 2Ć*d-w?泍]l3zG9B6'2rj->3VfueI<X_NRf/ qaH\ޅB<_Bkh9 ~a4s8 ݱ =;/˞ڜ-lnZ?4gx}am?m u&bMCFr9h3o)U|Nz' |}gieM}kM1ML[mEd'aJ^&tg-v$?|O7~r:l^ gʲWPwMkvW\,\0Y-GxdU֌obsLDJ@c?5(۳ESe/DmOo`K^z}k _ʘ֯/a4|g0),?7 uqfb-y/(w>c% 'AGpG&Ɉ/[ct_(/Λ/Ӱ{ā<ષ3/̸|B^<}Uk854{rWq#rbEzyÂκ[Ne6uOVZO?+sϓ{~bNذ߄?wVdO9,T]ft.q!v|Si;a,ragJE2''yr_ > ky&O[Cf9O5™%_Y,\9V}wy}췀7E&]C v#Q]'f\2߇뭖qߤBf\'ymY{<:{N~mưϑ6U7ܩocOQ3Momt¥7Emt@9)N0w- tӬS@x6p3-LqsDrʸ鈸4a@e>p/.j3`w`1K3ϸوG iı7ȸwt7`zґ3xm¯n?Twv/V,hPXQ\ :ԈBh#]:% "3o:\W-3*șX͵ؘP9ΘS:②9T&" Ddre3F_H3=}3,7z hnye̟Jæ~rw/ϑ#'%%a dR/ Q}4hd CGA?Q/k]#;S [,>WrggXy{ع-&;:,9 { \5"f@_˸Ft{o'_e/Lw}ҥ2mvn|kk3FO2x_J}oM+s&a&f>/aeCe]Q/_.tV(iG˯/WڰF]Djy ǨLǞUI9\"QFplrehSdo<䗥zA~N!GQ&ap2bed߉7QcV~߼7?]c?i?D vO}Jc'+?XxEw˯x22 ꟛf?mt7ևsNɳhC1]MZ ς;oσ^*?o[LS/{BxN9 w.;Nf-o#,I.FKm#WQRm5ͮ/<7\Kc99Ƒ19G3lH'Vϟ5kj1w:xI9j+tMsEV)׫}SAuZivuo?Z^1C 06x  57ZM/4ÏCҪVtȇ|#[`{d8s ,AchaQ+cyb)(׸)! PN t 8%>.+h4d:bְnMdcjqz+$2D=[uJ Ŕ{5bͤ.t4h(L44P9a~ذLo`wQ`)^t6SFaJ-S(wfAAvIN|g12qߑݗ]:C76U.oQݖk U #{6Ȭ~Bcx-93oTnG1ЈN#؃TDYmia]#|:VF'wä.,]w]ϣH:ayA\Z" GZ{_SQ7gsg&mқafiƓ]fņ-ޤS# ;ttNeߨS>;p0e/ i&L=1=̬مlc+,#9+eEN>`,*י><3t飽Q_l8aLױ?7({JVxQu7?rhG 7P- JVӺP@_!8 L!)"Ş܈ʗ~&E#CGNf_Ag3'PSOKP;4:ˎ6X%ylJZњ{#t.*}huA2~_WiO<{tx FPcz?Fq?γ8M|Yijw@| 8-X]f b3_r^yswFV!!0@8qi?-S:^:N-XcPgʕ9qi0?QNaG u%usg,( y-fc!ar䐇'crqPmq[Q BYT8BI,L)x{EwO秃?LN(2nWε#%q?!Sl4 5#|69iwK#' /lCk("Gyhg?䂼8/l_ ̑8&ʙʡrDSBs5Kpb][ꨬLO|OdYaW!Kq;W<( 9:†,-w59Kg?zLaCINy^ R>e8],陂Q(^JOѕW41n袒x2(UrdH3]!Ŏ/"{eݐH#k TiTbx[6XX[i{H 0QpNjQ\x\cx vk4҆ )o)&Tkp!eᇕ`'jxMn !:dƾβݨ G̳^Jd|ǼB)Hwr0O_gهr$T@h$Vw8q e3p3D+#e O2VJ0>3Bx#iz -GhxSO<b?/ۨGIA)N4$ǗpOP>`y)H>TaqgML4֘O-teD+L3Kf,cNS2L\uo-,tY˲ q=xC-^5׼*qU0nn*n< ϭ7t/b/PN\(,λ=B+G+M&V]ꧭi\{RZ`c͉ɴE!t>?6Dޓ>t?f)sc~4Népv85~Hk%#Z/r(`䨟ʌ:[\ȵw.ole &_G9=,r2Ο@Lq29rwp 0Afc&r79gwCMBj˸=.ws8ݏyD~o C J).s@v*zM$n*–\U"o"a"ֲ"%ςQF>18d)& CHJ2fX3CnOPTRQe]ەӕ@"498v{ZF.MZN4\$8na%Eϣ:z7# ӢkxoG{*xӡ{34 ~{~er*\PO\8]=v6cdoH$׋U`: ғӔ4UA3F}0{q::v ۅ`p9aoLi[s2_UdQ8ܕ:=}eim\*8FzjYoً2s'%c ev/Op\ 2givrM2{K)ei-/rI~J~sSrշã䃎n,he[9mv??23+76V>uy /O}k?=6C99D7-=ν_~2v+YOӏLt?or쥷4,!5- ow+s_]I- IDAT%=I9iȊn,3=idʬ#ULyvZ>Ye‘0,u?~l12[gʯ{=/Dhulgn::2%?),Lf Q*FV֎ ~R0% ta/Tf(Oφuξ88֓xHz<X8~sm|X/ߒR (יrȓ! k ;~|pj1@eRKd0Y~e9쬇iLaԱW+HY314ȪsnG2Vd}X@QNL*j@âVNђjjQA=iCN7VFՓ1p;91S,_춭#J?U6c|=d߱1l|Y"_l?J7-ȏU|\ʙNK (d9.5 O)_7j=v pC>4@ݎ>Qdɧ%y}S+/XFnϙl~x9Wʠu,^q\ھ#ܩ.ݲ@9ecÆӐћp?Ih:AqC7ɜ>-rɶV2Y"c+"9b>١IͰdlv /PԞcК \q|1f ?IlLBxAFNr:rFqz5J.+AW SFPxXjBce6565{eyyqJ;<ѡU@ZNHh`D44Џ jڴ^dlqfwO~82@9ô\_ h p۷M:;GοM-4CL6zJ bm4ĖaJ ~Ĵ1:> ;_z1׍iވs|U +@>Õ5 se> !il+t, &qJ Ya՛F`ԓA#_Gz9Yzlo.ٮXKϏ6n ma Ajv8N&wr͹VtRQ"Nrٲ] 8I6[ߒdU#O-7GѼFy-|[P0=>䔝tpmatw&~t5F-(68ZN 'L71g9x ,l }f̒E72:>UTzV.y ;$S]^.=q>%}RiZB ҕ=%&J墱2A2<.kŅۖc8NlWa4xPm 44Ze9sd_qn . 886h(?ޤ*!ŋy Pv= =gPU⛑1". 2 wjh2/MU(H i 1bQ0O'?x׼^h )5(0U n}mېbUn;dm|>n=kQP(IlǼX1s vv,P̊?GpqXmM4$;!@w$g8ً$p48"eNjӤ4Q9#x}駝>ߞa^o*g:xȏƕduU蛦*i{ɲ 9s䃗f`!瞓%<+fΒy {6j_0ǔ,LNi2 `}#':QC'GVGWaӇQO^Wt2<;rQF0f^SVTТM0TPS\r ;,2Go\ /pKE\>xyebE@g)/j1jT?m*3h5< .;m}o 9q K{ QH*h6Dh'r#NzAVw4FHތڅK Z>k1n $m磟Q$4t+2З7r M0 4B{)M4k]\qlDJKl,ei0r|$P; y/sĀ%&%"g ØS=A(~xvZnn?`o_6r[DF9#S+L1oxS?9WvȘo^ Cbw2E5i4Vzhgj?s\wG9|QJ/kSy`IgyZnٯ}~jFy?pgf`nvE3#䌀혁Qxg,"9J48JEC}tKj#t+.hvY- U+p<NZC.x;L9)O"y~̋瘷%^\xQQxS kZLDT&$2C6CYh@;%W<4ީ GegJG&:]w ;*c:E11đ g:'4{\GJf 8"Fr3 3.QH8"2R`d`OCn7gzraM!g%iD ue24x 'j@lc)[^KjFZq<%@\֤0wn)q˴,,XOG<}c}qlUrF@t_[?=Ĵ93h` o/#h,vqUsԊ=n#F\/ cLGǰ^Ӕ8D.T?O_:+`Шb?N(1bhX">uXMwF@]9fsw1G L !gy˗p55q 8.HρZ|q߾(?%C9 G4H(ȘiΑ8^i{蛤NAʿ{ݸn?XΉS*tTmb%\4?k_wˑ4+U:t+0T)XXέӜȂ *{\YEFUȟ)*bx I#]hPRX1bD2Oo^g#ٲͱ>m`[4bQz \L!GcaI|cG4aE*HcMGs׾r=ci5CyMjKtF`YaJۙ00u؊d|wjV(HotbjB'9ȸiveZO) [Og#`Z8vn`Ufip Dy(w7y,RuF 5xď]x/ƎL02PXyz 4$s 6K0F!]=&:@\ўt'P/D}\lTɾPW6Z,Ja(KB:yXu <t8K`N?YԱlϖ#U]u<r,ú,HK+Xcia1LOq1 bTcG[Q6AǨ aTi[t ;eazi-m5zv">ŗL{3v*lؙ}dQX"" u' lN9{}y3Hz<GD'SA95Wpk RE<3=g?X/# %q< maPsVHYW7-/͖ǩ`Sn(O_Zץ%9KyjB `lRAQk;'9Dj`iNǫ/m.ۺ[~L/mւ7hUGй{/[61Γ+ZtGy]K3xruiq&FS䉨!*a*NR-vi?ZsV uWPn9^\ֈ kϏV~0W$t:⋩$L8F-nDx iŽC:܄߿F9>[k吃F6N5cԡ:n[' a`(qq 9ˋ\,}Oha [+ʪ$LӎaFMޱsFBQ.KNP)ΞqJ$gȆZzAgaZz6fF*vSۣA}baW'Wivp+rVhP|?5q<~Z΂:Щ iL8mojp·|] ȪF{(.!@nNiuӞ cUka ^TD@ @9zl:48zsK/ݪd4Ma໺DٙA:qU$>$rVA3ҬMR{%BRܸvYR C.>N#B2O$JJ%&_Gr X[񵕡'|WSFZ{FQ B,>^2塨q`~H !5^\sVQ&]54:4Bt* XMьhZ2G̠rR!48p%xIS7l(=b*XDy8Q/DgHwlp6(}fq!ԱsZgE+ +̥f)Ԋ(ŭ$ y$@uSQŷ>>ai^apƚ1Na%PFc8S~s NI`<]omhlPv-'#M:*8ffw aBqhy,V"(+ɇy:νqwGdT  e68u7wT^NxdXg*ӂmqI q>[E\4Lp2lh4J,#/.DL/.M6C`uRHn "Nr(0| 2`մv2vА=Y;)VіDk'mOk _U05HC._ν-=oĴcE+01ʎN6|ީ֡S1dr79yv?k8 R#䎎(LD)xkCE  exG X>v 㮝KXeEdI2D>ݣ8*JU]Ak LT=;bf Q=oō, ^k3Qˑ=X’5?-UO`^ PT7oy)Oi9M#Ira{L\W !FC>tL03e*a10y+O8c'$a/!ǽpdiLr X4`SfҾϾ{|r}cb~NҴ$$È a'Msmܚ4NYbu5R5SR*'W +'q%4HשԷ{aep&;JGyQ&g183ҳ4.g0iE2Q^3ykA3QiGyf%x8ic4ŊoQWd[ǹ1[kD(IȞ %M!ۍ\ZP^K,ȔlZFks@#:|ME&dx~G֥e EҶM @MwO]zOH  nq_|Q"V(1iB?VjwH9@VUt䰗E 0aKg+m|үoj0)&yh75_ޚtg\H]5lSi1;<.fA4Z9`wgI#[JG5;8G`uw6 8JP\hu(dqڱ)䞞2s :,(,b S3o+?/McգDY5 |$+t >n!u+_{2,FipR2ʣ?X:2Q2`ryD|CX8G!(fr%`xr$0 lI㋜%B.’YjIb~{a<|XnE0 D:;ZRcr t .J/wa{.Lz}b N~ wYE3Kj11(_h"l-lSU:sz +p Gޝ5#q\"rPTa(??BH49⨱F4L3d2є&⾒T e0!pY) HB?tYH^ɠU&?Բ2jPT49%{Nc><ZR84er)IBRe`T=8#,#SIYQwT SX9 s4%8BLPw}áoxYi!^gi) vjyj_I (MR:5,55~_eH/+\ZWg ,UzQAQb/1Db`hb(j(E0bHT@@A3s;o[h{g̙3g̝9s!hN3H[Y3̋p}ҏ<6tICS|2@1Y\ @ {Rӡ6E8#K47Ldž\Ϸ6#iA1-iV~TF(mpLqx}shqA3yUJec]Z&)E5Y)X%Spa& E1]wDGP.heAC<5MNS,Jx4߫l-F[6x EcePn0-dGC}2 "kJYaHó\HaO!p,w*i'(Zp};Q%hgѼӫ@~2ʭdXX=+3>#! q)lL#;z>@Wg8:E(%0'a%m˜:PACx,9G`a(ķ_6շ99=0*ͱ*erp3m7x%jy?ٱ8Pgǣ8^Vo͒Ӭ/Q[ZBu2UԠLD#Db mfI`Y ceQTx>ڑ *4-k(qƹ05wTlƳ ^tV-*S!wXd|aJ`LGbGPN yS௜Y.dmRY?+hFrt--L4}jY4slhSVCC=e.n+I]dU+ۥͷɺl7A.E2s>0tnSe1p,Z>er_*4R łlUiF{R1!BhM!Ũڬܣ@|Ρr{ey%RZa9K=+]_ 2x4e|J)8][5O}54л孁G/%W7?uRry~^,Gk4"߷R r)B.8(9eryfƤr7ʞwz6IYNiK޹ Z֟Xؿ1%'J% "Baq@:qgB F}n:ᖁ>KX**rfmfvZ0Əsɳg8nϋ KK8dڥ+_HU0*-RgǿWeMFAV$3&@xHxdT}A@gq^')Ku-leP龫d6n2)^[`QkN{N>h/֝(0@eC"@ֵ9ϳ,ik{жUSS_I3عI XaoLwʣbiJ$țOI&//Ov`();V)o}^`7?܃il\nLX 2,_VCy-;7A˄{Y[s_,hwJ1R%q2SPIp£ϋ1`jHQq}x-Y|o7j8|6Wld|):jTrX-]srYVFHZ>>k\~rn@fJl֪Ok> FhHG L۪>5i%]&8Rtdx|tr)rAҔgX¨@yqgl;Tvۗ<-Y8rgm#䔪`V^g8ͥXS$`:M:z[K8kM/%̟k`J}^la"[p#6z& >9wwuZ.8ح/ WKEzF6 .yχV Qͳ@{֬Y[%& ͋6ºdlx9$qjhE9Ұi9'݈VPtH8$|P.BeK-c9dSuxAYP["Ou֨%zGRբ$eO:M-J SՕ#-fT&_cW"Mvi-[.L6LT#+)wB>[xN9;ead(Znz_JI˯1X"8cv| R8PT.Piܺrs>jvTɴ'oR<6n}<Opv)rSo" g Cirtv2Il\+AP~ϞҊO㠰7kXx\RrG2>D[d2{rB>MAŗC5-x+ 鷧YS5!6]mC{YriWmAsfL޼Ht'S妿,CHH/Y_BP-q dĝȃ,yz%SAʡu YyX wC-?{S)htnw_G=8vS;^{Si2jeppWߑw.O*'_3F|CrTWe)ڿЇ~j9|9rM,K^Sw<_$GPƁ1DU|]}Rt+I7Fɞmr| 22?e2g7[^i)GBczJVs}%2p/I^bGA-9ϋqiK70 L%0aaa<^R cLmM(3 7W`R/))P˪UaA J̦=$OpoC6[-dbiAlGzA}P:Wz6u*q^%'f.Kd~d|3<9d@oiި >gHi K=0ϗoz[Sg!vTǽ>I;_}<%w^Sڦy- X.L#6WЦ Z!~ȠABʝ(pwɐc!2z܃)oqEv :+ܢ |ӳMAe'q?i6á͕cǍ,-] ː1MLaf.ܷmG ym$s.եuk&;ޑ6gVJ?PC׼2?kYfr-w=o_x1rx6&fÏ~"{!? G_8D@m˯ӱ4゚ +^u1\YNV[9{>Mz$Pg4Z2f>WSY fx0)Q I5R2FG+q-NM#WF)Rꛖd7& ZlV=gPUWWI1ZmrʪJѺ0?Y;jl( x[y ˤnR 'Y/qьEƨPp%B91Ɗq"A#0b8,7)ɲ4Iqr,D-oZ R#ug2g VYtYrK4e+Ad?F'>P(c[!|)[vYe5%Gp= IDATX*!呲1"\XUp+d/P82Ы  o_~B.ԅ]G\=r5DBO%{eaEU])K>}o%6Uԭ 4UZ@Puull nHe4R͒c=jw9! Ɂ8TL9u*(&gB7́2ZCVֈ+UK&C*F.q;WIIu0RDloy~l<;}LLH6vd\(ܑEďe*>SY>Qeկ>% jeblJpxb)oȒܥy:]:V!,]s9p}8]WE8HM*`[hҡpcÃ8 2lC}b\ y&,f9pS#U.@zNG'}!gT=iU8-*6~8l<{:aC57ZD챗ܷ\'V4CMjP6V&%߹jY|VCpU2.)x6>a-|+}LRTk FkZl5Nզ؞6÷4'VS+"Yb=[H~fX_yl$ z%g NJ2ׁ? -@WC7)>e~=V9Cq 55+ʤtnQ}{ݱ42YX^S>^_ 7vsG?<>8 rS5e槜j_5Ֆ9/F (bƉ/w4*.eJe."N\ZxeV.FBFp(4.mIYbm,MgEH ǍeycI,Fa?,uLJ>cRDT}]DT;%X.Of"<坊Tp(nհffM*N;55TzNEuaXd>z[ v;T~<%sn kˣ_ r8D6%wS:r>+D@C.8??{^!밌zB/Wz 矗e))_29 aU98 xY<0%p'7MTu iހU;}[Z_~rAs装9Kz?wc&ʲeSu?KK˰ +|&lFOW@-7~͂B5;WzGj 0ɻNIr< ʰ/ˣI[dfKc R'~o>3%cvJܯ.UJ'Lk~BvZt-I#rzrҁV&it9)YhADtɳ*H@0s9Ac pp6eˍ'^Q1N9z 芳’zM[_/CC9W9}Y#5\ih_?XSG~>w`kLtS ;pxIj)GߛS^NV۶Or_@K9wvK)C}SL>BE[F(Kc%4}cn%> }74,ɫfywiA#1-ʋr8Ѧr!? EFyH(UNS|VމK:(0Icټ( ޽$Vj7Dpf9ꑃ7Yw*kݩkWQX8cYOR߭q2+L*`)٨į"=ǍXhZV5̜<+֩262lKJXQda"/Þ|ŐXJ[6t5j*y^>*blܴ^nRrd6l"yYnvim'jȹFkSI&孑;JAEeUDZ@tlo^Ul niX-/a_GQif a a]^I */0V+Zy5jCjWlP].EXc/iJgf5'Q~^A!N(ևx,T\Y)G";Ǡ@п]О[*բECt-#F76i@ /Y}>tzmd %I *|7e7hg30<ɣN=k3N?d(\E^<^ 9(Y9x9Ws KDMAA,Z(2{ϖgyji!, 5hɚJʁh4+92PoC|pѪɜ0u>ѱJ֐8*z;Yrp^axN9.ߚm 4lTAT<\l|lFd {QqP7u7.F2K{%o$PXm Ie("EOaMJOSG'ܬz?`r<ޥ\w䪁e_\IJQFE &`!f6қ5 (1fafcXNYPbr5XA,ԍG4twyPY^+LݱSvrJPy 8't1ҨEϢ7n[.6 ࿶ b@t.ۉ,\z)v7vd #GtwN,;KF;<0Vv&᜞_6MlBxgy,SftĈo)f!7wB1;7§KBi-Wf\!K1~--^TZa"nU` (5gjmIZ6* %8*%N1ququQd_|y 5,.+Xe|| "ѡz%O4H~ivQi峥QFteN7WE̳Κ;*9Ia:xTGPUXH||qy8#t5,dyIwӷ˥AZ7ҋT38Y㐋c2H2)uսfPBρjHm]f%+VI@S9y͚ iO{/BE$M(0T\3a#x PX*;R9^ƴߨ q).r /B%q)H>Bi//(,LC뛪Z#/M~J%&?BR娇( IS-K[a!=| )`M9 ?JV6Z@ܹ \+X7):YgK₃gBXopbC686h%8#Fn6~ar5R]9V Թd,LWѽTeme.z<`Th1R+}@RC뽅[޼#fρxr` J*aQﱾ*>: m>^&.G~H/9%<&Oi-I U^Q'1D}ͪ.Y sx\͂қ߾.]RDT*Sy+-8V5뜕G˅l~>>-Z)ӱ| Rt :5Rr0R0ɰ4QRdKࢅ+3;s b-~NZ*ZkM2Ɖ<5ǿx!6ti`uR,. ,Cuܕ6g3p+[uLR('gLMnGBUo dzH%!tc[:8+4^cf!|C&0; "[I %`$K7`k&|-HCLCĊ 0‹PE8 tMV%5&9k<]a;R1ÑH)Z(b^#wq\juq[~thlTKfK(A\Wdm\c9|MΫ7 # pK~Ļ 48c:qM$LZΜ(6:*SHWbZ'$B]k@GqMUU@Q-bBmTXG;Ҵnꦥnj-d @1R4^jKCnh$"XL ¤i!??v>U.ؿA ~^?bcVjVi 'ZӈOtN9vSLX9 QHXX|TK҈9GO,Պ#M9P3 AF{zJ8 /qsgC8zVt>)=7a:%^|E m(p:(@\b.Y4Ɂ=tfT8ReJQFmI^ab:s4Y|ـ;l2sC{{t7ǫHcz(ߒj&&-R)$3sNa=pTyC3o ʤHsz2OT4u͜|SxCD2b 8 :f ZġQsI գ:-=;qDkhr0 IybSX8lD %IpOLƗ`2 ype''+;bz H~%$YѨ1ļfxuړf2hYR8PMLIH&+K1@ t4 ?43/g'DI 2QւӌȇÈ0^9#xҠW,d4v TFe$ukf,ICl~RU\"V|e_sЎ*(ٴ4A!B׍ ! X8ɞV΃kfA1#n?zνIuȺY,|W'|XAtN.<$Fne;ה7#I/K)4>a%{?dMN5V)mqK&acFB}F9B3b:[1,7pC5KQeL!V ⿯1cP5"McP #N-:~ IPb v&xw.˖Ɇ: hX! ∎c?>EV;:{E:ɎM7)Ra$#5L.H&TyGZb|S\~/ BZrb.J3}+YU tI?uVg Z^60򍆫_J. ^pNnoiڭSdNǧZb)?_`e9_ x-e&7KqV<ӛw] &|>+4jVϝJXlޫ5x*fRJ| ֵyK."ÂKyJZEKT?ji]E,]af+.1G |~8 4mPagL ^>\1PkY@;)fZPg:*ʾ?0$oNf>e8p4Pm,ț xHLa{Q@j5Nt&x8hz/cxQ~!_ $Ϙ NC+#-\똌[S˦|Ռ\$b` ێq>7ߊ!JZA=xl~kO{ J sjD4*%)ѥfȏd1tC:5]t5SaDT4 eWZ!s񙚶$ uoNsbPQl<#HC0م!|dw?AwKT![_/UE_1yZaP,eg}.ɑ^-*.oy֛F\bg|+}~QJĄ)p Թ_X\^8PvWW`ʑ޲u0G^9M Z׮rld"5S4`f~trXU2FSAחZ\ Zp,ݿbذX|RU+&\F$2M GptÀTjԹ͝}f0M+WJ9sH7TT{G;dW:%#_/D& P*4K ÃU;7y#(MJ3FqX'u&pq)i0z.WJ-guxg*DP8?JGN6`- Fmmږ ?XMGX* *Ja@JF: 9\1AS~WGK,۠(^*.u8k҉{jar6K~-X\ )iDdK}! ҁF ^V,P95IE'4dۑ 1s*! 'j*=hpNpZt2bJq~HZۈADBJPDѬZ+ƺ2.Ď0%֑뜑L57B8}:5gawLe{y iJ#ڷ& ey 0:c%:_S[%">9>'^RT6"i[!ہ2KYX(;ْȢ6X'`.L~ȔZFJ7ieէey,IW=40lT& ِ@4p)!tZm6fJRKmtTjqZWTÆӼPeyɆŋvJey%L (#S뛔G"ueBUt*o3 'WL}0D*dt1[(+’cpn`/H\E`mgY-NցQЌѬ%  64_;5ұSs4KqxC?ڶ-cN!/+yyJ_;TㅍkIOģ՟71fi3?,"'㉅o5<3x[xvPfe^ ΀ p'ruc Bx[S Q1rpZNYFرl["ŊJ#~iKk)A])BM;"MhIXri Sp]{UfeQA,_cq5UXc?▙'‹H澵|k{٨T~?rB:u⹟ N#:Qy_l92w:Y}u3ú9UV)- rqґU@Mt*h|68)D%;>567r[|H@p\K˘Cc6N&x)F[Q"/<3[>C}(-3HƟ)e!,,0-g5+ q WcB3RE8KM'zr]ɮkbƇ7㘅L#NΏ1ak U\ 5j^[H.i6  s ]:2ʾ[%E J]7n/_VPf9^XP`6{R 9Gj>0b!n<.B%l6:7'5+&Ά8-]&,/q"O?UnT9-Rg5^64*-9ʹ/n),Ra/e| uc4WK>߂_ᵐZƬX2}c%-4LBc%)$f<}"#rXa>atdgx[Y~WAil8VhgѺ-eFF)x- g?5E>2C.r@ՙz-~,jx*ncᐁ,.%؛YL /"8*7|NIK(B6"@Mꨢ%`]_#JV `J(iN`nˑ%߾lǗ2m;D-b<-@^W 6uWmϼ֭Ty,qr\\9#]\V?`AHQ(-? &0EN˞5JuI֗{fVuK[u>[Jnl(di+*foV\8V9m}yՕFz.%Nsw_]{x:2Os̬R oygG.eqW#wa2x0l4:wD8rp3tJ F|Hj>ތFH$$بߴsYثKX"W60=]\ ˣG2#z&X"W3sXU.,ŲhLXCDW8;C,хÈ ^ 6곮Um$/ynRG":*L<پ>WP}$NV"s$`V0ħk/]w/X℅-qF?m,Ks~Ktk=erAoN;˚.Wf.2h\_*ADWVTp٠rB72AS/IޕaъOxr7'cy~d(]si _ Sh5uK+V6̓Fdh3i6R$[{by<kGgɓq8*b|q ?E9f9[@Ӿ@\\m[/Z L{F$-F{M^[^:3U~uGvK]ALkVOϢomyv|.JҔΑ_XLhVc0Vb+&3;ϋ)=OU~ȅV'Why~țz#`X;Jg{W`kI޴/KNz}Mv4gÄo8Th5U!^ &MųZ`"meH, ?HnM۪ՆJ1Kk;^v84D,f\[A\+b{U=upqHh9N@B8PSFbB"M|:S\N~]50nT 4rf|ڂop(8g &N:RF^<~IRеػ4Ib'slsJ"m(zr%h[n1<_.xwr0B= X4Z*O~c5:Y t7<<63|SfuޔcȋO+ /seTe̻]^,`T/'sy9G٥2t. K䮣TƋm)?BGyrcX- _^_SY>Y*xU4Ό;zaΔ[G,{-o ;T>e(?|-P&SΎM_O!^!s6A^\|řr)rU_q6<¿rڍ[B"5ONM~@4[{ udK>IwYzaݏ/bNUnc߸Y˪`I,tZ̪\v#3eq ?ʳt}7 dG0}oG?g:D6aO_1#Y{^ҿ#E8!Ɲ:I PY;"1_Pur32VRH㏓=˳ T6Y֪6Hx\Ӝ+N1OGL ATzM)D@HWS"N|K8d6sWɨ rOk:#CRЭwo\},j8yJ_٪ |e)t>dq/hė:q#,ŨE!:E\޷>)3̑"75r[2wM f[&/|A:sYq8x/fEy͜7䲓N|V&0>\NA )&']`HfPQsh39Ѳ'p:&0l[j۵c&i9[VRaL~x 9eyo﯒7;[}ŝOǥ'X~(RH0F^kio7v!MKeůJ%;\.=n՚2qgq:_p}F w|#Fȣ~(gN>/)2{ֱ-5zD?.{/WI]AMr<'-ÞЦ‡q,y)rQ'KCO_nO.eYO>%~,9M^9}h?Yd"IA}F{u٥$ù/pNa(J+e݆J(iRe4Nauwla8W^˔X)!'2,#¸!7táȽh4Sa4lg>ƿI}t4‹/Oi{8!E}e'—#2| @}ֵ\[$߹An* JƕWt~>p7APY#sq%<<7^*G$0,/xX2Q3_s[o`ٜ\xu m!_(l58_T\8:J-qHoO̱HvY1_trMK9bNߚ%î;T2*ˣ7%rc5 t!nΜ !:#2E:v?Wu(W;ߑC# }HKxxdW BPc27pIV9`I^bNI3.YM3;HY% ;gWEǻ&sk IDATXٺ{K&Р^{#/^?A2N_zfJVe'l4ڔzѫҰ)HL>/Iӣ"GC-CHy/[yӫ}A'' ]=w+͐E])?/W.2 +GURVAWɢW~o?,Ff`n ^/Y×[fx1niF nA\#VZú)ϲk#b/* 1M+i+$rpTJ!>OVg=J.St,_-,ZKtyx|:`@zvXꯒL(-&=|ʔ7ynWv7휻Wf]}i,N'Ϸ$5b'r`a>r 0Jbxa[q a{u4rP U\@q۞y: pRc09H'ޞ#6[FgYB]ZBAs.OzKd2ASrK>{})[n?]-{qфT>IFYn5R&?y>p.kg?_9ӡH?0!~j(eՒIqlaHN(׵..cu :V 2cmLsu-{;KSXs55#+G*P`r$_1ЏSlP_Mt@g!*eTհk0 @8WGpPV9mY;avApQ3D@)dYFQch'?fb NS=@Ȍn`9.-}}},FY=eW,PHG˖q#"VXN.];('Z(crR './h?n"4[DH)"ϩDCQ9WϞGkT+M4X6+ ;vO^);Vh6Jb]F%? r |$%ea Y\¤2a+d:֟RwˁbZ9FM.a:V3MO# !W,#UhTΑHʼn[JC*fUT!ސoǬOGʱ9O6r*t񹷾todDO9sԍri"GtuJ51)r)geD2x/;=+% 768ܸy݇&L_~Gǰ5KB||W{D`#ar7 {WR9}]YU%}:KeKIݵDF<0 jH'_jm] 0#oh,3+agTf> ژ+̞dåTbN''m)DzU!j,o"ܸximdcr?*h\fFKq=s1r_n &G>cf%K,Xv>4{8X[>'r;}^ڝ|d Wpkm3̃Vg*t<@5&lCx36S[;{㒪9KP*R9{n?U@= z?ݟr-}0-7 8Ҙ;@5bI>qq Y?u\2%yvǯ7._<}ņBn(Ӛ|*+֬C3מSfq5Mb` 9xS 23&ev*.&ˈ7\9z =d:t =x9+PUUzɅ5s1eEjY4s;su\ ێX^d^!L$08T<$==Uh䂫'I5g W'ZtVɽ5cYp\ڼ93J293,9_#8MPQ–JQa{G\4^.{Fj4C.XirYRcm}ؑ>uwOz ʾ 4oarqp)2l09儓e ; qcL~_>Q.iWfd'YlMC^= ESSe=rKuF>]i K5QeETضf4EDKQX\|ϙ!0IrȈ̯W˪g|N BC^QkhGpD0Fa,OE 0(i0dPV~d͏NjptH–tcTTT4Vn- FM{Šw,&x+j;x b\p(wHmΤv+'&TJKv9# f3u㛧_rqpU7E\Y!}s_e@>4{ܲrۋS-gw 3^zz-r%<{kZ.7\V,{tc0D!5)||Vhq̦Ɂ <|ě;S=n'G_'Gu) #./n2&-nUhPjb +C?@G&  ~xcHv}#"R(! b={bQ5F/jbO[l(`AEwpgf?+ǽ̷w;;}3Ӵl%4.V:ՉfEIDym[omτOeZo_+̬(뤑NtpiOLs^9P ۠2^ 34b*,F߈"*LL>lk=F!%c-?7obtF+f0(}cbluNZ}nb ?m^:rCŮILbW6g :&S疳͜#ֵjQF*y'H1ƎIF@פ Mu"d*'sbp@8*iY:c-AHZ6I*t B5_jHҐdVGt+Q%BL]2 _X/9s¾EYuipV8[Dߴv/șyWOƝ`;iw(?}\~w4ꏤ2iSi#Tޢ&%]SL-$7*ޥpWAm2i(Q2!]ZGEtзq`#Cɢe ,zM2\ݲ[[LJڛ6zTM.?E& }}NR+?4A6C]MHEضe).%iY)W/wlgq2HS {ٖ•^uFȪ P>cC (؅DIe"uJp@pƖ~7;ZnR#EP+8 pK0t>P֣|)Y$a0 }S_K UEb0긵o8Pa5'T9 @N>Byv-ȵ>E#{W7Q:h}ʔ2o QҦ\+\#s ENF-m>Zl++zCWV); 82KhPmG5*?@x)}Ig _ X064=U¶K\|]\މ^ijY` N}98i,/e( D%ْD !hC/px,qOE͆W5T^#EVuՏG ur>T isd'֍N .p)ٯ.7I#K^; =l芛SoՖfH>^/J޽BHTfdxRkr MOɅchxGN3UipVeO}FPi1rǿ/!$BnAk[C Wa>{ aҔ 9379$zX2HD]2Z~PGW7gֱl2˜Ҩ{kz&iEuzIKˤmg!m2Q ]9Ơqn}2L@g (0a#9vj,px+cQ!4j[t t+HH62 b7x  1'4cvw^o^xڶVK 6h g#eX֞P,6角, .2Sk>lV@- l'zJ yuzIAAZpp\J3M3 4[k*s")cveXQ7vb"Vb3nU6.8azhñm'BoO8*%PyĭﶆیK␶|syy)61>@,tM(@ӑ'tORHh7y/&M￐#~ |n)lG+-eJΘ|S;乑 !pi,:l@)(' NrݸQ;yWo}yBkMͨMp1Y7ۨ}yB\鰃>bmO+:h8_":ikD,7+s+~hͽ"ސ3,Oi}{)D=AO4f9CS%5ty` 5QZ%8JXJgTKW"CB79h){Zt qli & 2Ŗ[b{s} N0ĸZ>An?4  VH3$b(( cRTv<ljʔ, I$C3xy IeDTV YIĝB~ј*Uz0,b5,?on:b~֩Վ6L06yt/e᧟ye:=͈Q*j<iN0`mJ D EuɖiFa LVnPTjۄ.jMtګ#kw06+k{ot _Bٺua>%%*l~@ LK'(G8 '#L[`]Y=nЩ梉o?ҥϴnŞVǽrE.C‫ xaHbt _4a:d2}7| ZgRY:\LdxȚq^h2lD@]! bݚ2.f,>2:lW̬H4^X/jnc3x@nG`#P[@2!aʴgFa0 &>Tf蠆)[T>d΢8Q{2XW6-Yvf|M_ WH3u%HsiP1 X6f_/Flơx]}$h7!D-Yy>}̨fǰtt "vkIMLRAȑ5UB4i"~cݧ>b1mYO*T20ӕ]Tvu ISSQem;@Q}5^ #C >Юoa 3rp7E!s'Cc3 !4R@xm # F+ 2':L܁ײX6mT?e>fS&oBqЍz@G)&/icHibD-' ۿlӖPp dym3IW&1ı3 V=˜8@>#.,)yWn_ڞь"2x~1&YF?ӑҩzݻ,5xjw#D!2D-@c$}> tH030۝.22Ѵ&u*uMAc-of()+Յ[ɦNK=*̟<9 vM:)luF&` ^T"\ m2aXXgAWOfQÍtԛA"`YTe_cxO1,H+ѰrLUꁩ2uRK!+IH !VJS^N֒a4a }_蜹P.[;FS)hpٜF] ӣ{5y ^4[@ L@~d,U\44-'kҧdyN,#M28c:] tX~X2PWVM bk!- 277֐ [3FnTv,ѱt=p$o+m^QQ6tSKl`87 qGg,%g.!to@w p9!' J-YS0b]AQtSmua}t:kQkXLLqze1(L' |s[dٚ:;¾EvJP6#>Apg1騛*6eï ᬐ! L*dpX&޾TfQ?v56} IDATW2Uvl+1Bз\KKu!=ȣ |ShK+-dYYVLyj+* Ձ8^@G΅Yhs鄋#}q~!?8-B\* U6|1 2G7ӝ0#38 ]B^x} YȔ!Ǝ3zZ׹.R@U7<ԪCg ]=H<`C A֙ ˒ }@Gzƾ\M`b$4Yyke_3)b}s2QZ)ۚiRR3FAsX:/KtQwMٞleLSdN8na`5Vy a5͛5eE/amt t}ynw?X #,!m['UYۇQuegP:8Tuqa >ޥwA:NvpHzG}r4а P?"߽VĎQRur9ު&y܎$*E)C&!(u,UA<(X7捌aX~j[۔UݽKKjV=j1mN dTĩ䠎fK_9֑8ysтx 3g-ҕu[q$]r鲲Q6jgewCO.K~%seN"&c<N (yt(NGAAN }*]ďrXy |gsɗ3d{':0M^AnĢkGpFq6Ox \aEc}2i#$Lt B``X/!`[ JȘ٭_d5zL[,m& Tt%GTJ2S A hZ0̩2c H a,+S'Mu˧6dIpW\G?9Z ] LS; hI}#l =üg.9i"~@ΚӔ?kCC g"9Xc“"sZ_Lri+*\ey"iS8l&Snqb F*n:U}f_b PԬ \q' @n@gbvD̈́x_5ӎ1zhY>4,Ӈh{Dk׈ҩM\N[ arcS /sx;s`` :dщ" ̓0)i9k)D]]!}Gסa4}1A; =S0Y_90ST:f7>ʰ54L%kz0klt褅/iVg_b nA[w6O3%H,e+fKRS"-]y24y-sƘ4owAM#@F #lȇi F [4p锶X>}#B;> c|[&8^j[pb$L׉iJk[]c؝ߪKjJzJGn@kQ&rM6E:Ն#- VV3 @J,䧤XJ-+26^g^Q*n> |79k1&3Dp@u}ݪeyʤL~]<@{t\4Qqb/\ i|0j)"U)~&W{୪gO9Zf8OjylpdΊ3}x藺8}8m#i'h˿X)77vÊFn~E岕ӠVnprA?lq;#V%nmwuQCU,{ 錥V%d6+@63ﯖmw-ɴCUۍ[ @!,~6gC0 :4Ec/ҁ`SnxA3Ҡaט:)CyTuH\oUb6DRz:Y ]oҳ$Dyt6…pHf Zfؕ5 LWhd -P[]mDri%/[~!& s^*޾EkN&Z\Q_3D^{[U[6t[T #KVC7wr wdBc-{]y˴#үmlt_*Q'uh3Z)-(;u-a d+de2`YڕȐ"?LZ%[8-[Oa]1t@O?8F$bt`/^WdG M`x,W!6 lq}GIUthG!3SKt5/Rkj:h.u8퐫 Pn$)g8 l5V@|v,p/ckZ]M^Qa L*+f'*r"ϕSwЁSqalxt>MCv2@`LzĮ›V;H6箒I*{[uHHw酪}걆DR-krO42OK[$d|xa0Aޚ[&{LȮj#Z zi|R[ @-I.w-^ҠC!4u88ɲ֕Cs^ F#M<䉋x~UuPS#?u*F'>{G&[slyasu}9lG3Z4 ZL'/ d|@2%"Ԇ)rCҹi܅m=%QꉼZl8C~L>]f̘!s5:3̔M†>$'ܥfMųˑ.m۶2dGKf-'c^ƫܕGA ޛo.w|={9Xe@'餅ct'] <2ߎzZy|E~ҵkWseQ"\}ҞҥK;`̉}6z5Ju}XU/\*l]5 /VѯK=7޻ɺKx-G:.f_BnckˈQE>8]{1R_Aݖ6S_ed[8&{waLx-ӤMPlexB ?U~gn L e_MNO^z~lOy~2I}ÇQe=ޕk"pv >E66|)7{).pPO{W*5;5O΀2:!e3D.l ?2Ǘc}?^RGkz.ߧ_ˎJd&ã+zoCՉSՑZ,}sczNZ-Kde,+Adz'wp:26zG^.ix[~ukoR9J8IIp'>D,-@lt?{rt1scв\#ddF@LB'atҐG@ XX7E: / 1k*:[mu^,Ru܊S.]1Ġ9<D}AJ.vpm@udxX:r+5EN̙#_|?eI|Ő빃=6~,_eF=uMkԓ6JQ ^]-qkP/t irycKitAkXbW:ZP-??N]o ^9F9l`?3Jd~H96_.Z8ocW弙#_+GwL˷>z=7rhg@@SQg 9z9Vr/[7}Rd+ .?Vz^}ȸz2x߄^Lxz9~gwAy-[Mɳŷ:99aYsU-,A Ð6lWxxG㐕ҭ/.Wt00KK0 ti'{ejڹMGpt>YDNDQXO6a9sf2b-YCo~)I.HI~KvL^謤_}W*/D1VW.9\n?9y>ҰhLZ *o=촛 ؤX< zұ{/3vM(0Q&GcP LPV-[`X}^ihgӐxf ৿Eٌ)8ittcD:vco}OuF]oJք) A;o<}t*DA͐6@#oxVrhwnL-{&Jy2rm2:Gy\1rcd[ۧR;\WZiWm-#d+t7%G? W컵T1[~ȥ3刳5/1 8R9krs~Yv˂* f-HS᰿ʒΗS 7CYVk#g~Gq[ @ @S'ϲgAC1`x`r:FڥwM2% Qttk/5ѣ%`K/$|:Sgҭ[7\59 .4TbUk#tb.7o挖P*i_̞*kv1eTu-6][)H!={nԑ4qXv8(g={[a~Ǎ>Ƭcf"fr:ig!W `VCljl u Pn5yBrPG҅l0:#\Raz K+L_Z_trbRX~-[ @.h8һi0 ɗ@Gʑ1-c)#iX/Y. F c)S׭0ڬZ}mEMyur#9H!ɧDbLwe{ -'g|-GCx S^Ə>)ʹG}8lu*]ʥX:qaNx2ٸ#i̝OCO l8ˈk h2ӝ;P"H!/yZۮƞ1O 7By9$ڶl ?޲Q^Wx 爈AcS!Hb2lqMZoL0JY5\7 2[7/߽.G'.y~9dowSo|ANR "x4g.E=KөO~xPrC-.w\p$t=NOċ 0+/ȷj)Fz'nrɕ $^{U7[''%Y-&Lׁuc|1Lx  ēQ%;v u͆?^';z9{ertycXf{-0srGoQqlK*vLg`ƅ.Kѧ ?_4pЧ2kҀ 33vBEȇ<rEV>h\m:TT3z؀,]G-)039N BGēO@ aVqF0uclNBvHXbܒQn\pz!g]5|jC+6+'Lrngɖ7/#: 䢶[\>|'sH'Bݟ>$o5 ֏lK~_|-_xz}"xvtDI>rLiτrsSEzu WY>7[^m7nuw\|t_<=c40 #5X|9YɅrۥ\0ml-@d8L!osi&1nIC'ɀi «C0A>[o *e$zC|jhlxo?[olE(ߡѤ@%,ajy'u! #c7 0؊7 E6^z7Ck =.22`ܷTym[eY˦3g̽짾zʪ >~?>O뺮v/Yzp䂋; R] յZ/N j G'^:ci CkD8qnXbʕIDHlXK,ޢV גbWj&,cC kS'tHa.h<َfi-xW?=^}#R'V}* u^szi #q4>Jh(`ъ}3v+FqW[FX3nDjWFҰ8 <ꠝ!,_iGʽVNFr٨0Y[2~l Ga^'ʻzkrmP"0C.Ӣh݂`l,=e$ Ζ'KUr5 o:`d̈́o0E }G \r 4iRp,ER tey[[l9:t [6WXp|PFklj-]1M68`Mo[+_Miӊ&pfۚ/.JKPٶuR16= %{_|q8a/-J>HiaZ&)^T 1& iкЩ"NK[ZZ!pFᤘ >5gD@$|?PP֌ hO 6lSDA?10~+KB$D{tee뭷=z} 8v*nW^yEͳ%?v߮$h'#}J]SaW$lgݍhӛW˨?| O/;қ =mܽ9yߗwc2c>@[NE;+"n(2]Ss٥:yx곕L:$N`.lˬ7KkolS}Uy]{}KS)U~H*O(lw_;>Z"7 }l.o-yIv63=/ɬM?Ӡ };uVR=[&(ڞW6WNw &ݺu351 >,%?)\ 1Lq\C_H 1A txA05\t^˅ngc#^p4Cv3ey,*X@]X/cOUbsa-8<ٖ ?>אEj5pd*KqJ;u$x" ]N*/1*$67k9b<t\@l֬Y2jԨ&k WPx4$*tPRC,7ڷ R)̌A_Cm=HS;Y$+o,V/چTiYR^Xn"iLt=Ekφ']lﯾlffI4W~ 28Z+`97ٳgQH΃. F~{yY2ﹾ d0}f `xxP4HFΚ[@O%4h4Pe{:%adqp\Lu:9 ,H:}Y;5^5`tMoaqCNZ)ט}I$.bpLp>oSpmtJɡlXS,C -~y ^'_z;@&}ʽ۪M~!Tnݒ׸%d'Ǚ|[?JKK#>qKpL(_?i:bp}2Ɂ<=fiӛZB.]PѾL4Bg&k٦-[%X _}-6owsdNAPt5UOExI pΰENh3~CiL -[/)!k(0҅/"l(NZro-Z{r~Bp eW$_H' p9rؘuh[?E!@l;/ÁG!rqR^$+pL@#{] 8҄&Lc@qXYגx@d^<[t~;gj:wfsG!þqLU;Cd+䮱G,y˖`H Gxfi-}4O[ @lX}Qsd4}xc1C #80Ҁ^ b_!8znAMQХ + ρr'7.((A::sH,.](lMх.Վp ,*ͮ_.]v J3y~\SgNWtizc1-[ ڰte7R.W=?@?*je1;>(W`0i7'.f(8kȉ(, @c*,~hll ;e|M65ՒfmŅ\ܿA8iޅXY7Bب h'suYrIHee=;7pfLK!N鿞|Ζ'K["Y0o2HyfWvtp`ONq' _&G7JϞ=e?0R}۱rﯕg'3 Y8@lkn('+WXRdcT,<:55zG4/0"[59Yg,˳E<'!&9^,"sdh2|Hܲ+d`mZp[Nռnq:J|Cv{LO}6߲SbE5L+G-EW=)_L&>ʨ_9 SޕgΌhu꺩L}fp>D w/S)ytL#sS{}[OQN.} d7ء=d;ϓO!7[oݎHڜu?Nھ\NѸ[ @l&ZϞ>kyxX#Olfˇ#ͩ Qo7 AȻGmc]k<8NpZ4up `4{FfW>Y_:z<-)  GڴE#E8>([[[~Q}H,Z\xyt3*eME` M xZ^:zk4uX dduq:@N*).M8M,X)%N9,V*p| rׅ{#^Mxꠍ W }`iyyn;/ϭX*_TW7^%#++Α-8B1+*'ǜ%c/3F^.\a_ݵSq<('ɾ^T)y͗O ekim@[䠥\ZŹ\WVv6y+q:@lyp}n&47ow 5Coyfr mgz[DITPey:hmjy((%Ne4U` 1,܀)#T];v 6[P0{ ɵB_pW"B,Z 'MƼ*iv y2c~t׼l b5Q0M7THﭷ4˽tu!9%:d}Уuթ2cdǨ(  R%Y ’bU$/考.Aܦ E]pmO-S꺑UVƾCM=U[;ϒՉ1w-1q<{n6W3C}*1276rf%[o >p{gEO='χ8/\rM.Dr t\oN57B;Ћb Ac,+xt9 IDAT\9|?V|sw•];=ҳgOZ q .Bμ B@2"vaH|MC&Z+xrM6(ZњSBGcAwAa6kWojS^Ulː>k\!5Tpldeb ݌+cv<^GbBPn ::hj|l?N pVZwpiҒޅ!g'D4[|EZMQt9q_">rQA#lIB|umU KsHG]ǖ,7W U/(qXw2qK#L-eA͘,/i#CvԉK^-OA[ؾWnE\5ǁ t@ `qaztƢ`!~C 4.|I .3S(ڡPs9W=b[׀QK,qٌ r #MNx{soj23 3n;>b6͓X̏qt]v!CHfs QQGњmXZ߮Ts ^q8A~aΐ&q )xZm*6eevE6_Ёj4*sSW=rVOX?n_Iw-[`][\]a&]ă=sh 'pHucҗ,YOq9Bwesfʑ0vr4Tjd;0N ECc'EF9{|͗ۏp9Qwgg^u?pyxn^{bG1zĹQT1,@ln]A禙' ? .< 0׳sanBwe5]H!wqk+/*t*'VMSaH6 57qhҨa)j3U}ɰ_)W?̙Z9tgʆd9(ߗ}T+C2HrwmnO͖oMNu *-,t(y,.Ń.1SdS>s Hdi fINKDZ6N:J%k= ,5*GgN^PenQ 8:`s 3|5}`A3H#\Y]΅(1I p_D-T(Lv g2uǣ~t̙5 ''_1HF3F)9pV2鱱2V Z?|>+Spyehd9¿QU L9syŔ'y3?Hۦ,q[lЧ yWʷ;AH!. ,#i ])Mc1 agL9(2C+ ]<KWLڵm8btڶ ڊ^7݇a*YyMGˠ7(WKMMn:I Zx:e pVZ&bo\;\lgCb +em;HV?'#GOWw1yrʭmG?/7 [MYEw_$6kN1wNYNb e Y`a³>[oxBC,:ꨣ")pp8g|Zx 5+ff 10AlAfG@XG˳(mr2[u~ ʔ {#m2$.}:x:K`QIYt^NuKJTTU"bt!?L?Aq#ʉAb = >sL>0b AQt-u@5ݪ2EW_׊y5KX5 OS>s&ޞRa޶ y> ? lF[L2p BIF<M2$JI&믿n+ON?&B^עk?j鴀|Q,+|u[|rf6L hS^AEC'@Z AzҘow2C&ƙ 2MSNK/bF_Q0.HJ| 6ez#NvIs<`QJ7PG@nuN,'6"-Ԋ@1%"$EX m''YF6uƲb (H"0X N91QiC= | `Xh kZQ8ϩ11.60ΣA^ ` d&S[h6Ra8PƯs,A.Y2-ee$a2'[(-1+:SFC +^F81G#<mF=glyGn ȊFxm,Ҟ,91{|t>-4z}SlgWͨbR]dwaKt'I8a+6@eet7j@`"D q0&L՘IEҘJY8eY1558?:dIRP1" 2nnYZ}>w۽W>z>?_ C6.MXK.2%K~zXlۏ~ٟ}C>9|Eد֘)Z+յ{ lO Zp1_ ` £݇37K_n bfz&1uWhȉy?6ȍQ>sMNj+v`,ioyyDiΠtyerO:ò%L`TVd`a-dI6?voH wN˧m9fq%Rצ/_mݷ}tTu?}MmqWvM4+qZƇtOkh_3f` ꚚVuP-„"ݾ x!*Eg G(_(Ͼ37\}0gJEJ //#h.RPPHzm|lE67coݣ.؟Q_L6] $,-Th/~$v_{'{;\?k.t/4Ma??H;L:W+kf3@ cJo'R[4.qY|o~>Ù !7CXۢPUY(<<"cKP ":x)C=o~s^{%79C+eZ|Ё|;]CIzj?뾺Do}"wʯ]5EJ u`*f`)3@][ݗת"\`][YE]MGxw! x} h#_` ..?o4$)kg9{ג֒s߫#]\xnV ),ЩyvhTx>,~r(Fꛚ+u>bƷmx}9.>gjww_<޽e_]z賉{G?9cFiq׼{_~ϕf`q20i ̏uvalTL {UIڜoxT.T]D2Wh@sP ST]:Nv2}A6HӋSN㋢__wv -N2=džjI*"{3ܧotLcaՊ%m^}߹k/&x^wKt?ߝٽE ˟?'8ZI^ik%gϾnYw _ʛcaqAƍT}ӟΛl8 o;PھOBK*\XUqWvB".plzzd _@93\[8OW.#yi #(cJe 59ebl/|w^&?{˿ov_Mi??K?{/d[M=_Nvsygww/u_/O_}_ X3pue3rTu=׼5e |7ޚ8з8|9뿾{ы^}}];|b9zKmm2LW2p@*T~,ZrϣX %VgRK|nqyXM/6`W ا>C>!LϨ'[7i'ofC3%e :YN{ɻ!K['4xǏv_W {v |7]J}g.u7߰ .w.6q_CNsNog{$Zǽ/];gg>Μ9z }>xp.6;ƕv'eq̊۝|6iG0$aD)Nbw8zbi,J6gӼ#氟 g IDAT)| Z/}{?ÃhczfǡLq uĢ˲FGk6~mqzfCWً>+_n6=KiΗtS-5k"C'uѧ&N[zY>D$jRx)pP,t}KF8Jw|'f,W"8~B|ȍ7޸h͌Vs6Aע֩Z-/YO,S5k <530<`nM ~ٌd=)(ԞL{ }6{FAs;;"wR8i`pr03Gg@6rsE}Q?Srcn'a^%6lLwЪŕ|ʚ< BxdJˌ&k[3f` 1ŧisWI6}sH;Tϖ\=Gߟ,Otxh(޻pppX-xrd('~5yslb}ϕox^M K9JC(Δfnc^rO1"ZuN9qkC`7qƁ\8{+k~ԜrYQ!Cŏ^G,e]z=Oȵؒ} ޿:y5gnwb;ړ4qgԮF$5"+%%tv1KoyO6:ax7tJXdզBkZ!6 \6+6d[EwQ{]453ଭYRKͯh8 H)>vKxiSwZcW>: c^jNJJ*woq+vKWJ=mH~y[׾JF)W)΂k[N7ZЬf)>V}d<{z*OS"|2-9j#`|r OCc.˲JNxSycŶĮ ^Y@e#j)7L$ *E.c ej  5vm7~7{'o`m}x#$O_=y.rŹͷ;kDЬ"-.8@d/_y)b5[F[Rژ7w}|7~c?|T?=i[A) lk9ثq;|_Nh.{ ___iQw]Pz,]r@=?$(:;%^=\'q5g֦k'/>YGj.8>׶0E'K+Z/x(7(xRU ϓIK?vW{K^$R]dQorf泱kYj|Qev;"Y2}6G!gkG6 A&6^fL3ڴ@ZHzABGLr:g!/Ji]8(q6εH3uu˟ {K_zTOuVޯ5-s{:r9Slz} xfvxz@>(zd'hr D> W-mO=*V|Yf5 вH>] !>og}[݇c}i΋#^v"-uCBmo{QW/x*oղ|5e7ebԙs\MSZY_fԥ='ExMaxC<5 W}_u}]3pvk,g *㺧hp)ð%Ks"7'MZ}y:TFHӦ61Es+3@:cY[`\^++W\5vf`B(3׸dA^2ӓ %@ zco0Z7C'bXި fVJv슯8 5>:^ g1'm)M你iOl3wI'_ tiO ǀ Nri˴ҋe ,DGzǓcW}WSҮk5~M~\آSnt;D|~,/|޴J @b?g `w7bj?xyl+r <C mt#3cn{k_;ϐqV=+TNC#}Z˃3 wr3 7u%>:Ijrx!kwbF\8Opd|腏[nLcVIEPTG>YÚ.y뱌.2a;YwAg8 nOnFxNykB Q˚QI`hDtyĎ=-Q5JNkosPE_wܑgK< ktm5)Q<е*O:m3dEoѵWI|,ʊ?!Ac.4@p^4J _.қIj_'ISϿWZNRs_0_&/.lkOnDe?ZL;XzaT=!"Z=w|YFRooFÉBkp'|1Ws;=cO=~M&ħ@~ wB O أ灟}6)lP6,} :O,Ң]IWf,2#x}k;NwZncO߂2_ZP5tslk&8nԤ;zewaQ|˯߈z"MB(j+.q aHhY/eR,Qʮus?)X^zB3pt-7rᥗ4XN,/) }]"豊1oa< %Y>PB R7xhy>MqG(nK%VzNoO^xj/nC05v To3֢߭o3m[-Ώ.RGX+>Zmg הȖσ/D.rĽn Foi@ 9emH[5g$0[}M31.$롸b YhM4S)Cg*d+KX]d7<= ҿc8e5gi-N9,yCފlYOK0v$~{&>^'~KȃilS v{w뮻rAr#O\&:S!Je C5{lJKם<-ү흠ϡzh-~˯lإ R>RD'f,Ƹ}b6XEW! ._u" cl|Sy!H {K0⌡GyS!LA|9aB1۝j膧"ZxG_@yyPXo&v'8গ.c89(06K"9I,QRuOȇ?~~6tzaR0vᕸr㢻כ9(kCĶ"-T۩y5s=.y0¨yjfK,'|Y0S?m||EcB1q+P?uk2qFK. 0qJ\-҆;UtcF\9`#_zp sK!֏ǧkt%M[.`scKAX͙p톽;~b|Dp bڢ״J2??L棬g)'̷ӧޢ-UXQCE2Oða_/}kC\BbZra,WK 1'#Bmҧ g&V/EZjF8}/~'[aFR֌m(Pjnci2~PݔgfIr #:y3Znc̞ZV=qD?{jѯh-e]||D0pkg_f~oMRĔ'fi(q>6-92F肓XBV`\5T^8O[qbi:&Y˶z|uߘ9!G#>%6-s#gafqvօ1Je+DH#1rG(B~ GPXf ܋'4뺭[[πd<ʳB8n 0/%8l;{H8؈$B( c`'D݌g30 Do&s]qVi(c٦[n1nl_ 997Oo}㙣[wXL\b\YƧG)VYǕY9D_5DVZ[4k#<6=~{Q`+O@E{^`'acÊ9i%:sNO/{^3ϕ6Z_1nrO\΀sگ,T͈}E`򣞸)0llw,ZB[zɛT6ٌ6L(Y c*V!V m``$ ў Cy-NѧEҖR{Q,zV~K'9 z~\zx(.ō9]zkyW.i#Z/ wj} 6 8=ԧ<-}5)2+tE^'z=fE3LI`BUgCMp\6j:A9oL ]zYwc؞u ڑ.D<ݨ8B4u=6U41ǃW1.HW6Kh6 5g Lg_=Әed;"*H/yX掷d$83oum81Hmʠ7f~l/Hh>z~S̲Cnد`Vw{``LEID4X< ?1w#%ǐ|3W@iʴ`cm*%McNr4Yو.1B/q2v!!!*WQNbO8x$ziX.q63UV98)*G& -Kűz8X9[yOЌiΖQ[y\~ʒxuLwdaȌ~b![gt[" IDAT.cd<:iQ'<Ԩr_ Է]1:Fb?#,O蠔]  3b8r4ϣOה}Ƹ&wk>k&b2~-K~j}l<ӿd?_:czPpxG_/0؊H^xBXT};ѝMO"--I'5Tu{Ƙ[+ qlnI윫(XoynMOu|ڛ˿R08,ƀgآNGޥ |ıyb|fy |eKٚ7i_%}Kbcȃ|)9^b;+9_*s?0Ӽ+8X$ (,*vh(fsQbq,˵vH{.-RʕY` nJk4iLtz[L-Nc+S쾏q$A8qsv'|3a r_Jբ#dd#,޳$=?=*"?:ꄏKv\`+$k,9-tp3Xꆼ:5/[yG=\C_P6/ađIQ r6PGr1,^ S#6m\qXS,e;oLz&듧GzJorQ8`G6F3Ƹ629[Ϣ^gԦiF(ҏ' ps lkÛh4lA"A. 'wgF ftvk\ y_˥?X܉.qaWclϡX]NIxfvy+ҌQqrFQZ(;,~'66r<2#]XNmt4{0yh K [ED\>'_(>y0HTS,p Ox^^i2D(2çqE҅Q>+Jzg_޴0$Vr,Pr &+(E =+B0TM d3X8Wbf1b[B}9_"3Gv?X0B" 3ۄ2iHG'qz5xL%xRzȸjyl;qǁRIQ֒8 eDqI(qҢͅ2䐫\/~'$ u Ht=n+%'$rsXy`PqIGJ8&N! b+Rx9OLs0a !8Hx,~,>Y0EC&/|&[ҐӞ2?š<iL!8o<=_FrƜ[HmeDXb-9&"Xib6u^irmxz_究Qb{9UNҸf6EQO^Z2 e\y72(M߰wىiJO,t&d+v:մ7fǖTK\ rfgkTChs~_ϰ;ݸ \jk e㤴NcmlattVX@G~3OqҊ1N1"zӍ7 vo9ҥKu]7<)ks_i  3ʤޠ;l҄*"NnjLlȨbtk\.\i?BQПyJ/{1Ek7Fi`1 7hژSո: 1txڊǼx{CA*!h|*Z<ʱGY0'trokX>IS0nFOccpsVSx Ccn'Knq-8/tQLp ∜]seO6}M[o5h~EjKch5D|1־щXL+|)^CtEE~Zxԗ?G2N웿:zVwab#mɫKݖ3Γ^ Y,-mN$onguAT`__h0 EA%M9.7{7ol{ 1|!Mޕi혾~.Ȣ0V-Wu-(xbFq(ŅFZwEVVې ѡM)?;*)|1]l^ }jXBrȻNkQ =bnoȵdl,Sݭ5@kiѢoa >OܟiOtFDHpئHR{sl#V+wBڜczի:VeI6n[~B@:ou_FNS^P99~-_˵҄b_h>"TS :,9ys\f#OCϹe4~iIK4e HG38iQ.v狟#(i؉~g[HҦ["Kbk {Ͽ *pK8د F}quc-O46\~;wДwlda5v9; ->H_0ҢEzG:k :>0yڒ G,8mȳ6mg oЕ.mxͣOv M3"Bm-iٖ<2nBm#+@xA.h8ߋT{ 1Km2V>=T߇d(=\ =q,k1(Vl6"V,쩞Ju؊Bsϥ":g{ p'i2 <۝.ҶZ^Ncy ?o^&vO٩m9dkyG99__Jys[G>%:偶]xfl|s4 t<\ܷ CG}}c?_F.tcڔU.ʀLyhJ[ 3ʟ^ ϡڼ% HcËldq_C'ρ7<zֳjswTـ1f7aWClU-A4MJ>]0+kqDu![+Ƙ[˰f2Uз yHۆ׼V_1w u%sЌ6'P9tjk7Ԇv/k$DobRӧn5J$Wxly#?bKVl3i@[#cZS.5qK\-msp{8۝Nhl .?=y[vEe9xu*}tAa_7^soNj}+$Q4‹y 4ذ%O܆>EYhq>_.Btq..9isr5/ AG0ȜT>_/wxF_Ϧ]ȑ79]eX[L}a^XƽȎwE;T:=χb7 Jnm%H ?Vd73=1&R PѮ8DGܓC4ʵдYQWe^B ו:khO}S-396͡y9dBe'xl28GP hh I6]2NŰ-BΩPt OZ-Db g ,+ 3sY@z'RhV+!9/ʽZVBL%_Erxv6cȜ- xMfn+kw>}}fͧ/OYƓ427r)+a67B-]8-\l0> 捲'drkbr'8<{]lٸd<3,[CQFeȣi85]*)W'D}d'O(xe{1M@xa߄nĕkhB1Ӑm3B)_zU>PrlGYlگ#h_F~-:!lklK'ci-%0UtIмˏ0ʂ+(GzЈf?wҋ#ڷ FوoӉKX5"H(g9HJ@yE ]{g<#e|>j0| ~FҋH0nO1Abbī\%~>2(+/ƱMN{3qN/1ʶh?3Ojg~M?cج"}xѓf|֞:;橍(#O?^*2⑑VR &"b݂Os[:δ,drEoQ (7}+9) ^;,"K7N)o>8EY,/^f'f@h'Xdwwt Z`gR~ aJ/M(H.,kCK=u,Z+'G,ԿD#^>P]v[9Ff-^T~\GQ"}ůP~5Wh'aX:\J3>pq/v 4BĀ"Z%#zs8cAa F9Fk?&(إ@3O ,WԷCA?5 bt?١//"_7RyjƆ G'eO.Ǻfץ) 9{O0sQƗFLou?bz¦`lH4`ĵ٢W |MiS.:<dky>8xАU]d%]Ec|UwƮN+sYK~7'Y ǍhT{].]+oQ?08 1V;Tv4GG/0fm}7Rg7y,1:F/#{Tʷ'eP]d?i xKU#7z?~H>OfCqh"Ak.B+d4Oe|!dyRz b'be9G?^Z^\"X4ސiyQ^-ۙ'4>[v"k_,b3u`lGXKe[lxBc͎&v/||#Ol5?vɶP}ʟҔrB{DR:;˜߮sz'FΚ5O Ngi{8+ܫܗsPƠct-A~7ϙ;;sLy`}?@o=-71oa>~6}0=C'>-ï.cr Z:U#x>b0fo+K警^ע[4r=`|gM3rd1ƚ5/s}р{Yяg>؋h4C>|/(l!0|ox\⟔Vi EXLߓL5lֱqǃ;uL9 GV7 Ge Ӳ^ST)gnr̫Oυ-!va'4F4p!o3D>|meCC&ʩk,䕓TV"ҋKv.e$8V0ׂPț+qxю8Q곦5k e;)CCDt29d Oj0?FEA@.2i`yj&R.C<+KP"΍ TFH.ㅮY,̓Boa"ӗ.](tx5^bqM!>޳<9~bGX9uY((gaK2Wֱ Սm>ny^q8OBh\Fk}_ۚ5km}̽ǽ"mAx*sӜs2p`Yi6팖>MHDO!y<`u>,'>r˜'<"EIeJoGi22>ElQ Vs"h5lұE,>f1[<`[Q0/池4Ɔl-##i4)mӐe>%:Kd{9,yPZ Fx=^|V_ۚ5ke`ɾђ.5)T[txef}x\l 9(8fZ@ӠI-E;h4&:3:g$&Z4rgME}f^(ퟔf؂҂S\Y: ;X@2Ya !Iцh>m\) x~Ix ::Q<y661rȟZz4A59I rǓ({?}ꓟ8o2͏ϖsX) =鰺6X7GKqWJrdĆS+dfFaIeն*ֲ6׶cNVy {B^*TnbHbr⸬se(űF\>pCU~7EKF^~m"OB$ 8ҩ$ xOZbb*H2f-O`nj**Oo`'eLS1N_iK>OxDT Kt P]8yéb9xi*O(Ӑ 86,$)n\941tgn-˼>cs5My( 2MM#lE[.%4>OWPշM_ObY3f1{m7͎t'E*G0}.7:z`& <qp;i39}}F_-KD(_X/>FQcٶRPo=gdE,~,co&eTd/Mŕ]J23r#?NNCnh)R_\A#GUI!fQfQF(x,8ta [ŗLaib"[?ƂO6)k]94sΒot4 ղӞPysMsK~o.vɵs.p-k#̼A|V㟄Z{uLu%s8V5k 4䆪/}"!>>"N Á|i4aKaTCzyZD:!\8Q>_٧B{||MI1K. %lSLS1@!Gy!OAg>3OԂ,ްM,-,NGKuE>^є8!+T/+x.["o_{v0G\ޔjb\~仮c #_m)5k 웁JVݗQɳ `"c<馛b|>K =,2h<*GBѐcf􅒓iQFQ ;W)Ơ#G!FqE~,bc vaofZ] 긘kr1.4>c[9O+! Q^,Ρdj-KVg.b^G]ii 6o 5oLd"o X3Pg}{"޸ #dЬ/ //mRۏ~* *[Βxjm ɇ[) JaFVY*dOOxj<u/.^Øg_+\3f` l3Z<.Zsk-ŧ$s,? xN_:rJ!2W^?R 8䂦tDQ5lS0]zڥ*}h>=[>rєPt,~;p G“. :K> Q mduzֳ8/BAD~aGE6Oǐ%6kLa>q6(tZP?L\.~PG^CnI%wZ!bm0κ'sV_Q"?es)$P{'ѭu"'M(ͫ~_ۚ5kt~ "\SI~ݏƔr@ ^!^A?D\m b{$6ek[ϸ~%r}4޾hɅ\,CxP⛏~~ !䑥 G1;WVȫCAaE#.lr/1NJ,smb@B}DАE\p؋-E1aOiq1Ҵ93BŅFM}q`l*6z- X3+qo҅O\Gyt͠Hpxokюr"-2s] (:.B‚v%x0}\TRX7Xdۉ߮O1y3>BbS?LOmfœ:cvqx<9D.ls# E^ _lBBn-ڱdOķ:5Dnb/7k_eqcyі0hiW(ueV|5W"b3vC۠L:0sXk]}ZXTD?Ȫx؈B}rē 2d|ϡc&آPwl?xIQ 9/r-9d(Dx:FaeabеX&Ŗ1zHhQ [*]dE!0~ct }0ā,c 2tOČs\XcA8l:Q&2#LllnWb\}K{It›k>}lcٵX3fP8:@Ј}e0#xȀSX0׶6\bPP4|w/@bBX,(z,d\Ă⊾cėE9`(,a~䑉YSg>S~q}e;aǼǂyA>v!7ص(OD؉v"-.hcÆ-. 4W Ytȑ4HvӴ3E>^uhv[1GފX3fkY {<+m|>$):'x<i6h* ́4h_'i|@'eK9 C<4o/M8WZlu?"Kn_[_7t+ (-Blӏ0wNӘ1G5Ħh?"LM_C [m<6}eVf`2>dψ1׾Y aj_l>Tԑ> z&CV9KǦ6(,SX()NxB< GaE|詃2[v%ca|>}#򎛘_Yb1~lq4mR\Ql! >8"M H c$&l1ph6tڜ:㫛2.sO 9򲏽(nu!_E||]ss[?l[5k e3ss=,h(ph$ }2^< ),6'hbұ p!O>G y9EhOС@yM#^q6Д_zMm@M~'4l;^8b-оvf韶4va )}'l[4偻.;z+\3f`='ݞɢ),O~'MB0%-B你Stбh 4:@i  '+9Ds %pmSpQ)B(Z(rV7|%4|p)1EP,~tCR[`]]tO|:.tl)O.1u nf ՗ނؓ.B'16c= c1zڬ ڐ~~9'a_oO[3f`@@s}HP]eݫ$!r:44\l=/z.Q2 3O(-.b>+RAYXYX0>HĦ}Ƣ!EmtOl!O< YX`,6- P'^W_ni8:" ؗ(|cd7Ad鏢BF,>颀Ev(f(p(c瘈X?OE>6ŕq o }c?1sA28п@!'^]ډ\p'ys9\K:6g ֥,Cڋc%.xھ6E׮r`6%c\wY3fI% 2\KMfG8P(O C"nPt|UY&>܏MlsQPk1JfX $6K %-ڭiKQ.nbإ#?9QfʮX3pugG nfNr&qƃOE<p} rЇ?)v| b" pcPӔx6;6K,} I\hc,yA];5xlDYp8}/k\.My-)!c mh'BpuLԮ9RN~]t-;ET.,ŏi{i ܚ5kZOkςy}mIykb(:2 mݖE)(rCXbacط`1[sQ!>blQ9YLB3bA bENyuPx=MEK-O/)/Ʒ[pߒƮ#h'o,=is5ԞE_W'ŏezk <3$ږ~N2RӡiXUѧpYڴS;#i‰ {8=),P/ "Ca[6e-#-.Ɓ/刋b  4<2c\<Er}4H&(| tu|ؿԴ.[HXh5oGS@}k}c9ڂ}pLD§,[4A7b>oAƧc$csaS9tQl?p8v bbl‰~ոQNG?f8}Zel^OBb⌧d#Wwyg) s:T;Mu}մ%(hEovD.;ʝٟϪf`CfMd<3h ;UiPCF9d#g`:PQÚ}nN`Wx)q§ ŕc~%E":p,@/|E:}ҤǾ8P۠DO؜ 'X^+ 2'>1l "%/yP{(h-{_=s2H{@K{wݙ@0%B(S" })8|=) HA1LA0)3ݻ3j'ukPTOӑẹ,]6h$l;jG} _t;Bs1EYI3oA8,4_* -ټ"F,r¸Ŗ"?6%k>b\m(~1fsSk6jq!-ǃ&gX)ci$ IDAT& uev+e4g̑SW q8k-2Տi#~yLLN]+W`{+(09Nۼiro:˰2i(6qύ=~y&ȁ^ʤ|lMqiƠ`G͆&ܹ:fC #Ws0ڨ*G7u\)oQ&Zq%!P4κzMlƐ|s,hlm}lQV̍:?NK$5(&& =>ihh h !1m <J:ׯx ޼2xvp yIVhhlX5#+?ؠsU̦,<1yELkKo<)>xG}w͵!xl뒍zx궗.ͭ+WBT{H8ʈŃ߅Xk il2y#'n4 'F0%OsjժhMCFLCN@aCB;l(}&"^}z#Sʋuex 'rM\>J>cizx7S2vn& *O,GMY,ϑwQlblyv;>8]r13$Xmơw=@_;s}&:Lq\kٺw[4LKm~h6nfLlóM!ڐLĆ3?"7H#'`׵exŸҨ7'EON>O>?6V>ώوŏ,RW%G̹FLwE_I(eL<#w}2mGؽ@_k u5X,4_&- u"U/U50& ¸?4_P8ď,Yͱqglb&ʘ"U&9r|8ϴK7˜gJ u~!&4da~3J}hWrE279yXLmu@//f_:.}F: 6ڍ/q} u--(}z}D?]&UI|e'f3 ͂>x&Ny_u>5vX8'WcPVfoTwy_#_2)uM.91c1ȻOQym0nRtG?DN*ug\ W@_ݹ:&&ʣG.nl4B44ܔm'>ox V噏n>ʝCY\:4[<#c6d~\O]ب]o:ƪ +hP/#eG2oS ϰ>4l= 6qy}uG٩t_Lߓ +W`32i.JAD14{ w#CG |lD>9:s9e }[C3d|ے+ibhhhf̟ ҈ l\3' ssgY 1ǐ$& ^1`'9yE(zqPJn!> +W`*4ix?1TA9B :6>|J`E7o}M8tmڢo#S'mCo!. ihbgVxn|vƋU20+fڐbNP˲6yD^, ]#<闓G fc5.ŰBhF2h|.mǙsW@_W8vk2o1Ay5GM9~hҘsݢBm&D O.39"&3.1>?u1oԦ-R2je4~KGcFهyeQ:y,Ƽ8 ҡl'޶@_{bXgLrLj t~+V=ɻcB1ȋDE96qCY]#ӯq &+d|\Ƀ6eij?KSPV%ݺWҠٴZ|q9͹4#谱4S6T4g~\M xmKNv[9ꨣ֢̼c`8<89} ^~J5=L{BޯGnjp7x507h7r3)b>K>G[8'WcE*oZ2g%fF̏+ihWW)'~W~1'e,'M`>ߞHG2q#-7ԛoi|;&Sb6FO +W`a+}g},k{{dd9v5i:̔ި|G~6i;;j&Vv]\\=Gse42槁b!~YؔW'8}ָru 1࡮)#EEy mG+Gyd[ɹ_yta3n|jÎ +W`xB σ , ]zyc?,n!B@u{ŗ7Geq62Gmi4eCl)G&͛xhg9Tg΀44j +j44yh 9&qۅ̽W@_ݱ^cϳt5ustQ-k?w /E*͚*vMs|7y3f1X:de4DsW_=Mq%<(8C`Gb xO_4qPh{y)G ߶es3g게[Oxb5ɋ6˵\ڊGym2)6iG|ٶmO +W` jS5gi,٤aMG^' F)yt6@3YeF[Z>DY76kQ2ph,(/T?ڦXǿ26qހ>{E:(5ҡC?jx/SmTl+WQ'k#ܬxG>Igy5#9̣ab9Y1~o,l4i؁WڐtJ06h6|k1š0l[A-Ȱт"9MS'F*.|.Rډ"gH6qQdFF^;k?L'6Ӆ'} +0}Na-ɑ-mA@6i&\G]I"&׬fի>ihє1wx6y>Og^Ċ9W\yODqg44dQӟ]H}p'1Q.vQ?LE(H'+~I]>zy_} |v}G=V<l& 4l6!PVX=b,o0c4dl4_P9s3'vM47Uyb069ʆϫc&κ GAr.rdRrC|Ĺp:9'&Y}E?u]aҦW/+W@_]].ySpqzTDMNlhtiL&3>d+l$.~l >lbas`̘Kgچ1_t4Ρ3>}PE=2EOqV>9C?scF #V6gmY69dشe} +kU`X,ܴ-PK޹գ'IpfN|1'Q[nirx~,~\_HɊq0ȏaL0?<'x.+U5y\e^YƂg`爼2h\4H'j.} s*vWFkbCmMfk4ߝ>bO3H.P؄p3?x(y^2ѷ|b\uim42g(^Q99n~9&k?=+W@_=mqeV64nqce%@$@sb×&ϟ!4!/&!ȍax1;sm X9r6:T;)zF1WN-:R.8鰸|m{W@_{f#m6Y 6oQ߱Wlp0iJAOsXjU799-2py)rw^9Mr04W:\V]sT4rFg>E mN;,ck1B"N~R41Ӿ} +Vx/؈Q&SEOFfoYiAYIQ# 6~ eŋ΢g@m4"cchkËڬF|:ܹ>ŗi-ϣouܾ!Skyt?6iLt @rmiЎ r006jǏRmIs'Wb1or`(= &MBPQ|QIL M 2n\Ec'1uLl7g}H#U.λd$_yu] +W`ϭ`mbp͘~vOU>y#"?;i!AR @ȕaOc-&<%29A T/G7}(7r3` `cLba<1Q+b?DyM(=|} +`{G= ;m佟0d/4qΕ4jh0(CZ)r4ޣv{6mT&i՞}ڤa0Щ[x628*r&Ѩlr1?ŋsx|E!J' 蘋 w8T8cӟzD(>0 +W5(xR^+{#ن}<w/lf Σ6=2^-,4t6i%mgbg2s17(U)|Orey5? +W`׮]mxty*/Y^AhQ#=Rr#'m6i*iWoᴕZH(b17iuÁʫȃ1yonq2?8hqn,^9TQ׾/}\qc b.vi4yy_+o.7tSW֯_?{ cр/|?qjժm#&lذ|ʇsun)߲l<=Wr]c篮~6ς{4ޫc=ItUUr G>nuy⯞QY_osT d7Z#뮵UqM}?{{B\RYN^ܴ!SϘt3"SϜ] 6g}j(rx.A;6i/>E0NjЌݙy{e]VO7y^rfF>Vxr/~W|o?dzNkry=]{|[m4jh>cBȢxR9;7lF6uq.o4\l8.=] }o׿^^?|ZhZ4B:/,~O|y,R΋|;ͪϣfU:^#dAwG<|3i'^Y{_~|u9eq Q%۟@Z5 czsnG!ǔgٲ+[Z?h9#f+^@d$6@Dm| 3n)|P?PeE~WE>cȠڊiy|ر_WO}jsl/|CsX휠>np`yӟ^;H+`e+9q76+ѦIyԵyQEukW>,kƜ#oҨ VỳgnI~WaM10+ IDAT9,oh#]G> k@͎6vwL!J ~СG?!r* zw0Hk9ItYR^Ρ:ʫ%bEWҬoA6Wh}~z~ ]|C*|#4dc5U=ޝW\Z^/./c3?q+ۍUzWyY#ᑑ\I39G8cX cϫG|,;sk>;ʨwo.]~i.+8c|߲cʡFgr._[ygN~hyǖ͹?׌_y_ǖ_~~34?oo3 9M0a6ѳx͚~#+.7՟_! E0s]U זO]ozMz {B9qhN~&&d$[g Ʊڸ^+GSo6̾?e9w|/s&|JZ4R 2y0C9R^—=Eǎ];K9{c|濭w7_&V{lf>6~CyA;ڇ<;uA5yySs͜X &\Ѭw|e+})eŦʍ]Y˚jpmmr‘K˕_sEnS8هmHizߒWaN#oRmkXYmͷfu[<^]rI_۩_۫>CgnKd{mG.w]uy;_>ǟupA,kSGR95>۩YERܵ۲~/T.gAqWlPLf%b49@X_M@x`Yu܃곟Q֭]_Mb>]dpFyo|gaSw8*ko-\g=k͏(Yx9 - %0>#6ϤƁFIũTۘz1Qŷfyw&lw;ͺu ?'qz Nͅ_R}KyŊ ZLf.TJ叾Z^ulkkZU3tmYis_R~^;#{Db범ſ3W*;P w}V^3ʇ)߼-=wʥh}AyA6-֗ԒÙdɠA3*ՆsZ/D!? @Fm&m{C>| zR'Ȇqw}:lzחK.~Mw6GZyr Ԧ{ e3En/9XN8hHKrA6K{hy^m׏udY_{WSu~9rλ{}Gi8 [я>ƚ [ zc]pN]_[)'<ѧ~oG✾66[?{uZ9^r*5|KrNn{A9zxIyk^7#\]n7!}oGTʝ_/{ՏK>ris+Hs)O&TϚsZeK>roԫq=sޣ!gkރfh>Gn .ʫg>6&}i[ƍ374~c Ɖ+bX5[ o.̌.zqfȓ>rpy/W)xwS7z9~ذKkn/|U?Sio-OwQ+~s+S֍Q{yhm~/.w>hy/{fٯ5nh88u έBfr\]wMyş*ҵGP6xYw~t\9֏^oY.]񱷖|~6hA9&nހ.8!>rG*{/?Vݬb_گys;5w՛kfc):~Zc`t7^6cT?z{9rQ6hg>iS+}eEP6;<-ǭ*S.ڦ]_.?q}ޫun3|1Q/k>`/Řـk¬ *I6㶞U,=>,/W3v9"V6?fB *AIm;546|Fbvs3J=o,SSMq@yorTs\fҲjW-FY.RSKwia ʁWGmJ7_X~GX_WPC.wo}V9cڤI kh[:RZR[ߧ=ݵ6 }z~p'Dm"ƛ뿩\9GjY^ӫ֖;Z/2Tk}O:ۋ lF.=# ѯܯXekMa~V-W~_8SkFvS*wW> .{Pyэ,4O|U;euTR}S6\휳ZT)GF[֔ޥbskwvk6gMd{}M{h۠$7u9փ=1̹đUu=O,~NϨ3fMwŝWY,1sh(йf3m:hn0xgt`/_wGe?Y~+cAŚq{V<ȍg:9f59en@Mȷ[nټf)7\וNqܷCkb|߁>\۾]7Ӗ pNYY?:};/.߼mCmm.RU~]._" &m*O>tvm~@w;,۷_k _h-MMWִl-ym>lQ}mY_X]cA?YN8|ih[״vpM;~}gEQWeOfɌ6b.,цrP]Q,tC(MYR-MUpʍ|>jϋHo+ͱnf?u%kG|ki}vFhR~4u5(s$)(WJ׽r@c/i^+rś~ܻ-MM>3o$[ As4rQF]>+Js9=79EGGx6zMIw xl8w8Ckr{|;_C{ՏWO-sc[6AHCdee]E{.vq9ێ(O}OG.jZ~P  /K<<ᇷ|k/by.|?doʁ9#e+{巗 wm,V_ͳh5ft9~Yxr#J׿\u;a*MfIY&m`rM_|cMv9~^y~w֏o}_UY:g -_se9Yߙln`?8&Ёi-[iڍoIkX풫7[o%ʠRGGnmWokTc_~; S.e+9埜][[ז|)7_syy\xq Oh[ʝ?(_羵֔5ko<ð>hnkwT_g]kn|(r\Xc]YO_V4i9}p1,x֕BcϨM+i R!pV9^_-[ƺ;5~ǞRL/||lrP%GS=5nMn/7zSW>^>t*~U9~q)onXW7醲ZTݺw|\{ǝ;gYpڏsRY'.lqNS=8>]ueM|e'ʺR|UWT&/|}.(_ k˦\_[eiC)ƽ9ϪvT^-?`/Mt-]P|\RwVwW+X.+_PoU}\bZ)}^w~ %֍ZW򺔆,u!oVYϜ,ٕ4N<6q W`XxoE-OVl>8<;O{{z~y?Y\K^K9|sˉ\%/srUO'W.UIS~-~ϲϟY^7+Yhf(5a9^1[sbIalƒ<)x3 m !c뮻0( 0 \\||ܿLtv po ^|?k?qri{N-TJ^jd9w)8ޫBkiC?;6귴6Kc{Z}O/tMMozS}q^Tk2o}<{&Buy}]ӕ+mV)IuW>ffj!xDeS}>dEՒ_r}[=>6j4+:w4j3fw6js{n~fRm~s4+=d3st}z)ׁ~sY|^uG]׽iu},?Gp} ǫ/> WPIR|py뭗+>r~6Kc4k.ƭDAjmEl+߯ϼ']揞}<8ZYW/6i]*.psN/.\pAssAǛb7Ǝwg,{nS~mg8JL4<u '|~|`jП sLX<Ӵz4IVr>rgK/|gy]NyЩclĦ[# D6Mݵ?T}|XNSz=7/:={uGE:ʾ 2y)2GդiӾ]NN n |Tw)*G?__Z/<\td_¾9.\hh/ߚ[/\}sϓ՚ ?/OFgt+X>ŏ5Pc PS)9tIu_ߙk:U,4M_} +W~jc\YyaQM>*}:سM$eb\ICWِF?s $bF bNcH=@_} S*` (.ʣ,ѱ"o2lasVٰSld󎍊ilGV zT`ΓyI_;SskQGʣ:(&6f4]4al`Fs5Ϥ\j`?z(&7,oӄцE֕~GG#rb:}v3w+}q=UR+&˽e9vW={$S"h%-L:Lj;Q߅c!w}Ǟ]+=ڶߋ-V/+ȷuk+&ݿR6_]u&wAB|H|1e!fߴvwݏ]N{?n=nO3{)5بoŦMmwyȷ=J͸8M87.ܴ:jfIl4dĤʱko4Dp,_ cgdž-D|\bPc;mn$cɼb屮vT}d7J?]]aC-Z϶ڌ8u1+YGyWϐ=;[fۘ0l[ wɺ0sEtdz10]2_Ȝ'g1yj#DŽxwDW@9&t38wVLXvW0q\WQ3souGxdyya.$m&ޘ_oo~!Bj˹5Žwf:9KE 7INDAVL[ ;*b+쪳ξ/])Ey]/*౉<;"7)~}nm~еɇ媿a^}ؑ5Of3V|&5h[1v ;IU6%e1(ۣ7ymv ĺ{,&sY}u#fwAܧ]o8mW>m+vܷEt|NeH=b ,f9/cЉm4to5:cLQ4Ǜ^|Ztud:U=3ΓʣTcyOלkHW^_9:6z'){(Pq3JZty){3YEI>2D:8q|hztQyvŏDٴq>ǡd,eDS:q181V]̸R}x]21o/pQ1`L:m#6ƈ"n\}NόSi#ʢ(omQ}e}x]]6_Q>"qӕzl;c+6|l_FGa!GWb<̇EGUsqA3&"{ѧ:g:Q_pm[&ʈG{wY|y\>Ms1iȌ/t-fIj%[o_%Y3tGC~5qΣC0Qkzuq_Ɖ!F?T>-O+6u\]v್X(:| È7V8цA겍\kh'o.{cF]X}E0ٯXzi2mxO.y03l?#?,'t؃O~mM#7?4>vͰ:OB!R6m/EyȔ#WܠʠQNlٲfYbEӬmNs~7XmIC=n$0I;fp0RF0S8rL>Fl(E/y1簘џ1] zqPOh/,ʣrh͏~ŷM˦MMeqy?3FImE~s1#5q]!&Spm<69NO>h!K~J)cMkT9T_c/**ƹbы:R}Mj3J7y3:ʧ66`~,:}Q/|ؘW 3΅ⲵtǹc}d^}:Źq3F}xf~V΍ פE&ig<&}0 _#&"^>RxFH}8uȳY fD?moqҨe^mqm|xO.[cQ45(y(FY-b#m"17̷m۰m}8}F*FGQo66Lķڢk^PL^q˻|waK%ϜrxT&Cx6.P}(Fl#ͶͲ^-'FCg87nE~Omaixc`'bm/3S&E*͒hy#|GN0}Qmdi.ziyP]xav1f!f3F6]̭&*oʥᵏluB^C3&ƸĪFjq겿.r\oQޅqxH1fg(7 ͱ~c.gW,D>pn~Rl#Fii'sx-v]XoۼMCx:l^F=X*q MZ4A \gl\seҌs 8s.mS'է\}]qlrAֶrdܯ>ϵS)+)F_Vۈ~+kbb\^{ŹT. \a2>y>νFs1jC/uvF[}Ic9!ՇH-8khO#է4wa2NLgd@:U(Evm8}D\'m(kDz1G|>;w.^PsԍcO^z-2)1wl\]& @9ċYG^,T>bbR|E{x0<9٩j,WivgR^Ɵ5ї'g[LmI6qC8x0Urxf ~X\.#"q[K~Qy}Eɱ3mG}*s,뮽639:ᇍh3 .bdwrqOH#m(kàHN?l#/U*N1#n͵)7b2kMZ6c]E[yhl8ǟsv}, :7 mf{F9i;QxqK\f(L΃y14ۈ >xT=#8>2y>Oja9I\ wH q7am%69IrҗCvɲ Fsqièӗ4řOw6oLѹOo 7sT)dȱyS 82m43\񇎹6+NY>bNl@ wtRwӏ;78(I9a's|ub>Vo66Yw%o7 ۦ3~.e w{1F6gqgƎTOg<.?ԋfXѧmL3c"XW/U',v}듹<;ꔉ!>3NzRyN uRFf<ȷEzC?RuRmEqP}74br~ y;r10oxFy /m ƟG69Gʝ6bǥѧT{ǡ0_m2GTXySsi[ um4W/̩ L(zƥѿ6W7V˗rik.JG颟h#mèw"+iGgEo艃.6YG[x!K~iG\gh; |aNwy}o!^l6Q% 2W}FIEflsla3 Ʊ5r6m<1ϲl3j=sFu9#.ӌXk(~/K9˯r08ƵW,. .2կ4)f5$|_]~07@2vq9:f"/.uymx}MJL6e]~c-:)хDaL>RʜC>|Ze~q?tXwcb3lsy_ea0!9CN>c1ԷQ׀~[c6ڴ4ȋuE6J];ǯ1E:dqdL1*yYI^}y"G}󈝔a,^ɢ~>K?}H!mE]hyF?qb6b.ϣ] #ϑi#Eq&#Z4"sŠs?yuPdlQ11<룼K2M1o^spnq_b:r>ʣmyƈ~)qapN+.e.R}kyO_ʼF6Cnhys_Npi,jiƹ/e>ʆ/)SNJqy\ r1ڈ>c,qG\g;u^d3̹>C\ї([_P6ϕ.l].y;..Ɗ6m|xq>..ڴ ;I<Λ(ǟl"19Gtl v9}zVc)6SN+εU&>TG,ڌP|{МG[e7reQ188Y-89x}Cy}z2gao&:D춳 c}d*.˱3sOi2m(bק1yodoUX|zk+^C)#g,nΣmD[pΥmNjlmoڴQ)7/ʠ|r|boxs} $sK񩮍6q"N=TRd#ViG]N9hg[qч|vP83k\*N3F8R)];|9#kiזO6:y1iփC>v./m>#>b4brsņ!n0U=~l%m0sMT䝋G3VhkWϼMa^F;e..gy}d.GٴcmзarD]xrD.\Wrک6"2/}I~eY[;ѷvj6~""7ܦ402mwCIl<ȋcꕃccL<+g>/)hQ.U/U2yie>b"qYΜ}Ⱥh'q]< E}Ĺʠxdih ,XxqIENDB`davical-1.1.1/docs/website/clients/ical4/003.png0000644000000000000000000030376211633117640016057 0ustar PNG  IHDRP_8 iCCPICC Profilexy<]}߳`dg,e)bKx2c-3A M}ι~hqE 1B6@CPābxHe@9PT B;J tjZvA4 0 V5a}a8a .7J> 7 !'"a!GDHRlA*?F"ryB`06c1\L*&SsӊyyǒXC-cӱe*ql;Cp8nKepY\x{> /A`A`B Ʉ\B)a?4Y,#3[W&F&CXBLLL%|bxBE|K’H6$_M*#ՐHwICd2Av$Jir,N. ˖m%BPXLJAy&i9ȅʉ6ȵ=ȇ//?*%Z`PPТP;U:A͢S_ij4{E+ݥ+j):)F++ST d$P*Q:ԫYY]Q9F@r[,r}*T^ʩڨrTVQ٩ERVVQRwUOV/QW0`khTitj ijhjhnyC 3kطyͧOt?ov@Bр@Ma"1T428'Ȏaf ) yjzyG| +qpzm^ıH$28*rx­ EFE݉6΍эIUpcF;G;uxN|]&!Nno_󯱿vpرZ[j炝vYڻ{{B[Q!WueDe>}UUU%vwߛ{@jWTSX3GW{ΰn#k]|z{o>1ᓌ;OQOC?4$5Wx^qӵ*?]<&b0 !@@T)i&+ A `0 )<T=T D A `0R &7C6tA`0 APE\(H| 3V(_D A `0bdD!A `0 C6x."k.{֭f+PXXgv6JGJ#f0 8pvx=#ӧsƇ8u >D"y...v RXTTT ̩A `0r!3+---{mᘃ؁$Q@D&[?$vbAsLC A`#zof@6X$ڇH]}@ d!rM7 '1cOly @}ߧCmi0>aH8p9M1@}6@ȵ64 cԧ's_}A `88ckYfA`G=Ɖ`]c4iooƅpANp`|~B)-->ĮA `!`ԧ-ʦ^+)C =bH_nj G-(@X,& RV;OБ6*YU%;]+X]SzrEErq'u&?) |7=Opᝉ_4!\?-OUmq9?XƒϢ V{gY>&)4 S.VLv쐿7QeE[R[!PڜI7t\k5%i4_ P*H{_ ]Ahi"Qb]H1qdaQt^^'r#yEfB~0q#p4"yT,SǔVsuN>1!y$5noB#o0twnyw3qoƎ_lj77omq!߲}Djkk^yV{Ry1SKn[iGbϟ^WXs&'ެֹ.'M~l122TY e=7Z甇g_Y 3ϘZN?,=/My"cN˦$Fx?^{TM.6Wc Iύ=coN<u;eIW۫gA #@R3X-N~QkZ gGKVuu$y$lF$IV\i6}iZ_?>g7L9-Լ=v/}2l߬oG4:=XUJnO#›;;i9ﴋõRΖge9CT^YQq\0: 5_1[}gesjވ>sN{ݫV z>u2N+ȯ?Kjﱮ8{mA} F9+rYv5KFeIUբ ,ǷFy嵠A/WMβn}F }Z{ `0t@`Dd>H\ P~;-+_}/AF4:!"mFO\ftSGƕ ,TIdުUn+K}ގEky*QW#9$VcGug 2Kcw.p'uCˏVI.-\.{}>p+*Kd֊IrZX^C@>_*[{;j @a|l8y6'v@! ~[]# 1-%H乬A]%(L?U]ze7mkki ]xvc YjLAowOYkK̀vV7^{Fbބ1^i1q\Y߭Yj~ǥgbbyڄ{iOL"`MSUrx);C\0_`x=k_=g /6 :{=}eɱ~I]󮰫͵gxkc8<м_pt@'z)YbHa[ FWB87 ( D%S !4?`p_DGJ䄳*RUJ) sC4Kcδ !Ikgw JˁP99,[[嘑D^rT"Œ?ޯ>A>k{U]A `  @!Vςr/7O\7gMketTL5)=*$[y=#μY{jYPW+w7Zrx9oH\sT}ů/[,;.5iU< 2 ۗ2 {eca%%ϭ@i1/pd>;d =pJ<84DV=Ί\vj{[4PZ]]==S#J|nJ|chjɽ V*Ηj[t5J|A9E"pϺ'_D @RS 93/r˦Z`ʭk&Ng-ǕNWW-ٰB%./']e=[}^Ӄer}O駅&Yz衇sVZP})rݝ <2\{Ҝ{C˗?dTZw8ds'& O*5e׹f61IWUұc;U٫]4^\^!Θ*>9ZPqbꫬo߶^7]p ГڒL}f;=ߙ8R\<<|{Ek{<x7k. Mu2&}1Hu-o]}EVე=c5K}+"Sfk֬E|Kbw$VixkK']_yNש]jfur 6 B2yx?+?m7Wl/BcM該edgWSgW\xu?`bWDcoO~1{27so^CQ}6BnRl4̝eϚ{]G@8' e lE+}]\PkloR @.,:bP@2G#38`/v=xʙ{ jXT>@a&p ZCJoWJ/ۘ3ցRlYq`M$ŷIW%>!9,`A'%E(aJ$EH`^4,:;6sɜ w~%RRzI}}Dt+Ϙch8[Nd"? rIq)X kΝ2dȐ{}[i‡%01  @KPU٘_~4abUsM 9<+s@]%%iuPPY`NhlNVL_e*3-av0wًu3' 6l4[f0)X نC O=,i+T:@1Z-_rZ A q0gHTZj<65qA `0tC )xФÐXtM!|T! `0 =!P=Qѻh"a`\HOe2h0 EEP%)X&C:OeKȜ @0Й T a ƃ!ylr2&n0 "KWuKXKK͵`EEEק!Гd%H~ׁuh:OoyQL,C˛A `04裏7|3wkRo_gĈGn߿!R]bLO.$E Ƶ a"xb:w 4 `0?u[?s"&%Z{Ǎ2l0o{n #@σL cvez,7 n!>P6lPD솆"ЧOпDRtss455֯__D+Uza }f!ƃ mqJOh0 "넥vSmB܆#p6t}QrȰG =꫅zvȔl!IS: `u:.L `0 AW K֮ݻpJXl fädϑ SXd͛;ޝ2@2Ni$QL ,RfAmazb0>Qz@ݻ׆ϗ"$KT<)((m&}.Vjxݼh`H<$H:D8e1]֜ A`UP^^ҷO_yr&mco4"7СC$/??F-HD$߉A)ZusA `0/GՐC*-,@I! sKZ`qjhh/%Gasg_?7 @%I *LSttƵ<렉>7GA `0t^#P$@Ϗ vO?qz.a ϑ|*$%x#o P}vO"llAuo5 3Nec(A `0|z@ !G(ƞdqiokU=y VR:T={Dj֎;4ǹX˩c7I`L'X4qWP짹zٸv>ine܋ WUzjRq"295'#:JaKs EuD΁n2p@ M~4A"a?A1{Ѷ剻f]w5gΜ?7%vw>7YD~NG^]nw^lLΩ Fvv/Fd-3B!OO|bHZam"X}\ԱO>i('h>'70W)L{8MM !.*~At>mСCe^ ]W]z~hTpmD?M[+̧#/PQ dۅOO?}-hU!<ٽ*뉷9{z(d͚5͛VoiAςx"7 da0|2x63ϼCNRͻ , @QegNҹ/?.;62~^.ރ''C+2|v/BXbiK|*&ƅp/~kbHlݵXLAw@(dժ+c%8W%O|EEҿ_nx\'^I%}U3.)[c$w_nMBKJ3nG5~ϴ.Y28TRRr3ؖXڿ')&kѿŸ7)^c}'Kd;Ե\Is9\5m]D]wr{^ۼJ|õe;o{t.z:.O</w[5֝ߋМ*|p+9|Vn}L_˨Tv]>cIڻqU>iAxl1́(W<uI=7ߓ;,)Q*([{WT)HZ [67| D;PMxLtCH H>T.gZ"ҌQ$芩_xi˖XMO̚hOY}Xx̩2Nj '??ٸYj[[r}SbjѡUN7 /X4J յih;:[|eT{GJ#gWǞp#Fi=s{fy|r=-+?.{j)SB~iɥ5-+g_f_ܿzu{G IfpHK͏؋WتY'&y n^?~]NOR;Y'^Z/qjmO/6YuB{EʿܼSC 9-\F^+<%WVٵUZ~hWٵǝ g:DGX'ﻉgo*T[yaP^+8G+dZ<ԤVy? <EB=&Eqp IDAT[*OsxrG~8=̠ug"͍o(]3^2|'U&FWj䫝wV$j.1KݥR5êQO]ҥ!酵˹;W'n<:tTSENiK{W$%oZ&ZqڬDN{dxR}^YK^{\5u~/U-ri).kn8e2hiN9,l~K`9} Gw7L"Fuƍ $$mjlz VFc5W7q:' ʓÎvC IZ~?iJ☡ȄnO,Lq7ZYki۸b1is:5? /ܽNe_VG8\S/6஛}3:%ju^66g8_%c>˹ΰ~3&&x9<g˫^e99eW%?#>nَjE˽N_4K? A%BLĔq9!C :yۗfGǜ.\grjۧ//v[u/Xsl_Ǝy`gkN~a.KbG'D׫̷e ו2[>Yھ$v1!7{/j\H')/}:\/Zyv-WĺsW&=P8 _GV^1?>xl9`lˡ#:1:O%8m?>\|ք*y$bT^RxOf1O(E#:yyGoc5T.Ø>Di:!,z<1K ]Vb^&0ø)x5G@ y>]U-O3jLxu玓~ݘJUSx%w<~9ڍ]&>@sjv%sl[_iؗ}8 zxs/}]X&?Y8^QuuaN-mk_}޺q;տK*{$;w]d:Iq/ꢁc{= 2q))goxubռR?ƾq@`(QU p/͓)cYF 1[EiV~ 1iij㢚f9f j9'M4Y"a N1M=W( cQŅ2xhқ_=DO&AXĪog\}UX* `4+J+kQi8e+@c jȟZ>asIn'W%3gƃj|r4q_{EEb-Ug[/Ebub â)AO$&O>r DɄ L7p:Dn'.WSV6ª7[ӟuKSHH'9Rj WYB0s!pE.e L^1y*RBZBӏ} 8U"Wcʭ'c㿊MVi7c2: #w,u))U+낫 u\QpqseWLA~(I=)4ډkP&3:nx>Z:?y?kQGɢ;+Λ:ĉ~ə 9spp@{ 9@wKX$CwdXڵM tO@T$.# =.qY:Һb͡맪C+.vAg̯?|q)aY.o&CXbvl4_r`99t4g}\Ȯ3Vӗ LO:lQX&WP1i[eudm5N%O~zF*X$qo4ظ[@)K0vƶ8!9!Xaw݄DL9r=1NͿ̲;Vk ]l-B|XDc0"'kH'#/-}d6><88"Ookbb{LL2{5" {deȮyn>J&런:nJ]DQ/Qfp5X;jXXx~g h4HݎͲv߬MHXpx/ zޱVȳ8|:TW8_ ϊ;jEV? _=XǤf_Ywla_3vftXghE:a8߭ՠ7^]&߁6~\Q[tUb[nr߬*ܟ 1pz|ܫ5slX7k+Cg 9'KL/˄~aшzE~yT|ON5u_z؊muQxqJ!ϝ55Ev]4񸄄`y(!':S+VlaE#ux91Ωw/5w<>Ϋ*4jޒk}m~Kp4bzhʷ;z׃ȷ(SoGkS5̔/V:KL)v s~8NGOܩsO/E5_ }@>șq9xuz9Wq?$Y&>ƷC 1ȲyS_/sgə#Q]T:dmWLb-[iQ^:0vC NͿ"4|Ȑ1[wov4RL SGy2Bq?ա-e[ZWNZpSiZbg[կSSR"oƜ%/U$[uM+Ni~6K5p5rLxSe;_-,xAOX`kOb W`hgN4uvWwrhIY52y5mnbgs:bJh} oWLeޣжQg~{y?nr-SBS=eӤ⪎.Q6O*h9U" N7U'\?(1bLtHL}>`qLXt^dɐ~m˚cQ(NL(Q *%r|5IvvPٸKf(g%2Y2 ?6~p]Qn7KE8<=~SBA w1,5h˗w~[N:$44xt2 @/ vmct7Ss, =NrsjFGͽ ơl߾}l eI׈[ ZET2cx맫?dFaE) rfs5ZD-oi%52בMS4"h|&2dbOłUd#d#,\|:(xX;Q>b +C4&O-4A%1Xz*Ã4kktZq  nZ vQLjyӥӕJ ݱ•/Sk׽{-)K)}]ܹsCVPqKsNl7Ï+XpLk(M6Bv|G-anbI vx 8Iaa5v̕PٱiE\_RzFA&\ )<3= z{( 4S*%}A>@|.GtnBmO*$&S">Da0*ɒK]gVBtwtB}7&)HKf%3`@Lud9ύyj؎>d7ϖ?\H{g|$y9ud+JRN"ՕR_J ixyi}OCٽlpXV9JuLu:'wl:YDϯ})[{;W 9PN\@Y`EPv,A^yxCt@\j`Ton ?djCT(2J'D,dڙYQI i)13R3KSKC8dOn+!r-~q驶|KW'~ElO宇#ƸSU2?u3'ӒO^%P@ .y>~;d(f1WZZVL%dG[b?L"N!){qa&Q<QJ%%v˧r'ѩ=zڈGLRZ$t4N!&dFp)r)7AfAڻKe_ޭh/{hPN7H0R>ⅸW`y#?!SJ\4UG>xѨ,ZH,0AۙNK'\SA `8$U 6|Nb$BXI9󥏒P"I yzq}ɎE79Ct#2"z @] Kr Z*p +ݶ;?^`) ,HI0Sub 61S5U6 A 7K0>Ʃ~s!9`ѹK4 1ݧ&ZP Ba`0›{!8[ P1wLn7n9"OqiB MB>#*B]Lt_^^yq?t9_{gehj֛-o="Z68ʆf.ɘM Y4!K sA s^m;E8PqzxӚT DE?x"S [6.ѶV8h= VSSS`iRĢOz;,;FrXK ۗX L7c'Qlqnp-%Ӥt&{$Ht^Rr@Eߒo?ޗ@?J_T#} iLG[n;piJ'~wKĩL$»O߇]ڋܩվDcLAUBB+ަúXL aƷ  %*"{]KE蚥z㇂ =ٕrF5Yi)RqQ)Rd$ imD $J82 a`'3R %G 2\<x.ɦVwU@; gݚ'~cN]M#G;Y/ޱhqҁ/^ݝ]O~::q]^z)}'?վ?6@c0KE%E T6™\,aq߾ljaE2TdNz{ Hzt+}Ѳcr(HVX{{//ւ5j\p,qvmQ""7 %&$?J2<NH;l} Ү[N=ӚJJd;MY.Wrb9qe,W.ٓXwևb#ίHݏINafWi<}=)⒔O?O^ĩw%lrlhp n+{^fA uB2`D+*&ȸ5ˠAT$U0݄IYZb` eΎ0鬌HI&qR{o\4nзŗr6 Y_'9LF".QQ)LU!10S?RŇ WK({κ%n5OE-mYc;.2.N:)(E?G03N{nwϋMu Kȿd`^^~d%NNjvdl_;?Y[o[!_;H{ذa?eaxZNL}nc /ܯߗK?fY22֊kntdRpSrf/8;)tC(_@YUY+/A]^]䙉 ^u"'"O`ô%qfwŠe /M;aA]ήtjDNg~,6̾yr?H4kڳhKɷ,sns~vLG/Ԗ,i;y_:{YntPy#+LϜr(hx=[]VUr/%:E6okK&%ƿJ>t33cϽ5XONq!ٰtuɪ +ȾC\dr/~}΋۾? &N A;!a2{eM|>ζͻA{[5f[ֺyI;5tQtBgՓ_]}%؇Kۿ{1uޅ㶯])퐟OcLg cA`@ 8Pkl, d'xWi⠏Z-zk?HR{cvpĴl|P  RDV&?ɓFt]qO]zjGr{)3E8IN?}h6aMg3ZZe2dm->Aa϶S|ӊ;8R<9ou|u)_kwX_=+SW֡l&|DH"+7?jE5,<egDq\W^Z~k?5XE_*77:Ut⳾>T5dĈ/PtA Ӗ8﯌sǽHW ̫碮ZgrUXf "wȖufsNk6GA G ަs<+c,4X'n*7a<7~444zs@dGc@qbGaeJ5R>POAs.m8$ _f7"c@pw vttNHOp&_7z:& bZW4?](g /s>Ek\5Sl_#'UKs&%"rCr YxBq`8!v =VSt.!J;k9qޠV7 ~il~pP{v:s  ֧vei@^,Q1UyI|ϱZAz_kWIO/` IDATR>0)߲V7f+т~k %Hƪt>۸j -,\SzqRD0)Yx:x)ꯖI%tNs7½b>Í۫vd6˟Ҫ5S^1.,[GL/s'[WmMslV皓*{y> Je'fyK~{Y-_ya&ɋ{Yc'oبN NW4?)#gPry_ 87F]ixqrCZn1 A@ޯ_ӊ5h}o zSKf$PXddOH͇Oґ$''&HGxfV 0ޝoւ=RT~}}b7MfQh{m NQ})fBR!*n jc{6%ڤucbk`!RJ@$4~$&~H ;(qtPyR GX?h(8e]GyOo:yOf<'Wߐz&4S$ F5됡 g) f0Z@AO~*sZkw3GYBx Iv`!z/~X+[̔os]3#@>GǏ֬YS/ oyª2Õv8x7<8va2c卯H޽ ^mN:)7zғ s$c Qc|koi6'%\L!/7Y <*mt3M]Fd}*;Ŝ|h__ď z|4rDaB'p>D&Ӕ \wpXHf 1,tNCkM+\`q`G5G˕傚I?8t't`ƺ8]I8,Gp[#v<Dn'n]VV%H):Di}YN=t_tz>YIWzT|~*ON)rOt:LIYNEii‡>skSw_~2/,7*2yl> :%RI(D~6l*XN}D'R2}ekuB/n}CAP)E2SД1  @q)La-H)(,~!u" T-XEdGob чq f=e'eҧb̰g vkbpE"pb-P>XT6^t55#1 3*IٗTԧ?ls0A$uRPH',hJ0` Z),vҥS{.* I I&Qk4ut\//dz5i4B3\!_9?D Ac#p@ȐFVx P e]}@} dؑGJq6aq[xQ]ܯI "z"2`0ƵbMORKp!J G+8V:0a( $ER E4G2xKR% rԸ<$D*6&+35U*_C@JGSuwX<K%G'Jڐ ɔ9eHXS$\4I+%"&= E$  p@oQ!)f oq9(Pˣ N㩁 XOkAqK}ja]] Z(J<(ś6-`!`:E% E!H8aſ$Ln=4{S *zqg Tm@jZ v>]W?2ۀ\JdE@|Ix5yb-,564~`J,-$ V(tQhA `0tB@~pڎi]h_W} A\ 9Ѳh0 ]C Xq r|úY28qkŔ^ccD LZpEe ı%jљҢogcND[de6&4pϷ0aIwa7*2/)P;kEj~9bi$lɗ,[qdTIKU0'ԴH꼢<0;"ZTM i,J{ {3s'Gy$_JE9c')`Fw* | XZ^.w< DA `Ȋ~(>p88VǢѠ*؞u&@ŷ@&7|7?=>xжmҾoR!ua'Q] ?Le:TƤ CL劋c'(zN|^-X,׮C}DJ' 2]'W1UlfTڥDGq(UhA `09 Tz5z JOvNxСֆð"98"-޷X"M )DqGS,?op7M;!vE05Ӑ䦩~10vB{<xeݨK:kA]Q{u٠jted0G=9"P$HY.6eF?(⠿3A `ȅ@*}ʦZK [`S\8tXC F,Y08v@;`I;Ѧ66)**n:: fY^8HiHH1П$[?+=&7MQTVUڒ:@Kvrta}TYYtb^_}!y>-Vl BSnMIdnNBI(h$0&D+Hߺt52̧x!AEMRw@DPGrJe`O*xt$Ot?ܥLA `0dC '4PQ6nXK p6hb;y@ Rx N9wsrpq#b}*RyV)/_°4>_5J0|baPNOp ihԥy;-= rPyzIe)Ү03|4%SW KN TJoPȫ)/J;3c)-,`"doUr]{"0u {M悭aL ÔPuovM&/1`*6 M#RKwN}fđxR$ @r(V`]6%,6ٶ!Ծw/6Ƹ-ʤƒ_)A}\<9q@MAtЅZu4rTި^yV+LbsaD Q!t|I$ 'c:UU/'YV׌cž~G)6$c,$PܯMVz5JMYk[/u9|Vjq-ø.U:S?I"cUPRA+"Gz2]9EntK~L{t!%AA a7) " iC1d0yrf, 'a=cG񱰌pԚN\3]a#p5H>AV~f7F&l* ց@@1~PK@9p hr )> [L a |>XO ?,HT0XOIƐ(mJOE:75UsTS$S1XT֭S3I%tn#2#y~ԩ^f=l|l,-=F1 3{2ud;jt^Xl|&y(l歖 QkYdA `Ȁ@N3kHK+^Z(L; WV+tclTbǃܥO@EHqGX5["mB( WF- J\ H~Lsr9#iB Gw 'ɮDJ4qJPH!R֍Uyr-0<2ٱꢦWCI}nA@bT"SXM)9jeMP H7h"IzODw1iij|,mQCX9s;ij՟05~Xrms3=jl{qWfBrE\h@& #uYW Vǖ3]-tn)?U5=$B&=AL|dM[+Lh4㩕gNe2)3 ވvZo$ug:ZR|&;AP,HeM `0`2qɌÇG_jx81<)*F[e~MMJI>rԖ ?( OW9Gr,n_S֗.ˡ5:J'2 uy\Rě) t{8jQ1/J>(JUO1=זD܏`j1Rg% @SNX鉄*G4 TgA[(Yao0  *,VQc9#Z_ K|/ ζ66 u/kl*܈;H׾D9 -fǰZ0dSqq>,MpzM+J/rQ6-Te^b.]"͒oBՃ3IQ?7'%sIer'p|7q׋BP=/G/d"A -r(wxgW޵>mRc,,#>TވIqJ>Oqi5|Z&^+Z=jy,s@$U X(b\qeuY~fVR6+٪<%hW\/ `}7Ѻ4,>q3%?e!63.AUD|#RjKHo2As:!PT@[i"=%n Exe=Fj Vƈ5| _\v.QL5a)>AlDA%]`$ qٌEBxA7UL9@?S)H2J.,g T̀@4ڸlOA{ ݖd)'Sa (q3ٔ򵘗daY e9"xO V_}Q '`IvGd-Ru4$ IiiyM>N㩷B&8Vq^2ę$ /h ~>|yyf6T IDAT7scJa:bhRz l| kFk1;qsfUAvp9lhC9! ku TicGP`Ưl?xq>w$~2c)ڻw"Na x4<)<z2jƯ#I%\֢cȸg~nCAg 4_yBy崮VyiLF7ӗ#P:ciL<9ONOHB UJ3t#:5˸^娈`(k ν,-83Ķ}W.79}=U/e]tǏ|o~isb^T9y-)(} ׄ"a wLG(N+u[ǿ$P+S WHدKd)yG|؁Zy&C "n*a ۧFkLϛ_cWLpj읏+p6'ȣ X{\nIN_S<`ɉg<8rTG_]ωl*ؿ" UD|E` *XQCĀ<$rwfv}Qf{wv̙3gf{̌5¿>ZP+Nn9Щ![-K=y@r*x}z13?1?DMK<,4ޛ/Q[@b ^-ĆڧW?:Jx6$!`-8!׷ j՛6%tcTQY)|<yoUO5Pj@-PX1KWSD(HSe+:PX)$$ηEEĸ0+w𗕤Fi-RE 8d H؊, A FIpw_=Zp j6ah3*چGo (G~O3qnWeNYm\2"ȵ0 ;hcf^vؑB&qLK!ဏ>ɺ5JDtCYG%=99[u^߷"ض!t8"-|mC@$t 9B!*_J. ]va{*(NA-[5_p[;XPѣaưTCyq/U48׋?͢OX@JAp"2AW#() 7qED SPv9ZbzRJȮFuk=5?dErUzBVXXh'm KzTхK_8?Kvց-^{soqVt򕏴 6FӯQ8On^o5Ҫy~PEoNWS}tYbܭ-^7'JL/-=7;0O< Sh1]R]?OKds&yS<۱d>1%~QrdMw} EKh>q -_,h Dwە~m{ݢ[sL[]:lE2@'wM̳ );VF8hU Y1X^RmY?9Kkq~}]ڷNwCC0&7!7,EVݜ?";ϵ~˚C_[_wgǁ%;9q6Ѷ)kt5dKu><צbsW2z(N[׾i},~f7ί(gO|˳(u+J*WI x·FP"^YfL^!(dV]SLq_ @آLSct~-EO?=Dٶ-~*gZCی+n c=<3WJ0Ͻڰq;}ט?js 1])YzS.hӟk#rWng{j6[[G}L3Oks+~cxWHOO~]Oi=BwO|}]fuB?9K_s+/ʼn<>&΢J['<߶d]qDjʫv_|Vܾ~#Ut/5[PGa?`/;~J-۲#_]/ƜpTW|K>XHsƏү_A_2Tf7]=ehv\&caJ3:D\T}_ =3rz(Z -z-/-^G6B]^UN^d ]K4Sʕc)@_w,?|**_:Guk9˯5?0_ɉx1Oc!dj._/}%ck ¼sׯ(P1^vvG8"UKUI3i w\Jy=vm)oh#FTW hm.\k`G21=36*-}9ݘ4ZjcL UmJ|\cKS55 Lh@ !GoQXM$?8 3֑#G ؇UvtvǕJp g_(A>qG}СrQL!,ƣg'ï&qDU_eP)NRb+걯 q*ϦMT/PTtgbê2|erx aR,-Mij'ḜxPx]= g $TI PUv\3W_P8U2@ʭʗS ]CY`/?O;O5A#vWBACg&f]ʦ˱:^L%{yh@wLwOF]&lZlm-dQz8-ߖct`ӡ7{15*niPn2uF7Dpיh&cGF3OxeB:[qM{Ji]j3ȟ+:SWgCbϠ/ y0?tp?3 G9 ]۷{66f mf3Q3*i PP_̓F=<8skjLg- []w_'|CҺR״9Ќ-WuʜkruFΝŃ/ߝn90%XuڜKoFG]LGҽ$w 3\t1p`? 4jmi@;6fYS;%WYHyѥ`Wnvxѳ];9\TQ=_M#߅:_ʼa㺁-P[^=Bk.?$DڝAKWƃ̱R?Yp+:l)E+Qxx]tFENkGo ܾr3_gtmו wt,DU_}@IK?%#2B0"K t%[eEʋ8;8uՉ:<¬L YPabn AսL J6R pWA\*@`ũivm#¬@:lQ(  n֔j^]8ZTbU&?vwD 0Q(G4WƔ0̸bl`#@xqܕZ iCE%7b4#Ëi1?wco'w0~3Ol<Wйx#L_}fV=}a]oo߾z e?Ygwj- Sx #]5k 4Jm.N_q^]'?)j>{tV5jzj%b׏ҘyiKm"th_!4:5S# q'M(W:1IzGH48OWgM.ӦS\\:s1g(=m۞ZfbS{_˜GqTDZ_Si=xS 1X4T]/h(cw@6M耻tL荨#*꫘ D1U%O,cnKva7]:TXv+Sj:Q_fݒJ (5ϢIuPg%f{DF1)t!bs(SYRqU$5L드J)Ç˅ CGW~iղ5 ń-5lBrc) 3XmQD+I,'v Vc& visi6^%%Q;`&fM۶A}=%rk1.djMBR\m|euKbgXAwd1u]d)2VUv U Cϭ8vXerxeUӀ*{ùƁXL>o> >VVޣk[za3.(⃫FtYҔ1dSuq.e\ڤMl$pyEV7E\]h8="Hd Inedގ-cǹ'(Ǿyհ*>C7ISt״!چrϻn5*xj.YOt )ZYfXtLn=oSo6/0X]6|oܻ҂p=oxY7oߩ_­RuPD4<Z*T$`*>bQVKPw[xr$)vtڨs]|'+€WJ[$ k7hr1%JJ6ff#MhrlUv_=}LԝγM/({4i֐5]YCDq #5 # V%btQ #V4d0Î4թχ WCibX1lPCT񇃭hHAv8E0!0VǞfSFN8. 2gp"uE@Kb6| (?'Sp)_US\7oßNcRRJ ShU&p.&1GdT҅\Q1 %jt8!RYaDxMjA~XM+mh12+M8v/\z/wSj Fᩪ%jxֳ aBA^?dV%v헰N"XtX7e`+ Zqu\˰GC6X&t8}{ki9 ШK4z6..1FZd7/;V QeU RH5,7Wx>(Rm{'~/xi¹#M~dg`ztzP 1xWo5U?or(Ph?*>'u~ESw#ʊ֎xdӮsWop`iҸg!HoDzguLftL-vEb}pIޚaAZ0‘߃f-ݾ+[Ե]Ai&hzR_n7W|zJ[w۔I4~ʛ=fhm t}0<u/RS|9uA i^ڤ9ZL}SzG]/Vx hc>OuuLq1ҵp+1&(.s6|7S|^ d8!J T -Pn9ȕ6ٝz$Wo ~^3xzo:m ~w\9:wL"V\ytLyA׭rA4 Sf)}v)$Rf}Y_#фEnX?^o;9rw'M\`^n۶oeOH"I:g%V˜f桿ys '7SYλ Mee=Oug//M:fފOWW7P؟FL)>JO$V}^j$,NnYV'L6{q&[gAD=!TEL QSAgz#s鈆eJ(o]@ XB:񢈂 1\KadCrt=sJ i뀛Ep7Z`U9Z˳]on)]5T\: )--N ~g{(^IViUba|S|ȋ!n$< (Z#נ-VQ!^/3Սz"`uQ H-CG]?6Bz{X,GXU&f/>Ԏam IDAT#dFow$9(g~Dhc򌟕}cA2ƗݻwSv}t$'' JaX<EJnLtmG{aub,c'ZhU!ԌxspA U֊:r8*If@s]!UEs%s~Gp2BZ9-D/ӕaB٦ԟEل$ =8FV" -<QPd<n1wQp՝9r!m9, +_Q^ș_HEWgXFO}:Zp0b7~8oCeMoLu^{ի!fzZBI}/!^ڈ:BfPXhWq1FǛgTo戽knF^9ƻm[AT++̈-JJ8Ƿ7$X@gNϨmETpb) -RaXBΰi>^=xAl=JHIX_ln]*?V&bmzx(܊H4~ϼfiT$?W[+NP1$3D x *\ڠ'l58pI0u  -ƂA:xEx\<.;@߅+W7whzK6$s uKƛr4h@8Jq䗵S[v gAVBj}Geet-liVyq0 |xʏqTo!mgp ,hDA"HD 11jB30h +}rHQ[խ2@op#傜k7|'JhN.oO `ه){7jڮ-:xtf$.`-5SX\MHrX,h#;WCZvrþANPqZpc'ܠniDaQt` ALM-*iӎ3?VHʇ `$΂BiFvoW( kaŞV%"+.U:a% dEiHi@8(Wj4P.OJ}W %+Pn~Cj)P`' ;B Ē<5I $(pN~| A aB- XhZm"% V6 !Y6x6;7eg3?>șX)JPs>KZ $H}}>C\⋴j1GmcUIB(8EYZa+ 208Ħ\ZU)͙__8b"I< # mde&6r[yZN?O2j)XE᠝G}C'#u CK.t/8r_"_{pN`?r;&&Q;5-&;,7 *a{+O5#c2U|[t+85Hu0("JQuRdT+dsvB\Prxziɛ+P`tHP8tȖ-j#VArۈVXtpUˋ *?NSe8l!V(h2aː +.~, NLg\PԊpNw`X1ly~2*v8Rn[T` N']~[ M,*E.D;z1utyqJ`Q '~! -y>M봪i8!4p 8Pd(xs$AP~)G$%E5S)~ֶ$+b3pAUgu 0 %BQ$q o\C/΍0]kǤ34+H>Un.|̼{0H.ymĽ\EMq) 20V [E-3Rǫ cMs~   oEeƟ=+ L+F -zr S0T"tm"x \%lq?17 ]ۮzOSZK`0v)!x&CrPm--J{@m_ O?u|}c?92hw%K[]o k9&A>Hݯx8Sn*8/[~'S)Z=re">,|^TRՂD k;01SeEV%Wl`Crz`#{QN~!C&JOLPL9T.ovSՎ\`qàyJMI +,9XX`BY+b{[0M4~H\^VCl t k 76L+H_jv6WтŅo( Kq%,~!V 1Kld[.bg_>:`7Q:-\7L#𫏶-Z[f ~S$0~[-TP^[JmλQ{o*Nۛ-i;h9 5)l3@o@{8 )_c?RHu܇SW Q nY M8sdaWHW®`(WUEEQU6pbbE%|NG eYRŃQH5+8>mlP@MZc;Z2̭nܲ% *a;EdU%ҹZ(m(~V8EbHN -ZK00)+A;1*[~c+?~6y]0"<?O6m z8nI !WWN/Ӆ"$Rb] jǗR+OrMYh4)|6'6y#?|(~P;~ͩII-rOk2gbƙ]%v_IG={߸$W"p *ތ|U/ %L}䒜*Q9 *ZU 8< _+ aU:g*;JP Od Z º x>,f?[ A*~k=v>g"1=PB1ʳU|ER$60'DWX s`Sn~h|mZ֭mUNE3dӼ6 ӯU~Ipm!TAqR?mBz6Y(ۼPkw-]Kl_~Hl;A_65D`nvcyںYv/9Y{-^|{nNt%$$P@ ۷>W=1ݽBm'3t?Zg{uUֻ=)Zhճ;^*E6.)N9h+;}EojwSWo=xAʳEKhv3.ϥx&w.$s/xOɢ)ڈ1i%3qmO* {kJG9wXLw]%v*ǫNh&ḻ>R9h_d%as=.FT·2'k}j@X#17XyY6="<(33Tύ5XAmpw('pKE=A׮#PNEqYpg)+F| +(+RaEUNEE9YD9 +a|Ĵ:0pz1q(XH ,% eEZtH-#{TD58ec3M޹CXdxT(K~^zzBE/ Tkfi7k1!m-<(M_o%;j[q~Q5=zLi3/0'N_ f)s𠁍>kw:hoxbx1M1O/HCuOru͟MtyLdZMh{:Wp-R\Ѵo@Vo{;.2mӝIycYeڽۮNӗl?Livoy1ƞVrJ EnpmNp<f4R0ז,ǻ_U$͢Kn~3ehv\&caJ ʣ|#ڲ"9 VS[Bsgz1o18lCi:{tңcrX mgHw(Ly2hq#%\no˺|yw1n16}YԼBi߼c2YAݱZa8-c\yyc:}|7LBa'}(+u􆷍dkۦ|ٴre? D jiʫӃ5 hu׹65W.~E-~o_XmE5/A-g0hzurR[YR iQK;W,2km%ZX ^oEPִܕ|1X6B ]m-WN^dIeNtf,=8?ATJ虑8]ž|mE{XIO٥=_\K ٴaWoƤa׺V !@t{U_SAe\vX/xp/K ЦCUp<^( Vx?+=@ίde A$r/ 8 6*C\;ӁY ԑ*w~9.Sp( NVT=Z]p.G۾nB*NTӬ]{:["-3vScSy8PC?qZɾ>N?mPըRNμ@,Jc-w׭2t/a3Nڧ2zUisyOae"L1ɅC46:FCw+~eqŃ<;.>v~ t~9}Zmȳc%=|ϭxҸ2)5Sh`^Pt}%Bי*#;Y w7HW]6vyt1]s0C!K- {7Zeѓ[[3iYFW+s0z";o ۉSJiAEh'z]#`WN+zXBR㺲=|P׮$مtj_+pe"9WD}8M5'qz m3 _Jԙ?۷ }; n9ܕ7Ο#ixvbI)Cc0X5kYVo͓83 a2nj\P\oFԨpҟvLC'{8 Khq`m3=h$!C"@@7tisJYy`ډ2;CScR=Cޢy |.0@7r1>yT,N]b !b+Pxb*DĻ[w"S(b5'̠YE%U$VvwBߟR8"M۴`Q:(逰j$&8UXp 0qtTĎ|#Wjk9tdkPX`:\*N>(E8p'ޱhAAƦb,JmYP}q)bD.9ŠTΊ+OРn1>Ԕy\ԝڋ -wmn(^* ՊޔD>2u'7'IU&+O4q# )49[sH[t* [5W+ ڸ>w:Y;N ,XJԋ"2É^_S 'DyRJghHNk HZ:(É}  $)}R/]i nkkٹpio1N_y}gN6{RB2nF4ytqQuvJu מicBij??CPOCa;,wT40j  Z<(Sa/=05-H4@#R|=r/ᒼinx>oXy(35N|Oj%Do'Iܻ]7 +R2QrFvԆk0 N cF;JՊsw|;Sj+- ]Ō3ӪXv U3MYX%!?z D-ߢ4: [ QY+!3$ AbSD+/JW++OAWCQDtL ݺ*áۋCy7qޕ=N&ACh6ٷl܂} {@kCz=- [ı+(Cǩ$ phh+J9),F0*>+_8Qf^43$|VO$Q;_UkCŴ(.>U|Qb8T2Z;2=AOi<ѯ".BԪmKvpx>rDhT՝w^.44m >72Lu'ō4 lL׉g>f=hV؎Y& IDATUV]nX AA= /GQ !VcȈރoSh-CB-cvt ֽ ߺeBvQI]u@}5&Eiy&F>4lT5.7Xc~ݼ'U0-mC9֭P)#71{ _)30{K'PWo?٢h:ߘ_R}9]b1Y/cBDb(ri΢P"LV!GN!,2g*[:ʴ~L❙"QLT+a8P _+eGq(H4^(Dΰ` p LAztxT o alM fn+T@q;&JwCxԅI.KQrn pZ>Z\4|AmfNN:x%}]<Nil}yRْH <0p1nu3oE^J9Mkg%}S״~sZQC>Op`"}DE<,|t-{QA _')(zy *Hy:cݜmG׮פ덛`*g}j|K ܗ(cp 88&s'u /q 6.ʆCch?El:{Cc.  5BlKMeT^VDVh>XLM3 hcV-5sf}FcU_.ljrVgO419ZDNutjVTyy-Q}灎j> U9z]aގIOw\^Ds+W(k#.p rJwJtJ}-ڊ1Oz'{f4^?dc֮2XMr*Y5WCps&9Ҳڝd mgy-(W]g,ܑ1ע;}~* ? kgVxA>VA;>"bs oЗHk^8[PL$>p +EUm(ZRXqk׍ϩS(}Xr54jNW_E_}h0 x]LT/@8$a6-$*UEMquѱֻCb% @ .qbAE6Yvkpa*Al7+x(vS{'nI8a-vJY:(> cPNc3jaE(NB# sM4=FvnJ HqEod _-ߝAc~J"Ϧ ei_6Qҷ! Cw|aqL1[-!Y{?䁿 qu'w9?hFmA')q_4b=n><ws[,ZS>З쎧mP$%)9V7y *sx/v.UjXsEq憼*9];jVLpQ\HS ,=4f.ItMjwm`+MTaM8d5p1ћ{L6'~iBgS̩@ Gf3M-[#`2Ӽq=7xc_Q9`T4j[~φiYz G>8ӘМ1+\]3C*s;ߓ/~Gڝ-y6 {(mo AȎxMn.dS+NDf2rPokw]4sh#{8}XמηDZDSCu™v;s)~uqZ,/};h%X4go! FcG&D)IP$~t ׻lF.B-zJu8W8sPΚwS RNm  m)LZeChdDHU.+7bkx4ArhH!QTAA5*h~`AkN)gC8iajJl2<` OLw p慈)9i!LoKd<.DʟP,!XRԬy3V*Bb8ȡ8n %X~MNYv>($:YiscxHXVXpHoDT%vB{Rŗ%BUdu8x t|įN~P\yԉN\Q|,9b%5!tYm RtCAbx$ Y 呏6 KYP)$[ܪz([8p)_X |*CUzõ hb*P,+Fs5FMx@7DjB,X(/ RRO3Vj7XCXaGeR,IG"PX "X]]H~ŰqpR9M&UTx<CL6W5j(ޚt@>Xꪪ2,~|]:`  I%_dX#}k`AQ:rPRsS^9:K" 垻Fl#XI21h+c}{CVϩ5q?@YgAaJ"J[ՠ$ǩ4p࿕1(fT J S7Mox$ {WpA" ŠMb͊A5a' SQG ;R3R&!,C .-U q玳Ġeޘzk]+oJSScO3OK')N@6(5 gblCJi(|4*7Ỳ!*rp| 3U9Cȭ3Lg(k;Pc Xh)KŒ&pH$+[q+H h@8@L 7MN+K-"7O52zѡ͛H,egA()3Y!j1-R ?_N9WBQt(J:$ #[p[=:c]򴎠 Wv j:4@=ss/#g@gC$hkڢeytD_~xkNW\n a%XP7)'Pj` Qc*MY߼ )V۱r^pVHBl ` ` Kc!XBpG[l\N}$fc1KUWn/Ӈ#Fj&WAdB̎TDeE6OOo>ee^c#6?<]mz^C}(ӽ?ݪm>(5 Re-KnSvgeJX =1AgzY]}tsVǺD}T+΁ Tߴc'}ε1rw]ܥy~7 :̨{̰7w怏>ɺ5vwƙ~jA)/a?e1+v~?DB=ZHLIi(͑D.V9P)gRﱷS$n8 E A 2RRҎX6žI_GWiRcΉYyb'%@_|x0 è4,^&HAq6btJjD#bص׉Y_TBD\iLy|;-x6-][]~ҋp߭90z{6jZ' ip[痳k܏)/M}*9psŖ%L⯔{fO+k_Ѽ웴Ms^I]<@ o`.){HxBݶl=Ѿ dbeV䌵`sWxQ&tt_YJt6(aHQKks=ضY~ƹo79n&:QJyЙ$O;fUkgѯK9q6N )81}g7Rs 81`$Z#sW9LUizVK=crdvf8dc[?khywԖ~xzVz(M)Au>IkgӂxE(ۏOvt C{S yn{1&kQЮvV >_TB*wźcœqZȿ^_ymru}oN-Q. rnpx{\N_yޡi +7K1x20)E.^WiƹsGeo++]?dۢuа?nYR!+t-es Ǹ0k8=o+3 sԗNpXL3*]{g^rne ְ9~W;'3m̸wb # ? ѱwZ]h,_yU89m>(m|hu} ڰ[WG6M]2Ƹ̹ Qa98𺜍B&E;ƜyF4WM3+g>*\21=36*-}9ݘ4Zj 58r>V_?>&L4&ZtC.r->6H礒)CF6+WA93nrk\|= wVщ4lWf,2/>N[Kb_$ _GSh)<{U7ާ"p|eZbPőD˕!^ A)$vMxZ,6 Z>&O+ܽ^P5wƟS"^0-?eaҍ#n^Wn"޿wbۙ m{I"v.\zW}:W'Z~UouQs_s*1K>Re*\ru<3tC^t/*_v?T8kw̸Қ-S1Wwq[O[яW޸{};Uw?}p?1 &c)nLAS[Y$_]U}Nkcr^_'Af=igh?ؠ]ˎu9T,Xh_ݏ`Lmwϭ zmE>[3'Kr.ۄuD)F|oδW`$yslꑷ&TF[nMfƋIN>cr15h? 'Q=?rg?|ON1h>#~; ~{_Qpg\|vv둿c#Y3Tz+֏=t'!ǵpۨu L qsF$vGDc|o{RHODOz1+_YLKl; E-ʹsyb5]7_V__“Y~?-cUCN3f>ķ7#ˍn+>rݧ_xC|P=Jg~KUqY4kEr=9{e^$&\4Y,6Rrs2IISdfۭu/Id* y7hȈqg_۹hJ',R_rmd/auݟ9DFuS>qKuGu͒8.uwGw-{#cܬjyUEn{߽[O;9}ֽVvuoa3>?9dfFl/CY_tOǢg(|-t p*( &Om f~2x3I|жgܺ^|@=UYJ&P©ۍv?6&#&pI4/CO|~ 8&B'TݰI._ 7qF_Ic>I`.'R N=r)NSf,$rCS,P{λm)ǨF ( iPI%AbGt/o>{aM=[轓ߧ۸ FPW^ɨڸg[O19[TNR9OخZ{Bzفnk|AV8^}{ȿ?+*{a"ke?=ۊ:R[7@NpntR޼hFXIw̐\uO25~jNtdϻG^w\un}/}D^){O9 ||PeM?y؃bsCrtK>d75).TڰG4a/_ѦEUTw;?#^7IzKH({^$l}PH٧o&7{՟mxTsRkRsoW_i;̄Ǘ|>w YD}[ݲz'M;w^2ᛝpewg. ߴthWW|/č:SKO.ݽNc2;"Q_Qe%HI qvIt rP/,gC[e[݃W_?op_Gjh.NGtu,u旦jוEzQKȣ!&(&O@%2~`a+ (.$}ȫ {_-l*Dj,$")g=Geyk])O]VRp\@Wo(Mrӏ{X-׷smqGwr~u__PZzSyWDxh{ӠW.9O\vɷJ+s}V~}{^gy.;һV ϯvwW)L:żg7!OZ܇>}Uy>]IǝN=rY;Wbi<%yjWq۫^}Rv['sY}V\܇y{m}Æ)…:ëVk~aMB2Rt/t}oYi~7C D6?7PZ6 Kn㦤Δ٪o}|ծ{-sS^qfc_]b\q[!ޣ݅ϫx?nBmAt)O}|ܣ }tÿZ/?n7}[ϦL;AE'yGsf[k2h [*b~ Hxc X#M=̪ =My`3oFˢ}[;kY 5(R1t`l.&n#e]L N5RN3O*b: *oNH;!W#X٤ڿX7HIEč14!0 b%<- lT@'osO(wmLwŕşzMӅh}EE$dxĝgx4z{d#\6wۋU9 ծzwճ/>K72u~R{i^ב?~g*W7Ȉ/vg;q)ܱo~Oee?ruA4kS[7T{IGֈKyтh%ז]t/q_ڥ\xEyʤK{&4--4>3te'ΛW}l>Z[|2*{יl[$zC'~lEs%Ds7*7ȒYLrZ mE6lJo>uNy|ş\zwWyDW\fn?<"ww==m;F+/[-@,Žյwl2zsYK7vnI;mf;[ò$a){/,ȧK~ _8(ݨn K^X'|7wF/T};z.8 _S+;@#}?Vq_8|ϯRٺNK]'ι_}JWMh˂2 ^3Wsr-w| }s;oȃEbxNkC^evGe1gJO>?8S^#GI5G!m>:OU9sކ<߼繁Xx/i& {W: ַ S{~i'䰻W;l_=TH O<9~rˌt; :dWVs@t<*hGh"g 8Qc:?8i3N Fa}fuGQTЭĿC9 I_wdSsg[4.Eg/ hB'{Z7>7fz>*foȳ hp[O^çUpref%G!/Nr ~oI90np$Rlx fC]mS5 :v![n_I7k)gN80&ᠲ\ʞ$YFlAԶCQճ252BP*eDHTPjP,lfI8Qۛ G:(J@p놲tAYzӊ'oj?/{'"+@@g&oziMGd5┪&48& ]RV\wA{YgDB"ӟMRܸ̾p|RJ^dQ^Azm{>$49MNm.=՗m]sˆaW*|%, хC!1ڧU!%HlgIXgg0G"p1bCJ #g+7q*(ysn# ZյLosl{- m Lٵy)gI lp>ژaf)Ua*hkC=ioRӷI#ߪ׿rq4e=X Cy=m6!@ϛOnr Iz&'EWp|C4Jh$N!QI)FZTk F;kWH 1'Mb/FG E$ jF 6"RZ͍$~TY-ǝr晸/W#?V!`G`O u,%(T-ضAv]gVG+hBe'cy eqb9Z8sr4l ǡ/wxSCDZ~^v) (_rf֤@9A+oRD ZI.XK$7'T7^N-5KcsOmfNAx Q?=oɾ6!%)3; ChJjO9&&̣?ylwl~aܠC"n(L#$6Ƿwk7x}ϮG)$J)C.ȓ&MB_>5Y*fXOPǬ=Ir`/;MorqL mz/Cvs渙ꦾe Ջ I/ Bˑ 7mc̍m0Uđ@I*@至hNv; (͏%7퐃SNM@Rn?U!SNM+/!fW/!^ɓX g!_Bc3DbT&q-%#/~kKl ̔"%Y_ ƾ$9}aFirvi5vdVՕ)qW;imGòa<_;_O~S͙BlTGe@S6tO|B7bB ^v $*֯O‹JR3~LkЗK9 D ɉlTŸL҅EOYBx.,u~yqč1CO|@xĉ2$nrmKFu+~`|s?Rǯ[!OWvV߻`||#/8!P.)mpS?n;ёq?% gxM C؅!Phi/Y7xCDs|X6u?p^OfdaZVw݆lqX~&x̢mͲt p8 ;$гJ:O)[@,4m ɗd J M J"Weh(M _~}J'L:nK+գy O!sܯsuɝʏ nBrޅ7ɿd[pd'Nƍ$)P,h%d Setˠ{rrv]SR?6cB>ް%e;eWmODu{TN*/cCy3n[bȬDP.Mi2KnmaX~AyZ8Y*~I޸'ĝ~nyn N;׻Cf7 ops>7m#{0˴;;}Ҥ֊hᥗ|`is,K|׿]\t ˟~Ik}yGܕ8ĺ|#PԮK̂~-r5fN*/8eUԝ|Gj/~.:19odyp\q$ú3,C0fMI&n9* l~ 8bٗo ߰ѿ# Iw@2AH(UL죚P111_eSLW#$ y2G/$h܄=d Nf{&n$Mת\w#3CW\_}]W׬x܍ʣ IDAT+w{Ηq;6 mY^c[rw./]7bgW>Ƿ|2?a˗uw{qϾ PzOTMO,/]P*͝>|vI}r҆{{kUwJ''zV)2}~ڑ4! %X“!`"P[$9r56^bڹm{BjxrRu[le8Y~ߥK[~#=u1yb =Y.Z6SWM(;@kHb'߰׍ڰ=I~Xz/􆳬˧oҎia4\ߗW=z@&{?Z|/ʏθ|S%{b[vz/./Oy/\󯕫P.r-{ %kkrNmө|"^qB}m~_REg/Y}WW*NH޽WU'[tRcfr![^Īk!C0v q:,==/MrS먺-4'~ؓ@8M&V.YkP,en/UveYJá~C7(͒sN<%m²(̵y^y '|ewk>Q9nvE7&eg{7=[w;DXm=hOToNP/}/}rՇyo=;~2W8X ?0>X!0&Ph6ЍunGskKLf4# $Hk&ԛTiAy_,Nki’nE'tMc?4P Y1e{zB,>lfw閷WVw;wOK[>$\M 6\}Zc?? =V(Lhvc`>"[n_W2۠ A ]۪/xG)6r{7n UD<($8G9 CPT,(,Eͷkw/=^?(ÃuF ų(SO$V2xD> =[NoXr&IT›pXUVpMEt^xS^]wΡn]ʧ37CKMAC|UWrK.Yϻe )r~_E'ݿ}RcIꩇ%#?Ja;){mFDM_]uui+O8w_7qǓ+nZOzތI.|4ͯ.]O^??S;i C`7D @DhAF x!V[%džn$4G?$:e=]ȍϑT9.%3E3,*e nѱ{Q'q(6~wvdw?"~Ƈoiw0_:L ./MT6kww:p}?e{i^^/?S97Yzwd`WXxť'Yp>^-)}XI|?׻Uɟ̤ɷJǏqW ?a!+ 7j0 -t {#񽛸^n{ʛoϻm/l L70 V"?n}I+5k=*|v "ܩ9J oKBQP9f,$ }B4I<97qq&o pI!59č6m@t Z_e@ˤQ'B\Z6o%4GBD"xB!c醀!0(LGB'XIKm't!ns&w&ɉU/Rv ]{w)do&L7YҜ9Ch=yx1?׮cՖj 0 C`@ 3Jh~-:8K^7lwʌSlLY~̒,Ǎ7J,)3 A P$447,@pHc^R9/d?!`"d2J&K?OIY>Cp2S7QjЗR%<8_c|ʧOP,IrDلG] #Q}P!27 L%LD ~˓o,qB&L=䈀=9i7\pqŜ׻=䓞0,8`,D jrx+T?h _>AՆ!`4@"Q<m薸0͏3` K8[Ȓ-3Ke@>&*s@|$#Nw=xaH@oٲ_>r۸q' dC (y@?ﱙ\7_[xD{#0 6"Iv+Lq6tdߒ,emc/P3<y?Taĩ<d }u6%,kt$Jn!`jߓOr=r9|rM–v5v΄ - ˅Pↀ!`t:F:b/_x1bm̴Ya2kkDoF@v7|&n߾ݟI@\eI#haCs@y睩K'0„ nܹCu3g0@K 8g3 s>/+bYp&4%쳇lƍs8]T[dy$ KqYl<-0&F:E>`H510,HdhTtdA= -{07OqqLN9)a:!0( -مlk׮myp9sZ7Oa;@|OHZoi4 Cj--϶ea򔄃!BqY'lEf|6y qm-\CǞvTv:`MERdV3^kEݦ0 $ƞ$Vj-ӎOXFʧZZլv(jU5}P_ oV6 Cs09}Q矯[8ڶVF#PEP;2^2dp;j@q@j$otZ" e}9z}i5@jwZ}*xF{y"}PF!00Ձ֎wU7 ҁݻ˘4 825ح0aݏ"`&M4-m TGh"{ }PwQxY!j'4T),kZTӐ@2(KK7e!0ohh;u2#PH/y{YHqʙo@!`z]D]z׮ Em4y,T#J5(,`c#Pq"[v՟7x䆎 D!?KfXIC0F#P#yfݮ=H3Q77/*St>H5(ePd/2 E[ɓ>jqV,l3ǏoFdۄRP&G oy0 `-O̙3 h( ۶mKhIFp4H !rs-I *Fs&t8m!` [n[v>a(i.bɴ*ft-\R.HuެS^maC0F#PzN3fȑh>{4f0@M0yD{Bue**Se!!twfB` 3x{{ڥ͛sgj- ֔ GL;UfrG19C0 F:Y›2ekYffcPip&{:?\]VuDxeƥ&E$N x#u0M!0VϚh@:6cƅD J]O5 OY+ީm.bX3O-H9 g 3P^Eܜ!`B`)FZs-ԃyf@j)M€uVA@$mx2"H|6$J\&½4*1 ]#P؍ oy[:в|nF~ Q]+VCo֕*3+H"?Hx,JD![x;c̶_n===mj;9 *n)f nݬ;r-Rg3lSUNb[fPA0:Jet$:†!`FF ]'?I[[ۛ$JMy3@ͬoD5]0 CC0!1Vxu]Vt׎]HyDj],ST믬$} ,h@G"Ia֑}1F=3{^[rm. L 4 '@@s&բ!0&$P:qL cFf"Oo}[LadbҝCq )4I!'4U"JC,t,0F LծVc ?}t۶mk- OI)bK~GPM91M4:a#L!"7 ND @mٲm6FGy}n8mwt9Bu,TWWw&!3PF jB!!d7vfF' K &L:Ly2c4Fr9z#O t!`@&¿AM6ufKx衇~ـdA2*O?bCDphLDpO$2!qby-1\.cS&,!Qp C%2`۱c7Jj~a__m%OvFٓABR!quyZQ~M;ʗW?BUpA}8*.I" !0d(ۂ7:<#{^ɓ<=XDb\ćyi/ѣ65 IDATyJEmC2v@QqaC02 ^@& Uigy}o;y&:jH .Ez+~ѤS,Huw`ͪg 7V#O1d@G" 4(lU|;x7sm☵JT<5ƹWɧF2Č{Qy821BHAbن!`:3P9|e_C6䩝7< V0L䆄Ikd/JDuݵdJXT]!=bpcP7 -@T`+^~ Crg0c M!׮];D Ŋ}xE1a6W\XEG~}6`IPQC[5PuU !Iى.IqtAIxa/D9g͡LڨAל!`@(|Tؾ74򓟸|xJrJuYʑV qE @xHjk ,ˆF ciBdbbT{o!'ԃ`IJ5m-l@$P|8ac'N$77;]wV{mcwWHxE#A²:Cq1=<$4HU]5lvYPTTWb!C0F\.({o{jU?snBEN;4`L)BšxD:٠`/|ItNk$KxVץHS:iA$QЃN !0Zd(.,a)oĉekM-,h"w '7G.Q!qB:e|c6IxN HzL(Fh;_vVM*ˑ)^F򨎺N !)d(<ooM.#Puv,_a]vykڥ~K|MRtA"*@"/E81"F&I5R#a9=KCN>݂rH@# 3ݐŒdk)˧!`\H21cFm0}-F[niֺS7MNsA5ôNOӅP]%8LB j2qt&ħ[@@ꄉdn'] t CHB@?[KP!%oQ0\wu_<~[L_lژ, .P%h6;cgI ud)S'= 'N0[C/$P76Z@+&P>L>#0φ\R"{oo< tf͚1BPhɫ䢿(o2bNh I2],G 3>ч,IDC0Z@.[xxgo⵸ZvXk3g;kQQ85_zxwۋ#cP ΐPIRzVZDݑHHc(d$1r|%63C]LOJg}!Q(IL PxÃ7*Z)n-5m\lY4>zP.?ed2g²a<{c {x~gĤɁT4hyQaa~Rx~-z#h"8ӳR!` L/9b\;]]ҜիWSN٧X!P$yiI(.%a4"(&KFݺ~3MӳL;˫Z݁Lu>8M|3Y!`B @7 7 C`%P0P?`27\a&/Ywu'}a63`z1iiB9W7CĩIlC{HG }S7I!2 T (l$Uk:`8ZO,Q2irJ;(vc#k_6|8~"ٓN)|d}? M~?dOⴋ}2MҐEfQ> A-1ma!`LV2v;]9H9jYNK '%K*;iMw\(Ɠh :-,хfX9rg8uSN! }r: X!`6 N^0<@xFF06R'$,$4fHY|ؘԾZN Y,ˁ4qio^A># )K3=ԩ0Iڦ$9q 0LV^ↀ!` \*6ɓlEI~^iEq=myQ+]Y2 f8ӤYӧ._IW 1=vayp<"YhTZn69--LÅ1M6YfVG Ky`#2y2,y/OjM@\p'K;Lc~ a'&.E L1uEt Ӵ.-ʅyYPgIVY`)$ST.Y@Y!">_ C& AňOz=0E2,cIxgzC7Ç<.MT'M&p u >2Mt>pZ.)t k<۷o/vq6Zmg!CL0 A @Ň2| xxF=Àzzzj|VdF"O$5! CnNa-ðyj&Ms0GWי.+/p(eo(HO!ڇ4 0]c=娗깍!]_c C>Êa,S(s)SFZOM06ÔT \(ƑteAihQ5<&IKsu&F?OA:\(慃Hn8> Bx!e9肬+U3gh!P@8k ̍ Pa 7qD^{ծ=ᒽ)nժUi'1}a۴rްnѳLפ3N:}e'zºgɉ^Cbi3gÀD_%jC0~xA'Let9v^$M,C?u~Ra\G\RZS-"SLFzk#J#<6aȰ"ay! r *C*PDT+9C($,0i>g X.l? xڠX>`WHh+pO1>t8/pZ.)t|K% ƀ q:-O;QGO!җ<(Mi醀!` Be;J7xDh|lZևXH4`? sCt>[d(󾂌ItY~&tے')iu| u/ e2ԝ'ԥ#> dCBAձ}ʘo@h@4Ō30AOAiؐ Zq(#e Yy>.|؎I4b:}ø.!P^rfQ:}! |$jy0 g^X&CIq(kqC0څ@! c _|E~j؟~$oI@.+# iE\'{ M2Am }Ôia82ȃKJrYF ,PzQPNkZ35PNg]SO36!`^# Q P8IgkBw衇I qXLd<$Kue{2~,Ӵ|Xڧ}:د g yܛtچpRhh8CN$Wb}O"C]cRdQe }C>ÈC֡ WX !r TVxc {@e!5< 6E]dh9$/'4Ceu ư__H(GNKc]yu$姥q͒%ay YeNQrZaGQԧZ~8 !@a|aϟHW͵=$ie>}8` Ç/Y!OCj|حggLhu1>ғIii8ftŽ$, ˲2~)GrГ%K;izy}ʡ,yNc>mGH4}nc>kF% Th۶mApś@hCN2 ?3D+912EyC2iZiIPi(0}̧pe<ĵc{L Ҩ>8: 3T&Brvj2ԯZN(Ae2!0γd(-o@i^JV&FP tN》|ꡟF]g>|aYN0qԋp$itRF&.:uphSd, Xe1- } Nׁ8e!Y&>]tr:m(abDybۚ$O,(Ţ_P? ˋ2yAtIi6rїOݡ#/E⸏xRB7o@@&a'O6MB42d0Mŏ#B >y1[Χqp i, aK '~b: yp,EQ(̣,2>qAײSNy:ʰ`P>y- ˅iiql9cy鰋30 v P@r>sPi6m2C¬H2УR:<žYI* ?Xӄ $kɞ0A W Ї:i#Ç.'GiC[CXLXl/,BvdQ'@y8]y#QeuZ^8LRZlAd Cd(>f)[3~^>E2 gt ́> N yЋAp4f:< ip#Rɳa׎ !a>Ne>tb.0a(y,0 a I^>3 ;pp |iH'I,}1qG8$%ZdGCVAt{$G[y8B&@&:AQ?md=lC#i:4:Ou>pDhȄ(ݡ׶0-2Iv$YK3 C&P4AApl+`NamNG}rg@O$pYhҤI~S}Mk֬qk֮u` ]7IPh|-QP> 1Y:ԏtM4Na C}֋ Hz凶e& |N7K?Omi!`!I‡5!H>( ؕ\ZF!881=A9K 3ȲR1f{9c y7C7Hꅏ ia:Ca,K3e!/b +hʲgSĵ,呮ֲ^@~Nc|a9ʢOv2 y~7r,?T_ڟjlj!`t6 9<\41.c@1B٤8ʄs t:LW IDAT@eN& pArۼy˄Y2d9]pA},eѮy^P meq!?Pav'̣^ڎS.Ǵ<١Ѿ< WIqP+!`-Dʫ D͘1#OsZFYi0CAqMrAq 3L 4zdAt$>e9& bNCF? # 2 pOND|}1>/ѲL~AÇ60m\(x~YʋM;a 0TC_d@nA1t >"~I$t-t>ਗa-Crc4!pn ±u7b!0dpOR'u~^~(oqC0%PxAy1hb`Wvݾ0= PN_@X,!$.Mݰ KX5 f r(7~xS%@.#@N# r!Vc=|S nρm0>dNG-JeMSIrH 1LY>nN 7#ߌlVC}"6y41N=rJRc!`\UR|xǃ*b FeٚdO8(C RA.CD!y#IF|/K]^a6~yŬALm S]B`pCߒ!:\2zh#ivh.-P2piCIrLcFu2 ]GqVGRX2Ed'}D|kܐ$_!wa!. (< C9*;^Q>A,x։4.Q Pr< D LX7~Gyt:$LC_&؅8.)Sx0`g` T Quۉdg~(uR.C9gl}`g9.*_T.V\[^bEz(G9C0FL0px!P5k,$ヘ> Di,䇎x r  gqn1ŒI|T ;@`GB}@ Km؀#|ȃzq\ \B;F)":8#LH|Qai2_r:L9,4uzduf\oxv#C X&1 _Ai&}V"YR Ch  $ x R1+f! ۀl ` V } q >t2yd锡OY1<:D2>Ǒ|A$?ԓ$ôE娷>lž0M—iȮ۪߬lY}&oc>G pA|8n>H1K2G:eK؞P:=)x|`>$, `@p%t@4a"֚(! yp(zA|#<*,qe F;r9sȃ,C@ȣ$r'.ab22 kY!u2 a29֝'E9q1 'CN3?,P|wd?E1 Hg(><50M>@ 3PPufyW֩u&6COAg1aG TA@py K_<  3LazFH|We/će(Y|N:u B7dqbJgACac[)et&\cY2˓˧a .Cu_yaȓ+=Z߄Z29C0@&ƒUV0R8[ n$z"/+ODlCijd7WI"a H 2H uQ'jR?Gd@0K~C2C} vE GYP ] akC]iC:E9)E!SrinbAȢeG_^@R>,}C^cݭ++0Y~u#Cnl,R>OΗԖN|˲2!J2 x4|}zi[ rkf~(rkpaф a @^@6p!T~ 7@apV 9a$Jm<t!b8tib:!YC- yw_C7#gӧ,'|iLX"vS&G[?źPB0}eS|hfhO4ȣ061q-,lp%PăI?<xcb6]&0_׃0aZ3ڨ #+]҂a g}X32( "A[H tiy>!D $ aA? g`  aA` lBY1āp,q,aP?@ <è>4rL &$>HC;u 6mZ!O%؄u`$)OY<ˠ6p N@'. [ YkoE(S}fތLӲIaOC?,.- L4_U4L]Em D Ğ8jЫiN2L30 V I_ J`/,P<ʤ([&!9؇\XYŒ H C4\z $33Bǀ[@nyB7FO;)K{I~`ЫP6TA7l@Yݸ,l^7 'G;8:^BA! A02OPafDdf}8*ↂ"ఌ";f;ߺwS]9I:UTW߹/u=w~KSll>哖xdfYxSI}58>Aqhni6qo&>IdF _RJ.HX(JWJxeq}(}lسxklcx Hdc-0Gob(.%2bAbdzD57| T; af!r-;Ȱ%&chv%d옓v;2g~D D?/'b F&'S{9i—^l`KI4c>T8hP>Ad),G2۪{9vzd_,@F #0Z%P5y0;↞"‚"" و/pbDl-LħO@I(hwIA?RQ&IQ'AU=qlpK vcßD,%抜q`,N80*C {2:l!I:x2u%$:٨NeeeLeq_rlxes8c-7ܶi$F#68)#'u -,,кpFIbb;D_}xJJ^cG.A@b C b@6 Kd~M3w';#|0''@/!D=ca|"l)-6&|{lq|/2u;>ŠRr!I#Xכ3ߡ|eub(T + [|`I2#D̑$[5C~Ӹ#b\d2*% i\̂_wA RA,fm6srm.H;;m9vN@u?nuA6ڭ"6c%C@OIDݬ7'}:&Cu9r`ܲd,؊|)&" -%VcRvcu%IC W?M+s"G,.M;.Ccs$a|.a`J%1eqLpA^eY_vd׊#P]g2@.bï-Zl%Y HF؊V ȋH rI1A D6OJ;:$?Ƭb!{C3 | KI"+]lϘǖ6v¦ȌbXu[d$%1]%b4Qf\JȔ4dq]~͔YeӈIddaF|(HYm6Nn{4\Ӹ1Ʋ>mK*e6S-[l7Ol@F`Kh1S.zEY>,{-NGćiA J˝0q[nMANV[UwO_"}@L 8Ȱe<ɘ2K*!C[dĎmExJc`nca=B< 3ceU‡1DT<$Gi7qGRcN NGYs >ڊ#bu#Mc$q|.5qkNcRO֒~e>^Fk/\f2"P@9ɀ@EG\ V"̢Iž09a#HA:DP &m%iA rDYPt0fbCV s6$6ħN A/{@"b"gN\Qb |tLب+!SY\/k#K tUJ>R89?H%udzS?Lʹ}.JLV˶<۬m_k\]ng2B.bwAň!pN }@n dFv H9@Nž%u-‭$q=bBD8Dfcg6{b˖16:mObac|[DIƖ8Z%%ݶO^ JiX|U#uX/Y3>Kj{2Rrl$m$QZ, 8n,Ie=WpT__E;o3=+̲@F #0\"PaEI 1]EE6:HF[es'AH IY;FAP KO_   ?B {b&B\DID [%[b?qمb.*/dbcA&D1iGMjɿgz}'3H͢S@6EK )5 VuJ26U2Y$q)ȰYX鏸dv#D]X Jd G\%3}gHcYbd!,6~!&$|IjSOeq[}G:ĉj׋XdJd*3lU|%Yr4N\KMyqSYmCԧ|(8뛭vfƋx_?(`'7&e"Lx衇lܹ[qHvhDR >}s#TL=M_,ŕ!䲗- /@%l!AĖ-2_ #iW9D,Dy26R J«LxǶՖ=e\WX.lӺlb=DƧq"K/XFn\'K-g,c\f2F`H" pEMl\ZX,!9s dͅ`d/]v+|I.DEc"ډ;c^$dY{$.$6>C~.HS2^mŗ]Iq;WŽ2űѭOaa6X8N\5*;sIb8ܶ)YKVO"-یmyrX--K3!P@8Bug`7,](ٽy+_Ld6 kWI䁅$BX H"vK-؎qbNbʴA!L1Ns.()I.+J6)Y,m#@[b0Au<`N]DT(G}YCђ%ͭl^Է^[q9׳Ϻ@F #!P@qშE0|ODD_H qaGcuI 0.D"[d"V[;JmxWD'+v KB:dOdIL"yD_ih֓&eu:8~UOTZz٧zPFGX y(A]Da>a7ۢgubOq~pfuF㔶ѥFnS_q2Qاzζ@FैEB__*;-tV  ,ddvF@J&ى,D|%N17}#C,e+R>DC&iI2KTze#dI)nv>_cKCl]%Ȓ@H|k(D|owJ,BfDZcY\M*y~dOHWK^GqY/Nl7XxOF #S!P@ @`DJj l;HĀ@|`.XvkgI <~$" Ӣ-C,e?=c-D<NjP$&N?#S8NXČUm:ǂ,҄-=%vx}6LjvxXƘ!#oiRFĶE 1D⌴MbxKd~UK^>֧zRfc1dی@F #RE.yīЈd0)l+ECfAgZ$ IDAT ;;!ZYY!flcFcMF #K|A/5 9`pa,Y$(څbb dFFbQ&c'"#vhkQ{ Xc=:|H#'n]#2;d$ƪ,RRQ" HM po:0{'d4ǖڕɎۀ`kR˪N"e[G*Nll},c7;ld6f(.Z> pB8,Đ ",,dvC , Ȓv'"#)#VI}QGKGYL)> uʘ;yjnvx^I߀DXWo[9XEREbORc.m#/ɾVcwm(+[ڏt+zq̺@F #)!P@Pǀ/̾U @gihǤEE,L$K, EBmJ5kՉE_YojvPԯX6$HR\gLz$fW 2WDba.]tNsfKc 'AITs*cـ%czcYOW PTM}je@F #)"P@bb!degn4bDI,킰SBwD;M-R,S=՘Q+|RGq˴N;M?&a~nv|3D[p+i B 11$S;-c}\Ovl}o@`FxJV,e3_#H&#d 59^cٗ>(z∈a A %HO<v#0n2r11W[cQqeK۱-WɒȑY4%q RMv_ڤYj]>sq@F #hѴ0bA 2[La`,)eQZz S~ԵOVF+S]0.`c]\g"[p<ĝ*A R3^x𼒞UQD!Ui8,i||i<gږM\>iYzQcq Fs[(ilSϩI:NSاm~R}j6e-[ oNhld2pN0 k"P՝EB[UZ8(Y@!,H2[#>U;-'RLmcYƢ;зHR[ķG-8H$ǧz:>S+)nJ81 u2&AF]v^6`I{N(6etQٌ|):~3cɶ@F`SCs]łBIyp=ȎQ}$+b&Ŷвobpk]%|Ro[q~c%v HO=TxVI(!G"T*E*;x{*-* :(sJlQ!/X|tU;ɗ.]vlfĨL2Țpg@F #h_u]0^,ݣz:2J!#,"`ԕxQO/]Z*X ,i7!LU"""JS"CtM;J$%bh.ƦXץ/+D ;ԹXc\c\QIJK^})Nu⻶vSW*IG9~_#fHld2k}<\=K#6DXD<s1z->"Q"5Kž6Wbg7n2;K:1<(sՎdL9F'cRyڎm. p N${!`cɇRX.[M:l~W'NLï@#RflSߡc{>#dj_ /TS^u  J$w&^HFS]*hW 2}8q?슺vd ;|:j\ʱ6lη,^xvm7Ik0:D4ղMje@F #|^d˽e-LFQ$P,48sB|ENYȕ-T5GS(OE:U߭yB`le˖%v "v$5.M(y܎ez(RBI%dHL*I`+c-rv[,S]E_]J_̇lmPH?.]6'v91N+@F #ظ @=wzkU 뎯3)I|qc!oD6VLFĐ^ 4>ܼtn܂0Ax=$]%2+%"F.aC$ť-{%mK^,)Ъ p֮R1*)8}UR!,Ad!9]3&萕>&.d4mOA %2U"#Vb}q]6e2fc~eF #KX=}tPִ Q}6 ;v,Ax$D,`7(&*ֳJq)(J%bPcS+ @u6x@4&Ovȑ1U#_Jσ$V)ڵ2~+OG2'|R,CٖSPR{)e@F # P@0hdgpRGA3 qK`oWJ@E21D,R0Wei]}rO E,HN Kn3;1(1&掎6uCp%/},N.=sNB^!Fh^>uQ"G4(~"VFldK٬p}>s=#d6n$P,.,,,<aĐAd6w7v I({ȐvYp Nߊ$Q*y%!18 5e2hj$qĉ9'EG3 ?2٩,|8.6|9¤)U{ ʢ:C:cd#}܎ҫMZOong2E! @jH,nm8H9~%[p=XJȈ%bĮnljAX R]k-βc\qvX=BuHI$1 :hHm[d*f1}$C]l[T ,}ԖLb^.jkeɲ@F #tKXY0 AfIO ;J D Yb1 |@ M.%!a v8]б-uRڮHMmpBQ/P6c*r=0M=؁Ylz\⯶-98k򑎱NI"F$::L7H,mNPzx}zF #l%P8i.Sxa^|ݺ3$ i-8gTGJxvllE˽uxWJL |)KyȶȕTv;1TW}vDI~ĊSSXץWYO'/d2@-(.e)޳>#!$>Q%]E.YZh]%ꐅc0&bP"CB˃]KsU.u>,;h+~Q( Bz싌J,6j1RT_/,#d2KXL}gG&6u'Q'WcR- t!D`#6Y0*Ab>@ K̃6calml)oɾ̿Uث8ձ K3euH2٣^V"cBGALqYOQo6_#3@F #04D]b8YijP&;y /daS֠[t+k%-qx52Sln%ƭQ/|KB^%PLIz\sIIe mї'}\: ,6fG'\f2@F`,KXX= 8x#BR-]ADX8 Y%nEGL!DhCH#-::eEE_̡"KMZMR7Ry[&+QK6T2ɲ@F #%u ᄥ'j^WM32rQrJŽR![p@uFFVJ,;_ؔqC> |b[/D ;|㒺G6Nj.T:$?Qol֞٠,d2? v|A_cߦ09?7ha,HPtR! 09I Az ȊA tvSO{q'j39$ee˖vYO^XF=mˎ2z7d2bBO^u.4}vm{ƫ0`Ya`ch6qE;,$Dl {Wɍ)=##N*>Ml[T O[vԷ,68)VLWfˆ8>eq,#d2u dS Ln8uҎ;J `W _A,D&]diQL 3#yl+;]C>*g>jNVFNHƸPSl#y,PVQd2Ǝ@]B` Bm8w9UwK*Y"lbx=)djk,ȣzmHf#2%dq[%W-IeZ}c)#y*K۲FlFb/f_.3@F #0h@AUrR­<_H[63?2|³R1yx",e ,Q}9:rJG.|7 RTBFR|٪.})t*cTV Pv8o2#d2 (vQ*nDPy ߐTdvبI=^E U.nK/5ɒcC,$|Iҧu)SDG4Xv=XW^/hԊ@F #ؔK 0N $s؁4A6ݧA;OHCb\m".COl) mRl6T/+GKqԿڔ,6q؞xvF #d2fu tJ D.>'lEILYd_(!Nb[bY\^%tM^2X68Ng2@F #04u 2(hOC%4ٻ{8!Axˇc}QW~%:DRl+RyœMZ'@F # DpCxrHv]S:<JrJvԷGvY㯕b6IZzj z.#d2C./ĮC@C\^}jvUbNu#%[JŢ&rTƺވMC{8~);2@F #$P!tʈx3ܪ DJ S[e*GUq>Tƺވhc8}}vF #nR6Jke[͐AsURgI!Õc (G*K۲To~~H%;ŋwZjxK&ʉg-+H['̘1/yׂ y[9ej!ϧ4s=Oqޭ[k?Ý_۟o_|wkZ Z׬-/ܢ#{ѯXNgŁavϝyg!i1Sb:/%KH]*+PVQ⤩?fN=P[po)@qMω:ۮz[lYϛ|@vh8x5N.:vl7hb_3p^5{l큻^xSgN[c?yu=]%P> N!12IehbRUEZ0by\WzM3vT\u댛l;>Jg4hRʟXC*DG@;7BeUg+f7jTTJAM3eJv.SYS-!4}CvB N:oK\Y(}.Bc=VnzHC OcpL߇ogPcN}~OoC"EA2h!+Gfh7|y~cڹ괿IըGl"!bjSJVɖFź2Y3Vb..:~}Sj]ُ4JkuG;wO͇d<;_\rwv[3`'U9_هb\8+ "F>nW|b{bn;F;sU̿iFuKN;֌uP޷Ҕ1f<H\7{Zaakݮk֬7tɨc>xe &GaUc ZW,Fݷ=Νm)tePw`89[/m>2;ڍ.>[|Յ֖ۧmYf5?0_aP+޶j6yN<_dxO7hvlKk*͞m Ϸ;7t~Ԋ9݃5Êc}qعzfyߖ~NYUɮ6ޤv^w}|'O[K_k.?|_욟YsG__ L퍥km{=^YIDATll[;c`1Tw*$}npǙ*tuuك> y!|[B[/Uи VGQyu =m_9,i_:{ˮAƒazDg 4r"6PlԨ8_n]7~*2es 0٪;Î=n;#߱a2-|ա??_zp'G;>z[{||zyͣ6T恾pnCk(o*ǻϱ?~ oH>k+ꕕat {=E Ǿ[eG|~3m9Vte /k ~rk]mm?'O'_t}5SSŽ8w/M(:1,? @ I Lx RqIl/orS`Zq`yf=h_8kwYiy ۞Udls#_=ݫ{c7vӢ7wN=}[p)>xmo:R?n}v?^cnuJWg1Vq!S[;[[P;)T5*p%55mudw\\OKSn] 옋seG?٬'a}{Glm_mo'wdGLfmb=^n^+xE{o>֮wlN_ͶxǵN+_u=Оdu~p?yﶭs۩myzx:ƐR鏕?*rnSZ9J H (uڔ5вq?Gς4̜93شv QdHG"WfhtVٜom잯g[zusٞZs|N>QܹaD;9]pqnx=x{tF`pJ/ Ȯp7d[t[ >X3ZA^=l;y2;Oa{0뇞e?$ b3¿pˁ9XT??>cO{)Vos6pw"W?j;NnJjm񠳻ӹ?Îg3ζI6wG| X}qB)^ JA9ɉ k۝)]0}i~l_o0sl?|/콗^fm3_XWjmpm^饍f-vn?ggxSc[n[gI-whЃ=lꞇ=J}S9z $ʑ >jR:qWj@ *0bÉ_+ײb~DvD._/g YV _';z3g~Ӻώ>ж){W~fE߱ƶiIuqv5fZkM1 "&Dԕf763M89ʜs[ўڂ _Xf?]_tmח?/:6Y8#>z9>_Y }?{y} V^IMr+4Q[[@t-ml 霓l$165irg6@?0:}+TkZkSh~ğZo[߶os4h}N=4$>}~<9(CwB.lC8Z DDQcr6t9ܮfN6e/iYȦC_pw丅ɯ^}u.ج!d#R6e‡$7%[n8Ixz}5DQgW2ՖXlꜗf[SĐwg O-_~}r,7B_\DVs@e7z3?uh+s䲥Suwep|jmm^?~h絽}SN.,+?(gݳpsg3d|nضڵ'“B,0lH7ܪc$&>!f/Ts*0jOo틿|> y.3C՘WYaW]d^v`D{mMw9Ƅ@s?/- |ɓo@TD|J/tI6e*H9Tlw=J{v϶^i+PzWebzW5]+J|~oo{o=ݾ%b3{?[׮Ԏ;r[|]um| TQ5N]:K0e+lii 0^b_z/ž\7ܞY;:/3>v?%:%ߢWNKir}ZvI{ڃ~6ɏߒҽ7c`NFsʭز'{|,aԆG{k˗-verfm>a=F+n~c~ PS:|^o{`u_'m ,~Uvϳo]_M.;iG,fg\;gۛw?z!N63/s&k9ntANܛ9=t}pmEwMϿ氫Od- .~&s@i^pnc}>gmϞiONYἘosuWI?l UCq]mǛmoNyg_B{=i_Ǝ9~~|a.?l7c}{9۷NyՈhwSNe=\ߚ'mt_M; _.( 2ݏ-x]rOXpUTǞ;;bᖡQ`d'<;eݫ6'!~gp[O)ѷRTc:.ǘ-m=t/uogٯm9;RC:ٸʎĉc֌Xu0u9=~\߾ysp 1kT![nVNҥKeN`0w{ڜ9s.Hq +sb;Oe[ͪc+mY@Vur߃b³jrib3gDmDzVZH5X+ͰS\߈Z/3jwkklPdp$~`$>Aq_D zO/YfOkrAkC{ #7/k챩!v͛7Iw|>*JIH;1[u}Ǐ&]ӧvX{G[ &Roe7FvǺ[Wz5?/RggrY-<9Y׼Ξ]`Ju8x !3`g_c0p8Zwۉ'.ԨX2aozѵ,TvKnN`4>w;ٳWz.~S[n>"Uό7^ʗ*Q廌=f/q׻b>| o#mC={u]᷂N8ᄎ BWLp?w_r%]~19ûve^ iE Ocsc9oM7gxI{GkGoՆITqc*  ֫/qnnNhͻ-LF g\&ޒ%K&|N |jLZhѤvءIAn8j8<kBrN^x$`U 8o?0k֬wܱo\؎o|s,GϧCw;H ?vI+Vhqւ>`g39 o};\'Burw4LD.$+W䇆[^|V~ M9q$M6m?-h̷97OF66juio/'V]Fcy.\PWXoDacr|> Hyk%y`〾ɭcׄM-aÚ7 F Ox)Exq~)6J/ild2@F` 8y @F #/@/޹@F #d&@Md2" {d2@F` 8y @F #/@/޹@F #d&@Md2" {d2@F` 8y @F #/@/޹@F #d&@Md2" {d2@F` 8y @F #/ej<ɽe2@F #x >D9(Jn7272@F #lZDGٷ X'@&{<+UB'M&A\*zF #d2 @-T6TY,d2@F #! zIENDB`davical-1.1.1/docs/website/clients/ical4/002.png0000644000000000000000000033062511633117640016054 0ustar PNG  IHDRP_8 iCCPICC Profilexy<]}߳`dg,e)bKx2c-3A M}ι~hqE 1B6@CPābxHe@9PT B;J tjZvA4 0 V5a}a8a .7J> 7 !'"a!GDHRlA*?F"ryB`06c1\L*&SsӊyyǒXC-cӱe*ql;Cp8nKepY\x{> /A`A`B Ʉ\B)a?4Y,#3[W&F&CXBLLL%|bxBE|K’H6$_M*#ՐHwICd2Av$Jir,N. ˖m%BPXLJAy&i9ȅʉ6ȵ=ȇ//?*%Z`PPТP;U:A͢S_ij4{E+ݥ+j):)F++ST d$P*Q:ԫYY]Q9F@r[,r}*T^ʩڨrTVQ٩ERVVQRwUOV/QW0`khTitj ijhjhnyC 3kطyͧOt?ov@Bр@Ma"1T428'Ȏaf ) yjzyG| +qpzm^ıH$28*rx­ EFE݉6΍эIUpcF;G;uxN|]&!Nno_󯱿vpرZ[j炝vYڻ{{B[Q!WueDe>}UUU%vwߛ{@jWTSX3GW{ΰn#k]|z{o>1ᓌ;OQOC?4$5Wx^qӵ*?]X$Ȳ;;;3_uWO`NS,qA `0 #y#k0 A`AF[lJ}a&9Xoi0 A`_ R=@yV&PMM 4A `0 :eee''S))&!@Hڐ+_D A `0 8#=N!PZ>@0A `0 !BDmܙ|>Q||L0 A p"@.y >™fWLçPI?A `0Oȅȉȍ4ORH xΏ@  A `8(͏|, 3 1A `0c*EO4O1NS4Y`0 ApE\HMi?(E=MY&j0 AB'N5(A `0 +BANB&b0 A0C +'D3lLw A `0tx2D`ǎMBV0϶fH8p9M1@}6@ɵ64 c'Bߓib0c8hy:iA `88cq"?oìXw(dպɺgT}{rņk)2& `0:yLvv|Ț8n-2eS{x䩹٢n~qBaψ,T*!OH56niMI?'rKCfQl&ڰW!}HceĀ+0% ~D`_Ǟ6c%٦er֪Bu/_Y'$ii*նOom'R~ܶ}m7XJT?<|ʘS×=NzMEA }{Ruu<:9p?yVr)WVW)$PvVylEh?[o*Yod+&kl).|+n^z .|\eg̤gSm rǤIIzEy+7f͡kӍ?>𠲬{*d+ڿ䉫#XVAzunM ֵz}&ʿ&=?{{f\N6]Vn_Pߦ}.~Bf:petQ$^•Ra)(e;c?sQ\Iw6X^4OtDDNy >Xx.+0GA p#`!|qS\6z|m:k4yxˊ8}V|L+?tu0d:9SInĪY7ڕD-8~v'ȎUj܊,?%NzѮUmId`(,?X6?(1Nhּ797 u\䃢 |+UUTՁ}=ֳT;;cjZoSOXu2$$ 5)RݼRz_n^-< xصӧ% |Of|*da㯫{۽i9 gl]vԉnȪ>ҹm\瑺bE8fj^.<b\֏~B ǀ@C+M<ٲ.M|12b|Ϝ5~HEzϖ3dX/>LK+SsG hn/:V.؅l/ I/g$ip  P)͗fzSxCzPg c)?8շr1'˿ۢ_XU;/ŕ~c/?p=+|":co^8fk"X/[9-KIoMכ*9qE+o =35T۟rrɻy~yG5h0: :.١ZYt>Ht~iT7R^i#xW jYL MD"_qKk]ӕT Kn}gsOP~NE [{wlwwyՂi)VXt,_p,zF"i'r ugח.1Y6>??>,z̜6͞meQ [o"=k=m]o$,~>ÞsuݼbKJOfNRU%s\~N`>z=)r3;l APF@-:u dC =^SS?8`;w7h e fHwB&~ҘS^LuZ /ϒ]v9NYvRsFjg^XJ2Kiq*ȩd3_m8] '`pۈp!|ZER ZTJ~a%X28$[`bA[{m߾]kQVVmۈO>4kcM3 A_~zPEo1 -V^2 Y% S7$..+k+)aE~UT9?,﬐*cNgsڌA `8XH}VvvD8CB{BxIU\*(JA `7 7LQ 6A1_-i#d4qA `0tC)yФi+㙈N-OL )mA `0:!P̔8h"ɓڮSs Ar&LyZ A Y ,bF"-IJ5y<(øΧO7N7A `*@u9S ~$LxA$O@M.X A Q2Ѣ d(`cDQѾl6ݏ$+AøC$y~kbbAZ AG`=A>~5D)ճ3xVlܫWNӑIRt_%29 ģyd A p!|V\٣nhhbc Dh{=zteDMˡ T<δ0lmmAY P2qA `:_.D"v]]`ѣU*E( 5kJե^B,A2x\[[z\-N: A UT.Sp裇ȰaAGq3iCZޮ2-4iJ'A:NŔџ A+t+uڱsGBe̊K䈲#woQ S`XdϞ  n$D(IJ4E,j"A /t+ڳg 득/E HyyRPP [Ez,#tZ|m*]97 @gh;2uVCf'kimQ\",iũP NV^@&d! F_p8O,:s۱sea.hA@mM"9?1$LLD k0 "m "j hbqQ={H!,֎1קO_LQ"ݻwwk )w` "NRO0=HΠ9 bbZGBvkSm 1ٴMnX}AeoVe3’bY+}Jej7*/dw5]۔3n#(bX`ZeYba0MMHYO^=p.H}6}%op-O?kWT?i}y{q7VPO{w[N87Ƿ(*87tS[=\uˠ)Q?f?Ia]|P6Sֹ~1f6\J_R&WS޻>⩬8u#A"m؅B6,PBB ˜r %U}VTX$JzɎw -U:Q&ZNi *WU$Me</yi֣;vtx-ȯ9kΗ!60U=4W~ݛYk=fXܻBH{}H#sm ^#|+%%WSyt]gudm1YW/{J/LέwF-hZc8qa=٘ e"rEEԫKvnm{i@i왶J8yEp<}yV\'^z ۥɋ>5\N:k> 6:&ڲ}#]~9?nD$Xi6ݮŽ2`y0R?X47g@n9ˮN䬣{2ŜaKw3,NhOG9 1Y5v,#׿3В6r|T06Wij䑆Eay\ Dk'{m764-Mo Yb[*OO$~/䁧wXO%ĺ'z~T(|x3<暹 4UD\3.t wӓ7XcYp}ӥwaWz >S1pYw`ҎտơMlWy? `'Z[kռ*wL*)I{lwsx7poXl7E7,q‹ξ[KuvAO/+[CD:{[_q{}$"s]>|RK?6cDŽ>k5W=Em{//x%Z-ƌ ߻1уa} sqt:s=ٴpqBk --E勤=7D7,/άnUrj&rȅ>_\w'@[yף&xjUnӊG:B>xQn4wuޘ_q[ɿy0“wXvo=xL5{|Q}fW2͇VLs^e왔uk_ۖE5ޫBܲĮG1*GSu,v/e#[y؎ l3 3}~7:p;ν}7CD&ubu 1Ez ‘+ƚPEt8D DJ(viPqwgZ;i5ov\?.w ={0ވ5SӻߩV4צ׭55ysٝHλ]n}sOwb|\9g[Zuezć;[U%n{bcv$X)a>)֓%Uޒ:uvl,VaJjZ\B]~cmz<ν>Fcx')\>r}ፏw-Y__cm[luW.}rħ~O$>s.ZŅW-7-~kG쮮M*w%^([g-8zDp9 |hT@ߗ,/9?i`ᐱC}_Oȅm@J1qb 8(?kZǷl\MS⨱r31wuגĖ.(6O&Hlܲ>VtisEs+~K쵪F/=q+T99ᩐ&%uӬs/}'4X->!1Zex[s>/ dyϿ߸~ul4=˧_*BY{И-cwLbƹ5mY_|^Xkp# hRblXFY|A"a̟9ɾ|$Ώ&ZqoDt7)oS~3EI#˰_f?|k~@Cǿ }Ǎק_Zjˤo9'͓#vE?#xϟԮĴw@@6 IDAT88l.Qg~tZbQN7]H|[xډcZEo\zSJ4Ukiן[gx;R"55!UO_c%OƧ=8qYtU;dCr /hiiV{N}я3F9tŃ?'_;t3zh-ru.ѫQdؗJ;϶Lkі3F;\ļTeei@p;xr`e귯3-\yǎLx_ƌ\aӜ ,#Ǐ=F;jZ˩~VePkWD(w 4@ 0%i:}XtΡL۳+555 .k?[Y0pə&\+ ][IɄϟd$k^0!qPr@bT.?Ua/?RbMN><<|dI~LQ,% -$i}n(CLHa!C?PD^|āCݝD7|[?]$d(d;;sȅ_SP2:kGW*e## 7m5*bm嗨2msrnN9SϘ23:뇫W;W{R Spi:LK)pYٹ':j'2?AF3aW\gG6~e_c%.stă3Ϸ/ L  ݗV9RL!KY<C3r !Y(#N.G^zJmʟ{4+\#wJò}U/tzÔgY߽UMe߫A'W뺍@#w;eI J<^#L:P|ςsyB,uPR\"^۳w!PaO~P&Ri=[dśHae{fH5b!7K(I()oۂ#=3'ݶ2?LXv2j觤_RwNDԧ _$N.Ʒ *qZZZ6ns ^z崡/74r5_-|j?L 9NE_瑘~t7Epho@'J֜N, M1RRFZI82nDv[}l::m8$ ߀Su:?v2.`oX:w9J =YmmVϼ9LE;sR5~zjX|Оz;_մ̥`JGɵח'O3RqsLvG\߻lrɐdQjT>&K&c׿hREۿFTw@ej4-Eg,r1*31]\wD-~:%dWS$ړn#PD$//gT6H CqlqO;` IXp=6{"3꠽_i  j9N $+e%TWgϖG~:+Z 8_,ެs+U/|wƱ >TaM"Q Z4Pɫ@ ŠܨN~7Vkrrr2~pd |on kwk/]uT g8ӡkW&YоWf.Re?Y>+buγ>GYC%G~Ы8}ȳU|?`Z Kٺ meŊ C{񚷬M*: S$_q懪YMQֆe-cmu={)cpY8y3qȓp+7wXZ.l/FįMa|ڛ} x0%L:x&fYjItP3ojEtԿ/OhK1]5[!{zyd/fO@wc r\@|xy Y  L *#=^W?DF4i*}wtu+Ǟ]7 n})g|~oo?͝\?q1k$&a \qRW7[=KzVp@O)r]?e.}?4Ȩ$8e2 yJ/X&?*zC'UL N'u#Kgo*;=3H2ZɇS]량M231ӭwF(EwhuÓ]b7"!u{ȝW>y'X38q֎P>u:mNMtd68M!h(qlt[_8hHL WpHGr떕**qN :<|քy!r&yn)Ryi?RfuΉeYqb?r| L ={o=Q%_ތ2a.'U_ˤS7}~i\:ዡ:~֌P&.)B9p ʩh*~:`p'93 8^gQIM}}ޣ* Q~vZN~zPY9U]7~6dzn$QCĞ Ysݫs>P8FGOO|prشiSrٲÇ:(޽jT `>}PSul}N:y:_Y∾}85tAAKPÆʸ?+<ʝN\#6Җ'lG Bkv-)[҆Ģf)^Y1Ӡ\(~b%>bpΆ 6j-r$(1/TZfkWjm^X҃wGZ eK{2Blmoϋ㦔ܧ.5K*x'g0C_}L*g&6k`baQveNd"=cW+{(,jqKػbޑ7//~ΪIJr?%{n8=TXS\,q]2v^%jݳL?=%)3"X8K"ٿyd\J,⸄zڥCŸ=1b*fA񮕇o$ןvlbۓsExKm7]'OXv`rs!;^_f7HeJun/BvI }`km5jdwn} LbfdϤSjrSUUN)T{9ؘ<ޭ >P\Oo aʎăr$ojlT! aIyxyGgFxv` 8/$OĄ%QnB'~HI ÏIwO}Bo-o5gPQ!X&eQkd؅?sug^x‹3]JՕ^/Uwc//.J|]F`"Nv[}cjI<6ZS9B9}c'cJq)=1pa|8\ +-&^ˠ^ iXt[`O)ͻL:йK4 1ݧ&ZP=\U޽Ծyy!,i@ Z9@Ym]-*cyLrM &$~'"~DQRH2Vdh*fVei,-nn4=W_-42 DA `g@AΥ 8Pqz^e5PzDE_1DL(>m\xӷ|i|򭆆o%Y>wQHt)LAI, %U2񉠜[W*&$eMƃnXC[Aǃ `~&iB YbnY?Ԙ ӂYTdA `hmڎXײ9pQ,Z|ɴ/>ĹTް0aM+vDEdކ` ^v7\Tךsؕ`?.c@ GVc.&c"x@"]۱" @'dnTɼtD4e‰_NgZyXlD_P~^9)L|r]NTiD A JX'vi**q(Z p,OʅCdqϞI[ b܄Q3:}`͂'>9Hzt#ֲcrdөͰF 5^^M_}.K /D G%"QJ(d*T'"?ʺo[8d3=ht?ϳk=8Ix 4#W?z/AW%6̮xzRcR>P+YJ:l/'bJƢ6)KU32@"zj Vd:Mn_(}Z׊Q$GxrDkuofp]D$&ӴԀ@ZC4;LiMnUT|_~$Jߟ_d~e^ /+Af`I|\ 1jGZsAyH` t&Ioⱃn `8|vիWHn-yv,އ.,P+Tn] -GkR0D+tňSnqX⍍vN4DBٲg V<z^8]"!1 VɸB=(Rz+>LLAS?"O"oqFbFIy9WXD9Lum!G) Fi3Pg0#DBA&JIdդB3!Pkeg8<HI>}$bܲ% k<@Sh,ErW\Rx$Ry\ ->0*9ejA2L~SosjSoذ6ٶ-7 u/ңlͅy|_Јe' qeY!vߖ Z_NK7]gDtSxK6E[+Q>* K(qZib+c{N.)*.;e[;9~ޤzžZSeg]`?Q܊#N{-ᅮ}Giگ}<7E֬/?f]Œ0ViW+~ZiL,!f,)wykmd<:kRH_Z..{yY3+pߴ%׌ }obYc&}YA9OdYLV2*Ac A@(M=ǣqwĉ{M<}p*aI^%j >z ::Jv|0le"*NxD)j5 Ev۳ysG^TzM:|X#Zfa +l]Vf6SA"IiRq\'if7 _b0=Ӭ#HM/˻D]/Ȓ$NVb;+-LrVGͿOLXvGw'vU(ǟțKzOl|*;#j˫?d=Vj'o-R~k>?< e\ ^Ȇ2RF]crgU~wl+[~Ek>YWRccm|۱?ϝX4{&vgM:W֯U-_?/,rsS3nZR_%řݰXz{qcjяN;Ϟ8wzbUU!\XT[kݛσՕ2ck؃=,~s/8VfAcFۧJJz%8d% PX9֧Vei@%ld|c W ixrs^=`ugy`a&I75Z&[C(#|X_aAٔv/NƫFU8% x-JReqX0qStM{@yVϐO'u1!x߽1뺯NU"\[%f+ +sǀЦ-t tը=JC (c"؋=!eOt 1(aJڱ6 @G>:"Z*4 IDAT2۾\ZZae*-k:OibklhTKPۺW;hX:poY›y7s/+#eҭI,g]+5lӊDgX}]HhaZJ6!+xqO8(0A  uqUsOQmy 2j/N\}AHNӉZRnj f0<%pqJdC2r5gkUQ=v>}֍Z8.En7aLXN_8nr^\ru5Z \;"_zBKU7nbFLK˒zT3,>Eez/I?jg uF_<߶,̱e#U^]hcB7v;B-([)#!OyJJ4?&jL0 @ Ӂ]~vhʰCeJ9n؀2(_(Dq } -u)EVq/ljsQl2}ګ#e f5cIȮ]t۳aC))կZճe]unAG-";lp &NA/:s\^c 8GxLR|WqhP >vo]\/=YHm_?}) _7%`knI7&V(GZTHRRY'uMkV-3پQ^|i#V ođ5lw: ' ݿon kwʺ5ٕ .uX)T]J=wٴD݋^˕wNHȢ˭Y|6]a=vUrߜ Wd5+VX[)>EʃpyUl~rӎEG Uxo&ה /@َ گQ5kVh }򅶔_%wbgWY=\V}G>Jo?M[ f<|$ڞDNyN$~Ś|v~ix>P܂JK?5=2Gn NJR?$.Wx_$6JLf S ;F^e6ٲmD@8tv#:J~híKUI HNQL5`I%| (Gp8t#=?L^zJ*_.PDs: ɨԔ 2\W8P-SԞAy21a? qX8[ׇq7}(յ >y}HQ<ʐt-ޑb%}WTK !]E1 Lg 1pN$\ 5gȉI-hP̗>gd/q(G憽lH)i}fY0l ƖO! \tl d;tAF۷KwO$ʾ }Wj`}!g=A8Yh]}@j@핁G% u6kaq[x).!EEjdc;Z ?[ߤVXbt殳Xͷ07g <AQ#-!%/W0䊃#>1(yJ9wpN6r)Y{0qU*%ۯ!])i >6 )[p8AZ0,{RQLHat]XOɵ^0 ;:"nM^<5ʕv+|B1%xscF_ $I0Xq_w@O&``t ԺAQŠQ!pKe:nR`G+I*Pɦӥ@pGJRD)W;MkkRzyLCWZzO9`"PYCO(Xuq<`0 ]C(k9-fEHD <:DaNV磾W/w(+T_)R5jCE2 |.8 ض$ր7Po9V%ʼn`:Wu V$G~h".J(I1:Y[opScrS"-,3P( Z>*1:x`b^*$^hC`쎟'kZ&9H7&:NrMA}&Q$\bo%,1uMu-9iA `0?SSm*t*$T*`DJCixqb%r80]>ض$!I)N(Ca1.62Ƹ:JfM0Ǩ6U{A=i/X'ؑ|#i2v$h2i/?Sf0Wr(>P2+..vzꅝHS8Z}@nsB/f֍q2 8W `K8VaQP~հm[8*[e S8'=M;!vE05Ӑ䦩~10vB{<xeݨKڦkA]yJ6m,SJARv!!TǷH;$Q~PK\A `Ȇ@Nild)Z[[ o-X9*(w8)nP΁N Np$]>Sj4*好{r d/T́S%Y >j3('mZ R뼝ȞTS9(<ƤiWBD+e~TR%'s *7@RUחJ%|?^^gʒ̬y\U0E`~A0 l- cZb@+5qgĀbU*X7*J9/]9KJ-K_GC'Kl0 9I_WXs$d M c# [Xx78"07>1)0q@r}8׫i;)^%Za*> O dX ɤԄ-O"y^`I1r 38e$˪'`b|icMQRUC$)4ݶ-E*R-c7 "Dձ&w$Y\q.VʶCJa xYʤw-1Ӧc)noRmy2DT b& `0$PXX1V#XXFN8jM'..Qa$Ki{Pʠ`?3 D #@Cc ahO-| Ib4?LA_R| D<`QW\$T6>U 'CISO+9@@ quCJ))CH[fyKLGjc)eeBGSLGA9$@oL^L]7Re3ùzbY,(udI5A ÿ!MX<{i0(\[Ѝe;Ryr>!1Nfąal (\Ueö4(q]B8}(-2M;D Qσ'&)ĩ+B"JgV0[7NW@AzUG({dۢ^ Y:$YmJPLADbR7pDMjEfIWG UR[gފ҄\)P)ƸR*vmJk)xJ}MB93r=у*Iq!_ xࠂ壂TWJC>(րjUo1C16_aXvT+tJk 8Qҽ"J$j>]HBuRQoL2YI{tRR"5t 1œm$MJuix>Jvč;ܦ Imk&Z=k[ZUdɤ-gtbK W+NEח+d(Ky$P)fC +2t9 VئQޓ:8P6\D1G*NiCB<̦d[ZPEXkFq + >ڷU9*-z=$yG^fG$jA5WݺTsT5HRԙW$eܞdM()s Yz{."ѫ6Yr]7N,ݦn(%SM`=?B{DUNXd ,t@)ƣo GZ2C q5&t|PqP"默454JGH>l6!ylǹߴRTO`F?,F6芹UE5]A6+M3!"pPe~U4LEٺ+^c˙WTY !Y^Jמ &E2E@æ HZ432goDt;x73hpaw)C>R~P\ (Nσ&n0 0t hfdCأ/n5< rQ-i$jjKTcesNᑜ1˯ۭ)We1rh#I@$)Lhel@h]^1W* 맧T+!x:]/pTAm}KRՠ~Li"j%(6wLZ>fSв^,${ʩ+=P#j/h+X+l A@!@*?A Ӓ]q 0zDk+d8&!CWX[bSzLqEHzsHQ鹹Z2dZ֑,zzPwWp(NY~3~P~!1 .!@Ks>˸FmcfQ@HZ& <i›x k5T%`Lr5seJXI)O`Bg5^qտ4@fhyRt&AOOR*E|je^8蠖c'<2DId֥Nf5&JN5Sڟ6mJtH$Oq?RQ%a)) 鼷錞q9HJ$R[W$Gx3]97 #:M )pK(S-'5Rcpఒ_>RAt\X:56͌bK f|8PV'4#qls8$Qlf,:X#` TJ(Mᤀ&Gd}Tu`)?Unz|fd{z܃V< $SO!T>bVX@Ȧż$ b(kȱ1V,ɮ(0@l,\ $wIptnJ}uer5 00qA 'hV#;RDV\: Wr0ui'NZ0lF۷p`nA}Z B=Qs5l칉/ԛKV֮zq|ls:>f@;䃙fІkT,3=ݡS-nzc{{`iPW'{*_bw;.U@&(doapa1QS#=0GgbN{<%?$3zvXiQ `zDӘMHVB&#?):ѢI1dgr02KR.J* g(.\'5?qTbh+^P }0.I@ pmxIHbiH[J ' ]7?o,:C Lc9RҷDZB:#ōO .]wҌgdFr2g ϖws:];uN˝}ݲpSRÒA>if(O~gڴٳFGX |N6 v(bceki2n tgLn`to=O} (+}JY3Oj.w}Vz9qQY4cWeiT䃯10j2tnYoVE=7x2&{"xQy G@ا%96I>WsX dkؗfvZN7#obW RC9)}Slڴ cWXJJZ S G8ƥTUUJAEtCX$]GƶTcLiӀUZ6btzX9lYq&\5Um/#E@2I@jM9Tc䃡I2azKeK4 M6m%׶l|MDsE95l~0B`SSl֧<k:gΝM5m#H,*oNԹlK2aL/8LG!fM3^gqs$ IaF\Q^+b&]hS(Qyco;ut3,0h';$of#-CR4i¾pP^rʙHY&@3 9# 8$ڸkz̅|$᧵i6!k~wI6oތ_Q+IEEN۵@ J:z4_WW#]h+bzٰa\y1~A65F!8cT*ȎˁH#[^&ceK/H׋\|xT /?F){!$\oΓeI:<:04}RēC?^e R O{_Z&r˘]tHC hWT-]uӲCPivYt/9U$);(T #鳺o ?*m>CoN?:չIr3uYh>?a:9!t߼jNp.{9kqt>4Yr.{vzɬvqQ-=8i߾},ro^Y[֟JK#[FFNe2+0eKC.#"#9rBH|\ -mތUKe%G1g%K} Myln@'8#.fE3'.'F o0鲥iS<ȩdDW>ˑr6kDkq~.RF ݡH1Nje[=Snl3ޘ[gkjة˝ ƶt3) Bg}z0*8}c;$,^gb +'G➍ .r~ؙt-g^}p~쮉'm0r|g5jϐ=qWor(Fy2vEh ׭p[_ѰSBS6QR ­>[荣y\zv^7B.ᄏpIb͑5[kVɴ"gq|sqt;OF5qZd׌7}4yevvƅN[A(A^K g1 2)M~Kq];!t]BO4ᦣksxf^%w7eѧl?~_%7?pţbxR)Cjz^sw-Λusý'L/TҥYk g:3~[fzJ`Mμ铜s [&Zj[O 8ͳ5,[Z;ktfϓ;구8Ig_pgh*\Nc ?hθ|~w_[66ofst{}$իi0ǩCNq_/ɭb *"M]f/fת%/ʝ^t+32}Vw곎t|uӗ{JkNU =hcy| #=CbyѲ_?i#Po4`Xe}mb9꒫ґV+Iw߹k~y{!Ҧtʉ*!:EY,9GN ' Gv>T&gsMNNy(OXf2*(2S/!G+ 3fE4#b>AWϊͿ{Rq#oZ 'cC6}#4 .fhC~cHgx 1τA9@Q E]AѮTU,୫ Z(vƩ6\Q-HJqM;u+DdmWX m 0aUyi|G|K4` wO;KK.Wi4cVDJK`^*ॅK)M vʅO>Qūe}V,zun6+P6 ]@S\LF#E=OUO"KMY"ep:V!t*2Ws n5w:?.8rCJ"Z#o> 4kGexm0 GDAS!J[%k#GOw{1꩗F45{BEy ۱Г*c)~du!im9iDkVQh 0Aq]q Ok/ skey9]: \J{l. [!Ο|9#s|T㖐\w?MRfUƜ$t 28%(5 Kˏ^Gd9a+(we8@ A9>(/߽={xNϮWxaOE0:rU焯U rc<:|fV~997Momv4]o0arpvS=uO mٲE'hbN ; +8);NtA?;ƈ5$]}xhе^/&MIot& J&\?TUlt[h~SAk=BE k{4 S ~h:(AQݺK˭ itS˧Y?]Q 1'{Eo<D9%6ĪbU[=9@ˏp^d,2B :n#B4}ضrIqfC#*0X<1>]_th(ߜՎYk$Hpxf(\Vm6"3qQYzvJʗcBěiO _Ԍmb8(UÕ9.3Ƹ2oR 7%Ri1:"sdt\yq~zDج?X Oe6+t$= l忰4K4Ӻŭ $sw6Yf1e~2ӶF5x+*\7I͠cë'9 J2Љ<$q+)nSpQ! Qz)(nc@Mmx0AP@WÙ.e{ڤ0 PN= ]5As|)5IF6X\Mhl?2H$٥!׏b(b4/ MAƉ A bRQ[0/ 8 1h!Q Af pOiFÎM%x8TZ*7-nrh2:T`R2@駌AG\z!W5Q^rѭG~}3w!7>2zc-XQ6Tn(=%Ҫ2%hJ;:`#C8^ ;*oo.}TJEe[6 G)R0P~t8wݧ:_gKenח:X${*x9jU̜)|<ЄcK`:_+pڂ]vCUR\2)ЊMgGN%G>z} GMI@HU1UNŽBcϒk^)Y=u.p}s\=16ʣvߑa}| òqWńON%U0H.4BN{0/ uv*px&nPĩ05y~V9UaP~oh:pt_`Rڮu:Fa_ 1[PFǮ1Ff?@艷mu_ɱtwd~LI8{toj/-0W'xR&3q /LqO@ѸʜTN4qyp )_2y F?*Gݼ;-_VN\)Y雫OҶeq<{Ƨz+xAƻr-TTHIu"^IֳvO#88ys4JaL,mS\l]%j t}w;kdB] ]<]X"pZut-sȈx0Z_<ޝ3$Gޮ^-_aϥ2~ĐP.}C'vs×t@D{e-*WPDž:q- !?HPFDKdP>d 9^7; ϨQ3tT~ztlDž W~*׸ySQ3Oo0J]ؚĈ5s< r3GH#"׮ЙNAInj̺6pHd⧧9:&ق 8]@f5% NHȧ.7~3:#F:v)7%<#4ZxR3O Ggg8+9'+6"\p9?ov륰G>mِkF_Sw]|ovf{hZ*C2;wcSJc2'mbnױGdˆ E$AyOmU+;"m8Oݹ6`6C#2lʊSa?c3L>n/<4{E|1ʹfJ*mʞ#+{o.ǫ2;U{yxzE訹(zEVke;Oj0СC]URw,Ɔd*]ǎwY zi5 d^&Q0IYeji/MPMĴK H/ĴdHҰ 4ImP--[|=s%_vg{<<Ӳw/-޳'MH?TiMyޭNE"$hk&c[5tcQS%cmtQyr/(ʢAL; IDAT6Zg1Z**"dKt3Vָ05ɗbEF6ؿFk| (:s8mU,aP~X}- ['ЮJmku:4*۶ax+6h.ʭn۲O-4fu 2jJ^s 6b@E̒KRyu+KI&1BTV=4LPzef#`?ZQEJ,+#n?9n]wcE%eh(l: e5}vwC-$V^-;vܰ+Ԯ]3@o>4oc*/Ǵ:Bͅ|Eϔsv>C[SJ7 7Ǔ>Ǿ' ~z8sW")MZI4"l*`>k a| v;b dP #Dop&5=["_v| ێ|'M+`\)purtϨθ~۞GÅGᄾ_`hJM`3^<9%a|,.&LČDJ',EiZ gy0OȺsgٶCR%ЂaMRvBT-UQ.ݾ3q:wXͣ\}BeʦM<`MGROˇr+,d[87l>'>3{>qV%%FiIA1uOz WAs~Xڟ~Mg]&pc }&uEx(`H4R$d^0Tz,5S<ƪ@c>P YPDž ti.}.|(NV4+'3{@ӻ'BĨS#s\=mÉ!mHQyd2% O&~TٕyyN3@N9 $ ^w1͙Ƕс"0Vi (ѕW&'fL6wT3#> v,eztlL Xlwo.,Fĥ\&@196&V"d' x1< 'v1ӄ<ɀ:I$3Z,C|FUTiNQS~љ2rb6;& 6-65RMFrG}B*aجH88my?K+; ބ!PX2D ՌhB^\r9 $2HcNsF3f0SqŞ􆡙,զL(`HpoAdkeRgib,}[F 2^09QSR6oRm ^Q*~X+Zh9:A٠m)E !ۖZ2Zi#.^jWE"/syX/n >Tqv00](|*:_޽&2d}HU 0imwԗ14<ǿ_вx&'d<)@7^DMOi֘x9Ԙr9 $@#(56day{O.,soY|T,ɁMe|`MqYw&PgSaF0"0CX|tṶ_Y'Ijtn+h ~\m 萶~Uuk{7SyK:h|#"m7oKDOցɬ&]R:*@ sZ|4`V ޴ζ&G]T;/tD׊x՘ KArgG%'l}.->Ҋ&@N9 H JLJ1NcC`iiA!1 w-yσO” 4ei2«Տ0yt/lWh_xQ&IX?@?I l2qpF`U|Ҿ} tm[T5I̿Au$;78-4A8]Gm >\q?[cW:5KndZ jѝy"aN[S0.n2 U;>@AAoԇ`2jsI=-ɨ)Q:UErʐi!O"`fYhekN9 $@(t: =3oĐס<}6NmXnȄyY W"Ri?lNMiB:tj-Qn^A W '4Oul1/KKloWE3Y\}Kv͋+@" m[6b(@QARK$*=jB36@،t-7)ˋ_/ $S-+( ?1wC\x@<:1c* c~] kg;F-SM3 hUScVMm끼M%ZSϬYrI 'o(V[ o^0N$]< ڕ=,vh,Vņ+#KAen-#xyfնC2ʔ/ M̦u ( ] Wѣ-Zw)lx%PE8CGaHsD\el/WA@`.! ݯoG+fB6[AQe ֵ O8(|E;ҕF)8NanK'Fi4 49gEr2S~簫d\\N9 $M@JkuD&מ4'؏Ǡ&,i6jO ڶ=Rht~IØ~aRKvֵNzyf*~8N/ 0+ jQJwF Jzt- ak kb9^VjaeiZުN'Kt&Od LMJNxE5L3BZN5˖Vt>Y3,9< e8ʝSx] yfǴ9Y>rK _c @~H;TJ{^vܼ5z<@$z+!JmH>硩Dr#Wܩt;pYϧ:YG2"L/գ&^d< oG_UcV0a`I0%aOޏ}?"֝-{ A$%J@B-NՅŁ]sFRW2+HU`PS:b ?~Hv2?XWݸ~ l'YGܖ t6ܙ{g^묟3;r0!y0̳@둾>\9N9 $%\3u+B|.bAJ3Rh|B ߐtIuq>:x@VŮޛa\]A?U^jS }ȤpU90Zl U%%~s ^nn#[jpxKx~ƈZlcjK"*T"MZHi.c @D; >yd+o^-̀>f.q p<I| x*e+t^4 ̅נ?v'a_*P9E@rI>zfR$_nY$ߙ&]<B ڵ1$Mm`@&{8pO.e=u~iib#ʍ'[WJM-xZe}zKǦp"@77SLMX "> @l1֏DH߯70&Ԏ>( Ų}pփ8Xw"8A|()`f6S/@^L cutV#WAy: ulR=\>nc,"?Gx8,Ʉƌ⸹… ŋ6mCGuIN@s:-_2jZNrQ}c.pH)ߪ羻+/ZIɬISHB-ӀLu-[Mӊ㼶oZQOƙr8bsa>->mS-AJdgrFibAı@;dGDTFxh7 )ˇԻ >&^K־lr]ܭ>SOjkkC'pтZpxN@Ï&[1Qb~x2{|zҚP4s|V!3x+d#DpH@ʈo_@tJL_Ϟ3E"NIj٫lT_KBN[V-S{n]u?(LKu X!l>1}"HT]C98Η!_@1R ƙxQ Rj:*q58%E}$$9 #w =TԈZ(ʁ:%]u]`SSS1y;]U= C׶HXwޫ,մ*k/m )Z&]szs΃\tO_gP||E)@pa(,_ ud>q(F5 ?Tqq^5< vfٲ*lS(Jfe]tn AD&g( ֣y˯֌l2'fBL>4KS:\UעNv"Qhq, ]?eߪ% !n +.3ywa c6Q[7p Ny1YSK,6jW\h}N3zM.î!=5%=?{$zz39 v7HOPZ$DQ/H/W\SN>/}ljZ/`d(gf~cf懺 AWhCο X!؜:H +"E?TOI+0uS! _/smU`py] -N&@ixPn&hz)S u^'-捋ׁFSejc8/T4OBaf@LuNktW>R{%Asr%X{h7xos o 6lmJ;<< 8T}_T Yg'f.6~+!yv< σ+Or<2>0ҼH6~{g@쵆MdmNQ^+x|T>~Mr z'sz˯΀m:=KM򳏕;xBQ: QwuVfrJE ];ڴ긌7ڰ`{ѥ$BBQ:Wi/m2d Ə &Y?>OfÂ6_|Lj+2SHc1gɖ6 |W &z@ :$ufۖ/Urhےeߐ|eʝpYgh5E2;MHnP>7;K)m[?֔j@ r&(y$(߀lRК%wQ$LjdВbBCKFɇHYT]=,̚6H> t尮45ً_*3prKJtrOffŁ~N{ƉLw'ݗICӹ߭)\/C ϔ݇A_1"s#0@35JP IDATB*;X׸62 sWsܱ HPM=2=Kv@^m &': (ɹRKT<-#wJ޾9S-xc`W/wΚ!NP]  w2CPokb$?;rӅ)'˵vOS̙3Ex q=5|}*NSbF?I}SSueWB;_^|j?e'ȾV?ZEFxA#^蕩* ZӀ|y\Ɵkm\V@To2d"[ Y+陝 &c4HY31٧RiJzᒫ2_LKP`(vt Q_@ ?jZgMakA˟.7iɱ}̻=x䴳Z842Zy~8P5HCȀs.*g 4nX7F~WPſWDzit"]FɝG\usc~$f+/}{iyLw򝲯-?ɧڧ}s>#^hsOȀ}矔=PzA:KvRU MRk'iD2[ t;%| u;|#2 1h^fO_ 3\_vB`c4Q5qq)a,vDBq'^y#b(YjDKV潩F-#ʄ|]URa&'۬/6o.a+ [`*MF0r`_ߑG~;K?=WbI7>MaJ(κv,9R3cPഅWɟnu2q:84\_8wp۲e$TT\@]ztL|0])qhh \{ёN dlʙ,}lsԔopSZZ)))'B,/ 1\~|gvLF%35X>kSÖR m1VIrxWhnĭGʏwf;#;wtUUU5=ǿ_KR嗿Rw"'N%UG^aE"/,jecWӶ>N߫ O7uSDy{lʶT92_%͔\u0=mA-q`{2O aDr[{u)H%4.A7?8{͌Eiճ|LZ[! :s'r4#R GJvODOHq&Aa R7(²0KB-Kv?Ax,}02mz^B:7ǦeNYxm`LjǨrq0q2)TaCm6-\(;6n>(R-صe1Ro+yc)w{DZ5pV^6.-?;t-q^ýCtOg44[BkE#mGZ1'}{n~me,x1OwK`ȋ}p)4o$>bCO;']>1K̅cM?7t䭡?8wƜi%oQ}nag|Ԕ4!l0(Tcc-;x}Xϗoʅrqɭ##gBzk;UúR#E~hlA9؍Jꖾ(u^qrzVrO+cGo39\^ G7z<|"wmH#-SUU*%i- _iq(aLKP*?զ1 QX ' mFPOp\RA8 q |RT8xerWPz{Y<eeuJ*8tD\ڽF<>dY2/PV3 >Ӊ"6,5uIhJtx;W3Y[(bUb +H bRBPH4]姟J1w@E0wHҢࡧ^ zĆHgx1"8HM"#xfy-Kλd/3u a krߒOOXūTg=NF9r=BpH> ~7Y})FA 哾2/7W>aڎZxm}aft9ƒM7hqz?H>_:IO$ * h'Vnn= >'>/-`nk%%Ҧo_~ U4pHn'Z <2&ٵCWiuB"mlف`YpApï^cs/^gyKd;z v!e-ի=d7L^ra&~q0I8- .:HP7>$ qD+ApOi#GXԿ4Jڼ:cslOyXv J@b@㏱ >Q[*bm؍M}Mq_}X^{8FQKހZgpkH_,3V;pySrxz͞ȩ48DW(ja dN@;, E׭ԩlvC@'0WEcoy-'gm[JH;r%3\~%*H ]1ǹztGgIܚ#+W念. ظ|t9V|2ӥ3an~Ցv9m+o:CFԻ =*B pa9H ֛ AWyKsn+MQȕpyM'8Ϙz+BW0,m#sęИrL>&4m<͟O]gHtӡ!G' nq*@G^-嵱prF 7_%ܔWTmTIaWHk5DPMV\JMQeR,-]S-@eD^Mʟ_͏t\~PmzO:W6fɿO޺9J(.'v3eoԃ]ykA;S{Sdl]DNc#f$)'|<pɹqo5 G%%{U?;G9]Vl?(Kq?q=^ :'a});#mcuu`c>ͩ}.| T-ID}>zfyC'v&oȣ@Opb׻q_~^.+f&B'IpYcxK>M[w?\ᇺRZl Yå~K۲osF!t}O=E5:ɉW̞#[? HÚ7&pd-ٳjYjzuf 6.ϗgBU5 !&,%NYnb*h~ \nMY4R %%BوJEU-lJ mM͗L09aZ,He(:'n `]]VMӪPp增>؜c&暈6<}fTPZԇtM7bUR"%R f7D<ܧOn)˃-`UqzDD^QiWf񈫨 Z'TFAI>?Ƙ`=ro'9Y>~#$a:\µZ]|\YR OPa\x' %Am]lV#/X m*FhKW鮆yNǎSH_X2 YƬb\7I m6IoPA>CAE4'ܻ3)nV F;Cc $eӈ@yǐЮ+w AN|ELvD^ZDp 2eQm_]0,XXiQ/DxkJoAR<PdS%X &fK`/!1O ) (Q*f!]~CҹL0x~|c_)`H"`;:Vjc-q3{kDXJ"6jOc%,$㻑б8e-&㕻.sj=d kI;MAC %}L<.> '}:R\UQ/'by?[o^c1$='A0uhTs9@Ok56^ǔ gx:xNq ʋ'f ΢-6Ft}j^}U~&p`̣gZ#k潦Fz-M ڕIiW0L?}8% ~Unc}0e3(Dm 4[\ה<;&>YF- e~Ӂk,ԫ#PIQ)w{_&#gdp>}ZB]^} A?t{@ߜI"6el_*m7-[eohL-T^MX`%ME#]HgVU 3tsi;WoY<p{R:V!Ӽ6f)RTfLsEK.>BV="m/&,/C9=9JbPV%dMe_|K8TٴS.D%gPB&v.%JQMn*4Qv)q?rDvۍED6j/鵿[w/JͶBhԍܕ+W]vŌl<"|I)icqQ$ A`{iT8ك-Υ;\9Y쟾LW"xv:s+7*0xgV5$YÄVfg]=:!'j(<'VT2^8mߟD]x33b|~yz_rrhG\rO8@LT?qLu;-w݊>bƍs3~fvG5j8Bb%pMHJUmQ' 堋 "';NU\{m"/XWئ쁝˹c9l5SyfR:._C^&p'7.X(͝DٝǦ(T1&9jL{,7_pBB:>`Bmj\GE -DO௄ix4mu>lQX͈vsύ=Νwi`ٚ-6?'!n|?;u=p>wnwTN3;Bk3 O:updo+ ͧ4pCCt{5R g)8B^x ʧqӲPIZs僥Q,/y"ٌsҺX$._dN>Xf RpT8P#p_X <&}gXyU !W( j ;L i'CP IDATo{+]f[~l.\ le81J)ˁ6RdzĽҹ hCepA ӹjQalJor=׉' 5QL4bg A=M~r&[[Ž`UxyaɆ3Yo"6"5&^V,FNt# eGJal!>p^w_SÔIM|_dMmY{_9wI(q6,Z av&SٚtutLgg]@@u2I u?ڐxE` [ GuXqv,xL"PLfi48ɤ2[~V/Q36(q,-Q/Y`#jZ%;^FG@}|P®$in*ʑI 'oPZMn&6m*9 [gҤ1Gmْ6GjВuTaتnc]fNPdc B*)O\ȁ 0Vq!U0:#ޱ~8i9UܘahVq7R}}% x'BS:;(M͟$@N& 4XUWA%]R O>I+0pcҕU݄` ᨕzLqmg\;,sFԢl܀36Ke؄Z?m&] T.Fظt cٰ |%j!LAT&~ĸ-r *!yBem$MN9 K $q)zAvRUoŝHY^Y-K+| J[5\"JI6`f5| k0qk^L uM{j˷{?Ͽh( Sk~ACnNQnemSm2r)kn/ɑ^0h%$@NV dP"x8u*֦9ZmeJMB-R*4͂)wRp2rurg1>V K*I"97 0c bKS\kmrU*VŰTT@~) SJrq8I$eA:"QBpJJ<>KgZY.߶BX p] 0S"J,Y[oC ]d_0[Gӧ"ֻآ[h[K_/21 &Һ g%Vg6bƘ?^sZKJ䇑t/T+VqGV_X|%]Emhv͛[WJ*X!Rp ',|Rx/d Ks188`)SHo1` 6~F6ܢ 70 [4 !1U+OU|]V՚QAr9$]/*U}qoו]tMN<X-aMڊj.'KYI4.X>poR_O=8z>p?u(J8t)[R&\'.M>_|O?x =zrssU?Ob@7E}Ȏi[3a(Ay-fiߔq)U3FKO,"m|K1H~ki[4^N| ;Nax|t3J[?v;vJ~bAJfz(99M6r~F2krŜEOĘYuq.x*SGeeI}."O46b])Brw,v| lΤ}GҫT5op9Pz}G <>%2vf>qԦmk©qqqԊ?ŏEj~/[+@ K~#0@E>SeBPF\fu ;aZ&vt{Tlh)X o8;;e8K"[qI+uכzI.&8M'O"1] OL}Q0f(޷&y,OەѡJ z*>uz}ۡ?u: L>EL^KR,x9q3=h N\;UGeYYHҶP5|v^(_0K(9Z'W: H <@\evQ)>dh[ ((jP_oHվ՚n 3O*@>+ %=` s3XRYg)'T1)ot1UT`0*--UJ]ҕ+Wu"Tj_I>jYk%zmNԕ-_~HJ:Q_*_ƚ2{mtiJwx̧9bjh'*J#aS u޴hűR('+_>҅v4^&uу;u2JD TvT~E~IU14iΫ?m @-X33\`?r=ڏ_tvuCMM 9kKwv1+_QT+%&^9q_H` M lW(0=aR#G.=Ox z`Wv(A39@Uayo7(tTd%,,:d(999taU҄e8E`N$N q:h2굏_Xi#$>{xri{9ٗzHSG4l TY}%Hc_LxiL /nI=<'=h( ܀[菉;* ?8Ո>EÒK$m_, nOt8/f[4Oj;uJv2\T_Aǿȧ"3v%ګQAX~(8H?1orH ])_‡^J)7rT`s0OB2JJ Ӭ9@eEi )E<n~+5Sc堿i&:qD'X0Hc $$ys|VCçWJl[t Ң̞|=ksp&+ yf=/({? rRؒ)R K:" cYV?|f#D 6jtPID؋~h YM@C6ywRȭ&cj|5=f[HgXK%IOx!]gIHBHį)q eF'ich[AsΑ@RMj(g;ytK)q(km8`u誛n6={(d'w ^?H.]J . (xs_vń%C_UtM}8?? e>zUc/nꬢmj>ʳDPU?XS鑹+YsJ/A*`]<}m; n7GeUBmy/R: kFUVFRpyg2κw]7!.!I-%־j)G֧Xwtd6|zy3-(S/h a;t^DEgg@y@VOJVϊ?cIel(`Æ.ԩ&H 9ꨯ3x^'x%xj|br uj *:@' \M]ao|WJ>0wm*cÆZLI~2}Dc'( gY'ݭgƄi,4kzˏ2o {g;sj5s"mR%[DkHZ}cfӝ(RN{TZ.?.ǾA>HkhsӨR|z{NkYD(0}p)/)g{={]9A]6 ג6"ď}ONC~kPQ ` R ĩ0CW!JA=Bj>S>mۖPe\&Phn J 5lwl qR7V;3"%%EՁi!~.ͧ2 HHc1dדL1 00 #܄הnT LR\We"'@.lMF AZ>s<t—D^ N׬ byF#TL l5|(/C^ғB 'U}/PJOF8A,c_mDH [(Qt 1q FrzÛ[nd7PM U][6hU4  8  dU P%U]4t0 QpTqٙJt% v)|dpHYD;Q-n7)$'z%<~b:B @rP~=O|1acv&p&U*(&P@- rONAv›8H|ZrNՅb^>ނ൞7h FoƁ{jR@ՄKAg̈́wjĄPj n690!0H, (T! xvVIIR^L{ď67L8)x f湞2@m7ܵ@C=J`%8dY_bʫ系08m$8<"Xi&s\mZ<'C԰&V(然A;9`?s IDATnA J-@ja,k*Aτ \J>g%rU|Mgvq*xbA5DאDh}h#0MjNHOĴTe7~%!ۣy]X+$Aۊ6li1x h4h+[f 6q[t:q۰iH+&Aj±~W"sV/egO@mO6C+6TpSp7|Rp q9P8 =(ch6*B%i``Qh8h;|nkj%%"A[nԽ{wJLLTaxq%ft=z9ˊXĶ`4.dYۉ` {Ċ5<-?ΚLKᬽEb)xXO9 | ⣰\AcbEa{n(?_F./ {_R34gE~`}ԫW/رm.P޽{ jӦMty`a!!/5g*"LUsZZz#,V*K#<)!UTݕ4^R$C)= %q]~ 9WUi*GQB/F 8`@N{ 6mwM۷50iBRUFF}嗵Q8Pu\ӠL @Q8B$욖 sb5MӒみ' 􊳐BG}Q/ƙDQKfn'$LH^@JO"v0TpRھ}۰]L;g;NIqH&0:~&:u ɇMc;V{78)6j5]wut-ԩ\a@k__4kmyP"\C%ax]_V1٣ٗ0A&89Aٮ}QێtUyYS}~gotM|+kSNm۶UuBF@?]ѮQތ<#J)oĂR ():!ciOudp#&CvhC MKfU7܁〡8{ٟ?A0VU}d\%YNcO@9ffRv3yfٹniQn6ef<+ư]8=_.ZUHk,9I=@<()VE.64 Fz\qĪGOT? 42occ.Y}sUҞ00Q^\d4v7h7[iZ:>YHҋa/= I4ӦoɔJyp$^B:k͔ЏhJ^XGJ Ύ2*shPq;;~z ]{y?]/m/sҽZǩə5MIH*Ge;U%OԜ?5@aCW_}u@J%jNQ"uncouJK;wZvyax=E{j>,]Јn@еgt*`)Sե;.xlA<݌]y+gʌsȋE?޽4h U1ZdQfFl.wũy CJ=۶mu֭*wC,_Ko kA-1ATiP6m7*N5)<)uUa$115-߁4!" @Ge]}"pb;"(&mwT T.oemE+Uj0rE08@qĎ/ <ʮT sTyIg> ,lQa7sBTƒv7ls@ǵ%"/,:I)&aj(?EHXY 7~BzOC.הfw@%22*!'[AӕJU6ov/kM_@_tkZAoԽ(|=Nx)O%46''GUI*B+qGiESHmOu zy*oM[R.#ض]cQt%Ib^~ִ{<@Y hnM1&m {ZC:+Fh!YbI)8:; 򮽮}U||+BX"?wK*VɃ0RBY %*T&'8Ix[cXIC*wIܕ!?aQCՠU{`@& ;S 0gl3ڮSWɓjN }@_/sn@ǵ!w/ak~C+W440j6qa$/®I%'v}R *jKMK3mer}Gp;sP/G&/l1Q $ xm qPH"IFQhs=,A/D:qItiK%} RSjgP&7 1}|[]g65bZE%4:bC@_}}E<9P3a@BBa@aav)TUTTy,@M~"ȕU,2U+-W4W*k_R&J-.QN\S*^^jpDq6z$HR+ȅASyުJ' ?kC}^.\Dm۶j]z&(<%I08L;a8DA}GU a8UJThHUWl[]UewPWsR)# @ g@7s\II 61&%:\;<4ɪTwt Hވ]PfU%<$|=ݝIgxLkOd%#NH']!yPX)9_.˯+},tc!ϖ:sX!zOô DɔFJ[b-c`D S'hErX#xOPniS"E%Ht)Wx"OkQ`<#W)~@ (wWX'nUSvQ94D!LUr[*)rS/絏@9>XH:WjM2QLLIQ&FR){L7ǫnӘP Tjj]TT K4eee$ q4] UkTQ3J*_|\uN͈$Pvop4~("21|;8Ӽ]g :vP6*_pTl9I7K ʥ("{M kg侇~{ nuQVH4Ye``q'v `Ї?*da=(ĘPJLm%8́ P퉆_MXn9!*(*#܆@l(+R+(t(WYaFj&,6mDwTO}ƃBPQ…?>&ZKkY7b xD/~z::O!?W~Rl0biaQRivI[n[0XO~cOžsRn& Qr5AO#Zİ8"ㄟEiQܼ3̤ 6111`L 0,{?![LQΰ8 @ 6hHUk=m=JWk]\Z ~v.ڵǒ  D<$m9B DNOnӖfHbyy%{<>zbhyGK+SSA7dzmQZBmKQV=1Z:i8A.{F!}FiK$%2K^2{2hbj w8qR[jz(X]WN_r!2h5q߿>#3Ϗ437M=Lɚ?QJ4C^S~xk4vQ]ZҟV a IDATJN2AZ+ZkeEt+Y֍ (_ }yX2[ҏ!gY_1JIב2k'.^?9X)r)-~rNd׏v?^^FO\iƐ $=׋{m8A'l!^qϫBG͠O4+۷ӌбum 'h_Ӏvj>˨Ðt!'_gzo26ӓ'SEk(}=4OkZ:m&w y3 df*Ѡ fzgx\k:}u֊9ۯЀ$=?@C&>Ki'h`kp$Ҋ('fzO i^/n :s^)6;B+y Vb^k=9N?< GސNk8šgӚ{QYt6s" I~6yyUUɏt|E{,E|(f*T? X6>ޔFx]Nw~r޿!FMoo͡2?4~*HL'f?.HYKo13՞7KNDlG .4@6J!L{+WUa\;Dß^\1W靵&C4=4^01kDu'-v)Wd*s&Sn؝<doo;W,m(?};SJ_IlڔEʅӕ7$7GMW2qқ\*&_[ҙn91ɵ m,̃?oTTYtTw# 2nj95'r—3 OX&z,F5'ׯ=Lv+u -ט3>&Ji *4 ai&1aS\J_ _чSh'i@DxnG.h/nڑ:vH&onVM'GKڏP'_©ickjշ#/gu4=#qCt j3~;Dz&u /?`34_M'.n5W.y幮<#9x'iFV@8َG"Hu ny&D~A̠yuybI>xt[|:U(iJBe"#+Uh KxNdu9|Xig_0AI)-PN9OOu"rP&^z _ܨ2_,rQ`PZ{ƾUp5O_VDGzZXo{TS驏JO`},㸧6IȷK7;ƽ.IRz[ ~K~e4]E5ڣ}ٛ3Z x'@{qJ'0?yv2Mj(~hRI9WЈ/Ӑ}"mJkIE븀; LE,{tcWhK e=UZ|f.&^B?gZ6.ڿ!tsW`5f24s6{ѭI2.sYOg>IcS_S%E8iy=p=qF2^տ9h]W`3`yepTE ϐ>7ZM=LeTY+nbH?zE(௅cWzzWyl4(b@5(qF'W c䭏R18=w ]JL۶vUKq"{hRYRRڸ<-X"+₳w.7O (/4WJW L:_"><,=^qPTv㤗˗,1L*p q"RM?J:~:vA .&r9wt8$OHzA&wɭrS&UFR^,,Xf}qmՐ2ĒaP;u:^7Ѵgޡ̼"*ˤ4}Qi0l 25s6\lQb4D S7lC\L??lᵭM3嗗RSim pnK÷;B!{W.BOxm<Nl<޳ؓKe .S^VzuR~* l];҆g9qd&+Ѵ5֦AS]Uq];1EfӞ;N4vڷ&[){[ߧ,@{EKJ3/hl:ˇeXD?fESҪ-uHAyb>~Z0a>̼-ɧwЉˮUGE^:SŹ(r'xzPIeeb-4/{8Sm5Yڻ(:YN@ s(/LQj,_ӣ|{yyN3^B3{C _ loXOz_,'" ݙ'^bLg.Ͽf?@~_oW>2VcͦØPL /cc<yõo:k{DpD;Ѩ>]֭:w͒^Jwu/-Nns`禎i)r=H_zPmEٮIMM5"YyxC* CvD2+o36([g ډtzcGqih$c YG)m8r4z9aj숞^kjx\b0l>5Mx~ӓܰyCUX=i7'g]ĂY@[ÌK~Cu]+,Lv=ewΡ5sƫ4:vLy8XmY'-|NBz~HG^ZLn?53@r1E>u4?gK |y ]S7ь9EKqT#+@w%ҳʠ)LWC2r-={wDCEU/3c չBm*((fDM^>H HP| .W1c$!%e\Tg?wFnLvHQJ'FbZ"EQ΄NmA\M%>Be\r )84'wۋ?L0,fY(wSYX:TJj/8e.*"ΎܧP>7"okTuڱx[{K2 ..ԧnrCƏP,E^P$%x(5+YD FGgЦ4^r\\3sHJ!*+>!ʸ-ī-3QXtayU9cxK*LKnLhuk޵7T|ڲ8Gҵ]ҽ]8"Ho/ȗ.~RJv-Eal9}4T;:8ڴi3_ \?+_W;U-ٳ^ 7xB Y'>^JK̼$ (&. >|TW uA P2ED3 p~8}C(qz*KxKٳn,.! ɓo^Nk*pz},GRǢtf Ʒy⽩,aax&Hhfa5{^2*((P_.XCVҠU3ਂ?f ;tgq@:q)t. )[ds@+Dr Đ0$G9RM`1˝/яw6E҈ +hCuLqi;ˉV*v0-Q;׃x]zxކ9@A1{X@FF}g~NrHkt3ʗ\L6ySHS Ýݎ_ԊzjZ}df QL!JTtR=cireS8DgO4P=ĩԟ5\uDj?wx>`#e,l{ mML;^>((r@AB3++V^siN;W`q@pKCמUMs@}[M`IKy/'i@C $Oxjh֎+qMA? T_?gՅNFBJ!KBCMJXy7DR!o)r+9nEOZP5:R##k6,ABm dU 0k,x/"K.dWcc'^s=:tQ3S[\KG? >ޭWjlxzyEqH)q@]^TXx(rn18:*SXmy1?Jچ1d|=k wt yIlK *xָ 1qi xP3LÇ? 2gy<H_:Oi⹦ч :.owڣޒo] <f0$=\N!:B-@VQveNٱR2oYr8P2q4LcpY%G ^@a'a>rrrhŊ~O)0}  >J$ڼ, t 4maqd qڜ?\| çh&V91|^A_-xGF_A1Lp'%<3fi ^^d=@\b'H3Џ Z٫@@J| Dte @|ZH xmYU5}5*~؞5ӪPI3mo0t@Q`@Í 4]H>ڀiCx)Mnr 1? 4sT$u KyiDfpoCt #YR @qa"&q;Y <}4i>Ɀ:LGՖ4&1^ (ժBY_/m‡Y؍{ݗ[?/2kJ (&L OTVѣGSF1Jd $H|~Z;?Ӂ"5xd;SX^MuAN9n/g 8%βxsn IDATt"YqZ/IqI4O6G[Wq|AoDs@suȈob 'ЈKR#(o[Ω4p@DXHsm jB(+\--hhFb p(:7u˺05Q.}Fa4 !yB+l=-]Vv'!a0`΀'PnG튔1vĥJ9v<4͏x'Y/OoL}(4 ~Q^0Lq:dhsO#$zLCҪI0pO"k|gaWAAU [#Oe? NL5yoHЮ@DJ*X.EE`ɷ KhkH]˔xCyΑu@Hxy\qinÆ :'` (ߟJ+:ӳGu-g 1ʰ ?a []!vC VCqD |G|E_ 1kܸr )>d*Ld1D5:Tqh}8@pm $P8?2Lpq'C׃iw@IH)DxZccpؚi4>8 hٞuN?ʉA["=@SUN4-D\ヸHΆ֤ KjL,"+}d_)AʕȘpC :\6WM^h K6LidWVw⥤4r1qiǎޢ+lԨQ^wx/((P/+ƅ\З IOL*qJd0W:TG/R!m3iHxJ_ |;\ /w}緂@ڸqF;h*,,t0e=B?mU[a(Qc⾡-!ls `IA|ܹk맧 O(BʣrxҺj.ϨB%u YXӅZ:Ly\ׄ6E SSNb `Hm /rR < ʬϞ=`I_Qӛ>i@ 0/?wH ㎧OI`I[?%M@ 0~zp-ov)k @5m3OwӜ1c :BlkNP+ˤV" )Tot+9eT_kDDj#0 JdAI׺Jp'#G-a6+S]ü=i@;QE[ٸM]Uc@vAh]p 4j2#x@KՃB} xJIOgEET1WL)-G͡ظҦDIAϝw{Ph /c5=zCL~+}BYewկ3}>Mno")H/~;R&!DF:wnw~zׇfmn7U tP6Z.g eWyy}ޫ<҈@A ƴMc6I{n;bW{%Ďt;!i;&& $c ITURy߾wwUۻ֮ooιg>7 ''xhHv_L7DyK!RXp=>~0~6ѵ@%bH'v߿6%}g?OTTlXq*'8^T$lt'xE:5ih 0Ɂ?sg)MϤ@"~CU}_]rb';Qd[PN wgOrѽ?[jumozvpOkp }v?;>q>7.. J>Z^1hꍴT<u$^HM4s!ptD*GJ"ڙwx?YokEmϋߩHo$;K-_[yCvL̷y)^O?y> gJv2qѭ7N<;|+—ϴwݜ~w348f>ϵߔn\)ZTK;,J)-E3mtCʗ֋VNX$/_$\W0Y"Fr&ݚ/}U mڢ>=?n 7i ]rXfS%}_}吗r{gݳFF.-k#K[w_{|cc\>gǴscv|vv-C@5jqxԯ@?Dlxث/Zs-yx xq^ǷJh* tyb=.鋊S/m X]n'~%o8O HTٸ*G{;yΟKle7ZfmFǖq^p8V* R/9ߚ-vr]-VāץKV6r^Qq"-\-UN~E#!W,C/伝<+VD~ݶ9/#SS rDQFUc|_$LcTy~];_畵ɫs2',[nm;=2w8K#"++ G1XrLx)oחrՑT@ЧrOze(|{KOX۬u߱Y+ŧ9J}[rQT8*3u R0YUAR_5FkE _;y>yl{}Ey;#G^3uwxCeu3se+A6tJ IX_ ,#$f?_;-^I)L>=sPTER9<{مgFG1=f.^@TE*T5צgS-m/im۶;Ce|[2P "/ij W'@ՕLXʎ~#3A@EeSo~q+]ԇGv8Wl]U5z%[~v[cErm8V,#6s[Kl._|jٰlޖΧ5ۛt/s,p>w~>˟ D YXy5ĭܗ>*:mb I~b(l'1ŷCѧz eZ~TT;!o6x}+i|V|_v0Z8 W"O|xvo/%O5 i'j)뙯N7|T Ń{]Yz >u:!86V>Nm6v&(#M3*~E~yUd)~cE9Gm \9,,N~kYJ<_:ju \~ O~iy੽v8f|6u 8 RJ%KܦH2P֟ڟnXAq׮].\ \Urҏ=Ϸe)~o͡/^tkNv1≖xy|J[ EJmWy)+|[r#*BVeU$#_<_\?n(ũV}ۗxP*uӗF.>8eὼ ʂZy @ip \2J(BݺcO~c,_vGq㱱LYltkN;N1Վ)vϏS_jPr>%}AZczhcbik7O;t٘_|/\zz7L,mڼCRS\me>692 v{̾<'O=X?AnUm/>S $oY-Hk1$}@hiA0|ق(ݕȹK2ڌY4i 0 4ѧRR[Tzlb~E:|cy~][y `Iy;CWU|oɋ(~{m6 /d5g=j@1U2 zݺmCZNk>SO7}dzd^޲yıI;OuTVoJ0|ThK+CGWǓoH ={t9`ItKwY9.[4.6bW][s>>?^?mo5OGm%l[#֧Lyzj6:~#9D;z٥//Y菾zZܒZr&{Žlev۵ScՕZtHŕ͟a5lx2q-~P-_LvׯkNja/W ^&;Qd&*=Ojzoѥx~>%pW<HWyG>W>俌>(ږ(|r/e9d^}i ͱ;ߔYOlsbO,wE%U+\;;ɑKN^lo|kaV4x2^ 8 v_!mnU&3h̼\3e:ҭ:2X?',}و1/:\s)S$Sox"_:>O6]|y9&qA7+QeNvI796mїOթG;z7lYq}כO7ӽ_69gn;q{Iΰ5<ݶ+@1)>t\8!X҃ܡb=U*EGE6x}_QV*lrbg~E}|޶]×㾷e{Y}K>:£=␎x%m>zDZn_n]#5<(c05sïXMQ'8t#vx~iwe/#x*LU @+;P\Ο?(T/ oxCSj=_W_b/ҒEܗ^L9(]t4.>KL̷yq;{d"^GR.S><{c]cCϓ/!~c*>vO~<ѧq:b\x*P[@ly}*ёCpއӽ׷2@sDY yLܷO4>|T'>:_?g#;"FF>o4FڶᲤɑgtKk僿6b4'Sp濸{x};&o {o^uS@q}e|{ o$'^SUrQ>m-0Qo/-s@PT˞v\y99q]&H6q|%(vL7]֗@Q C/TUqȷ *] E"~(K[~O_TЗ"9<5~md>p9]R ]s_hln!_\c}ͭm 3__'~8VO>ktn}?Y֬ר}8 }9uՆ dvLu\k1z}|I_9mt4x^tؙhb.)l"^NJ^, ??(sQS@stw!ukkL(. tO~C|W | >7.AFmO^ziۣ-R\(&=9{ڻng:?Sٲm|cbDfiocu^0̮S^(X9~'qfy@isa<Iņ!]x煾WSLE>dAE!حD_')K*CNtz}cx}jxA9 :F'G([OTݩ-/m]Mo@ EmW?:W5>TE6_ۛCK&]JU^hKץ-= *ґd B/*o#WW,ɟ5%.ϳ9Dy{|?~|iDȩ'flu[mTGm۩sM䣋ŷPcXҥK @0ZbQuՎx[q62cE?Ev~5 k۶m+5S1?"ZW^Bl>8VGP~щ!ʗt%qTɧm$S>ٱ/[ϫk ǎLA!uȳTP H-XhO>}1hcľFcxYPrvC]:kC5t1wa)>ؘzb1sU47/fs϶oZlޱnk ZpˣÞudLcJTS++XnʆZɋ/Z'עQ|A[hW:$/' gW9ǝ[g<>u:>/Kt?c\<O|S||£HOO_c"C}Q,d TzP/ޯTۨqԯW7 ;:$;:w)]΅s.n='lv.5675͇Fc{؎gg&%cmf+PCޭvZk5'laX^j̟/wNl^:lomoY\7/\#эJӠ d|&"J8s\L_ EyM){=}[,(Sm|~KNʯId&~@nNqQ!6UU<12T[|&>z~l1ЍI(Qx>*MSn'E:^6Eq(qnto ߪ|KRR|mh@7ߺpd=;s"22rzGcΞrEiǑ.tUZgs{ 4|̀ܮ-= rk$WGPLrcK`1_m ϧPUCCcp F l"D{[(bk*x3g v%")8f(xUKGd(E6>fc` z*1і/<ڲ=+JJ+x+Ƨ[T/ GU> veؕfW*)5}xb{~Tv\q~KcAAcqb6[tgx{0 ,Qn>ќ[)6s;fڭ3Y{\{M1fԹ5ں_UP|8.RN2X Xt4cݢ><:>*-uOӅ?C655eb0=x`GՅJGc(x} \/TRU>4Oyɏ(Fz.v҇GW,PCǾ.:§ȟiI|jnU_GoA2ojFW[`@83qewrɩlqi1q\3 .r1 ¯aƖ=q bT|d*{{*߱oB8*VQl(җ^_^찖WW_b!E_ySd/pNʧ|ĴNf@->Eab Uj'.TuAHh^ =-~Z ?{zɥml\x@[܆N<vc fFA8'x?kl޽a*0jғPt"]bRԖ&*Sz^U{AtFsD:N Ti옧yj"DSRR"Jura䥊oQϣ;;gX~*)))k&]@Pr1Lxѓ(࠮hA >I%c<08^Pb[sܢӃ߲#F<_}&)KD\_۷Dixh@bo?wlPhK#CWvɷl$T>H{k>q=UWjՒ UVT1*Kj+geTI._#=QTRRR;J.`G;]]E (nkUZUE/X>ch6@B=%@Jѭ<"O|5cA#G711(}*bKOK 1*ϴ5G*yׇO9Ej#x*v^Ϸ'*{tʊ+{Z1VMTU?sH8$P>EESPTvzAuW}%S1N׏m"̻y "/^ 7P0iF6Pr,?ѧR#gdqa, +H]||'ر#ŸF\p,+ʳ:~ЗPdtok"UY#Yn\~փ sW?1S2Qׯ9sJz)))f@qEUpBJ*}[A$"[|TLƶe![ d/ r@!o<H`b o1%:%v 0>avbØ%b8~ v_05vŘrJOb]xC&GȾL䱿>Gl9b/s(cI&_E{20|^v3>c%٤ (_<}i.P.na@ɟ'eumbuAe`y9& c_X1&: z]39Wޑ븊[rQd*JR'fttbW-|qLT~}c5߳x(<?+&)))+@-bɅ_< <qv+) 6qhSDc =a.Ͷ2bm ;q Юlؑ X >(^]"#&Ӧ Pdц* H }@}B FG,i.āćF_EmƤ@eEv}cZW'~?NS i{\*xȮgu:_'k+^LM@%bԅlp.b\乨Cg rƏ.8b}/+kҢv?|4P z XpK Hb܉J>2@;>A:8 M!jh+ďj4z< NL|l El/1K!I(q˸S.Oi~JJCyƅ8z]yIG}.%0ͯt(>NKmվlXR?e e e`-2P mvx\ [Bo,\ѩ(ok"^?2tŇ_ >qRǷ z 9PS[: L|1L qzV;w8d(GcSoKWї s%b-8??'U+yP\h~_7pC.cbCӷ0?N?>uښ-KQ9P䳌mWuz6r/} _,m [ƦoqPc\qˎ6v_ʎ/+˸`|E/On1De? ] ||hjC$_./NHHX T([ \ܐC,",(,,Ҁ ôZϘ5@H(hwIA?TPQůIѦU>~lpK GxW갧K@gl|}|S)ġ]%|XOE. IU?SiЧHˤ#:LEgi~yh*Тg|cml?7nؾG?:qؤ222PZYXu JbbXKxJ(1p`,1&K< |PXOsDOgOw@ц>:aN/D>[ X/A~GJ]E yc\Aŧxq?y=xEm|D+ ]lBœ\FJͭ@s2l?])/婝222ZP1+  vEA}|m⶙Yr0.2`kvlP[ob@gLo"nV ~߂XA? PD|2*1GμJqKJ, %VCW1M?^F[~J^\c\+s+%ÎJ~5TE`¢. }t飇_tlZJ Ċ.#()WP|]%| <on*eԏ[Eq2rFlHU}yc _ 6sۊ|yHK.:U~R;e e e`2P h1gP.zEU6,{~-gFFhJO`tNK`@Ca ~GØ̘̗9(.=n XİOҧ_P"$mx*>j I_Ta7ՏO6K&ZbE.@2YOaEenEG&`X/xćLEP*1( ,鶝lBOK2J]G J|&^@@PaEI 1]F _xe P0j; ` ; @@PX<=OІ׆ IDATGA PCW`//PE[E[EO*>3>"xU1_|OAOFrC_~<-*ҧʓʨ#{|(WDž>K~QşecJͯ(pl4P_q$+#~=oSw:?I22pmg`AS XlAkkBEM C= n}R* JzKe ; d)UK=UK<.8(""DT,>v'l)ӎyd#(~|[*uăr9ˉJnՖl8_*>4_ks)Kk|6e*~ /Ecz7I?e ez_?*il$~o <C#s` !lbEG/tYxK-]xſbWKhW>@*Dy{嫈G<*Ƚ.mmm|ҍrc:ħ^>SF` A0FXbf,l|*`X*aN6TȜTk^/ *Uqݑ.{U,'n|ы^]-1e F9}{oK'ѷz8҇6ldi7L{-}OIHHx2P X\T`/.N@ mR`X`vcG!im|2.%?}%/ u Ӧ` s>.Wu|cAhBq=%vx}>Lj_>/r-psc㯱sE>u-('>~a,IO_qW;HCMHHR3P Zmx &_DP,,Ҁ* 2T:,hgghF>:zm;|`X'fى9.cЇz=d^_cIO2jQ ?l;TȥnIK7œO>n (fw@ckg_`cbyMɟh짎Fi~O:)))W[*-<@@ik` .̀cǎE_PP,,(5< 2=>DE^:vS]`^ȰWe~< y<$n|y2rNS1cE2.0v/);X^~nd񺃶$9hkmxZI 1`7@p9 7 4Ƅǂ.]%dx*|tU4"?җ\2hL<=mTס-ǭ6fG 8@9 $;w{ےK@K>>b,/Ibc aҾ|cǑ/ҫU~lkj$KHHHPѶֶI6Y,4S dɖ[jHU[s/(AqELmAn($Of7 UBJ~W@``-]xNs&Rl!o̻3*\̢X|ۮ:U1nl[_Kuc'y@@F@%EB˂o/킰SB;"f  m-|SɼHiܦ H?&a~%`7JT~G+i @Eq0x};֋^ƾ (7[ƊSG^Ki~O:))))M҂Eo/" bǏ(mxpԆ#^.t5FɣnjWIBm|["4Qx*:6nxۊ/ް} ɧh컎FI# \J: 0! ʂ)Qr񏫀>UjlQ-&Rˏјe<->TSW"vI0;y ǯx;:J i'I~⁜B?n{ڪkT%@O<v#r$xTW,X.wX4%qRj)/e}_`syI픁3]7 @ bxb Ǐˢ |Av`O"'Xr/mbȀj nwPHivpBx^I* (*4<ţ8tik3_-9܊|n]ݧn~866'}qby>LW:uA/w~% owM:I],2eP8< lEU?SS_r+!W,1~nUG"&_ǧvXyX =;& P1G[5Iі69X}V2EWɤ#:lkXn@@Fˀ 9JłBIYQ*P>r(mي/)^éc[*zc7qU I` o1S]F}&* hW)2=@+Nt̎^֎Q,|FWK_hmAQv\lox ؑdDLk]+;all _5|%[;_)([Xmi5 y%M䲰xR‡Z楓v A*Qy^I/0bw * S-}%_Ey*i] y֮R>.(O6.h#^Om(9c=5w}f9[imu>T&.xW\<߷Sē/>є+?jEj ;v,x$,`7(MUg<PnT_YoWEs@m>у)&'=>\[.-j_2"ߢ_V^ކݱtlvn<cS'RRRR T(-Pq`@ɠZ5e`Ix{zAh3lhKΜhS4|X=yȀ^W~t TX?fj \P,.,,,<`PT d6w7vIP=`HJL_1vz^q(k|8rP.IA/*Pɏ!'[Lqvdd't/:C`E6|z_:yO_AVv&Ʋ"}߷%I'e))))nP,VHnPCa8p %nE#n?~n%x0bWI,9h.e˷Er҆o5 lh(APb 'ȰO-@#tѓh'ѕ\|ЦHmCmݜ(y%$^L~dmv^,+ke"06E~/e e e e`d@(` Aem- bb驧 X2v`i >%^ҦXG 'y)6}Ay==^}C_|ھ*HFjC) ;L<6`W"Cu%yq_zury^6~NHHHPiX|Ym)'xbn݂D HGYUOjK/Tosw>9=|Bы%yH7D*}+J×/ާےVɤM T(.U)޳`Z>hx}`HIOPċ`(ŴHG"clwwhr-.x!&|@v/y~󶴭vKcѦȿģ/yRhLmo *QT~#֏E);RRRRR2P XLmgG&>mQ-'+VԠ/^yݲ6uqZ $}b!6G](:NsYE_}t+崻C$._r /x{Z%zy22222 @ 1ؿ9QOᅚ,l ߢ%-8@Swv.{q+6ڹ^|є@%bc/ƒܚ d72].,,ExV =b-8||tC@BlЗ2i>Fϸ9t7u6}|yۈdm+QƫYd7MKHHHHX T(`KO"jK7M42'"py~qJ5YQp 1x 6*\W?)tAU>lȁl.mtrZ SښCebwä綧5}$;>lHHHHHx3PXH e rmCy= c$gr^L9@Rxfx@F(:PɈ~nՏ}z4vwLəm rrT-trm|x/ O~hu<ߖ:U{l4^)))))W{* + =@]'Oy睆 ȩk Bó8$ ZaK'1n૯Xv>1B㊽l$\|Qt)qz4dt ˜t]o5m|%~@@@@F@% H8Q,V ><R_DACe}S*;(+;SRRR pFů%ZVkJjAsEiw: #\B@|?Niy=_%k0|}k=:>99YËV5O7>IzșG hs}#Gu]Vk*)e{ԩ'O^padvvgRc#ڵku]xxY.fC IDAT_懿{ilBӠ/Vkk؏=Ӟع۷fnݼNgd@ИVYӿo4ҕ"]%Ib=۲Nu^/w-RM>4"kqω̾od/MohyZ8dpdϓ]ַ6s[o5?|Xߡ$]W4g裏fB[}sg HV+S|lwvq^s$ٮ۲-wnӲYe_ ,eO?s,{şzOncSgʾ})V筆]V3g(3 J ?<_*_vzo'u[-FsЇ>_w-1(9<9sر=yO7Skyq^x衇6ٮ^l]ݠ]wʩQߟ>|xDB:U b/fO/:] >wR p*_m 934ж }{ڶ'?_y466QTrDh;1s=JdQ)su|g;NZ^3Qѹ0t>SO͞F yne>1}wȞCsg D]*5d$>T8>[F >?>fV^6g "wѲ(^t(Ӿ({~G7?}[y=;% ֧Y5F9T-#e_O6ϏV(8:tŧ/l06n|9-O~rߔy⛝n/>v e/d56W~~7ޗ{a#<·e*+^>MN ɐ\ە=3{Vqw3 _(k"<##tMAHN&C;#Abv<[!vnmm=pfo^j5Y`qK_pdi,/ n7n#s"Vͥ|~{JT9>]o1.dW.^l~͖6gx6h̶OG:s] -n(=}v{yohnuޘOF㯹w"HָBqH!Ov/1;kծPԟJF_'dUUɆƦhī{ì&.Bycp"2^!d/g?xxs}c s/.|W,nBɾ/¹K=Se״_0?OOÊm%/.}{4K?;g7/Lf'?:7_jgTogN=n죦k6?z]ُ_&U>bvod? w@g~-k-FڡN-ǭlM{=yu @)CN2䞷>[i~nn.wysg7&ɍk+.E~..Sٿ9Od?"_GlC.VvC b_U|_?Nn) ؁lmٲEn p>={vtKS[CyN5+ ۪љo>#w5s-=w6FKY˾wr^mo# SߚW'/]n `εy{l |TY|Ν;7zС%F]4 <붰y2Pټ] nmf[F DuFgh nI9Y/q<\oc=lva{0_.ٟ7\V39xة}.Y٩lrƁg#o_.T%lXX/hPĶQjV!pBą.}2FÃ6WeDOlQ*~WvϙyMg ٗݯe?/ݛ?xw߿fOeo˾|;.??9&7&?p_~}gmFva{/d_@rg׿`'i@R0M+sLJg᳗&lKE<;I('uWj\3c^y9T,1)'[}F_:D[zr:߹7v7grߚk>;=~C oѩ[vu@Oe'gځ󢥷|m\Fmo~>؛ꍓ6Pzy>w9g+EFC? ?<ع-WI]fޣؙiw`ͼhåUH~,د?nuAť`loU_le䗳> /x<{u?ٻe{f!+ّ^a1{/{^7Yߚ/e+dogg٥od{}eo{u=(~'LsfYp틦4|iè޶Oojq qJuzHSDUtfM {vɷ7.6DZ5&>#stblu|V]+{G^r8>O_ݟOl׾MBcs?웿d_->ۿ?g~<{[=~$ؒ~ {O4-q9P WHJD^x K eųPvAh[̂qoCd6gH;#'Se6{[hJ˹죿eyS[?rio:X<3pv3${;~<;/fwtWS_'^y'/zD;f%fv,_wk4Z։Yc& >>/ @i@Z^\o J/J8;Xv+.۳7/[a١h=nf'޹GIQy0à< |Ft(]cMN69gMNtss >F jU Bs3󮺤k#Fȱ<(%x@<5;̆>vAV-sK똞Y:Z*Á8f,nkFP 疈n B2 Wgz#729#h>}'lڔ1B6DiA&TȌ?A<,:Fղ/ 'ˤ0h 4uOɋXଙRIŴs"kǮ9aDVA9iϐ'}:nh\S_QpF:C/oًy0Q/+p F =qq瀏W9\k,9:* <UЎ|Se$~ӥ)C!6E"5%_TZaI8ue&[.q6܂Ɠn2c tS۟5&9?l)Kst s#&̄;1VS֝]04{;o?x袆#cAx~Y[2װ"}x27 L-^vDtPV…gw1}@N%RZN;pgzbl K&eZq|9\L(n^\7YV&A_wL;4Ky/D+̴6G?l!.lt``~!nj: [5XIO1t 4Ed3w=?aSd$&a;89 nL>WL~``6 K8$lp&8DvIXl &0Ejh(v=HT`'r6x@@xz% 3f% .Șs4Nm aFcd]E+eWːYmqK#n}`ᘰAGq!-\z_)GH N*n[757ބ w;qsj<}PQSҧ%+i@w+a_sL?K%^4=F,Vt uX[(KR%zN8ߺ M>!/|ԗ)SH+̃j@[ƌw  #,1aY)TtXY+eͦ͒wJm|Y9O>g!~E$";Y#1V^nAhKq@-(C0/j}ȇUj/ːy&>mT]>]#-O ?9GWK 8 70|`.;,#㺍/'>%a1;V(# L#U̞yrisɬeqf+ߛ}|wmr? wc{6fwK?-vE'}P=tzjҔq]?4:F13.Zdӫ\Zpw7s9YƄۢ-VOW ϋFK:*SYSK:Yz*€ق',GW GuyeRT@+3 3)B^--M/PЫ޿&K8glw˔,~wWy+n}_G. N*~2]9em2i{֝a49:YF`x~B>Ƿmǻ{`:`#̤T8p0&#KT &g˗WΛ7 PXYLAwM\Ad.pUOŦ-"!T)B]g[$2yr%QRPvq(Fŋw͙3o#O+ M @+a/w'0#uT)w0:+$\W͖]͏|X+'٘(nPA h7QN<&GPÆ8C8-C}M|our#>2r 5c1Kh`לۍ&;sK=_%ޡm^sZ &!s dfiK#8\yI\Pj_&xU~ćF[Z4֧e˖dJʋɆD/S qta}"!4KUPREU9!Ì$'0ph93=zt#*|op#xF dƱWPjT[Dn<P.'ZDX0'BTܛ" Jwhtl|v$]t,\0D+Tr%iK,"%K2-\ܷz (e̙#I DfϼhAǻ7I2'8 ><Ku/{C z0G S`:ɔZZ ܟ]%#7+4ظ[űi$HhkB] p o! A 887BTK>dXhy›9bcq`Cx*rLM[nAP>XS+IDAT|gq_oM{۶mUիW[N`o .DU|۷9n8G<а~M6(LC@? v1 #l\Ey•NO94ߘp0_u!;X[wkv|'L$ПSU`%i`#'lH6n|mmm^4Vx/^aHcS Vccc jaxy83'*CHywa8oZNt+=XRN)4C酗J ۿ={8->Qxu`t\ZN[N;Y:˷7P:*1 + l9`Ӄ>/?ƥ}6d~`&hL9E9Kv2>?1bώCkvfuc09Juݱ,'SmV$q?`zY`eI۴l#`b,nT@FO~6$S`êB39f@. -6Esfggr/yrt/4=늝=;X3(t-_RꔀPJ@ (AC((|Sunbird / Lightning (Mozilla Calendar)

The Mozilla Calendar project offers their calendar under two different names: Sunbird is a standalone calendar application, and Lightning is a Thunderbird extension. The two are essentially the same, as far as DAViCal is concerned, and these instructions should work for either of them.

  1. Select "New Calendar" from the "File" menu.
  2. Choose "On the Network" (click "Next")
     
  3. Choose a format of "CalDAV" and enter a URL like: "http://calendar.example.net/caldav.php/username/calendar/" (click "Next")
     
  4. Give the calendar an appropriate display name, and choose a colour for events on this calendar. (click "Next")
     
  5. click "Finish"

Caveats

At version 0.3 the Mozilla calendar does not automatically refresh the calendar view, so if someone else has added a meeting you will have to manually refresh the view to see that.

It is early days yet for the Mozilla calendar in it's current incarnation so no doubt there are other quirks with Mozilla's handling of CalDAV too, so perhaps take a look at their bugzilla.

As at version 0.3, you should be aware of this bug with empty CalDAV calendars which can be confusing. Add your calendar, create an event and then re-start the program before saying that things are not working!

davical-1.1.1/docs/website/clients/Evolution-icon.png0000644000000000000000000000436610705234304017465 0ustar PNG  IHDRxB| ]PLTE>`pBl~ig]fsfͫɦәĿֹúǛé߇״߳߫ pHYs  tIME 8s IDATx\v8uӚ]dTЪiJj\9y55F3]/wG& !wqW"&(.ϗ_!~!K}23R)}x(}%Ws\pEOʃ]yJ:H-C.(񐠒D2!mx>OY$" 4A;$ "B"l_ ,)e2].C$]-# @R`R7v.ZxItyH nr H]$AB){A}gɬ!1DxESDku?jG! .#[i\F ReUU\mwZAt+>ܟs$0ϙnu PeQ!жn!])ϛQ3qc<?pn>:1aZI0otO\Cz [)Z"h3/KSm> ]2<Hl`2$[ iAYӨ3#N}E/ /Ӥ,DY;@!$;B F]5.ɘ2VBQ GŅ>~uU[Ztj@%hxܕnO w[*EJeUs&zFc̣n`1@ccϞL03hfSFHT1sߟ/ w0A~`$,,b*,l꺪x}?8+#>| =P!3D]i7f?̍:SFNNN0tJhż؄|LuOI~uT&Pp7JA8'V(9%J]Jk */P!,9p\41A )~,Z|U1Wjy ~} n.o``\^8fl bo$˧Oo_>}E:6Z)sք_jgB1x(^3ᐂ?xX<[X|I|')#B>忾oF :WJ@iĬ[j0;)pG;stmzwC9&ȇN`&I RpnQN269 qOMQGχU&v q GK̯Sodn&lz= DeVќ[s`T*73Pjk.6Qg? %C N$LN2Q7c$8MGm'17#fNY1C @~F:LA9OTO1eT^,ch5G=~0/"Ɍz8Y%z xNzhU'tֱ_/>@M0pϫ7ŹX\Eu(P,w6<bbq=l)uiQ Zʏ9t)ăz i~+N |qrOr/;K:+R sG v C^\=B-ђO8G=^z|h_V"^Wk<WuywTM[5^U}jih.[hyqb@K4mqN8G=.iuUP'+/8۵VD7mNTq4j4Zax ޯυݴ55?1vư^lcOO?J*y>/J )?Q@4Q0B\>$jb$F]@1ǔ44ޟD2FLwz+H057Ac&xWֈIENDB`davical-1.1.1/docs/website/clients/iPhone-1.png0000644000000000000000000023160511633117640016135 0ustar PNG  IHDR@[#3LIDATx]|UGvm[w/h@7wwwwwwwwwwa# , Iw=枑;3o9gν1ҲK&fz&?O&&)cW~wzr}I`R\ߕA 䔖K]`O baxמiFtN`mazG'(`s-þs9`%Y)^--}d]C"[CgcNh$;'v1}b\ʌ*7xGa܆^kGg-]6  bT6Vסt eUv{$Fu  &v&7tw-1(1̅|Fjd&ƸXȈ**iAɦ[vAch+8we ^xXxB҇}L<󬁙L.Z0s}QR[ jzZ ,Xw {ǎ:zif[3-۷{sRյ(3 h˶9N%-} ]_)3[ _Qpf[[W> oe2^Ƶ[37iۘAƧ^͍)lCuA_UAU˯o_^oVRK+ TN޾(駟F$nn<@24?1>wgx衇9C0?2;/w"./((&dh'(G-}}n]e,7,X7Ccھ=+7ѓy5"{onFGWw٩w :|H+wI__=WH>+Po14ɍyQg^~cǎ?~G=r!?{q1⊺1bTv4wuɘU2 ̅2&&n.hXX'#Gnڴi˖-;w*)+߳g5m]ֿܹ񇍻uvoܸq˖UmQ(&Nyev1ZՂr*=NJsT~k}պmm Ì̈́rXPFrF(a$7ꗇeB/92ImKv{q^7FBJeu<;bܵw%e$aC>'<>-ŗ_!>X \nÿoXa7o,(,vw%ulncϹǦM?zJrjZ#RED;*K@Jv5mD/TN pCBg@GZVZLLgJkLES+AYSkC{[s' mmʡ5G]FƷ e[~&W&t"S=ﷳ_fRAU !pImYYRRR0Q1%HCYQSWܶhshl{Q#Y`Ә:Զޜڶu1ʦ֞ scX{ᵭhE%du.EŅDE 17nlnZm}ڷ~駟NHb]_^2o MM]8FFF^^BI(m_ ֳhy&{CBsKIk>ڳ7*9 YHPZ7S՟>R17Ejj訫QUUUasҲBRg)U&Oq6F3zs: c~egl`{_&Nuª:CvYP^#w}yʫ`%nfhl_U.^MlJ%Q\\VI#te5 0]FFgxt#j[ZHzV0ѭm1u`=c0XN<4y$c1O2uNqu-m7/+T6<|76#S+~^2rH,6a {14U!,%{!s gMΞ/_޶}{|FNU[׹vLH,kGƼ:>~ĀhĢ1(ih!KVYqxAX`^ dK[\ݽԜ=sp I&`qZƪcƮ-jk+4SZx˲6`&#G%*&qAqiXMCS`pHrzfI]EEeѫ=v1Jk,kjǴzrxXKVU3c=ZBAUyum\A ؂szrcYպ5m] ]CAUP&s" IK.+n_D$W`ya£08f⋽c[U Lc1-preKyufn?c60uV#xM*$5W^ ANYeiMyrVLRsL޵Ū[>8ҿs!qVP( %$q|5up ګq, SZn`j*+9;~YYY UR0<"BHPfffuըUV^\&[Y#|GQQjJv#[n6-um95mm2zf%e cJy5)]NG՚7]Bpf5RTRRvWU(!!)5)6!AZJĉѱql7y8󟵴()_٥eM#Lܦ^qGq Ck㇙Ù ^4bv4@MTX^!**g}՗JJJpL2K+Ҋ O򒓻[ !}DVt}BA:kiiizT̮^(Zÿ?X XSTZYNBIriiE>DZZh0(މoZʚ̌̌HK/LJI\Z!RPB_RZ]US_ dV.)Gu46vt7w+:1*\"|׌A#Ű!s, 4^Uje$:;;&KUX)(kr 'e؉[t2}[Fo H *+9 .@]*{5pM\\Yj0%s\{p现7AwhpnqIq%$C 6 r3'/Fdjf\V).,v362P76KhX[h-~wM1W\`GDq`J!bSQ ɋ@,ٍG}7X%-[H`GDq`ʖ- ~vƖhzYDF)).hmUP _B @oB#$ $.*vsP0+g\. CAABDf-kTGl{L[trDL;{Kv#6`4%;8g.k(l#g:·0B)9OAqoeexD\c1 <69F>Kv.4Yz?vB3*6 |'w )n{꜆Cx!PPC$"*9FNjQ3ˆ:aGF1"kA4lC|9-y䂑C%dהetKצ#"aܣWҒ7t[uH}^~N38ި{HC20sV$4.8&:&9/g;'i*X$s*(/avy@itK6!iܝd9 L=~^_K>^.vC&zS(z=4, 7`smc}Z=4B׈ml`ɺo~s7t1M/阌qMuu#5 { +f~ɦɚr2v^fwNsmg_G [NatvPQ9:ahӾ{4Z^>xQE-PRK5o0OR L*;ufߙ|mغMNw'C| YD GXD5QJ:n|JJWmmC EM}qE/Hjz'~S5]aRLlWX:<2?å{Sd-Z;:9W񫨪EHPJ!:/X~.]w;,zMe\W,w']XPIfqok9j^qFQly]"a>FJzUs);P= o .}#7ԝnX0 WpYH}&M I]mJ.u4 LY&4!x{pp;"y{bw_tjoNJNOP70dArO m]zHZ|R?^6lANQ(Gc3SmB$ =E5mZ;X̜{E`-.؄:pxYSw!o2}nMNccJfn(pC L̻\#\vcNG3̅% *"p̯Wyt`o&{f&F4?586=4>]q0)գeu+E uLT sk[^}/;ݰ`, (y n 𭌳],nU34?\t_+V1sJQNw* ]25YG򘛝ͮn4+lR ?,++X9쒚 QY Q݀r.Æg$ =`gl&'N`ãG+qUBΪX)_9rW3=(()9UaTq*J`389Ģ? _vSົ]hCK; tFe^ 1s&< K?.op\0.h\"ΛWl??gh5H6?a%1wepA=_d#.鞫iEȺcg9W?:E5~Ԭ_z+#ZC?6ܪαix݇]z 1]K*Ɇ 80ydB9b-[BᬈEryM?pH3>m*%L>38t^\gSrGB>SXNQW-ߧZ6$ f!0.! >4^rO)Qz_fqذ"U@-Ι3짾\,C92Vabzn%.ɨX 6Oɨkh㜄A`eHI*+%fhH܄ j\\ץpxxQ2Ϟ4|*,jW%mk`qX'( A^p2ȲY3D8cxBV*E,f mK786%g.aSY} 50Z\Q'V5KF`<`2N`pyzZᒞ l*9D(Ͱw%=P =ǧMH&ѷwTTՑGl;pT͓0MKLn;u2a&g }cs*-]Jnt;s 42̉ZF 89\]ey$#^U,WݜǦ[ӗ-zg' Kr?$dI,n"eʎl&[{G}t༉[jHU(9WJB>.dm = , [ڏ+>u6^YЫm~uY]olBb)03je'`!r#U748KLm3p+kU4謶{h\*LL OV!F% ,MX7ñ(;Fɿ#oA 9feiLon_+ݮ4Ʈ0cq0Fl!*94WK[0 $̓VWEu?bګ>ʮC8xXR=LJ.IH XӦV핊];|zv,rٵ}!_ށ97#kj5O;rI%HλMM4NK)09fiW߲ױz6^y^iQ[ TE% Y;X:xwvr|o}$a@uێVݹ9-ceh@!>L,.󫯚٪&88-gv8^}ʚ~+gD=Ei\6^υe.N֭y gD9/TuV=_Qmxϸ|'ol|D7 I(3NªB]O_5 ʎQt%8O.rLQ#_NEEz#KrC,NԜc^5v3!G=%Mn|U~\ ~ElY } G J%x .,c=K!iRU~p!}_bKZA؟GM`K, +6@~=QDlWDQ8y@((XT\ō|;`cқgM]) ̲K\{\a,yhaw'8B"I]xOJ:ܣ'd2gXFXAob,yMЛ p괮{GzO}Qe 17EE((9~~·9σ$0ۇ9m2Od9Ļ'8$cy:0 QPP+zI2lFE9F6HğO2 -ڞz> vBڮk?1//.:_\"H{`,E*xs8DgNT  zj{pB-lBeM|ϛ-7W2C2cZE bvۉE\ 8yfQox5=NkcaXGA=o ނW}7iVmyÝ>팆۩9 DAAqORPPP0'])((V(@`7  u)((V(W.yyRʐXݝ2nn,gЃU=e2T+fҋ8(-ɫ(QY?,z Jh)+FYR?XeWb6_1WAJ^IfqEVIUJ~qej~QB,NYz7|UV%fc*SSSSSSSSSSSSSSSSSSSSSS/#㓕/gJ6XJ)I    `hr9+Yz\vP @{L vͨTਘ؂†ƞ2@TIw@+Ed-+fZ^IpxDddtcSTP@4- Fû p~ybv! }ZFb*T~o@7.1(~3JᝧgәBF$ݍgdBjXD$T; ꁀM7 S\Hg /uM hx'["0==3C /Qq9tPyP8CIBA FvttIBA H:T<()PBtWLNw7jժG}a//sGtWon@ZP^Xzo-Y_J4uөʕ+ׯ]?鮮Ǐgee/ʕ+F>qEoգxllwW7o|9r,pzz:TaÆYD_QQq mm/gΜ9y$!eO> e[[.tuun{޽;>>sށ]#44 ]_Ose{]sɟ|uJGeVry*XG\ԌGTQemRv.XfMNC?=;_^(KI9ox[,lOFi#i0I6C)i561$F'}+808rSǪO!ct\;z9YG/{wVA~t| EmQU>5NEO $: 4%ewA֭322X9WUU}(׿>ldd$?B-** W 555R]EE&FFFЙk3<.../"4?3rشi2nj;3)$e!m>1}Kۧa蕂ٞ`C"ީXOVCuB5[$mw]pRd̓n`y{:_m5*bq<ڧԼ^M`l(AuSGݗp~uggD1F[u L.m1}t^9{Q+$ }x}2AN{"h떈)ߔ{/gࢢ~&<oձ4$97775III\~SSSIIIH?Cӟ=jjjZVVv!(aBgggpƥ,ZQ%Y`Q/k>|wȊX_Sjޜ`/LK2Fg+>ޭC L 8w|p&لO:^/f9IsU˩hZN.Z߯\WLvb9wz[Tk8ƭ0\/e V=cDQ5sXdaSA񩙁OO nC .Ք:r[>zJ+ hhh?&f %Jl0NKK#8yyyAD}'`srr`Fl2. fa'''88|׎b}7׷ַU7|y2)gF[ab֝}#D9533D8;4o0VA ׷-bxt\E393{AB}Ak,`;؝E⌆7?x@SX1rIהcRtud| /û7o~t.4;ꢝO]̄_5CjqbTqU/bq##_ W?0+nq7ꁥΔ> ڌP~2bxaqqqxk://obl.<|o HGGrr2nn#+Q3>ZHw 1jRD-oɩi \*yچ>.7̈́`D)6-qUDf7yjfZsL g|Cͳzm pщiJ`T !p[ J`*+O\#uP  tNSB %0*T(PB *TPSSB L J`*TPSB L L %0*TPB]8(4<,,, *H@@[`7TPy@ޕ *TH *4 M J`*TPSB L L %0*T(PB L %0%0*TPBw"0~\?Q"J?8J088H~[QJx={gegg租~ S k?Uq~X/?NׁSYJra^x7G c ]v݇Aݻa{kLSW^yJqU]AJK LȳgϞ͗d%g *4bbb܅Ϩun.e~M\EEtxvn}qiQ@JHतÇ([XXLN^qڸcǎ0ΝqUUU0| ]?$Ѳ/o?~<##dFHh3''СC_mll snrAG)((vwfUbb 9 ӰĂzq^u+QjEǰ\lfY~&I[L*%JhZPZq} v3Mo}G$̈z'Xz5N~; ތ7ȉĆ FGG Qy˖-$멧F.ʐO?׿s}3`!wTUUӟ N >(hsh~~vv[ssigkCXg<"nM5k Z! !Ąї_~5&C`p GŠ&"@Qr;>NfqqyM^?1 ]pcT?:i5 uhl^H+ESS{ Jp`&{{{Ô&vT ?-899ڲq<==Me O4:Ұc|||aa!  zߌca3"頠 t&}G{QKV =Q='6 LUzɫxF}_*kinZzk[zƧfg=$J`J; 0V008yƛD2.]Z~=UJbb"~iiiooI`ɉJ;%0;8׭[4" )almmgWHHᎢۤp41OQGܖ5K̫d%ֿ_#! NVy9J`J;&0N7o&TA8 +_rr9g`D}AixxCah޷o9:ZUHPrL/ 0 '6g$0xd?"yp%= u?8o.8}'h] ~6w(FnhÓ_aΘpau>=mz71|c2IWgr^D gHЛSO$ss8y444̈Nݚbk׮a y^UPP[Ȋ;E ϟG!hIk~7?Iف_~+d0sx<"d}|z"RwhL0cz?>έ⬹9dMN^dpF_,.I/(ˣGb8[l$?Fʗ_~ gϞ}뭷z^{ |ŋ1?ǎF@v}} _׮]G۷رm۶ijj?ɩQf͚^zSUU %n*//_QQ+gdd$'5:j|jfADHjEU5u/Wjm]=9= ox<(352FC1yvd_G@o{W_}p%K.1/++C Dk1cccq#TSSC1Dp;22 6 \~g0}}}| .?[C@fa---\e 裏ҏ<F{Yf}TvN'"Xœ־Гo5Mas7VWA5-枝rOFuUcz.ɼGuع*OQ?9b.;r9Ms. .V~G[ְIݬ\[T%2%0...8 ÇQ|Xv-i @.igg' kffU>8o6ȍ>S w܉,O~ad4ҥK]<--mhh(99瞃f3 / AkAgk/"Ov9C:>9ͣ䆥eޫ\F>W;U_tAEw1x~flN-WCCr_<Tf x@3TmکrFgje'wq?OeHPhv= -*?{yylα+N:\PP0:: =ڴG ;*"j*|:88儭ʂw{As:,-- ͗_~\H?~~~$(8U@{N`ħ p8Y(^€ܹ-_~r.ofiK S3s;圞ػiVҧnݥ&iL9 ?b 4&&&8d㏃Zpwa*Qp#gWrr(b!=ĻSYPFDD|?( ncF$aӎg}<ʘNaa{N`p`sK7 < ݵMLFМrn8WsOMQ >S䪮ˌ8A6 ?Ɵ6^:zNiXxc$/Ո]&I"".E|o\8pUU(9?@i8pvxÆ ` h {ЋO,?HprV%'8Q# [\޳LpӋL(rq#2b+*Fj=}lC ,=`qu8b&f~^`QF8$;.VD`Ή'XAX`]O18?R, d!E"U$O999h1g\\y{ ~Ѐ$.47e|䀍P.8 fI~f: ck7+?7^`%-3TG] oMQDyA~EF7Z!F98Gq:f [g֤~t)\^>s 7TXK>%&a^;;;l!.'0yG !%FE[ZZ"Ku5FZRBl2qHݜE)0($lXkEigݺubbb!9o޼xlrX ݀RN*Ĩ SB\NHH Y8<|Ή#SXVg u>-:Mwb?ϧO۫>a]$av帠iGHE+7o}e*afxR4 P R{9OOh<ad3z>:ecǗ_8wzX7>1W_^v l;&`&`vM`;&M`;&`vl6m6`;`v lv`Ovl:Ϛ=s9vag`~"`(@@Lh>,dC`*@@ۉe;^h;6`;llv l;&->:#&= |,M`;Gಚ:vMo;-xF>5>Jv;@5o{WRҪ&+f%ۖn:XPZ}OTK|p~YYem+Sl|&_~GM W_}55jԹ:ujVVֲe#F5\KBm/Kq/}ʚvz+ql2۷r)wv)'=sr/t xҚtr(y!Ӯ;Ji׽׶?[&p ˗Q /Γ?[(;fK?Twߕ??nV̨?Ws֧[>ӧy0tȓ'OԐ89D28&ǭIIԁlZNP$vKdbO_7{Gz.|.j"Kw|Y{dlqc~#E LS5cԓF>i-u'ӗ0O!^gF," hK j-'T~?B`cMGIg=Y˟mڴ?;d '_|'ȟ2o馋.H.݇z? ӟl_k0ps_G?O*Uݸq#&HkbM)S2RPi`-<s?YDlڴ @] YNYR3@݇XX?LJ d`ZC;{ 퍉cOBƋ3{/1L΄_uJM23i¼MYߍŚG!;-B1v=]~3_Kyg7->Z*9lgH[y-Y=miV s.o2`֒MyclރLZTJ 7ܹ _8o͞{msiPL_dq1mMЁis=G#ړ݆O\^Q?JVZ ɒnZ5r뭷r>\39wp:p͌-̆eaDJA`;r˗۷.; \'?aILy^xs3{'No"$2KbJOLLdEe7dH0aYd89w3Av)Sx1Bь~C2'pk˃+yyQo-z%~a2&eM׶L:_n̄[P6 lL;Tir5k1rq;v-j[ձ+.虈tݖ=G`/-2wZ'~ź]Gz%ܘWvf«W4e.n{ga%r(Xq%ľUEeǚc6YյYck@xkv(E7JwLh˔{e15v&O>:aɉU5`/=-2إK2Obc1C%zg5_lB{urj0ϭ[U48""" z[v? Sް+=c+t: ?Csa/ʗsi@ &C7h>Be3W2*1J!i,(=1l'uXR^s),zJ-bfc36f=muװ0fK^fM;oE~jv&8&4 >0hiz)61_"=pp$vBp~iq3b .. o`}w)ڵYѬY3۷w9xf͒iSp!0ƂQW K`L;cEwHm"0qM=&q<$b=< /,1V kxIf󉉚^j"4[u3U^57Sftp˙imo7"t͘iYC`8&^=ğ͙B/ZI~УߌVWh$F4Fd愍p#Y|׻SV-L`9ݬHe \/ ]o0˚yb?FauXɂ)?_~eqbdr]x1(\[Lb,;t²80\źfi׬Y3zh w}^3ʤ Ϙ\c:tȸ?^u'kOȖҿU͘gpJ`J3gUr),}0䩐̓@8D;eϼlrUOb&\qrXٰ2Dǿ,Y b ^vHFSs5/pcܢp^d܂? wnHbӾ0o{3p\RS7ʥRKA䙳rA_K>WDa\=z}%Nӂ*l"ƵCGwqB;Ǐ9M!/^1\o3aj T?65hJI9<:s&vRdU.<4f8r>{lYxc,X2ˊ΃T=fwHil%3sk~Z`s5*33k<<50(,Kz/ > ,(`,Kt\=%k`Ս-u*s!0kcll(ِcÏzֲV;I[AcjAвx`iǮ?k695l8ee.-~ ce)˟ߊ4hJp&a'N`UxyB?+ux ؙϱkM0紞z)q/2bMȢ:66VsϽc`XQ#G.~|*B~B4'0/x) steną3t{Xvb-9Q3v9ЃV&O3z,l=gr٪(BgM^ S 9mE `)T#%,8.]G@`0b{d{gw|h=G_ Pہ [~Ioug>#5x;O!pǎ%:pqעb =X(tݜf ,'ݻw΁_d[ٵzL$7kP}YzZ1,%#c_/aiM͛ '-s=J9n#r?q0{^10[VZy|kN`H30z2 QP|`v.S%&[sاr|`+ec?U%3'ވϭN,xb9<=*L( g/ד&@ xr+*Bg_{q5,E?;eR]w?S W2V܂ 2_pp 1b]ؒ# g *l=S8Pff+W  [%HEquQ *V_zMpqR#1,9S!>LV.>~j_n ן,-0RjL[wBxɍ9zdu@6&F,L ΀ , >NWz [Uci:7f{6[//؂+'+;wl1ﻢ,rUVM?6x¾)<~ s1/mI;{`v Moe`; >k΁m!U263?_~&[vw ̹ H_;7b`ԃj [L{,!dl w%,|hi J:t<6yyƷm+'{><^TpƷ |=G!*H<'HC6oՓ:wVuD]GfK<6ohM lm|?AIcyܚ_*jk6~VQrXtKL, ]6ygM8ZAcT 8^3[ql|?7D?ŽQ1ÉC6i1i#9 NG~QgJ?0"}&'dza~g*||?Rw?FPIgƏj:~qG5ʧkFQ0c3 LfVxAQwX~ddڐv;Xwɓ#Rg O)W>գB 46Y8?Ł?h>]CbNnɨzs||T k2>`ΠQLx8_0|rWܞ>,sjyK"RXvTSS7Y##g<{̙I?W}`J1q*̇%?{O,2-;n(+>&C:tT޴!ϥi4/BȈ:J)g-RkPh >JY~'_^!w!BXB VtVwb**҇uݴ- O.--O<:։ЧMw?05ҊcH)l&a'>@ùyZqNL2T wm#OO$\8v8]y Y#&Yl71t?_R֡#_]S4pddzɃ)0 bUw𰨴!EW'ǧ 1Cd1&ULz6O|:8։ϪШ:yh^Ax@@KǑU5?uC_bb~BcD?}&d pClOٱk?ƤOcg9!WZC6_x=aiFv' Ţ%IqG9/ A8C$d:O|z66mj%eo|@IFc>D$ ~qiyL gaQG}3;8 NZs?u U~N:  Iw}Hd{ 4:Mx==<x奲8Ǥ?x6j!0?%f(;WP$ƅAUUXa|(*)SW c\'§B`WbU|!X(㞄t9(9@Ĕ2Qk`> ,И O|uWX.*%` ǧYX|/&6@T #|BshM |@ԽG;NqGh>J0肏"NMGQuM`4#QRϨ*Mm:6tH }L$e)8:= q%")ZQd4*6S{A:|*&u0!'@|֨0VS3piy@$7a@v >aMqD!peu- ?>$`M`! {2@= !pT A@K{=jӱX#պ'qi %Lo"w3U.gϾf\Iaӆ<7g%"+H}܅EDrwuVRwk>U ~" A|Ǚ.?NOgŜh_UAa(dw3ISs): | x_E1Zbzضs/XMQ)vl4SZw$Յ9sСÆ1w\ZǙA!c$fu&3:U yJH@* ltKT˫k8r>p(N[UPG/P,&yYU4~ur狪T2Hp2?y[>Կ":e:/%HyH wL}_\\ c3gqqP]2/<_ UUTVK):g(/z9cDs*d-tUvj~1}z \du]w-] Ɗ_h!Nd֚ԟ85f؛oYp2+V]'$=A`hkl+>h#G?)ԜQr^iӦ<86qMi)V1ImeyܦM[u4(~+3 :yY~] kRRRR*ϧPu+!tP[rصƒ>-MFUPB`) BoپcQDoƌ\sMPݰi33)FCƊ5޳_'֮]DF Qy.DVs݆?O%}޼ 6ł^_EkY n GWb"I`\U|h?.(22Fk M\rWVX+C3s< <@5>LN+ wrM7S&T6K/t'??\1ɩi_Q%=C={?nja63ta%Nt@j>ڹ(j[۴i+:jlUf/!ppL٬7|ɿ0B`|C*/ܼyF[lcP/A~({gg~6}2'i?Pħ򡡡:__$tMK,Ez|.ܲɏ?~ j4>!A֭[fx~ N>V'% W\qѣrVC@mK.G9GqG9I+MDQhVO?#~-ӧZ#M\ɚGֵkQ|AbBBV6:w(O;1A4/'Cp <(IIV|He.%AfɛR˳*jsuͳ͚1c3gҁL۽GpX8m(uڋC|Gd2Rܫ;~GϞ)+!\|R3̟?Iy]E '8=9YĢ? WT٭"@P_LLXc聯^SXB(/ڵ].TUX4> SV*9Z:J`e9񹍨W>AuFԜQ[:1w+#}r0qQKG29^9K06#=t("8"pcC0D:ś!LhY;Iv!V "Oέ#E_|;vAc<ȣjTV)79KX5q DčZT{}+֟`"&g^a>كC8sÆ!0Gvة%ڂ Eisќݻ!S.jDA`N񨼐AĀ혁k},WYTvH5?n ݻG\#w^y֡pWN*l%٬N:˳&M23ephuM;5!ɛԞCudxZz'rUS&h0V" FJRh'ګAsP2e3gL?p@arRJ*RcW~3 + g!g Uk\^n=)RӖrgÍ6s@B62E/HB'yDZmE%VTdc`ZQQeN?y#EL8/yklXmz ?ޢE Afi aaaLTF{Ǭ2չ+r5ңcvZ5dm9(^^^ՕڿUSN!${4evXUT>*mvuOaY4㦑  ӺjTtCj^k[XSLr˶횘Wlں3_V&-;(6mι}*5VVc10`@&T>c8u )ڳU؅oV=zdԏ)455oҧM!s5ՀWFE3‰ϒ}~2ZzY~?.{cǎyg) }q_T9Ra .HYMP\5DfI?1ur:ʉ_r4<)KWlj'O|5l\ ܻ'/<(]fSgӇShB/B/.W3.fclQDUwTG(×|)}m!p;z!P T2‰+13^Bޞ={{6xg g<<޻w?pȧUgD-?,Ux~ ,TBvȿے~ͷC/_Uq뎐$gP[s)Zm+*/4o y䉈2#4HmL+>c֯I,9fFFHWE$h|cUJWi?Jf##ULFҙ\/j/\dX8dS}z P֭1ڤr9,"p:WCFT828!0'ItV)۹Kg$&&/+8'\j؂πjH5ؾJNs sPN) 㧞ziH>( ('gR$ɨj{I@Ohvb`7T20R3 Puf~`C`U]J5!p˖oK׮?xe C-ۻy7lNٌsz׾WfK :G2 `C#725ç HںcO -]C暍ݺuΝk1kzܣO//wK6jjC``=<ؖz-7$*u&((RY&5/vz|yy4THOUDIXoIgt849Zak?7/ 4+O|bL=WB945>cFYyu 1C e$?LN6mGA >oR.u#s>n#2kqzPXd /#B|| ;x`kV|@KLMCx9Ir#ਃ3I!fBJ)Bಆ!pvJcOyI~Cp̀L灃lݵ^gKO2a#0LG֯wv٥i&)Z+' 0W~6*A'!p Gn}P0g3'||H6u9&'lv*>7|e$쬲Xl믫`\|5|m*5Ddd%F*dX!'Q`ŧ,0^CS \,dQXd/;I(r7y=CCu|2>c{;->K|_,w4'GzP{W +Pɏ jxLlT/DJ(!#C8B`:ţ>VС=jݷ|'{P2CN&2|ItVԾ_Oˁo޾&CNUċB0 ,7oYXXI~'A NA^i+^&"XbFHMIE/|2RBP-V'B](,e$۵kw)N#GŏEăhRO"8N)|,9݋+DeJHkk۬|LN&{b9pH&gG bkf,ֶ;3Hj >Na-}*'\$li,̟. e`6w 󃯝L$f9Ꟙ%GA ٜhj_ Sm!45vR\dcz139 ?7 >Bf#v#6gL'tX?Z&BP'+]t4li6#@X`5ܭQriQx^!BbQ3SJಭ/{6nDB5*ɍDysnď21ǘEʃcC`"=c#LC-?4C0DM:ª5kyk!c`xl*C`,^֙wPE^ 'dEJY _XoSYK5/vxӖmud۳v?k/| I`WQ^nKg#Gw!pS2 :QІUs+? ^tYUK,r _x_C8-Z"jO=3%gFzN ꈔA ć,t=Ϊ>utQ~ Կt-]%Ⴆ$^~~R=|Y ؾu/Cy+cbb{1ǟ|ʀ)93K`6p`ofHc̵p ' ۪0} آTdb%I~ NCsLQ9)O㣩<ئߜĺA@Z''l&=p,G٧ `m:Oo#xD/S/yF'EW(hC"s4 ˥^/*Č R2Cnǭ{]'QK.|x/=@N15E> EYfT3@h|H5ӡ<6t(^ k(;;S")"@ZxqQQ>0ء@IY3xSFq7DzJaGOw/%'P~Y5:^fSc F&e72@I!톟_X*kk]tT=Q 8X2E?}b>˝'pfTcPƣʭm<9t >(F=oWN!*g(|V"\B-YdԩӦM/ȴ%^K,3?k,:%a_ȇFts&0'gd;PZ~ʔ)ſE_pE<돒`|!芑bӪ:5sU6ms*먯s՟'?6^%-.3<@Bk= M6ufT5H*5ܺҝDv?xJ&φYb-‰ώ '>A0ظ.UN+cwM&w|z]g_Ge!0N<-sm꯲Y!("ko_! pȳFebL\΍ <?W PobX {h1q9Ζc&2lQ< #"LAe?Okj/h'>J+׉=&-qPwzO4rݦ.}_+^v#Cgt,uҙ'_J2y$ &8 ,}f*Bs̒G u' . >֠!2'zd`X6G}GX6PSm!45v>BVN&M`WkLj$lk >:y59fc(9;B`gZ9 HbF!0x]ĭ\@*Q]smGI9YW]Ƴy|:|f0,|?>3$'B9HV?|J"LCddt:O|ӡ)L|@Y0ʱlCr pbx>Awm@#|:UAaPe  u~EzWE0>Dj>$VpFӒN}㖯٠h%먯(y*::R]$іTjaM(|"'||E;?'o |4U9v ~>&.:X_=o|@*'Sri|3Z$;|dLfb|>3k#mp2%"BXE`Ltw*(JDP$D|ϵ0C|}`pNuLs;)d2D8E`QSN cӁ>IdN 6& Nt;B!*s!0::/>+V/+H8BΆ"B`' >ˆ-k X񲲏H ji=b;>|zJ&p3_=|Y*v?0mÍ;>;(L/NDN(9ł va-ḩn'C({-Z]>?o%,&11`tj_.N=['Ǘ\MU3Шu7+c~/^mbMjխw`9)~ޤpIۮP'a[v5oA.aBIThjcOlNΡ\B"0t;>+!=CΘI'Y*y;o{%KR7٪3N8Q Lqv gƬM_xIZƀ^}8L,>^ܔ? Wp~cy/\-_yCs]//"6  I)ϽԢPiNzѦ3/;{&_W[hիH8Z~[j4 yTPU*^jA-\4|>́x킻E|:S:hMß9{NPۇСuN(fMß>3|TÝx)^l&M_1'$}Sh &p[m~W\uͥ_y*^ex%z\uͷ=tV], >nhu\x=R>-H<毽wʫ\oϽڦ[F=#o+jjl޲mH?.|{D4{[eW6ʫnOztÏJ%[7{U+sw#gTZo|v!}|% j\w:Dཱུ ^.m*>z{WjeݺkoT ~\~ymҪK/qMizVke^95E1-?T=KǛ~FNx'G:t vWq B^'_h4|7[!~aamHm2Ͻ[w<@>Wi_m*պmʾ'[/Ͽ4|*F ƏOh |O=Q{UXs/7Q>/xQe>pẑ:"_|}Ԭ ?~Kl+{DO; MƇ g xtSs]3%~hvG_w7?νbȾi|]V|ECg[ӾgD{FR=!: ~D2 l:~H% k?<hHϥOPmB &O𡧲ݜ!0gaa+zSm|DŽW\xiMu;)6okEx{|ڕnAӡΘay5vk6~W"]{ƫhǹiƷmoA`JiΔ=_oҷݲO'ʵΙn-Õz74VE]Ʒ IL,z;WU{6o_X<е5򲈎96oġP5ĤƲ:x^|m|?`w䢻3S(u>ճƷmo ^[1V ĴnQTu5-wCt!>678~7~o{_D "u3guM)~(QTشt0њ5/Ut!x{w!M-}}GtkMƏN>ȝ>'%Vt7¹s2Jvr[C4>h:~ڐCMƏJMwb#SMi:>ץo~ܢ(pS7~#|[A=ܣ:O6Si|#[89>Ɍ;l!{&!T~Wx<S4?ko`-1#&qt_б> S?CN7)/uШ^t7. d|} PV{- !GUD>'guu:W^Eg wB Sr\#jp|a|_SΞ=ѴL )G(5V|5O8sA>aJq,?sD=g<L#&Nh h2>(L9 !@?9ٓSCUEuQ`?!Tbq|1;{֔n: C XrnpV?"Z~3u'NCD$O߲'N+G>8<9D/lxK-;=8q߃`g-|O/@v]4$t"]Ik+|{ t:1%DB(j߄L>O TۅR=x\[Sfa]v{?phj3r]/V*r):<Ċ~c8~xRШ3D/Ne`G@%ڹOB7&^c3abSyA J ?L80*/w Oy#{GIJ:ht7_~|ÞQb|<|JzD2|<+%1w5=sFzup_TP4WieÑϻR >ɢ  o_ }㕕(|@R(4 zgdg+1J2iI_1 ~XU?>$ڲs/[립T?Yn`;xi|*H)55|gD8X;W#ڭʹ/ 26'A|B+i' >"_fAh. skX,ӿV1%d? sLgJ!V s$Sښ⑮ܗ/ @`d5:khcb5;>4Fޫ?"peU4Nq0V_R^&2| C^15cft.|D@_8")8С]i|s6ew6 (ZweN DoVZ7pHKZu5zUR-5O$}Ќnx0,ۅ?x>~IY&MA ~UU Rw'p<v`e%0Q\Aq) " +TDVaVcIe \|TJѨk𛌯mWྜྷ-ͤ\@Ơ!; VYXUO.p&0B`u:prݴA`=_t'! pQ}+e{Db!p*> - |Xg]WMݠ):&{D+IK *mCLJRQOj @SMiFČvтOOc !|0 z>=ďI̪E04WTT\Xn""ȃAe1L'~e;"]IJ,litN2ȷ|ԼT&K`P+X.c)[nV_Er&rm$f2j(5:w**Wmexg FWҡ\PN/sǷ. ՟j+X㣨 F8nkD-""Ljs Zus7= "zo]lܲ™J5Ct4}?!%M$+&9O|M)xT-_jď22Lam¯t-> v+sq|WX\vY.uC//RM' pGU~K> D͟#(~E%]ձ;iM> g\lܼui#Fg6iWTw3$0`yJ,+(ܧŒsH{#aܢa~JoUK# eK)B;pǼJ:Ƥ(1Z!ާjxRJm"=>|ZjTQI`%KRCp(%H{s*}BP B|s v3X_{59kJ<ǫ2f/ҵ^{_w}<vYs Q /; r?¢KK=>m r|4uH[o tn;;+kݬ\V oCyck)bgo(+F7>?i}V&XT,J\g~g\xw}p)ן4 >Q*f:kz? 4oULƝzHN8%QU_%Vt:+^{[ĽDyP hB;e:,f~Ǩo{->ñf5Ryֿ>:vέЎI|*QE B]=DTWzu6kh]mDP'};+M::;RW'i="3]zۼaXF˙jEtK^2f8fpPLd(Ţغc}く[(W/d̸5/{: LDX3g5޻Ow"p?&Sڦ:tĊO dqe1) dRv3C7\jl2Zbb.袆xDܾwSjg#)9YpnF2+o~#we7# GP Xos]7A֭PBP:]IB/SP_)8D쾒NܽƎ kXQTUfukv (FLCbg6Ӛy{]zw9}ZHl 9fWu''i VZc52GDZU+غ}W~5w֥CR5K~L&ɋ.@f͚egg2uvA>->QO|{׾@<,gΜurЩ<mW2 ySa$ vaBv\G]&M?8?o߹o_?,֗ tPGyE`=69_[7x>ӧ 1o߾Im* L/I)r-1`rC;n;vB\|*C"Xt&Kܥyt1n:ݚcYft8q= dHԵ]w"h{/.o}鼹|؛e LXiݴ\o\TEj?s@.rNʑH>޾.hoz_|grkАl.2FQX>fs2ӝ+=* 7y FᆵO,8/S/*tGɤN LNtێ]T [n5/<555i,],(/rI5)T>88TUfhh[V #2`"0䑇N+[cřBwc{!03Y0?~gl9hL\'>w4ߪJȥe A%E`Lt'ńwV:]Q.Һ읢 ~^6m-@LXF$3oޏ~#mJ 'aJA:w\z.c` >-[Sg,QŲܹu4x0k2pvOfx!> x܀Ȍ3 w-Ó֚y'38H`}0؂_E~U#ʖzʇDL|bskAe]|EK,iȭRW #|TƧ $WE%';VbB9b&9~;M`N)CR-cЧt|B,.mw#xSb7ĩ3 ZnGi9BEE]qB+͚U[!žƣs#zAx-±FvYo\J&׮CedKut欲 &0e(x] cƌB/[Y"'d7& o6z8A`6m]Kܥkp:ٖ']y{Q\߳yck{1ۀIs9<AYI"D sN4QDN_[ޙ;}39귪9oSbaV5ufd\k? OW腯 OA,SQK1 b1"lcO~187TʸZ*PJk9}|EnZn7L>9[5! "X^ynTfrRD1/]D icspWij$.oqE?23JiHujsX JfJL•i[vޤrܿӌ\v8\3+ 4h(EyU ' Q3˓~ǒOxd;Q7 q c] >Z7zJoU Ym"vFz`L-+1Ǯ>vG9nGѣƓ8у_dp]Є&O'VYݡ ppyҲ|g9dJ~z,Ŧ>:uZE.Z$|nU9lt#T7ѡǔ4И[yPYC`GBc_h ,8**O 'TPbԾ ] .)IxViEN%PtLvX+TflrB`њjOPaaa0ִwyv |@,X{;T gls/xz`|ƹ;O=-+,ص[ů?ՄG&V _cOz~ZO44(2188Zڵw'79ե>S}8<;3 @`i74 4Ǝ7xoo5#?`-|MbS۾zN~^OmJl̀CЍcJC`cS.>hlE[7lpx9s~5- [O?W)+'l5bm޾Ji 9'DO wZ@1?t̅&L~{pdq*{!zbsBV[-g~zMֹs~s9ǐaU牎ܫ4wǓ<" NsENYC\宩U#C#N|t)UU?ͪabdḳF(ȖGͭ4 ]yӧiO=.>.&M-~ɞ6lڂ<+"wS+S(B). */!84ӳf3fiI'NzNZf56<*VMuObFӽٓZ!TP?|R|OZ#veBvP"aI{7욺5HhA#҅L p7>W;!d"F%vx2<^W\D!Z&9izgM ׅ~jz!pD- ͇sxISbð)>jW6eGzx!0khVo ԞYv˩ j_ts0z; t@bfGT߾} m̩xjnq\CˊXg>GpF`7w1<Ĥ$E?Z>ϸ4d2=_^rANIXpہՑ#ǎ3ch}u 8=瞽{7ZF "6I Q=pw |9|u%KL0BhD߾};IW/Yo^=LL |TBv9k| bUB]Fʛlhv΢G B`˾<ʼn DqӊPMo̙;W@~_v[%qlv wuBi ؜R fCp5Z>`4ҜvC|6Zw ^q1g6ʮi#];!0QbQgs:vń; O[e7DΘ)guql'@x{eT` f7\{ O> 5$7/﮻WUUQq/<Մ+Vͱ 4,uzY!0V /k]~'NeU~ziK"E M`ll՟.eE h.I3&r!pϞi"LS +c^2U_O,QA#MXZEWP >CxnT556jh?ecKB 6eq!f:^"Qb>Y5#Z,zcqP9{ߜyNQdū^ʩVOEܑ/&6:,fLA4'atO@͞3Suk׮31|&J|^c#\Ci^VRSS;B9 O2 }u,\j3yhA+C!jI"< ,_ެY06[Ḧ́1hEy5JXح"47ŭ]nذaDC$yǣɯ5wO:"hU x/%%eݺu!KLe >E. QL_UgF+A[D)%0>1!BrN5 {N&MY˖-#`9ɕC`y@PJjcP&{6=RԟZy4C0ԅ|WC5'|[4 Z[U@_?{DhK17Sxυ]{-5\FsuI͘1SNɌ7:XqTAE?ǭiv@%R24;TW1U,uF/9]44"cN`6lpq+mj|9~XC{{27O?3x?Ss_NO2]L-p 6AXyhOzj{AĜRv.~Z:r;}UF+ر]d2 V'OIXRى4dqUN2֧QuQ dM sO0'|Fzʸ7@iԅh)1'}j+9k'yЮ?N+ _x\3B^T}A\ F-ԙ%(JUә)),9[TPFZO'F'<2|j^|M)-Vժ{3 >w٧:g߿KlK){_ط|OGm$]=_iMoBbj| 8&u 'Ou&p! r*F:˦>_RoȜKȟUFuvcA} q >fa_?ގ~`&p{fhC`-rMG+."Di*j%LE`4XgϳplQ鸘usfٍyԟ&)slWێLwrJ4TLLGd "z zvF?y m.m{ cDcan%Op5ĭȌbU: lb;x҃ёlBc;#yeS"55"; ZF|FDw9|ir遅`QzK2 TGj9|@KۊYk$<(Dzx!0Rhlv#%Pv5'wu~)i|gcj5ɡRHr77; bDR;SRhR[7;a{zyu8ssM`gi]j8,S]uڨ̒L!0t~sTy{`*]}>>(BqǪݚ54>6lPB`39nr6m*Qq'œnYjlF"ҋ,,+y[b-o#ܣ !0Ž(a >2[." 0~]I EqtTV] >yyH\OOi5?Jm'%|?sГ}at:4MjvacDz a.gzxab.g<^ar=%(xKX!2ڦ @[TKQ@!E`!]EcJ  墑G;4ㄸbhRn>^r.RHbn*%jZ&Z-J{S661{5Y-2"?n+j{ HY4M@~{C"@|\KKDWӈ҃eEi|$6݆m; ՛Ӌc4ƈtˮڇįD%PPP\z1v >Jؤ:C]0%5J/4Cŧrf@v~#T I[|9*4"OTXbx䔍KȚ>A5R#+5vuKu^c9ъg߷a3DYl݃ ~K#~'qY>>N /όvJ)v#+PXKeR?|% u׻ S3œ׬я_[ qPi,7R++Ch#[Z꼸X^YP`vN6i?"S^zA?i|~,4:ۃψkLTWWfưq 1RF\cbR_{cMr@Ťh98 h2*djQJ[i¿Xw[lhzGE&aPQ1)9>Z 'Co >-Ѩ ⠻o<RsxD>@/XGY%voT{׍הz5O'71jg2$${e< }ϼGASpyAcbn/=3Ou^_Z~O}PiGGѳ_VNޓO=9}p|ݽc E/yW~+~s\wK %Ts8g~""݃Q+--G-#bJƃ]{XV97>ᄸb7>80n |dcO@zJ Y|-6<)~R䞳3[axNyd:'o]}ׯbr%k~[;22Y/cĠ?_U}QpFED31pԏ~+NrGρѩ>cb30?W\w<:&y#d#~'\PJTjtG "W hzJCu(1FĔ>֣wNxN+06>N% DP)VzNuRNr<4BCplzQwr{mHOJN z="<5?§d\od]}w`!ce|~tZw,~hdD2?:贾#B=sw{ظ) >=e2$٫B_T*Q^CǠc8̇#3T#"~iEj?YCIewGx ɪ̟vS>inollظ6Q9t^ `/Ot1| 441t>菏KEd~TrǴ(q ?+Km|F@q~ڨ?8,>i߫,5z?}esMAƷ}MuO`ee1:n*P7 o7%s>b_F=&lZJ UVz7~7~7%/ vΕ#m֓ronnn.Wobr6mOvwwqPz̥R%wwwwG|!2K; ?H{/~P[L{Ťtww5OKƿA֕Df <3H&e1;NW/'??auwww>.ʔQVcW uZxUd,*sIXjag$M ~A@#.(~1~Z E>;^,~q\2S"0EKAд≙S2K&#JX%NqRqylϿuy|..~!ES@2Kdxi>(0#fP08z,41'&` u$ܹPɊ'$E3rtm7MI/ϯ^.zkyK#2X)<U5c>Ms~[7ozDz+M)!?|%<>_x豧Gg?cz>_XIИQC :{re? B) !\4_߻( ա@1ߔ+y5+:56?<ͫ+%&LoDys/ Ii&l&0O[k?KWzv d#i[f?Ǟ{]|DZ‰>ç\>J#|}lscnĜsa]9:>L4g-}I |71:>ˇ~i|.r@ra?>BR@}0aB_i/_P`@X>u\?sSh⬱ l>/^ꗂAzBR a \~3?&2e!>83?:'3ϻ9{ia~zVy-ZHslyydBNܳsсmr.pS l}>"C#kգ.~hjO=Pͧ(f2, w *P%}ޯ97P|E)M$soƭٰUM\|#h8Q*AOHI~ӊ,KͣUQ),O㏦SqfvnMQǨ،уziS{?h6{{nC@%g~6=OAp^Jjf @`x1= |K%梮9.I C*^yq<ߚ<=\ w}=6b [2:/8.RtCS }d"%r舝N`*kya:&珌Jݵj9c[,_Vhy1÷|/(Q3Iq5:oՑy&X./ ϽIM"Sc\KCv >ocNZc2gN^+I.eu@ TBYھi P٨ txdL^UИUe|<\ج?3{`G*ah` '&[LfD-m_̵K'X85t0<*ȇ"@Y?9DtNi=iC}[cS-1)D\S8|F+N(!+4)ps|G|G-OWH u" u.Lj| -N࿳c~C`~FstB׃]͂3BUB!ApL=i s"LDo{DrL}%`C!8%-ZZ="ʕtRfsX486SJzez%LH 9Ag'IG|G|i3r|EZ= sB?|Ki%1%C'䔞WB:E9… 2hCćA`}d+tw~,UH՜%Rg.:23vT`C }6[N+y"3Oa ٍ 4&tYJqC%82ҢaR9=.s 0Wa ҴȂXh՟|#\>6[&d:W>SC'Sy|x8N)Ը[gc{\||Ѱ::qq{m9sS o=0\}>}n6_f,D\T) BU!0E UW5KБJ*S")1|}؈)sk}rJfoyr!tMm;"q>w'{Q{h<լT1T,#[2ܾs7;v哼s9g[>rtΒ)4sꏧ{|-RH%6l~|+޵g^xǮCī“\(󭀣 9|qwǮ=p P}pH٥]Y=[58E8)B}RV1 Ukf?TA';FM3)?xSZSh@~Nz#bJL14&AIt)AuwJ9{4g6EC7K+z{87)4 (V"YZ2-*YTI4d|(c]^&pRE1~8r*fHl%^X9yC|sMDB}\%h>)cEVjу H޲s/] fPJi֟WSկ0旫D0!xS[ꫯoj_SW_}= 8t1:; 2+iR!Z[no67:9`_ş'jv5Qnǟ\Iw~:lSk|"kY}m+*ڗKvM,ymܼן&?}W!|? Q}~.]i?`6gM-=rܲ}Wٴy6 )84(cu TVVT^Դt9uuMծ9tݵv s\M[ >Z`)WK1O7+6QJpo6P)i!0=e]F_e۾MEs+j~-9J/(| zp ں!3^>/bfŴ9gΝ~{SA4|I gpd5@_Ԧa~yՔ>6s@>6:EoDR\?\~o E!0!+mR5#|7tۿOAs#cHSnVR:C|a+.x/f-ΪQ:i6;W|'>);,60s4EdM N_#՗UN߲p܅˟a8>EL[k]e|.yT\Esx$)OR԰-wD̠ɤhD> 1yaUĸhv9~ i9s~m+"""ϿaXx:X L|<(7^kg̯Fg]ԟxWi# a\Bl:.`ʰL{G}O? ]~ٖm;Ċ6lկ~to532T!DTnN7ۏ?c O?[Qx7onݫiF ~D]u4AzJm!;Ni|G ^ψ, Ke^w h_^'m cZm7r ̛_U[MKøinq|UDi/n|50QMK\wϬzD"Kx9T WF4<xsfN%]kZ?nU4u>Is>ǟ|BcO>Ň sLT-q6!Iz-rD.'gs`QY|y|_Q^WTM,1,Y{|rlPq1֙~4Ƈ˲|obZ&~u=)/!FQlʪY:u{oxfAzD@Atc3d*2)2 ~f{ɓ?GyӿS,Y666>N=+BDqnFbxF{B%m<&!<XHf"nwn&C694hO'4Gxj2ړC-H=ĉڗ_~y| (qMF=÷CGN4.2ȗRFTuf!XZZ]pYy""p] 461۟2mLwhpkN;4s_(FYYY 9fⅭg0rӖ]>LA="pCk.sH+Lf0~kO6;>צO?EL =4j4pBౚ`EYTssH nZA"6~F d*s!?)KWϟ9ޣ?)#=HyO6x!ZkEG1G?'Q vP˳uni -XDYaIi7osCvSB`FU#inT4#={'M#,mC9شux̸A<60GyaOO.̟p [ SuaV2sFiE‰#@ier \S'WuuqLJ)[5uQR5%pX>ه#1kpX-;}m)%ګfWK.qfe&O"luj_vzρZ^ݸ/yMF3 %FkiWm§Dzk6յ3{/u.Z166N J|Ϫ Le}S1 YkC 36%q?D7 (| )Įs3|@odü)ښ`![!\|S2GB/1F:Qͽ!0F)(*A6\GLyqC`SѮ(g0IZ>V1^C<)w>l 5:$"iHý]-y3R]vawHPZ4qȘ҇W Z T9f1"q.uEF }߲CŇOָ.. UnN{}(ٌr\Swm'B`v't/ Iğp؉z)B``cXW/>Z3.!0FŤ1sA?+V;). z>֭ۀ_DiGj+| bh@nAO?r+WB-9[RZFL}PKE{BXI2uz r׿}I*oڪ[^d}X| CcnE`+aL/??\C5k=#t{㫉Z/鶇#l{B9K2ʦQ?dbR~eVŬ'+Il#,eI*'&NPWF`sN6iBmjnnaHk+;W L̢ 7o!-<}FʞyU\@wả+5j9EEh)ˉ @3QXCh䄕_II6 DRR ~da\R6~9Ox&0AQ֭X!C}=,kϧ OHJx!"p0Qn+UX>J|問>k_S[ Xŧ(6)e*94j\ :1o ,ClLz r ոd&0>jJ!-(ԟhAUh@ Ѱ2jy58pȏ~#5TOnX9Xy=řq< /*fvjud8t{Zg/C܈YWE,=rB[*ޱqX%)61GbZ#LM+'4>]˯6VOcO=9@w=!jCMdrWE4춇#|xiD2K“^{mI'Zr~qyAP9樸Lwb^%G*z vk6~:j ~Z3627<-5{1dqYr}T%e4WVVN8zMKm|ኊWmUw:$'7 >p p}Vgmis/v{JpH UT Kϫ {<)oϼD̨ǟ}oI*ğS>CF:\'mx퐖EK6dFG}?Y!h_mXTz`M%0s\n(]VѩfzEIַfr|h_7g{ÜsmR3p *իuz`C`f,|#\BlFF#* ~]#PB`փ9 qkȊ̏1Uޣ6Z't(U6654"!>& mbDC`w|^`,C`J]K_OR?) ZC`%qTW4Smaan_G+xaNȭ#b- M)WEN7Ba$M& %AtڰEK#BoZcl^5gqY }q!)"w%JXjNUSo..&`^iC^Scc#kk$oݮ&msϿ`:zK~'|tdw¡ 2`&<^ZZjb>?W3+OAXEc.~^g>lfaAbbA:}Bz62U_+͠PC18 Oo0A%:5jHf@$-c} }{˾ ZbHa/up/w̓$2޺}':xsNJZNťmg/?eE +o%M6 PULA .WC4I*FV=KE9 /BCX0;8P펶"̟hj8 30B?O,!YQmt FL5]|Z'V>so+8SLrx|HOS}o u ,"',|يKDfff} S?pC`6e˱ /DU0˿<pU>*i#՘O=Ѧ9s44tm.E kPb>\3r9rP#,۾(M{T L4>JBAoY+砾/¢"I#M<))Ԅj >NvöE}v.)ESY"^v5ȡ#p73fA?I 2et USLmO &6ޔ?9A iGzc!qq4Ƹ>C,3{mя7|_dLF"&D"FƜdGW!Gx+837m'MG5dR8 I*F].?xBhrjWpXmټw#]y霽 B{=u[2l~p {k8Z=rLIq%nb6ҏ1݊L!0S֧>vA|3]4D Ut_/ΠT7oA]UIOomO]@hT vQl?D"_cڗVM{@ZuPfhS?kqB\qK83.jyxqz š*!P3sÊv$&KJĎ/T mcȪqL~FFֱ9*e[4^e'=@1Md/8hԪZ:ky.FA`WLS>xx]unqVeB.?^(nR$-m_4ӢnҪo`=3 O̱%"I"83C /.\2:A>fχdw Z{y8Aa]q6ncil[`Eٯ DY5]vh}KkX ?ccJ|ȞX >f+Z9rhTJc\b4\[ͱ5>L`DnQtH4i޴S/=0P՘(E1 mܾkЃ1?}Chڐ'|)1Z4<}IqEKf(n] H U!,߂(~%q::<:L+FK 5 RcaU9~>L qK>y<©6yD΃IǺT;ɨ u>=*J:anO2^x,A>q980A~Qc4.%*sa>Y{AccU rb=Ÿ:BNy?O9cs&Fq]T%0`)=1]T2Vaم~DhlD:'>Q5CFG< ^ꁣ#(J ##ž~aUڍSRt+~bBi.@|#bC;cֿ'e.>#RpxNn}2 KARz`?~}d(D?<@ndw 7s9mRNU&RrgXd̂E>ԳlkKKW-<+7;SnȘE,egk z'o CwS3oz>4Ꮎ{]I.Y9|.LHJξ&G7'*@5:ύs(#?v7 Dp[Ĕch}KA>+'7 S.Z ihGo97܌ Bz ᎞CC&He*ڤ3< אW|[_슯^u-_p'g~{?5,E բ>Hnw_///*_==1Ʈ6>͏~˯:?6k½wэw52?,;?ƿ˾7PS(ES)˨E:=P`Wb>(,|̍1A'zŷ}UKX"}ɿvmcKzk&AtъO;7Öj)>gom=W6ա+FAy 3w{on&Jԁ.a! ; ǧ1,d>}Z<#n5`OTjt ^}*1<>Èh|qNxw⊾XuGěB~^COH*07h{44"mpX2t4>ZG#%J_`0BK.{v#*d4TQJFi:+9)q.?Yݪ~a|'5zᇂU>' ?n^Oq?'LiM|Ն<>ǛQOqzlI%__0REI%\T=Lw{^7l!v 㷗ҍo|7nKx~Ig)H52!މC:k=SkqJ$}̂ҍߍߍiA]h_!JszWE$m{m?Ⱦc qJannn.WN>IRR)m7HNF[V/OWuww_: dsY/"0Ԧ0J,v~l7~7~7%=xJr1y/~L œq{)]xuB7hqxsVĜhyhJArĘdtlƜ%OLdܢI_P A.&g93{xentzd+361{>4~jח[9ke+i{ysTT^4>Dk>yBq!z3IRYC]N>VL1*Jh3c̒ɘ(8ox_2uK!iplfѱA2WYS+g-.0`SBxX܅r'ϙx짧.L1r.x%*MGV徹nS߰T'R@%4^j&hH_0FƯ|Mf-~y*ļ *O?>DXg%<>9'>1LEѽFDN0W]rfd9-H|S_4欳?_.&O7ŧ[=GEJǀ},qlF7pm4)p a{&W_5#ˈ(=*ZbkK'\r7~h 1o G:wnK$Ŭ$澀Gu_O;爿s˹ r&מTRAʙ9UJھjE`ބ %-7b r|K}SW;n|B`xDG,(VOBR]I+,h3=5Y92IJ609VY!j8K.Yxrs>{-xɇGJi={~=|K>Aamgrz$>e d-:#bJ Yv'O{¹TxxtzCQ98# UKmG)OJ)Q4:: H)\BO'"W y?5h5HwQ=ORșyΝ{`#F1f޾`LNϽ\SW=w IM`: )7h_RnOinGhdҍ5tטc螣"|rEi4MɎ^|;'Gyz`tאqi*GD_39hRHLJ\bZbz 95d\̠QS2R3GD2::X J+=88$2.9-+<6Qɪl BޚHhr]_x?X暹 {1Iy^FڳolcKƙs<Ċ1)8#Rs>sD$(E@#|}J씋j-ƿoxP|f8=%̱G(dĤӻ$\Uyx"TЖ bKzN'T&VEG;`+ak2V2Ϙ4ufKK?>zUO|vihlʆM#GfӁ T!#U魈E="Ӌ\D@`־OUo|G|^a߁PO6Pʊ^(1̹T 7prvL!^_{C_Gvj%U:ƿ6`P[14NdNџyqCCs>P&OWCŽ)NɃٰG_'m;fZq~>Ħ3DqycVv&<{~yg:{6zs9#zHiR"]: 65:$"%~굳=&g.XV6m^3lkk6߸92@5CAz0"ogعвOt7r>;]]oܺM|9N$mk\`vQ/~v~Sz(И[Lox`$WXS* Wa9F範*mT$},hPk}Ͽpٓ9ehU%YCY'LW,5Q[Uk[? [cg ALJ\c2KV) ' E1#U3O>s- K+0-}v 7\trU|qU\nEɤJ"3Ƈ.[z<& ^q+5)%hMw]WWؓl=Mr⬃HBP^Q(DEL!P! bz!@~OOB"$Eg޼ywͽ߹w̛;7; {8Xٌz5Ѩ鄠FIJETRO[z>WxɓqΪ5DOj-ݓy@4Q"a~QQ,KK*!B@#lԌhIN^!v#ܝl3p3-g⇦9 B;I',ap7LmGx:['ptX`jU 5) ^֊R0 '3P¼ W;2-;NF 1{ ɚR{lhX`h:UG qϞ1n\dHma=ADCX&kVUI&LLҘȍM;Q^kӎ)1 9W$>c!J*F3Xi6`\ %>RYU׈b/Zz+W7̘f¢-έۼ0ޢں9 W`x0w*KI?a#)(nl<55iq\xܪ:Vka@u{ {02&Ci'INNP9[&^fNu]|n=åZiTd6 p<%}߼%Z0ʈIDΜk׮ w~׿MwqjUvFJlB ! <&r9'neKgMPQF2Y`2%Q,d*8paF s^3{6O=~|.xy=<|r-; qI%}0o_y+`WT:%\=J6 z:m:+W7gA;sx4/cU-?&31Kl.z }h>cr3wȤ[N|.;-4c5IY`ۘbEw1pDع1tQvč6B?~L(0sE+||k`Ghwd Č7o}l-!JI;x"W^@yS6TZ)\m/ʜO7a""^`xsSA)Q ȁ@_~Pe=Λ<$6Rʑ6w9%L:}.]ΨXB8O="iyf-|.G0( *'tz2MJ42a<~ZԢ1BFX3P)Z[ع[ L8y\T@{Zyh\^~3l[N*.׊gbq(B@mHohbrQV~Xݻ?{b'FE,_+G %f8GV5PaIc[|!^Uf8P/ig;0n޾3+7.qvRZfpx A<"%啜NH_fM$[0A̺\v.@ :mjԬQG |ZY{lٚ-x_lc+b0 bWϬX[ +k&Z8;'%9V ãF 2[f21ٲ#OLSJyy!?E~C.J60%>zcEebb|2y̤Y R&-opdT8tUx [B/[9q ޺1f(_pYjDx庭Vo&|[ hzk4 0} lyY+$[@0@!ٖpmq$9jLھsO\rZ謔ɣBsWSssJHa+36gYo82t(Lc9hKZ8ܽzx?yo&99yW Q|'t⺰ki@{OAFzK2OwNuǫ-oEdƲ!O&+*v/,9 e`7H$0ƺ2 5e@KKNUl=&̘ 6X3$a[-yGP* C=Cj`Ǜ:'$) /zAzgM K:Dx>g*]-qr 2/$W 9 ,%&FU<$!Zi0(Y>kVT@NE1:N>̐'N-[ǂ< jȝ1eQ<$ł0Ǥuۘ~|BmC#}QQǦ2KaXeױCV6T.]}thO$w0ՋeZ$2oȿ-eL?K8idcRb҈E+Pey\>i{q9s1/6 xáµF4̸0"HdBKP"< s?&͈P-Fj`FizeNh_~fufW?~|l-1[.cҙ(ܺuѣGO`"hreg$"#t۔#j8k G`4{iE5@ M1f[f9\]hc!~߂+JG ѩ"Jx֝擧+o-[ Ĵ`GYp Zq pj 4$)RY^d׾Rxtd*2߀?1fuy,wYُ(^ǦzXÇ s3f,<}>Pas1e9r, FbW5 IJ#5Į[<{?vy-S(JbF!&JjH+mD=t"33(c=S\N%rK0!+n7goldAf :ZGN50K8Gedj#,W7^"[ ?Zf[TI9n8*8uX)옑F׫ƅ#g>nn޼܃Y[h\ژlB|aa1̽kI0juUeC; KQQn}yIKgیZ[+naL<.2X&{>÷hbom%jWoprП=b)NL˅{]8ҁ,S@x1Tr2#ls?"ĕSQI}2Q!tFp\z;͉ O0>FCPS3"ETED88O&oƢ|zzk~0 T%yY+K xE$z,^JwD9`Ll\|#-Ջ# EeŇ* "TȊ%HMC[p1§:IFeĩn+<,mؾ  ;ƞ@ T8( (D<:#ȼ|'bHXB`*-GOTշ˺cy'vvW#|\,J<%w1V@ei=u]S_6M?X{?Bܺ"VK۸ZϞg iXU&5GSՑ2т: ) z^`;w#<DZe>o>!֨TRk KeyZU%1s"a)z n{W=b0/kctb,t~1 rfb1pP@PE 0H⡓קz7#8`GXQ*fza~ p$Lnm\m.x,Ș#ӝ2sPѸ^7 KIvg?8蠤C],S| jT9 A6(J r*Fe]}~KP,AY/ `u8B<^vcxgG-53/z?I^lIENDB`davical-1.1.1/docs/website/clients/iCal-dialog.png0000644000000000000000000016661311167760073016676 0ustar PNG  IHDR4jsRGBbKGD pHYs  tIME  ; 3P IDATxw$W}9R;AZi E068`}/}| [lcm!@Y+iW irTGuf>OtuWpb޽l277G@+ֺ<^=BLR裏26q=~ÓaPp[M.ٺrCf k^) PJyA..NY*RiRո;ٲe W_}5J)ZfL&8I>\pp XRI_B%{wK@H @"`ppq B$RCSB*TӲZw9:l&R:>(pl61M۶D(8f-U#hugבy͑dh 0M)%RJ,brrvM:fxx<I"Bnu)%oיLL&ӻ+O4QA lCJ V|?Б>T-[022*I){4B" C\qOr? )) _|9\ۯ2Z#`iD8p5^x!Bt:dt&KTBA.멏ط$_16] ׌v0 I]w_]LV4## ~/#8XWmw=Djl#C)|ף4ujRUfy 'MR`76\pVp>v|q {~ůoj #l\mCdBB#L'n(!8Si|uh4 ]2Fp2 a׀:f1,\tzG<#$H%aYק 0zQܙtFыpNJclK̏߼e濿9:_ XpKOiDvk_#=Ʋ>~Gner閛~ ->7j5r#￙==B~wWW7[xӯrހWy_=-np4ҭVZK Ҩ+'G:$?\)'AFGyJ Z- B+z=ϣ^c6L Bk@y.[zAvƆH*TVDGN]ѢQ(I&zl6H awҵZVE>}cC`R,캝ognc#/bw/~[so7uxKxk_k|?؝ &W◸?>;(Sߟ㦟_LqPN~os'Q 9E8H!,'J#ق7]+mjڎC^Mkn300.QF& <@yn?| Ӓ5zGv<}.믹;?v QJL&}F * VQ.I$%7c8?iL\|1~yuWub#ãcl:~EW:Z .c/`pvJ˹q?|?4? ׾bj&미U:H!~ o]H>G1 u8yG0'Hf\iS2sivm}M_n~v#\_u`ֽQ.yI" ۔D w=p @P*i-A&15{vnNC}=ҤR^A AJar)j4=!HG<#$թ15=Mɦ4A yLZ23sv" 7Z.MyTB1067C PTh`xp#i5*-TD 1 Gh&!eEXRQ:~ϮII$Lձ¸,<0R(i7Xu?aiՆ싎 8-)|_aXa aϺƲ-tAwIJL:́'iHiĴ0QxAtKQjaeJT ôBx>S ?-I|'ňqI:7JW2 ck'cJ! $"ڏsƚ'E9Ҏ7떃<.{B7̱_ڃ7z~?݀l?| J~3r\msECMӌ1bx*'R ~-߻܄gEܐ"F1JBA`FAzxߣV}{q1bĈQ{'Tk!3O= SR(ᰒc纅b#FO@ٚvk!H bԉgb=}E}}I.xuW4n*A:`F71bĈu{:"i{D8~NkLaҨ+)Pզ|k͟\KljӿPZ>"G#<ؖt<% f `Pk4MTAHITL-F1v$|:ji&$놵{0#4xx^9x2]֪ 8gG+E.j\x}W^X9^1lQo$mE"extJfkXR`'2G KaHRE V#F'KN#b0AtTNR +a] cmA u*Z)j%H_w__~`:ufܤ*֍TQ!{>xbfB2c|$ft*5P=;V1bĈq2J&xJ;wL$+;)BPVٻo/A6o %,N(P*cO'OXeYd2E#٨a4 $0j@o]~"B/ %<œ蚡hb r^XiD~`|6C$#cMffA17xJ1bĈq$O5x)04 hz ѬL&a)I$aWgQ`V7 }jFn1{0xG8|0Zk!˱uV} #Lڻw/sssmRE.2L *.]ͬ? |?[HHZB!γ,S#E)hF Ð 9k7(jB>x#Fk'5*|m)A^)%B>L՝s9r3i\9: Z ^JE0eYdϞ=9ٶmG=t_SSSr9z< J#RpNs y~`EZeDt MKQPJm;eܧZCwR ::#$ h4;SI^):֭2 :ɄáGX?D±q #FsJ‘ԝ#(jؖM6*ڴ(P~-$5p8R*RBoKRJFG$|JcѡO}Jcl9-z0$oaɐH$Zh(fu#ئE^ǐVC!McF|Wň#ƹ cf~%PaLMMd(-,AJ'2ԿGXjesjWjZR63?:NW޷wRldF)Q':BR+= '#?JYDGR%9ض#~Ei:Dǽv阣#EIS HXZ*(-gRs=E"$Ȥ;KerDXq, RJDjA0ܐuFBc;6iR.8|pV!c91bĈI* BhH]NJh6q R4i{z\.ia~RcOT;_"/)z۟caa8ayn$m6CǪUĖuf/p gS^IҌoXO*gx5w[ |pxjM'I|*rq k~'V1bĈ6>KȯlވeWMۭ^%,uiwڤtHJJkQKwP"2,dYJ+fD"3GMrS(H8CIi!65Dߴ4OTj10lvnfE*$ anI%m֯_GˊJ(I1 $I:6 GFfI.޺%G[ƈ#HLT AR 6M*DkV,x꾴&hW ezjzS,baay$ll6K*u]<P\T*d!/i8NeџgekHZ R*O184L2at1b8$lZz={011Xbt34Ls E>w`tdK.d c\B IDAT,$Bn)E1[u!ii L՘ Rg9Dcp"!.z9&RZòA0 aZ<'tעR*{Qgb1bĈ gncGaMd2=ҷ^>rل"Ns֋HS+RKjJ8RBiӜX,|v$xD_ZFP~^4'l|AODX̶,6oZNǥ\bסhQTI8ICELSR.Bp2)ÐT+U\CJ81bxz8ɉ]! :khossb&ss߿GpNm'>'2B]}uaցn%S4$4z%.4d2k~Яf$Z~\BDIUZ==ߧicH(j_7BVga~agfLl, d|| Ӕ˺_*8F1N>ttEӡhrD@Nz>f]HCCr+~;84`tW\0{&pq=7hQu3_ܾ8~DT 6YZzUZdZ#27@:dž rtJ9,:&\0djj@|cĈ#)(WN7*J7:XhU陑aiS>Q/܌j 1MsA_)iLdt58 q⌊D pB\.MQ|КraRP1 PhnT*8ӻ 1bĈqI88g}k ^D1^Qp mpWB# _a예bHij ̊x/p&L2<45 #FcY6,'ʓUZak1/:^Dv?IN5ϭmfiH1bĈq>rM 6@`:KCBH Ӏ(k>.و$y}kI@V+[iRJ>~ԉOYň#FL'A00 E4G!A"&Np6rx*SLїq.>w:`;ӉL4J>eܯ{);HÀ99ܑ|#Y` mSň#FLkLPwoуGyVtnϸb qILV_e!!v@inE#4aX lK{<_y-v?֦Pc,M#ZT- s K$H t@ 4X& $o4L \4 1˶KhEhMA2DjVE-#(U;{nxHI(4I:Q A|ôMad"Ay2aXRnwFH'2rcIG i٤SU]u G! šRƢ9RV Dbo8 ccGk)%6cCYZY؁LP(~=%b1O!#Y\Sc>8 RL{ǧif$7:;,T}Ƕ0wjQR C,3zl8D,p,{Il6{ ? lN@u !djh)FL:]eft|rν$$9Gyie3KQ(hϱ@Ab1Ń;#[ T<cĈ R>V7CR Wm飊͑#ӌm;vU[t)ϿGwjP)Ζy0(QI羈.(P*7)x49J sBy,J#t_OCiڸ},h ,N>I.2Bev瑐3qiysZ2?g]Qp0e !IRclt)/6ί'v(zaq)^Dib٠{V :ViZmzINFYv|*|&(B,[y _@)56L7}n|ō' C|.dDi Q*7qWW^ǴŒ1bxڒW;A.`].z#94E8"ͺMo$6 QTjvllKbۣ\ MunNO9f'ayJ"0MX9:hޔ\̩Ǒ }rQ035%\\mSlSQF |iGi6⑂@0'4 2RӨUi2"5~>%\WNKJyaa(ԧ\j{(92[㢔&2VKhogatj/ηa- [%; ; ڶiJ0 FNf.f eiG\;~|=ҭZ%03_%=w1bĈ+5A*`a=^l)R.Uh5A瘚=2QPmyr١m q`rFIISVcgEǴVJ-H:5fk^D]_tlxs}v?7ԑ P> &L!"JevK:.!F7RLz}|/ 142PbjƋ/g:l|}.~ď?O}$F)1TcФnՙG[)I&d~n3SVmJ|G,,qE Y )iJj-2~Lb%2 0Pa5}RhRV {;8EinW9 R{Ro FLJIZnm7 pT.\YV  K\&e)$RI6[Ŝb!p]T:XRJP,hwN14V*~^] ڰ07 Ar Sڵ q R Q*UsBP/PwK9h0=CIxMK5i4#Fħ$HO) BEeV~iFb9i  Bb 2lUQHQ~R+*a@cZfˡ1-]Zӭ Z"BbZa孨BUX >U2B.sF=W[kEn50LTW-6 )* tذB bZK0P*}@]a8;.i1ƈDD:/0Sԩpw_Uz4Z9zʥE/jca;v/]i}N^jpAcǻ1ay~(֧6M8%4kKtuAXO'79#@}E': 9)xWjW1bĈq&KP>$<::pG}}[V iH|1b8[aLqzerP |ߧT*l6I$Z- J9<1b8~ 0mfAP c&m/8Jx~~>> tHy K.X$#FDRJd70R&,4͘% `-MO{"<{ ̒쵇L$H)QQc79#ƙE8jxST ]zme+W@t2O 2^$>BFw. #F3N2$b.r<~c)ᵞ328FO1EYA`&eb80+Fg aY\z$ڭo<~ftΕ:`O1E$>ib&At&#FL€ah5B&<~fdƗ1 ?*`q0D1ne@5: r>AYyڊ6UĊGBEw4GXVsa<1CNj$;^_I$bxi!bI)N)*4F%`t:睈OrtԘje˖3~'kWzcI"Bvme9Ljql6ټy3]wv^_']?OoL=%|^?NHʘrm 1 xZYk0 ZjI1'TS=){񜪭>ө%X4Mj`l6 -_kE / M ^_->;!gM0?  y;9y{w%"1)O&e&וOgL'y*8j&ѵDFk41 At:ZeU4Mvy[^K_croGfR G` 11#YM2gZ8)I$,Jvj/hc_j:yno>5?Vm7/qk\{~?8Kthk?>r#_''^cQ@e??z $3_斗]~R"pSoqo†[~7qxu#|}6<ʿחh^r杯G"Ο?|K;H1LLk˃<9gb{wgvL'Uڲe \rḬkD;mZl!DX7  Wh:2s 57<5U@_+w?N۸v){&'{K'?K&?7v/ct3>3mևxoy_efḞϯKgصL̓?|O+xۘs|#v| ?< ) $`AX)踓@>兙+7>}̖*|ɼwyOW+jC7hg/s e`(7r`a"~~/n߾kc'N{t6tc eu:rjBAA7Ǭ BzNzٳni'Hyfll%9rMۚ~Z,#O~&+?®iM5$yrEeW`3anx~WxKfl5L*gdp aHR$4$/{7,qA6?/#Y p 6\|fr)WX^jD2{7c|4OP?w>>o2{pķ2y7>c_;>2;wJzHh{Q@@ElZVյu-{kcQ\"J'$Nc IIf&;wO999Yd9Bq( <[,X=q8^ěW>o*/1%!몥0jc|D}aZ_cJF2MÁ/NN<6$3D Np iuҵQ7 σ==] "bM] i!4MkF(BJ֟ Ci&6ap=ڷ?G?.brpXUvͷB᦯y /7n୹+ؾmUjL3*7^5C!ӝ͢Ml[2Ҫe =$aF60Mq݇O^FyM* IDAT?{u(߃" B$$~BQ.%n}^6oD ۢW/9h~~徫'pgqKj?VݓoD;CW^ӉolX۫X<,HYx d~i,S<3Y).{>eSjO i.\-sL ?αڡ.'W7nKV+v%mvb6l3xgTWN+P(!˗ rҷGgcO:5'CO;yݷrd?]Ɠo=/͠ o8F‱뒟so<hW\@2yŘYd [өdpQ>pm_NntV 2˙}#w]R>g>~{:nv#:4}`;\-tyc Z15oނiOO1_VVfd2Dӯر.]DcOƴ_9grRhۯCڮIw=MF\um7#ZA G @fAB]1$b%sVL>`d'EEEHf`:Vnҏ''7 dw! $Iy6Laai"Ea:jv1>Νpr Լ"ܲ>䯠*`$TUЁlM <*  _Tp32OkAcݺu׏\u555 ՝G^AnPȈGE, 4I4@efJ+(,,x+wP0)PrP$;cnOueJJJѣ.QPTyAsh";wFUUNgjCt2)U'`pS&i%`U%?:2<|Is3|3z+W^ o"TQn4xIs_gfêP,FƵMMgCIo^{=|7s0g;tQ${v:WzىZt]GGB!Ngt'b$ߎ|!2&I" @"k5wv>yEF0a)`0aC蚎,;L Oq_F 6ޥ#]rt*khzSs1" !d4u5 1`@i`"*a`"S@ h8²@V 8.@UE4 Xb"P"mvkWWA+$+/rkdɦ=D, n'[V-4y>W|o6zw͸#LLc;9 Tނ}8h~ aٸd<90O QE;z?^GBŒ_3b:f*VqM0X5^In^6#•8m қ`,.;w!_ ҬͲ,,"n(I<ɩ$}O'[}堾k%nZ#~t SJxX] KFL-@$#b1[2Zªee{;+]7g0ؾ` MMZB}bXHl1ŁS.ReՕu Ǎ҃TTVpet8p:ej&yh0T5sp` ,D"Uo$*aQ]SÝMnP(Hxe]cX]' X~=~ X e\ItOci.L\v h̦2Ė?K60+U|;j)L1K8"ljܫBp8vy@v.9,r ?0- ]Qq6++,, \ѻҀ)t{b;V],q&KǵL)ZS}hM-Nr$/HG67ŸZS,wtCj2ghRnu3c/;ZIDFVDVܗz дiƭ~DC 7ٱKE/L=h.LQT2=v6)9Y{jiLz il5 8_Ν;ӿZMRDA>K^gp2Y|SCOmqlLÔQoblϧc9a]x<Ija 8NG,@#\^O:m;TLMDV}ǃ,Mޫɦi5mJ=cR2p!ڳ#>HXBHyD.Z`s͋/a3EB:twu<`6}$XQx&ʹ躎a"֏{ztn2!*"~ tT/[ 0ϯN) mڻsPmۨB x&x'SiLb1'ӓORL*JXDC2yͅ)QyO犛R<^d.^_k~G޽cB6eQ6nHYY\G89wGL 7 H07ƌ$`jJnscJe4jpG*Hf*0,4u_;cWAFu~m!lS)z7yI5ovtL-Vm%YƔ82-CœVSIȰJo kgrbSsOmi|<鴕MNe{ OyӉlKgHQG)AՎfO]q#u)c{aߌ$h@,sV7 #ODykGӴmJ/@"I4$)V2^][ukQ[un&_[,>잰HF;/LH;&zt1i5Lj[x)6,O`rV.x8o{l *

3[R!f/N Oplg?UxHD$bɪ2И\Go怃&K߇rjdN%|KH)o<7N9[åu3Ⴖ縍0eKHtSS'hLT050ebZb1u{i(1qt8?q(=<};;3/W_֏9kpz 9|tW jf\M7 tLǦ-ɴ/V0oq5_dғqyK : Fe#wބ͋rĩ ei65Pjk큥 1O,4B`a:%jt=^) D߯a%l +N s.gs1]QVerƹ6l.elغd0Ԯx˹;r݇q͈pUXkjpaXj!cF|7!r- N'Ys_LًVoտPe0ky)L}J} =eޥgvgX~V{Y u$*縍mLNS0T&GC4=O t&~[6 n9~|v~7gU]!'s~!)egqQEpIwrb! dtL=!ѱڑEɎż7{5Y2ZP[K U\v #q(&^x)&-zlGBՠPcȍ?)b;gSz*>{^[I}Ow}Xya\y U\N0}B1k)^藺 NDz}Dz;(ԏCG祬u E!]PN_m^~o 9xPM(_U9e^OW_г7N39P(<9;)^%{hl&+.| /\SĐa#cdeiOq yݺu׏pʙ3GEݷ= G*g?Pa^y,^3|~5%ԐKq+VsO61lٲzKRj EQXhΝ;j,Hc4LސN4x)SSp[觰k ;7U,* drrsQ3k9e!HzMP]*(^՝EN-@BuB˩eLnfO(fqeRS]I@Q 5!WqZn}%///V12t@uN Lj|MOQdR-|l!lSJ@R=d!5c%Q羰9_DԠ@NY^91]$`0Hii)k<ג&j Hqe;vBl xU}Ev5Vt=\Ml60El{RͻJZɺ?\h"O4A6uY bSx$lrsÊ^1)k晙 ax`׿/LKti Lyyyieɦd ]3 #鹛)^*J{;5%AHw@CQbټT;{Z?e͗AL{ ɦ氊SI ^ЖݞǓMLb{\{K_/Ҧ΅Dyj'Ogc1eZ?ELP+YGCVNf_8QEdt15T-`Jg#m Lɾ&05fkԚ"hJsJTIߕ|ԜO }91EniGԬVWۊ͋I?129h/6&^{B?DֺqF.8mlS&idggSXXnJ[リ*l]ƆL񎑤!ykcJ7i77hYfzɭw|63jI(--O>x| SSm>9L1!(f<I(-^4t05TaJVS)գG-=v3`vJ~~-mʸ,IqFjjjvI)]3)Y@nLq_ҩ=''SNNi:F(..&''ǖ 65 HڂjuyހIIH<DG7y Eئ)і05 nKd&;T=*,tY@S.`mf,lj̪S&|<pOr-)g['˲PKV3oR6jtbF8e,cgh6M3G0HE"0 \") U_c1`HG)lM)[?5E|00WpUpM2˧qy/Y,aZI@PHi^ò%])Q{Ӻ1ec&EP_ L7J4t1ym Sj?\)NX{nB0̌wd|oaе^ɔ[o`!>N8+6lr.p_wװ꫏x>dng5WRY\5i ]`9?[]9pPJUŗeX8HE$!rc9sX[%Bpl!+DŽ#sʅ||{q1c8˙!U <<ޞ>\r1'C嵩K@XM{ 6fIQC󰐐" ̄1`ϧcEG7d'Ԑ 1YReb3883t?*|ʼ؟`,B LC|C%r8/xEHZ>;e.L78Op|V߰/Wo% p~,|s2e4:밖GΎ}r; #h J w^[C|ar IDATMG'w3\:=V}?K={sٯ^8#y9KNƇØxĵl] o{߀kR3 eGqae \~ٓ;|4=rV ٽ9nc$c>(rG2'6|)Ak~j4Ƕ˘3> Πg'xWs5t:v$YƦip_\獇[ڻ?37_fm2n{'<\'HѨe,4L?z+H)geU8%H$wg?wh @C9_!G0_cоx ?|@AN^t ׾71#9:q~)( aL.udA߁Gvkt=2)MLfrS0tJG%TZS:O PuNG?ڵ  9D6|S̠o|0g kkا0VA؊Ҿݜ0f| F;~NcqvƄ#F|#{%hտ->CÂrjL`ࡇ~6 ƟC.sVrp6pS?p 2jP!UաXpVc4Ip*<ȉwJoX0:F?6<  +5RkK_XX<ǦO5 =`n=lΘAAT&ʠPJ,u1W=2)vʬDfrcKuu5 HI42HSS\/͍)a~?_>} ,nkdYy»&"/7+,L SY2 E~Q!ӠݹRʚ|a%N R]YN dX+;lWn͒)*t "/g-Jg4"٪w };eaZn$zjgVXiwxBSdpCGF>)L1c9']kd($!֔@B2R8=槤,$I aQSabE %*mC7M$!P!Y;"Pd|G8a,# +Š ˂WF?#P]€3 VR,hXB ,SH!WRא_l˰ݞslw-6Ԧ(R-]"S2mbڜ.H"gEу;d] EQXvcό ?",G-C!Z߈eZKZ%CHt>PYU$$ ݈d]1ŒuXiƳ\WH5=[cT1e’1 氄ߟb3M B En4NS)|/aY',bK| gRd |J%渍qLk(|Di$z( "))+MYGYdykFP2Hba",f*;3k*5Nr$2_:r&Lu$)݉EIeGiKݿ%ÅQ'{g\qٴR"9ٴH^g ۲L̈B .}F44aF[An~+LeGQM3O;jJX膁BAaf`r6EuR_5CFipEI("+e2۝ם)לh{sG'm [q3I)3Ҧj:Ɣ2OHOhuXlֹW4rss9eyLEѶī\?e!˥ D(\ÒJG ”ed!qzB KqcCFڒ˓Śo_ާ1'|헟Jl 28qTdEqڸH,t@BBxGbWyzzS]*5dcJ S&֢=vM%/E_m_[vek f;Tד”6 LƮ5) >P(DN;v,8NQU!C0b vFmjϥF{&o^]w HY]8dSغYV"}CyT9cJG.bKxSfꃏM1$j'L05ueOdO2k0rH  4nݺ ,R24ʶqϾ8'[ņ K/t]<ӴsȎb|XXŃ8d0޹Tt f!p9wƎ;^t!@X'<>%~'y|s|HϾpS@_ Iuj|~ @L ö e.8%S-vT֠iAjλ/￁}#;2Ş֚{#T=v$k;O%vS1~[=վSܺөS'O2dHR%IBV\8|FOdq~)\tX5!F8yJCQL$C*/nwAN8 n;9SN;bbBDL4?@wjN7Ƚ,`pbBJ{^&|+HvVGNwZH~'@n#\i0b}B. To*Qt1& vaUټ Sv1xt))^ek6Qܩ퍯lp.S3()*y*NI,XŝÐ-x}Q$Nd;@zA!#үn}MVo?,Ԟa%Pе?*AMcQ>d(>b8];dt5!h u._j:ʾAh!h?;y]w6EF-pйsgTUt"rF5SB8)U!j8x*9$AS"S*BxOdpS/8b~pyrX 0LvvnCPYEqHE(! 0- ˁaBN,,ˢECL+y8irDWC_'ٗgP܏?j_XP\dW $@ $+# ou^ө WVnUF{1HRWڝם)}!l-{RԊ4Ĩbl! Dm$(:̜ :-`JVNScވFɲG" 2j_+r)),"QĮ")bi3ܢ3|aXU$!#KVL~G9Pa3;XRX'fnlLM#{SXddT lL͋9 8$S1x$!R~j5 `dq%t9aJw=ctLv)Vd2li n}>.=gcjHLǮ阒*e2hR`jX6S;aLk:(l 'Hb '򿧂5(~jIK1L6yo٘\L]y-=gnȿ%P|~}lL͋9-&a2J*aMKV8ϲ֐0o^TKM$IRR:aי*1y)|2"hXxCB7LlYlS3^HxT E 񂶰lYkO8Jk2T)YY*хlT ~ݰMͲBp*E}r9 NHmq٘vOdttvR{ =ݱ2폙L֔,PEeɲMňPah"EBHRZ31n*OmSlO8e IG heRM;")ZeS1IaMe;*i Q23ꎲ&SE 6WYl-bͪs(.ZǓd#R<4-Ӕby D3Nцi)*[MQ+aJ , t@Hq ɝnlfg. ݰp"& "TkJ֌ȊTX,G2L,-DD&3oԸK4 {{3Xt@Y)SX8Z ߼WR[V"T׉0Hq(3=f 4R4 \}D䒗"e?W`MߚIU@u6~_w5M+7fWӿe]iS4d'LpLG:!XX,\ aT1l" )k)s=O2m_+E%b"Œϟ5U1J])sUĎ-KXn[lw Oc{ )~{I,X}]{w>׿iu#Žwg_Qycʢq h~Į " \M:u(D|v[6ORǓ`)S:m ScJN&1It{,byqC_2MqP,$rrrgkn"#+zIF8 555eĈ<֧drrĿ,^ o~yYp ZvfMYg,O看$ *0A^[ԏx8Ru;_SH~U_^iw8#=OtY u4WQvxjVrNԳ/>&2?&f+`dž5^?ЎB.v\=u'K B8﹉]dfЫ}g__Lf;V3Xd6'p%pnm/⧘U :k ]q]{˹aȅtq|pߍVlʏqD| wasI5VOswrF?x5 K3O0gurӟpir~a\VΒp!qCS"^ۜZ3D"IIo~x9۷15)L W_gʥ|,Z¯P[Y%N'bTmM%³8l̡ݙ?OrzyV.v樀DqanJ[AaGpWsQcCŔ=tiߎabiEFn&``"rL^{ $";,Sr1X& \jHTAy SN1r4uFFзG[U[˺,\CWQb,Z!wʥTT.oAz 7o*g:JEi%Oa3X5*/8.K|W.cܥr! ܋,EyF~+ ObE0`Dc[iQ_: տ,zsP:dy6AM?G‰qr'*`ݯ^Θ9}<y=0`]`og yIU}νwvHP 5h%ӛQ/1MT$&kTDuSVk`fgs<S8"%.F;l_׾Q9ϜAY$ж}+!Q̑^hOpʥgJQ|ê `c5e{mlq\p)7eҲ\!>,R.qG-wi sυ.JʈGœfqt<Ū6-ZTT jC+ƹ_9g;P {Kӳ#z]xA˟mL)>Y5 @4xA =??fl$voby#qY.:M1 ``߲Px/%X{R5 hXHخvᙵ%#CM?a'76SEa(4`˯0y# V :T0IMYn>U |>x#jә3X( s~՗ת)b'PBu/Jcl*7]UJ'q1Azu e؏uk `-_K+FS`ajŰq#L hinEo²%CzGVP˺}_綿>ljW(t/` ׋vkbz,g|ؓP0c89%ٳy}…,1D{I"o#x:nJKҭٻaA@EGcBM ho>2 b"럜]ost#əSfQYOӢǖh1gofB~t#`N=bi)b_-+> L7Z,䡥+XV34btJ=lqg9SXzvΧxd OI5Uc__D[N> 6ɘ.0QF岏} 2gI|{QulfckGzh Z󟻊ǸϓfUQ y;S:\{>z"B,8i $zv=!Δc0Oqi|㜙uU _OxKjv^*e\tm=LF؍[㌳#_$()Xz-ں.a_b7CG~.Рr5"r󞤔B!ژ2eJ4Μ]^,S_L)4M(Hw dĉdʎ$LݭӴmQR]M"F) Փ"ZD0q,^\{5ML1GO!ڴ_ZF,EQ Ȧ5+)Am* jq;|4e7kWdWE[A^jw LK;5K jwpQSݹf֌I#ƌdD 'IA$nvoWGh\zEqֹсw֮|oD6_9מogOLv)AMo.cN/[EI({zVyISA 5?27[nr(~?f6ҲJ|:4WtLN?-=&3m/#ƌ'(W9eo Yc,m eUǰp4"7vK+3N8GcD )**+#-46RR=me[1*׿yfW!Q֭ބ|4ƕ9(>k HƲ߳y|j<4>6nުW׮wW/f|u5HtUv[F*̚V3vlʊ|D~2?oBx# O}‡;/L:/sD8R)1"!hpIth 똉8Mv&+Akc- vh4B"ZRG hnjD!Г9JaoJ,4fMHaAH4MLDiji&Z[;d0BN%yL~HXF8+ki ٦EM$F.T`PIش ? 3 20-3)ILNJU͑MDhvq,P2Md]XiBJ!Ba&fֈDZ乺i$ Q@ p3(ˮ-IJ%0M;$[j:{RB" LӴBam=y+YL ,f9`aML,J!5F_Y-P. K q3-|2{ 0M{[%5–2YuB!UҼh!f"3{tET5r ǐ>dyȤpLPK Te"DOj )5g~li9nt!A5iyeB7.)5>$`ƾv[[j fη I2[l=n˖q`.0bGLc8.┏~0ᄋ[uɁqpeV4- )_~>A¤zgq֎Fucv^(|t0@P. lnH)%OZg|=wہO[l7 PQ쥪X#;0!>:met!!-7UNn!]1N}{Op.IԇLRNJ-Ш.=G^zE}4@ǔX~hGv8`.IUR"jXZtCǀƚ&Kk}?t܇UAw^go0u%DLPS {Kq.ݡũ^! fD ͳ8)sDoL]v3>z`SSg:CԠzw>LiMtPrFޮDc);O7g w[SF9L=i`W^?`}H,Rʂf7s7չ x#O+=w=]pȴJĔSo¡F"Sohu(DS䗙LvKVeQ) ~ǤwG3 w)ZUHzB4sqiF$a++hii+G9˲p\{ 6̮Dj˴״*S;))Fj˥խHPJY.  9fFR뺝ޥaq~x,iY鲔*y,%50޳?~ ^`TD"H u6 q{\[^?ΛnƱbsLB{X(O1UK0 KMՉcXJHR>wǍH˲0Mҽ }>s`-)v2+s YݽrMS漞b7SO'PSO>XsM"`=L>yq'f͛I'Dk[P(YfS{iر_|4o?Ic$X\Lyy9%KA ^wV Ϡ_f |/PQQΖ5O}<` yݶfq)/+%jy?t{2Kz˖Bs(//tλ[lQBsvfm'J***=(e!#X$K~L6)//㒘Pvܴ |E%gxݔR^LBJH|^>=bˣnRR^͏ny5RqyTT$)$n[>**KWARr^127?^2X<)>>MBW /@k=oq Ѩ*&:-iڐI[7l'aٟcV^}u̦ 0id%j5}F@$Mֳͷưc)KjwAi*iip!veSY@rǣl&kn\f#qD3NB]Cݨ62~q̟Y3k"778c\pF s%k3xo NIb:\ڨ,:q6]\V[;~u*G ,Jy qd% 4=],[0qLhPk@|7_,[YBl_Vv\*8ؘ 1ltx<)D"$h4h+Nn PH颴ڶ'?^Q'Ns YΝM_>7V4JIA7 ey_/~OW/ަV67m]w}92ze76Y7Kfy{y $R1i(4of[Abr=+|#呥o1yY̞w4Av}wPzʵ|<P;,d{XrWs=bT4bl(yN˻K⾻$V^n/#wps.-=$[v n? ſ O߾'+Fsy6}b7=#xt?ش-XOw?-EsUQ/瓋5_*bN<;~}v\Oә3w'p0aHI&χ‘Hh4~a,!-E*I5MӰ7|Fν;~p5U%}քeɃxv*݅捇a/H3"CU o-D6/~}g7zJ-s䞿{^⴫anmnE =wO_>sxx_PƓKWzwFiTKyp@=<{/:S/k͵q|^W#3[]m+'bBWִs5_ϝA!,\Q~~Yj= bX&|']ƍ7ݹ({cUJgK>ü {_^}c3GNjʴ1ͬޒ]ŬaV5 y|X  2+rdQ:X\~%F|ՅcŚfnsL<3RRσ#1_”>K` vEx~}}x`J#M,g.Է5Ws`)3`cPSo`̝z躎'_~@nzSX3Lk"ۏ!dȹ|{2%s.oۀE%~d4W~u7'UFBW IDAT0 9m|᫬iu|)(vYD [G$> ehj6;xJS=~m`)-bDqL7h%ܴQ8n Ե/S§)LeEÔ -d﻾j…DS>HC8ԓBgx}^Eɞ, J+*Лr+<Üpdb3h_6;`IDC;h1n7 E$NmS%_Ϙ?4z1s=y>I4$_~ּG}i'`֩Q5O;6*FOfܑe(3F{c --u6+xIV_HFsp{7֢IPCL{:Gsw2sI7N xxK0KG0efijj"P98_'ןᱷ#O; GH)P'c#Kx=J6{;m1)7nsM>k>q[[~śg)g (/gܩXvC-l|c%O= -Uqē+n~ʏģi0nn3i޹kϾQm??̈́?:RCq7R\:3ś=~x /˿rv*шo,>c/5q0~Ϙ?eQt3ٓJ]6Yӎe"yoOw]ٓjL0s2Xis IspGqۭwƺg\t>UamJ,>vk>0=f9Y4g K#y.UPB: Eh.$9rd$qc})%{E4 z*8LiР3+w*5P(D[[SL2९B1 C7RI4fGؾ)%'N$ff:Gr}.KT/Lkk+ÆCY.v.qkK+XE 1 #EQ^h$L1raǰ L0q4 ) =nܺ 5]f,#aZx=:xÒ},3XB:X&Bset7.]'p^ܺ0Mt]#aXO#c ˞k:豧~RWrQUUe[<4MSC+.j ypO|]]7bnhL"U:" !RwЈ2^iӦ1bĈA &B`Yfr >9K*_/=ɡOyVWY8I"dɒ׶T"=mwL}tY;XJ!ٝF OƖi (./h?U 1S!.}oXw&Lcr̩,5ce=v躤g_xABx&S;3ƙս]`sI;S``rn ,:šcYVBRYf揈o7:61B(g'iM2yM@NavJ1gyv9.=ꦶJofǟqf7`oZs")NɥOMI?;R mTZ0Ss^?L|N瞘' ԝ|bCosЩ' LNaU*w8RB!S,8#J>HWu :D~!b4\c%+55ՉқMY=uW#SF3rβ`KCt ,|0YvSU"ÛFbMSP(`Щ/&]iM!*ZJRUd5JMN]1tS8Wv'{z ?.5Wҍ.lp!OqV)w݁z)O8]& edtw| 3sBWzb01$@өh!@c*w}oUpsL $64\f5(6w&ovd8|>Oz 7fo 2u\ͷ;t{ B NFѽ;b:϶Pgٲ@n(4-J:(HwmfGO05@T`S9w6iZR8s$#`mcZVvʑp=;J0xg0rxçVe%Ʋ0t vX-D+HbUF"r{eWFcYbq͍):;g3r)dv,E}+=J),ee娧mY*BYAv3N3sTw{j.aQGB"̷L2ini&{-khɔ,2Q4MC ;Ѳ4T?lK)r)])&%C \at0˖B'!)$:S{F5:dkTnj2w6O|k3pb*[,ӫ͐2 _p*&Ԩ fʪ:%Dλ%üSd]" wJ*igebyv')RشI1YcOJd6SVR [ ”h vʗHσS)GYh^E$UzdP)sGF(P$%Kdm҂+ZtX +9_yqrLsSZ /64R|.@B4nsy)0yf|92=3WI+gnt{Y)*^)Y1)zqVfVtB!GSRP;6{RhO.mҟ-P̲,*iV :w+gKJ)bcބal::u&-UD%oƜ`$_YKDx8'W+ьz~/ʦz<4+i8^{+uTN>X;~#x.{ooW^OfKrS#\󥯲;%<'#9ʊI]a7`z[cY\!L, $rGH,pDHw}v%!iJzw1ÜqҠS9$N%&δ$ `'$GVt,vPlg Ar VddSӜx,mW9RI:ü:F.Mp|yˆi %PrRV:JyZ:@JѱzZgJWrXs57`]>hԋ?Nܔ ?)}۷l5ϰYʹ+ Lt HENlR9T9wztY(Il3N:5G9}._ϩQ”j /#3TV"GaW Φ{.-bi , HE4ެ1QP ga3)d10U8JniW PYjs tvU뤉{ 7WÈt nDD;Y_ ױU8g nJ;]Ug_>K>y>uёo|/c+ʨ 7~k+Am/ZxtI"J}c#­HoFۯ~̈?&cx<$xv0[&wB{ZN:=Th)B jtlo<,-JINpj~sZ\w;xS田Bf4b)ZQJ9i2yOUu|Rddi2%׊wHs)34>E{Č)5G ibrcfpY' 4L630ghZjwwW0uq{bD`{ϻ_>2H?"TKʨG24'XNɔŸQekuGL`*Њ9z8<D<<3^3ubf?B1 f`~2~Ӊ9vl07w9&eV" YZaES )fZ9C8]rU\F˔r;eYrNG7WL#=W))<Μ쬱+GZSMcn c QTXCJ'-2uL;\|ЈI_kƚ5k),gxI%4^o!X X\lU6MhkS65C44pK)-rik-VY{V,2eĉ-0J Q\\ۑeF,JĀ`EKS3gwO 1tc0rgZIcw\K!:5:~i.Sy;\˺}9eC!Ԇ [ Ρ!rݛfÊNhYt(tElz'> s<ʤbWϺFLJiԠYuH35!4/5]@mMMV]בBi'| )F4oo&@tXP}OvrǺy@޴2 θ mW㻻NO0&].EEEb;l?/>TaCX+. Mדfkr!5 i9Kh-t]ُztNϠh4o}G>[L(u%{Z;:9]z\ wOL~H$6lSN%.CбA]yW1 Gpg>ߘBY_;Hnߛ6΢!!ߘLpo1 Ox 1rS)JikaZoTYz[n2Xt:nӡI)իMLkB|mzr˄u[Ljqar^P@˥K} !L:|ֆ:{3D*̘uө?MjCiS [__5.;1uhv: ;0 aMxhzGBx0q a4i!LY |>Bw~ ZSL݅oL=IJt*!@z4bÔ.UwyS1B iw/\7PS_zSWA(]9-ĄYzW(`?Th|NWtF7t`V]uΩBNfYTjo0dN=R\.`~xqOZv'ٳv 8脯CII x<"H & mcVu `)~Nը"F.!M:f=|s׿:4pΤSFڙ:B|SiƇz:֡9&go+WO$PeY6,hY%%̙= &;5!:Hy<:xGxURߔ5lP t ,(9f09s"ED"FQ~C{,{ IDAT=w) "{#Tz 7T(לCNzʿRn7a%|̟?fϦسwG}N;YfcN8{u,X4.Hι%AAkkޫg7~F$N e}{[/L=je.v}@iPi.]ʦMꫩUBaFa@hEH`sևX$ qW+`,Y˔)Sb94F"Ο[ͪ|8R }1:G8Xf !0(-u/2HÅbq1i߿_a7~DJJIӴbC5M,N7-gT+wyѝr՜ؗN=4X7zPS:'zj&NȨQ7q{l Yv W?ۣh #'Nǿ#3ҿEC$, GC ] @ P \/RD(I:2M6q/ZrqDŧ8;Kw;w.D"k]45픍Efv*=R!J\wb\B]C PTY([Iq@c;a%T1(ET47GhZ63X@R#59+cnǛ"=Y(t1u ;4fu= !D"1}th4eZn+:|A/OϽp.&a\?'qR"Y9nǖ1fb.4\ӟ#E^ƼI^fVؑYD+@iH$,RFA}C=,44~)e# "0N o^Ͳ7S9᯼*,'Y.TD|iXdKbǮb;kԴFaئ E{Ԥ%b7xw>iaaDy: =wSb# Հhtcӡi up8㡢w90x=s65Whf6X}ԙeQٔ`#+xa~I|Ӭb ‘Vq/l%n?\XX0 NEE DcѴIUI|}:RD,-{*nBe4⡇,y<o z wע? SZ,˕Xu#:n B1X*\cMJ$ +e0?|G=-%,*n/a{tNFx ްS+S>]uoᮧ^|Rh.ivcUXIY΁R=Y1-_yt4)$z* b-u\pf՛O4G$ص,F@f7?ͼ+n#Ê{lmp(,6͛"aXhEq !gC!멯hLzԓtl@JQ:ԛj#v#u*QN^p-gNL]yNrO85#\Ch'^IyӲ(HadQ=2S>dp(]tkstϩLiq.4MJbOM)^]wAYi('{VjV-()8.Ӆ.D RT:BKx=n|^ KfD`&jOPQ*p (]MuY$W!7ixgo0gQ+z3h S0 B0oH(`1g,z|lDhk*ml6ooټ imb_c BMǥƕ)4aZ&Lӄm۸~:.]e[\| e`k}fcޟoje,a8<kf'>u__ǡO~ =ܻ| ܇g&N}<`iaefple\`ƕx`v 8tjwTW4M4M;ԻjPu#4u<Lz)U&e0<f[[[X!>V!DB><y6Liэ ?fgϞ̶:;_7`.Ps ˹B\L9@soә”4iյ;MՄaKt4[m(0/UħO?q뤖e_m۸{8\)Z3ݩ^%u]%2z* O~^8G13qy7Ao{˶4pnLn0n\[#pGnȒ["ԽN%ۀ֑TFXOEie#G L_z.\cGw_RdccW{bnngΜ} r{e޼[,}5)77p}]l\CjĻRu{= ɒgwY͓I*Lyw!SqIƬޟ\^4qa3K.74q{?|#Kt88rA,.w ~^gu,[ οF78>r$Cu̳e|"^,&#J;TНܟAa,..bϞ=8y$FwmSǁaQ"> ɞg~7zc"lMDlmmw9>%hyDӰޔ$sDiꩌ#J;?Fjjd )DrCom|B /~D,a_wRj,AI:]L*hI%SeחifMG7D?aʕOXW4-ʤkiSSٱG9D/*6u\3 sL8Δ1+u˜eJKK5NL*n2)/ iLXOEdfvޡab>L=%m*4z*ڟtE|3"VCqn"1t32ɔW*4JD&2 Iȶ~fqjڲnby^7Svj I5CUIǥƱ?LEtUvjLﭸFM̻Qey@)-1qGOj=<;Ȥ w4N> 9wO2.I9I'7ȤΤcw4ۮ8S[Wic='2ݤ2\I{Y0 wL:&KٟDr R˝@u(y0][>mXGXΕI\z"t2v8:ƔjA:h̝ʤ qLRpjF]T$rLݿʓ ^\p5<'1Vf2 0 eYIU{ @aB !ۣp/PPԺBÿ2Թ0#fEM8ӽhʦ8?.T~]3L0#"! X?A'zM0==)NJ!¿ 8z-0 rN8+CN( Se3m?0:L &ފ qq{G%8 S(%OƇG%-1>9T-cd"'aRt2Lm#qk0]w]aeqPF}rg'㺘6^YI:5&SpmJ9< R|,.z,n#Jia2*f=LdiL[ ]D[!SL:-aDIfP( 2dPZl)Y&d-S+Ld"SMYdML2)߰D&2Ui awod~tj)2Ǥwvd"Գ }>*i:et%~Z+ێLd"S՘{(mu&Tn[2M.ΜwLd"zhI4LBv z"DG$j{R4y"S9L:;ێLd"Ӥ2 KZ1%4ȺN9ϤSdۑLd4PDT[.PXQ "oNǢL{F D&2iDYק^,iYA4:&z"Tu&&HfۑLd$,{3{:+wl٫L*5T. ێLd"Ӥ2 Qژ%a*K":Ө-aDQ2,Y>dͤQ Z]D&2L~VYd_¶#TE&P( eDbeT<'1`Ȥ,mG&2i\{HY[_n? >bd*)D&2LaBvT}wE4:mG&2 LV\` yuT@ܖLiƋI|D1&a (D*1u1.fYٲLI/UL0噀vd"NΩpyQIAJRaoZCi4L}mG&2LovNXw2Ld"` BH8ag=8$_}F”L3݃D&2i'0m[DU%nv\pf1<2IFyc=Ld"S89[IZn, kBn\t#D*2)TeB嵪vi<.cD&2U),kd*)'2L;jMXIKj=dQ"1TNKmG&2ize6fv;fGä[vd"&I$]'Vtڍ"}X42Ld"Ɓi:FDD&2Ld5%[@iY3d&ö#T5&+πXtMxt( d.0=DI` !}N8z8 (i<-qA<)dێLd"Ӥ01BP(#N BHםZe=8}ʤ6IrTێLd"SzpίfqVI5X7cwvd"~#Jd*I̶#4L=DN#4Lѥ0Ld"0D&AFMɀŝJGY.$1iL2}F)l`Z,D&2)),振" $Ld"D&Lb.Fٍ퐉Ld"4.LR d2Fh*Li.s2 +Ld"Szpdt}/AҴh]gq&eÔLgRNvd"WꜰfwMZ=VeRHT D&2UI ȓB)d&>z"Te\!kmN$y]e*L*~{2$gXOd"vS.K8 )gǔ'#F${_D3IY*Mb 0}D*0Yi?.& ',S/2Il;2LUe8'sA2 RfۑLdg3i,چwL:,12ǤaۑLd$L+nRn~#9=P\Lϸr0a%hthl;2L /, J֢I |2鰨T.NkXw=QD&2I)kB)D&2,Lw z Sd SN϶#T%Ƭ<@򆭔*ILyÑ|&mG&2JLH̊)YaT8ƛIE)8D&2 N6Y^mC)-6ƃ)OaۑLd"Ӷ#JyX4qs+IGm2$odMZU=Ld"SGa+㴆aN^)LaR({POd"$3 Y(leL$XOd"$Tݲ(0Ld"D&b%yǕgO&,SoD&2Ld$wx8KuwLI &P.Id ێLd"SUb8dm?nwYx'eTYgRg5: IDAT=Ƕ#TI?\fQZ, SdS^O ێLd"$3iKe-4G\d.SVɔjd"vT*8:.w”!By,d8D&2f %%4M}]mMIWMq2Ld% ͛7$_u+2]__GݦL `6fggmW-/TLd"0 N )J<gMa8D&2I'SoM8 [pF:&$HץlLd"SSf0we%t D&2I7S%Sp\s=kcLd"4Lk2;ʢZNs^%3Eo#$mvWL=0Ld"vSoM8 `Y}x. DD&2L;7ȓ`t:xױ5|!Yx{zzSZbqqQj3NQ]K*?Ld"4&Lĝ;wpEݻ7$ wah6z*N8a}?um(assvF# @,x{z@" / $BP]v^öm]*uA駟oX>߾ vYu4biX G]՞nhbkk [[[0`H'/8S( %u^B`ff2MضӴ0== w| _elnnu] cZFJMew+QЍK,7Mg667nꆮ ahe+ O ,zfZ.2Ld"S~k equ?~䓰, Bض=0 C(3%2-@ ۲cicks =SՀ]5گy?RO'D&2L5A۲aYV/l>9|>055vlhr=>w]6"ֺ)YΩ$LP(Jwa߸[na~~eajj Z ϟ˗Oڄ-۶1??_JKB8zmVLVXL M`Y,RCBI )[OiD&2L2/bee6\ׅiMyױ,,,$9YLh-mcmm >,TwD@:]׶t}[ ?W&/ۙD&2Lcj8r~_… 8}4:_꠱hYsx lmm=[&NYLQȤxqVC87uOw5+WX5-! ּGzRDѳ\I>ed"D&2M:aٖpvY&pơLd"DIf &fg=lD&2Ldw& 1vŝANҕV>D&2LUbVpwIENDB`davical-1.1.1/docs/website/clients/iCal-screenshot.png0000644000000000000000000062256411167760074017617 0ustar PNG  IHDR E%>5sRGBbKGD pHYs  tIME  4+#I IDATxw\}97u1 "I` (Z)?K[ҳ忶m\Ro[zJ2Z+YDS$D030&`rݷ3@w s=@/_}S֯\(D ((((((((((((\# #N_OGКGoݶBVhi-jn|Oٶ}$^~?t,yRʚ!a ĕ_I)q]%k@iڂqR.y7PT-.F}u!B"3$ ::: HR^M6U!9}4G4M:Ţtuuqmr88Cww---Gj~i"v===JQPPPh^@h9dPhD3,ti31ry<=LkGCҗW)0E>^p5VPPx ,*H .%3ߩ0efq]ԓ+53cV r]|߯|8Yָ0 ]+QK:N NӧOs%V CggXl6KGgc㌏ٸqchƅ 8umA2v|GH k1<RJ è(0WƵ,SN>q]0x'e׮]5 èf^˲*sϽދa -UMӘ/KuvVMeO`tM۶*$>ݘ{>B4i$B$I"Gp >E4ŗ_JE}M(]]]d2lۮ=#%H$10?αg|}!7v]H.f8}{&oDYsN޴0WJLdYFVPPPxwii}zx<Χ>)R<"g2%v$!K${333ǎQ}:(d޽H)y}'N''<#HEޝ#022B>0 "b˲, feQ(xG6ezzSNUxW (By^H Hm jYV!@+oibM-*%7j$.Qz8}MJap%n`t@("˩G! w~#o@>HpǦ NTA=h.{>@a$o"]=l_XېDAA]pRV}s|cW^ȑ#lܸo|dYyvލ|_駟&gg TÇg2 W;w'կ~={×%֮]ٳg1M͛70??޽{y'p]^zG}SN|c``o244G>ao|0g>Coo/Xyx X,F8?!d'x$166 ͛4JZ49t/c&bP(?ڵk)Mhe[ARa+1c \A#ˮJCk0Qf5ˊ_ИAKI<1BHϩyM=0^2eOF).j.$+((-c}Yӟ4>o&O>$> .!V1j~|e֭y/o~={o<1b&G!r뭷V*̾+-_Wя~ģ>J.g~O< EȲm|A$.\@˯xLjF{w;wOOr=/sy7~|;;__<_*ϟx?߿"u]tuuUh4+o7VΰV|Y ÒĖ #BT#H<JJH= Y+)6 * 򡠠4-$Dl m D.똖fGxW99U |#DX4&.n"0~ٳ7lݺs133R)|MM|E BBGxA֯_ϩSȔsA6m?N*(H)&sA.\311ѣGtH(ɲmm޽{Sy.]|_fd2kEu .\ϻw3\tz͛7k.FGGq]]d111=ɖ$B~Yz@|ߧT:MѶD#HMfBВLIsJzG4% chb@h;qJ/ph4J>'L$M_p\ϣP(+I3~m* :=鏿Ⱦ~gXe$x;]ٽ|/,C䥱~(»g_)U<~| _`>5O6ࡇBA8b{zW ¹l N.eҒh!-)iV\.֭[||>?}a9}Y8bv2 '`붭$Ire="۷oW^λd͚5R!'Oɟ Vbddh\.W1gY @E4 $_300]xg{"-oHQ˞_O&dib(h`!rdZZZH$Jd6i<---%Ahg{ Bttt2Ft򡕸fPi 5?:::tQjn K@@9)o%P}2ͦ;g-$w`&e﫯1zSq<TTXAA]$qHR8S}q"l_|zYO~hBcnn UqHR!?__/|A~w1FFF?뺼k߲~zt/}~|w?++V`tlbȽK";n;wEp]/~?_27r9t<^~eǘRѧ`ttvsNo399ɁJ dB<]ǹe-"R\Qʚ?_ Rw$mrr BJU8p_K%:|N_8Q?Gz?hf襻nFb&R \5짻;-2L,dl렷^!RQ?G[?Ö-[H$qXټy3FYn 3bd2ɖ-[Ų,֮]KgW'+W,mmml۶cǎ122‡whS(عs'E VrJzz{غu+SSSr-|gUtwui&,344T|u]}}ZkײnZ\;vpwOYn=rKu[n4M<<wu}{ mR-|Y{|l\wŗ.<#NdK b1x)o+q|fIͧJrx뺄#adUckS%B@*uJ}duLd !+TQZr((((4P.nDv!} J1ZBCSf(:Su,MBWPK U»Mᤤ ۶fKrm FJbH.p8 RiDBi|߯$k, Bn!WzpP(D&4MZZZp]uql6K<'%~P -CJ*3 %y+r9h c,3 J^(-. {rem166֐%TW pzAm]k#4؎]QVt,U*zxХcmGrr.MC  !4 MP s Od>҄(yS):AP4.|T-BHaCBJ=P*np?)%-({lg'('OpN8cV UZ7ѦmRZ+'/<*M*X&/\8 Wƴǩ5WGAAAבV `ՂyUeqE9aq&rQ]8 W%5*(((*+ CծoVW[A}E Y݌몎5ٞ;@Q 4jqS*Jۍu|l|J𕸺Rfz)'DM5a$| Pc&aT }BRbP %PP(@XN|?ڐy~KQ.K (D`l315ilݺIFbvvgϲbŊj(BzzznuYŅ BLޏʢD"tpfggqE_S6 Y ;vx8 QVWttc&BZ-˪tRX_,YX\WoDTYiv*55d\T<_/UieFݹTWFl*)ʶmh~$!߰rAX//WPQJa믓[Yj%mWOMT)|}۶Iӌq ߳-7v|VrD"Qad5 D$A|"L299Ya:@ )6f|2FCFZS;L W%=J3к`m% tD(Y$hex:{xBhhK)1M,RtV?RuSH!*Mn\0Lt]4Wl*$T[#++sp=eYdY݋"J{k閄_ (X85 .wKsD&x/ObDad5ęvZZ#B5hֵྚN(d6Z%0Chv\78]yXFILɻV,@P* -h,?Lüp3ܧܥ ǎò,>ݍdsY._L6%C,Dpg6n ԩSH$jQQ@"F&4 9}8nXKvNUtDP 4Ii]ZuWB~O6UPuPBd)<[ZBaӧ#$AR0g;/#3}m-M3Ya߿DD8~9q+]kM+ya.ZMZ%xx,}7m2v(?| (wo#?wg&kwŎ-ع@rE\J|)5ɋG{u[WVLaJx;R%hcx9y Y@.f-7P `+,E\Oo=lǩ"bF"00 R bYT`ڳjfpf`&ϟgzz{w4Mctl~8,k׮ezxXmͬVE;E"oN:ȑ#ܹ0+ `w ?Ŕ%c&(5.aZ&% 4qclX3{h d9a◢u)5Hy 8TBV@\mr9y$G!J{nB,.[3/gSt =[Nqy?D$b|d]YheZzRx>#4S+y=os*V)3AӜ?7nfr3ڼًG l&0GAnIBzhu=iqBq=RUʪK~.ܣҿu K39=Ej"lRjr_{) (J R9zV#p(@2ْ|kQ`_L$K/ˆ[6׿?/o } ])LOO300+4ioqlB=\ׯͬThJ$[033C[[]tVa&v灴tݬ'?ˏmb+nHglBHH6T4X, )1_+[̓N14X$zH!_(f$JHvW7Ѕ,1hMY@ʡC 6T'V/&z~% nll9+ xaXtvtIo_k֯D8W஭/ܳ/fOLu IDATs~rz=Dƾ1n}~}EY-W"\{$Bx 7?Gmcf^6yf%z:Y wXN>p6FCҷ|vuqm0)΍ѳv wKh7hUUkBZĤ5 "|v`E_gb"YHw3$6a{͌sf+舺h$p[:^I1Γ xTx\ɓLLLφ ;Tͷ((4ķq 6Tz:y?0<(x|!ϳ}kO|ތgwj/lr7#|/Gך󒹊uԽgƫfhOX055EGG.Uz,@z(!+#bѵ8D xD<8/}+73{/q[!|S ZCJYٷ`IXf&ty9enf3-ýsѿ=Enxp+/U^2 {WNKsatˌ3R=B |NaYf ޖ$7H.4Sw}WšmL?M^oexfNrrdxgVv1?~C:tq(2d|J%臩,~oxY|) AQXԈ0 a i:pi.]Do_/׭z%E>A]0 Z*?~4{$[Z=X4ݻ^ĉH$|bH8TPFXUS],X/r ZGAofF몵ZU꭯}RUo}FI$R O_lN3Ꜳ_0_tl4=.Ћyҙ y[9i^8O~<Z ?1N~!s-Ξ<vbN}<'LCCzV&|pC]:! -po# .W)KHs@t]'qIFGG+eh5Mt7inWKB| ؅"&tǖt3dmhLg>!޻;zyZ#zV27TuIIщS'9zVn28~NƎ$h%u,GgY;,8t?GV rEiK]Sz9BeF`>#v6f/3/$ Ca>HAkqSH)]fo2E5t;-̤"yN9ithC8=ah-y Pjxq Hp8dY.\@t6oٌeZ5'POf$XI4t# 1 СC<3hmO|ޚb/R 썬zދz}=|u5N/O.Ga7WϋTd2*~\Qыe9&Pы;eyJ\>qs#31qu?vӇ!9lON-|d&޻Mݽ]ع /4Rk+k{W=yerrJFFF, !@0nD[wეX!tˋFwgtbhok/̙ fJ2)M1juuIdmpWyqV=:v[O8֙tF^AsY=/ڰm6g֥:υ k [:bדM]ܩa^+t0?EOp9&EHH&H)C-xf$LR$h;hA4!whHY'[YF9QTwq9!XAZϫ:7I|˲Xz5CCCWZyGµZ5aY0f߾}޽{kEf- ۙgzަh5y-Xj T,V6Υ泦ibџ%`VDeҀrҞWH GYخM6g&.Iͧp<Mhٳ|>me9'iHlOgŪ}|?{.$[ [ Mi c0匿Q.^8.Hb\{@ pՆ$9+<GY$)ٗer }1b'AfXT+wJ"D-F`C  q$6L 7y2"Nvh{h~#tōRbv1ǩlx0̳>qCK;5J2Mvf>yfk:nv$'̒F(D8qu CCji BYqcI-H rg u۶떸>约+C(Ësn68~3fff`||^l&CȲJa㏣:+Wdݺu kޛʪ0eW DLByxjIb}.:v{a'8q4k:q8z"7|+?ddfl M=Ϊ>4__/!WPxZ q]B Ņ (< Ղy@t:na{IbbNUeWd.ծs C# t ѕdRBזV@b_?t8f0f2Xq:Hv2:pcy/99Vl]இ?ϟhjC|f'=ǿK|6B-**vx@JގZU!;u%c&,p n[ǎZq5 s9\BuJJ4DKe{gXm[MΝ8aFk4ee~W)I_^bO*uwwG__aR(*|m\˫ J\x< O<?x7xgimme``瞣m۶ ZY:tv!Y:d`n>Kߚ7m ˂a1t}$z832/t:p iB|$'O"gD:z BxK̓V ssp%^;k#,> zdLpțmAk"Fz2orҥ) o2qj?IHy0w4ϟ=KGw Ry4-DKD0z F좆b`AV*XeuVBmKV?µnX} t(]:zVR]ߦI vݜcRzkI)TcJtMGRuB.K.d/&MGx h|GJ&r6j!k\\>}I-;O.-u!˒h~%a\ڤf/3O!gRdT!M>Wg榐RT:&> _\M|CEi]\P[hHGh!A9 S Z Y )u@)Q]Hőzp p\=+%ܺ"|˴z4WB򏅗-J5׷:d1Q,+Jr.!y^⬠p#}0\K.O$ioٲBc"|sSSSBҳİ$177G&!4>4B`>2_u)"j v ϓH$JvjHAA hmmu] Y4M4BeLW>_+fws{=j}G?n}WC?vZ|f{@UeZ-^w<ͯ#2_=Az;qq#ܱ;{(ǯК4fGWMzZjJ^.\μڃ7׍d˹o3ԽYzn}oc4Gkye~{CԢ#_{~K z4JPC&0]X6!E|_oia$"DJnu]|L05=ϓJe[u]u}4@u=5}=KԞZg-Blz3ϠlDjz1K1ffcx,7fZco:hϚ0=rfr+ѡzBY{Z/-uNŧ7{]Լh,7KQo`]יm0*7m6mF,| !<Oi +䡏&˾='xs-q<3 ~[ aя.OH$-ԣ9S'>@c<~6b1<_bEL&{koe%癚I69>sg9p[ubcht 5AzvG~Ic%\_:I}-vg||/06rĺy\8 /3F/Os/qSˎʛxEG+ϰ{YMʋ>x?><^>µtOp`\epHR,1tÇ!y^FĎ5_EhX!IW[;=tjXBerYYbB Vmy!<{l?'cc%6}ml!p[ƶq^}v/vEaIM1[m&w0ΥFjnf\ͼ^F/E3ޖf]KQrn9Ln)+J9{!*Kr.@)O.x:K Ol&lY!QXRc,uf)Z,un#{{2?q0>DV3nX^/8oƉc}숖,yYUx$ggi]{n@, ڂߥiy3@xY6.b{>X k7ncu_kEHOqeם(s& sԒZ-YIe3쮽^F^K,YRwf79g" "9T~a[޻s=;W0RV"B :kIP7%WSQH!JxPfUdMe՚J&~'"?b%$?ǽ'?&񩪊"?/ 7L& Z~d=`||҂BD ԵWWgԴ Qpafʒ$3wsgӑr&JRT| :ɷxx-`FX^Ƽ^LHA2hDQ&eb?iȲ 潟cOj;C=x|kTݷ{Qaa'"f+'++^f XbTNJgz&#Ѥxڏ'N>%:1x>O;߾%Wb2wDxY]u6V yh_Y~Oߢ1hggrC'b/;F3+ 4%|W -7 t=ox?+֯6 2!7DKOǯ@  @|Ⱦ4k AM$%-;HSo?]{D C_MI_K7:у$]߱"ӎ%"?GKcI~,ɏ{C~!CS,-+#99Onn.XQQ1[24jdYbUN/pT$!w,YADT535Mٶi Y.;bs` 7"S $X$ )NFo3x ߦ!$ fn$Q$Օ^O~+֋;ɡ#WJ Y k=8D6cc.ŹڏId!%6D6B'O5m/<1FW^DH4DDB#"X `2;lI8L7NΚdŬ0R018)fTxU1ᰘqZ. Gy@[U- &?Aå0/̑ur*xO"^8Z~p{{xX[l<)O!#34rs LbCAÅYDGruI~,ɏ%/? J䃚pPXX笠Y  >zGl3skZ6(k-N]cpn~Jj MUU$#:#gcd_㏷Ǔbѽ:ZpnU{'H)lco^ƒUQ ?./6s ^/S%V߉`6^#2 |N~l'vIz05 (lq?{@ uiٺe5h-Ukobp Y꟰To-~}|/sJ!W5! N}'oZ w P{"ɩ7t_m>~yj ~YX? )驴|xOPjK&y!#$%$?ǽ!?b* Q_f'55UUD#Uyc~'?j&T(gB'*w&?je[,R$vIT%m?Bk7~kX<&IIX z VnG;ܩ )&Z]qOhnxvBkg̲{ٷ@!=m?Vs3M)X-#㸪vkM\f2WRׅE60|ۻu壪{] Y~ t^'^'j.`) ]-E̊!1$N[tu1 )2CO_,7H k%awE6-?g:udmYo|CU5#G8s4:o\>bnfKgsc~K8{ ڸqjp%/ ,a2)y=榻QΉӧh,[/akƷH}A ѓ~/>ڙ!ߟ`[-5>W'/} j*cKieyY PgЋVײ]l]:WZ71ٹw"ں%ɵ*WA.51n'!f J",%$?ǒcvDX,f`lb·^4C– nXI1ׇ!Hb/#a8ړD%0tn_/|~y֯_S[o`˃<7VTU!PW=͙̞sΚd?OiV ~5q2]>*KVψ#8WFJA,Fh$ BkʑJAY!zkCcC9D6)T9?|(yǰ!҇|,ɏ%$?]!OV3O4pAZ PU[rei!cTC `M A]X `dǙ" ":H1 afI6(0 Ϗ[ՐdvsbKRՁ9ܞ#Ɇ>YPRHu 6+Yhj?0PDK% $:ޡ#16vIvL1J\ L=c1L[{+^e\d'Uk(^v>.oȊj|/2`0 E2`aY0-UjOW^{nY^8j-~Ex%Dł`-,#&0PlR ran{XSC y>|SeiI~,ɏ%qoj&ceN0O}&h`URTEu! J8O1L~HX!C0!<-Y1c2A"M9!b2I躎QLj:$p -%o$Iqox!ɭhy1'Zl1_,ِvh/ e<.ު)' ͘0xxǂ8Xhm':w*gw<3lIӥ]؜"~0a *ed|A/Xed'NgTCfMi6ѠLC ^Ed!`k|4TRvN@gVy!fED@@Cu9P @JI%˫~I{Gy8?~DIfU@mme,P ߷)J8Sfx]WxwBm|K_4FTO' ChX,I$Y$D7C =xF@b3[Q ccE]n&`VUR7D mKcI~,ɏ{G~3'rzeȣ8jMsH,4Y1$jQ妰g_vfUM/5h%8>Q|9c%)O1HmŪŲEi-~y:A+/&b"s ht>'rs(F_Lh/eZd|֬g_^4( O qk4 Q+ܼܣ4tkm w/[Tx"+VO( q>39 =$2jP WC#T'=w }èAx'1 Hq Iy 006ŞQ6A Y).@0$%y[:?Oj~)"I&:˒/7oqJ(Ht]o`̧f6))Ha2|U%١y>}0KcI~,ɏ_OarOOOhRMZ- FBM_  %%e4[0Z_8XD CHM%am.^4`<H>'K46l<+Zh5 z4|\k\(VQ@TgV>fC4'Oo-5F^JM# ZAsw=nuسe r%4{Sg%0&CЃY]{'k>{](3eNX|J`_:zZ[DEUt! 9)lN18qp5&|oYX5NԺf8(+rPY6_oHőd\.ه 9y>b2C2>]7;P5 98C!w2fEYKcI~CdWjjg"(IzHQG'ַK VUNb:^s]B4(aoXd~,4 V<ѬGZշZÂ5GbncJRɢicЄDc<4c.Xk<^x# Dh,by@4Տ{bq.,Z'{.c:I1̦[xp ~~rm\o!czvK􆕭 )-]NtǞh79S Wvɴ\BS?X@8>`PS#xh몛1P~|^?W\|7vZzqlr I2ݍ=9 :2 x=餹 V@fCŪ袝m/'EՒX!~w_b bhxM3Gz/I'cv+" ѧJh |XKޑ{キWd M։v.t:Hr&#I!ߴ((f+m\|Ii[JpřJiȲðҤw&= {(JT%3ނC }e9IB_}c3.V|])j+dCMB-5 &I6d1""A!A/CcT Gr*N{QiTقfJڞwb jR](R  ͊, A?nlf U xDÎ6Qcb| _pbG-0@{R2K0mMܡEʄۃy ڞ6VՎIA< LIaSB,F204LP3 4L"SskA<nTAjcz`g;7Z WQL2~oʕ(gOӻ&2d:#nPDۃb`(Am4dIK('̮zxI91³phGdwɈqjóewQ;>ߏfc޽Ȳ ]A  c .;,w@S4~OHʒXKޔa ώO{u Ա9hm\95#5pU<ȃO=KR ԟ!00 X=.[Aً5 y RsY_NC]5="$KH .n(K"D'(*慠f,3m4SkQ_qAzw ~ƙB3 EJ<ȧ6x|"P/7?ESw%BY-[_H}1'fb RKH+!!oG]@!4+]QDĐABi]Űq}.tNTRt4n:Lակ;τ8W]C!]9åp;]3ip;Ŋ $~ 8BiSCİ2u] +{D[ZǒX#N6$4@AdΜo= IDATG]wgjey([L'HuX{oCVaVMw^Q6STNEQw%5p!XfcNafʬ#%>GCz.^w|QLQH^ }>nZ3U2$D1CУk8Hh8;Q0(J3M;va8o6 L "sRØ*'JҬ) ,ffC-!O"7R4~Qcz'p[3yLdIcFZKcI~ChO:쌪FA֑[5¡w^`sq;<3"2 – ]UP7HMwPn%6^!Ӹv VUUO $YF=MƊ ILxaT^FX"aƼaCD[~lXs!qUC&1̗!.QϷ -Baú>>/Fsb #hc)F-fl˽ Dq„·Mkco|hcxDF$M$?ǒwa ( 4ì hig#07A`bʭϲqL`5KzİD ņ˕M e8=q(nS?8e}4 bi>}x'ܵwYʧ$7 h锗B_dݘ96X< YN{7wk C>7y,ayx*赐~qktYKcI~zSNClA5U!efeӟ͵gxBYy>jGV _ ǚS!Xz8Opws1 *Vm9X,ft^PUqf#0:4H0ǯꈒ,XIs}L #!s#;3, m3}Xv9E36e>+;N ?!Vg H:cM,I,! /(CpiHAn;Cd{ܱ"x%"D\y(&L(!PbcQa *IДs"^#dUt+DL>1w{9th8P"}>N,E#E;(H$J͓hhѓŨS~ƴ]DW~⫿NJ\ld ɂ4> AJaJ 0ʀFqihFPvPU }|6"Ewz@`zB}:"zn+N򲜑ܩ>􈵖cb'` x'nomԀUq`VR(u!3<:aI~dwfi͓[(bˏ1c2;XYE 8@f^.K8"@CvJV"PW5u5w`we|Z2ʔ'd:TiZ;tNÁ h::SpND)KKӵk~,DZ `12r}&m I$iP; u3y9XdZ/N^PH͚s\  ?+_@I1i78s:6W:9NC}*ՊoBÙFFCZLqtFnΉ*0gF}< 6 rRi8y+-|4i cU5 ]ρ.ɇY[AگϰN?P]%‰7y"vn8׿q?%<~EgPo_?It'2ͅM ;$,cClAh9@zvŅVZ$r%qoXwswYJѝFauGj說: #eҥQ>S6r2fxUgM`_VӜxlCn tv[s y9I2WlEe¯h}'N̤ wpUn5!X54͛X04>yEcjA~8(M@SUAWf)  Z)p&r0t.PTRx=^d{ !f Հol˺ͺrm6V2K- ?3lDG tM7َڈ acxt$;ɣԵ[mkj\FE~*N;Y +qDŽ XޔbwvʳWwuWPS$f8P̺mXWD[k']͍t*C;V >vVaCb56̩#ǹyklZ]@8JPfcapʡPa*ZQ/=\Z*^.~5,y&:oPbey8X,ޛ9|g2ىӤRw8Սpd}66'Ɩ)4o8vvS >@$KY{1[Ks) ]k-5~l2qXnvifZ dua|⍷ٺkeN=~ ws:dϭnGńʵs'\Nݺ 10S'i!wY;*B_k5GjVjCHoKTލsqUk+QT/M5sWRL.BaX˿&HN/w~nɤ z >!an܍5%An- ivqJWobۦJ9N\n'{džZjNsYl߳iA-5+J|cܨZ\EQ5d>u@fa!s(C@P`͖ݼ쾩F{mꢻB + IN0v'HfYVwM ޅikV!i\tZMt dT:Ej̷It>zoqZ;?ۋF T=9z1Xy'se>IaM=HkC - V nXرw' |pcAʝxZر{zO#R+ CܸDR: Rs@/h k#4,'#/}>9rBj0.膁nPUgi0.u*DCSamiw9=Q79wX 8~s6h #^F-43M5^VɃ?Ck;/f_..gqgl$iK>)i.d^șzofFF3q8rUJ~<'$R齴ܼ1^^ɠ<1FN͵d1_g&Z/ze`;֒Z\6̡CVa[WR,uS{qL/Hr>fHb5 ]ܞ>U- >nBޔ™cdVbz<?^gQ}M;ٸ<pedRbiYeޮN hheu|pD`]5n*J499|/oX4!,Xc"ONJZ^=p򭔗8wެ;Q2bq͏Xđ7[^z>ņSW./5#gxSs$3Hk3BƹGhc]E­2VW,gσOO47 >. O&Lph p9FZm -MX]Y)qwf|X{ MdX^H@aedRxix}]w~;69$hhI{6pP#-[ )ph9d/F}!j^4-l)M5} Jɏ;fZtME@DDDt|> WZ/QZ;G?hkqn>vdn30.nXEՆ8Rm4vMΣ\*7:0筣,2c0%G9%shJB懟%&Mԟ%"2D;PTQ2!!AoJf o{%9ii-6rX姯#=)ksBL O޿f 6Q נ!۬AQQgb:(Y] u\EՎ ӼYD, #=:)JrA %yid-S*]M\8v(IHX$1Yǥ6KnNCg;+8q$fGvO V4yx} 7QPQ!dDCFRS4$dI}K5ulصBn=LSts(a fgw޻㱕U'Ss\>kk vc |!av hX < &%<$ p#''-9ɜ:y[`9^K~~UkAp\T5$ KsssXK:3[J 7^'ܺwWkWy}e#ٙ?YF-: Ν|һtzK7OSWC)/&iSGΠ_u?U @C͙Ch]O;|d죵 =KP5twwP /oB @ϕȏJ~5,hU )-q19u&O}p~VNL0Aukm}+oeW\ Ei(_HTs| IDAT.ϫ֚c?`m"8̰Fi.FnwP~A=-WnJBRG|J/'pA%-x/){ 5TVsX7>J{w6xo#kI υ0c.[~N.__ȇ#b"&s*t)**l6OZ?>-|t?,iCCC"≋l_gRR6nl[j>^F죫&=*Yd,hAVUb QwEi*V*%ՕHo']#$eHgYe NHs] z%! |?  ~g\YeE*'7A InNyf:n6֫f>vo)냜\Ҝ z3+uPt ٙCX^DJW+=C^R3sIry>rC!6=0֐]1`G|N"bh,2)v|m4v aez֯[;YVn4 Jػ{7iiIkeZQAQi!Lfv)4ʋ2ko%=UX9O5BuݟbDi2ʋ23 XYl 7U5n–Ud:jcVZIq*C˂b,gr6;8IoUuJJ"0H l0='D0APZ949v螞ٮ[==eJh¹do\Ǽ*ρg׮#5d0kϡ}GO`ʩ:AŒYԌ  J4ٽ3y3c25b:jf LWyw1,\K$8xkx*j)G9x ًYx-sYHՕu47PS]ljm[ijj2D^=|u׋NanQV@ksmوU4TGIAY5&{w/8{1˗̡@OF UR]YOcCu5uھUkbv-MҸ(>Shf$@W^-#cG (/cRHDY^ř#јp! wPPQ^EEʴa;̠eb-CSs=ýg9qjhmic[Ӿ~+3c^.Q Bh"=+!~VU@dzwl|F@BC-9ybEDQ>̚5kzQ; 7oJ6-A-gF7G0{pF b5Di1lb䩳/Kr?.dm,OX5̫w\4F}ѓD'=`]c^ș&E7Z 7nA Yyraa12jt2BAtoY܆"]rGNJ-+d$s2vBY#`OױsE4֖eyq1k*/v(&g͘<Ͽ4()-\--*gX+*Sc,Wi~⬯dh 7sm˨hY0dh$zzz,92GW_'gW՘A"D4w!3\{?p?cy JTŧ`膅躙n^␋)TV#OEG]n8q M+^ϭ]/{Oe w4- n60s31s31s\GѴq;->HNG4M!@0!wKt,30f:mJpD_}}*?<m5z_ozg_ݰ[P$~=/~DUei{FS^Ŵ'cMp˵ lddp8LJ/)bR0܌Hn^s9.A[YOJ{EI~C<- 3ktϥ茡Z+b a;;"K)zOv3@{>83 +%<aA[]Su=*i Ѯ5&mn ?x,OCO疹C1ҰUGٴk90Gnki 'QRLKa;T|)?.$29KʘyNNYgW`0;r昚CitNw-] b7F]1My9]bG$_79oa1raz~sş/;syo[OOQp?įs;):)=E`X hXUZ::&5$?ڿ p=;R":-ß}}1GR2- /|-$ߏ]ʽ)bTWC#Ga w*X+Bwo9 tvB6/F;BSi3E>6Sl:԰|E+e67LFy{FYEUfD 4ڃ8Y/6mA`Q=0X5'0JZYԨZ*׬nMAL:G{79d o]e^;15xMm'X;% wnC7}ZT[E K9[-uWΠ=ɤ}o4~ Ǧim[^C,h޿΄SSni~)̏U^87} T&sdɁ_+׿97b÷/2"A|a'eXOW8|w|wF_;z>gfL$F#RTղ:ݍy銢 ,AJ᪛XzV?jSt8'_RN\!cYA]#14<%T*1S:zJ5@yyH2<J3E,8eC9;- [Qdvnז}gk>aN2p)c#,b%U!0sY4jjSI0E^NNcnr雓x=b#CKXrAHD7=ATj y(ظPv?O^eϸhY,r)!ca9MoOeVV'`ٔlq/^pFL'R4.by'8t4n&A0RIDQď|R$C#Ij3$J}e |a}X|;yྻRd+(J1,&Nn)dL7g]ߺEb}Q~{vrǴL`V|>yӟJ&6B E|xlYNRdIN>r)">CLW HPTAlpDza}>Ϯ8dq^>Lp(N)7wbx7ϟrXnݼvtt|:)>% sYפ]G9rvY+%VTk/pHjq6YH؉'d{p%t#mBQ x[Wdirt|\Aucןٳ,݈z&79>͸cܠf\9)"S!#7~:o@Er"r#}j,dVK5݌M%8O%hJBgtN|e姺quE=ЙqyhnLWBc}5=* f5OL|gV2^Y;Z9L|F/?{ |X#߻}'ztqyuuB: U{?rS>±!zOpees,T*᱁T/5(-S'>2>Vq$ݔP/gZ;O_{֏6.# ]wpO 'rj:GFC |yvYz?˦-hj_16ƴlXtzIx *+ }OC4ۡ8PX1^z ѸB%,_ⅽ:_c%T8i*nbb#z'ts&T:-cقkwۢ*mdͲcIF1T췩)Yo,IrpT_%+ xSg~5˖KҺxrF5 &^e3QTH$OS^30C7Tom<^tŏSgnHo}E䧸VLB8t*&Mn1}ʄ?Y>7wtuNsca:=RTG$c#Ē&pOf Xή.Z[]L.&NI_/ ;zk!b)R|ꅼFMjX(N…=<^7{$F7Bo*>B,iWl^vf==˓Fr/Lh4J8AL LTy߾>(|=Yp%N*B/ !%TpH~I~E@Dx"H2]% i~C"S]` IDATc'@Ft2.4%8w +Hcc=~5r:>*o,9 xXX_(^B{J;s`4vffrt1juqTG 1f?‘/Ɵ|A& A}SrbZGHIdk4M)HM%~>˥Bgz(eU 9XQt5E^g7M?ƌ.-$"yf^C>1i(۳ߚ%+3+zBzt2ȫj!bN*29MǏѴq49O5~\_#s2״u&B(36`\JUw^xG%kҲ֋[Xi(R@ȼaQKQBI idLr2!Z!92mc(N9Z4ϗIq%2M3(.tW="qgNG _.MȦ,@[U:;Թ2JnxJ&cLvm7\xHzخ~Rc7 UF- _`DfB$].Z(2VĖv2QeځF>0v&7_k6fNJhZiӵۮ쐺|rwji3Nѽ|qZ?;z;񧛲^v4[S'^tj[[2,<8v)ʉN!K+wN^YY2ўb o_1QNACRƮaG^*I+[_c tb(C10GH zԊ2$) #^zFD_#Q[$O^J|7zāYLڎ"5iȤJ%^,9uӯaƒhU͙_}nr0-#;Ъ7"~I"zw/j An!FXVJn$Z~(]ߵJxt3CC57#Dz[u!ey eƇEM$Y'鍊If@[Fu!2 7/{:yGN u`9[me<9ڍ^# yte+fd2G!k'BC&'<ʤMwuL? ?d# 9 D+L+'%mp?㏑:M5Kd +z#HfZUdž -F-  (YZjW0C]"1A 5^V'yl3Gt s "BXn(0 К; -]`SBI q^;ObH|:=ۉ4oNEn߾*v}_zSˤA5fwGs\<@-o!y(f Zߌ<>LDjՕ{ 7A6(" ˈ3ܗA}_E)fDZR}\rk0wS(AR'6ca: V*ѷ3'wIK]a|UG\5e[mh>a"OJfH9Sq W5Xx `tq pz^O:RDI2K"NRo7v# U$j(WTS15 2~)~}cTe9cA)EmZ6Z~;V$F1hdj +q pcD?k)ch ~|u&G&Jnjӑc *>Hxg 'ܸhKA{'fFpqJ _}7B3H!Dx(~ ůة#:Md10b`ZP H'V|0moV XeU D_:'j2VH$|3qā'AÌ:}jV%^v<*k\m+ mtj/?s~&ƣ%~(EpQ%gP;ސ/WWOTZb[^q5 Dh9XĶ|GwaFş.f 31 KaP;]uywV2>Rٟ`k9_#җP . kg#_/$`F1c#ck|pec븊ٝݨuZWezRrǮe(UChzs3kQPH>^ҁJ"NXR C _NG_#_/L+g#kcXI BkIJ} ]bUtzTHJ*M04$0J!ԙ0'r ݆74n=i(aB!͛G8A(}'Ԧ&FJGh^jI,<'7.' {bOX6ĻOeAꗭfxl9q--5zN畗_d/[:f%ٵ9^?ƍZ +Cy-[VVD*b$xiev=ٮ"n^0Sk2,d=m+;6vk!yF@k7}6'e%sANQ,p8L__Ϝ& bDK0M _#WN͚Y6/ޗ_q5ÍKK<9e+簰9B( 8~x̝LmЉ0^}gNQ}~;GGfFJq|Q|RٱW>o߾qxy_e\TGC W.%wYwk.A~W ?w=f_/mgI$XGM8b9KɶµV%ґ~r3.F G))'S鈐Gٝ'%!4 \[RnShuVcSa5j)Jp-椯}!Jo{5RGx孤SB jy#"'`Ɖ&ΤӶr n2ж4MJKKY|9Dd2'S__ϢE|$S:PBi,Vp#7hCf/j޻hؽD(*)o^s8q- N:G՜V9PUA#q6Y[,lDS񤁦8|U5WDض+ϧG\h j`NE@7~2BBS5v*F7Bի"FtbL1B=Q9!t^o1рJ@%]Ht efRQ)Ƙ,\I4AQs=s;Pv(^&H&{m%=2BE("e'h͋P] ޶L3 LPqFXe ۘZj)XȎ|>NSγed텴|V&D &ve`2getY(٨xPuFk9hic/kN Sw/tiݠ.=19 ^T)fhm26Y3)1u_d\n[^\N!O~87?ecOd?}E\EI(cr?S,}/\)~콢I<9@M;c) `'Ç{EPĘmxM3=O}] `ᕧ~ʩ 绺hzygAxoZ?`_f۱iQmW,MciG01-0R)8)SaΪx!g&H-nԡ3\{{ye:_&yq1al5Ѯt׳al|ld:X9¥0-d굏dCn)>Nz2/Z>^gBD #ٔ2OR!##o/Mf^7&̘L奄2r9G!2t \j!+ۄ$u?1A :D0~k#(e ."J|A@ܛO?1PCڷC ?FdP=@?S,n 3JD_S:n7RǶuXN62@)ѓ à4RJܒQ2vTt Lb ʦJf6[n2]LܺݸMgM:s(òu"|rs1m1"@XPMUHƣ$, EQE`Iz(. LFhK701 TUEQdh0Xҟ[V<@>s"t1b'}АvxxX Hgz B`3G? Z}7k۱ +CEBh d6T*Q(ϬL\ P3UEU}&UP2D>k)i6e{>5k|Lz*p8M!2nٜp;ZKnYوļ_H7eAdoQL.Nj6)}, bD;NQ1wlq}! z'In'P_? ]b,]N!HO~[:0JEhh>>`({쥐:yq_sDdre۫Lpګ9?*n ~ ݳ~Í.W(o^ZF_e?(j«N4Y@S`tczZ|-u-b1Zb,$mDr-HMΓvϗ=BS;ϘSjщ?^&?kʊ'n@<':WcD{'Y>Ul;Y9=?xr/TᇌCr!5)("R6d[f^*E%hEN!IE"=/@r?3"?QO>Cse{aFont;OؿU"%$äRzf{j BAP$4-&v0U ϞS' TG^2u.XRfe/E^ϗQҖXƛ/N+Z9u1)o ŏɮ35RsG!!;sr/kC`\@s|5LO؃k4jWծ]L<^~s@d<"Z MC/|lR'k7ؒX&0b?4s"fNj7MH," ~y'y&^:GyqJCٔLti{z23UV:rߋ^T[˭MX{X%$o/U(y^:um=?K|4;0v1"[X)Z,* 7MW.XPH R?w!%먜ʥ+9cγ۹{bN4l ݜ+aP^]MUUaiZ>?j h>a]< |_Ji>eTUZy5B#œO(RFP1dxM~ɴNrST>N~/ŌL/#Ue/(C`?No$~-'3;wy}R,ȽP}*YCFEON4?|_(So;{z7UgsFc0e!?!cX\hA}Oqh Ɨs8vE4Gw7w|'GeUT9;ʬ3?mb~>ܽ5T#Ff mQ8L9ot*^ɀ.}MyU UVޚ 捸K] ~ ?;_n8uGcS U}+=0w_x0YQ[ͽK⏎`h6n\0կ| G'>~=Tnt*J9Q NAƅA*AexGjŏ r<,(uPfНcՆc$zĤmc W_M=VR!ǰB%ϗ?!>ٯrWjf$y$V/ȊzN90rӇ^Gz2{:K`52 LtV߱[Ͻ6p>>| w/,F20ł AI׭E)kXFt,X*JW5ɗ^5KϖjjrKds[~^UwT=[B17Mǂk=7Ջ'pOM'P=PU?vPJՆ|] ?07Lh/1tO0Llkc!D+z! cΩgwl/H)H ngێ^buMbH)L`KaD#^sm͈|L!$ Ĵ"X"˖[Ifmt6봯^{>3ÏN7vP ~xf_):0#Hj)w^]=(uopD>_0 DbJX-#$GB,6`ұI۲]!52;EyDAD@[k,<3֋DjULx_9@z KI,G)W1wϔ7#ө<P+(~F ?>U\\Պ~Jj2^V?i04=ql.Yi=:cLPh09v}1x9z!(v6C&TL%ѹņQ惸EU( jXcg(~BS:vWِ*ޣrEtRGRvSwVJH& wXcaOt(VAjݵ?T<-3?tQIx;SC+ˋ oԶm|Ӌ)Od`4Ĩ:ba`l:A\誖"]+R] +ZP_z~u]*sķNUd^.7>[ՅcS RTJ`$(VAÏ$PLUV ?*5CJ)"4Mhii)}9H>/ti}tw {T8)Y` Φ^et֪o>ⰄjiRU~.c))ZI96czJjďrrM^1>Ռ #ӊb&pvD#ģsUK#?whx4/NT!޻w s.6zdBjL!ƿ[w~:*߭Z6> nCuZY 4Ui??hc)]o+N)GL%~>RY?Q-ڣ@?Ur@ ?hVmT~^÷ V9';aa͏ UT%h+^ǵWȎ~:\IRNM x`*V\tKf7ML@:Hd$ٝo( ռD{)wa*$ e;TH4 &{ouNjcWb%ڨ gNa+Qژó VFVljm @ӂXE>Ǵ,꣒?ss:$=VGsSY0ǢXHnʙ%lX!VˊLC]Q Ӣf~o7B}K H1D-I4K%7h IdHG/z~Wz"Uʣn UTʄo%} Yᇆ"P)tIViD$P0yk<[}PTG\3?X^'F떫e0$o]ҹ͜#ihoW?ﺝOX奌m9 cQGyFN6 b=[7Ne.9a5,XdfD;-DDdo igɒNb8347;0L4ƣ X=vߏr07gKi#K3г̛Kvd.sY)H:$!bdyṍԷuXbq/MK{;3_ IDAT[il!b8'HS]ޅxDw(n*1^& jW,;t9A'5)H.:?09\>P\LʫA;!kTJWʹ^n8U+~7a⇗k㇮ LՌRJ,U7ip6s~<4YIڛw~a{/ɽ .f\Ox*#hli>6ǣqZ?//:Ky_sImo~r'N""C[g'0lw3AC]ka9K)V6'L6Fþč-/"iW. ,s-?ᖃ˺%uYjc㽷/{^?K}4,xz-.p\|5c_f0W|;Xq|ӟd~C[zĚGOgv+7 D$lm:ޗo|s?߉6o|XI QEڣ٣fˋ[HcYa0_|>׼ȟ;~˷gxZ^rq'pyxxGuo:nv.# ߆IIlm=#b[lenbM֏>Mm5֑Φo_>E~ ߻&ţ!LJ/>m/pϽOзqs[e~E-F3Ǟ}1?WhL~;Dx?<ʡoE&ARKڨڨڨڨQTU8]OeðfV^;:Mۆޗx߹s{6 F1-[LxH;M:?\(8;a8b"On{3[sZ}M~yK⏾}W, f¯ ^D4YH$C0fG6)D;o[+imrxX?B֌eHsbQ^Οx-tHa3݌bHh,F"go+W%ꚨeKӌȧx`54L.eVR=YU?˾{ǫ-b_>s5p8K+y2a-1Q(5fݘ5O^MKW%Isr۷YJ}%/V'm>pKi~N:q1ߥ.NW{~rYŊUzRoR-jձz_ukO{YKK%!+=Ha)>q~lvPu p[j7YQ (%˓PJBDB\Sӎܛןysbubշb..)VzݸggtC_@֭K߽6{ٝDs83O ǯ#=؏LCr8- %c76gbfh,i2QӄCv>BKWEh.wϠ9#&|՛鯮d ⯰yȦ.E:ܓfrohd6,'K6ǟ~s%V?-L!D r,Y+DcWH";LN4֙Ht6cFhGh̶$覍y⶟/Yֲ|n#c$oD\!A9a%_Ұ$ cw~TGf7-zILt/դj15|RÏްЧ3~)"ccxBօDD_t!LYmH!o~B| }>|+?i]kbLzmK8Sѯpigl\u2E:C&eضaq8s񿗜8=i/YMƟ݃O=vl]1HdE6bp8^Ɖ^=ϥYh蚳|_#c/4ׇO`K& bl`wl}7iXIASITMuJy MʝN.W0Ut-*^VÚ*Y4S<vޝƻ~T'~G>uBaX$'xmw,^ASl@C[+q@agHM4I00"@ccx ɬC$]]]ڍ"_O^4Jc"k ?zzzdtΛ 3,P)]4,Bģs!v;ha09 - 4ULvː f`l^eOmFJ0 ,2%à ;, !C̻q2rob&Bb!00M f۶ sB@G=X,8ryfwR % ,BI/K[*0M̈EndmHaaC&C}yY#ÃgHam0LHQRNX5>帣U7NFTKȪؠT:ߡ`*(79|Jym7Gu]T:<[.~~nu/rQXy*<4>9:HWҵU ?T?tՀaߪ?F&s;й`a0vpe,0v=aZzR0 $,F/Bb~,-^iضiHaddP6ز&̭X 2Ǿm whve!F hi`^Bl.0H%GXVdW`E"|AŃQ[$`0&gb 3~a)^{6!;(voG[@]0\~@zZUTA]*}*vS{7? 0Ϊߧ^P堊jrAOʡA?t[ /)GGՄr!l#̬QAq&ǘ fRn*h'qRLK9 ,βCC\L;<͚4JL:E*92>0Mr礔ǯDŽRi bʠ_SRV7˜UR8Tٯt¤kiv>PU6T,]A~Wk,EϋBTX\SOM^zsutk7{JZU0Ï/?tMaORːP I5o^b"RJ?SUQi$QocаP9&4'xL.YW&TCT~ݓjk)K_"Jm0YK\[|-7V~.gp۟nAh&~jg^GљRʒ2I"t*-ZUw(뗬uݴ~I** g:QJ/YT@H%k5҉cY?"U=TUSj_rU+0 db-$ aSA5(?t0C@S-j~(a㇗\!ܙZ1F65ߪڨڨ~Fm+}X*'?2/ P91~9 ^ruJ={ NOg&9.ƒ]W]nU+st⁃w*(~1nq~ b ?oULձ#PƏrdСu'?T$~&0Jm47wNÔr7TMyxW9q֪Uy->0hUb͡V+=\u CU[1j~} ?vߨU\'2cʫ`ύ@VTUAgJ,~4jU*X~8UxV+]Ïꫂ'+?pkQ*X U?< O;A{T,^u*V7In'J%J+ثA, *ʊ*U2Pa (^<[Ƹ~Rwj-ZXWUM7SMTm7CEKe ?2\wՎ^Ja# GPp[S/Cg,hKPL udаU{OU*a?K^ wXpT⩆a>nW"~~GG_?Jͪ ?’?AK^U3~H)ܬ n.kIϺw.W**+ x*~ȋjV ?h_ŸSyQbA\Paܧ`' 6:.JУ!XabSJp*Ɯtk*a땊+6UÏlzC֙RR#uݰְh:R]@u:XRto>nMnr%(/<+^J!h[\zsJUa_Xy {$^ʅ*ƪOԍUu{"X&7 RWʀIWRs%TG)4~K~֙_wՊ~$~9W~C%-b'UblxF*: tbAu}eUKۺzjSrez)^g:ʑ mܮW֥\U5 B7>~`fT10 R4#iz{{Ԇ T*E& IDATi`بvzgs9F\0i2<q0 yՓjJnjb`p[&P+LAd F*{=ec``dyjĘO:b^S2zf2̝;FJfTjB=2AѼ XizfdlmǮ`IKôFM,>[V6[d29X_ܓ*^ [4og0Šgcאd0GGx=;h Y/W'M.Msww>ϜGq[~%nYݩ*:ʑ{^.`^G=Z{ oz }^~FF?Â<{;Wg{s}+s,dO0QY0eƏq~?kck39,C* TN*CG㐳ΒowCi77!qd!iF)Eɭo)0'G!d&Pa⠝busU|J=cīqWcvp(5Rp[}^`3:]OKagq|Mwn¿ _3Kԯ+ !-=rm<K A^j;M N^T< ?*wy00,V%\΋9Skqk;ЏK?)+Azxu0n<;c};<~7 s9V~x<;(N{jⱿΐlW?JG)6~ѿlK>]Z{=x__<^,U~LSELg _F8|}oq_umس^<;]C<|ǟ7on{#R4hl}g9">} 񓛞 񷔲'>REi'dt:ٺu,JTSvT7+*R0X2?:߼`:^w.K_BaDW?-[fqd2A&⁔0uU=V堠~4T=h\Ďa_dE_"u x{~o-⇔ p 4rz f9 6k_?g G?<| ~+0@1ߊ4 pGտIn׳`,\. 4 ~f"~l9N:rOaH3PO6Hdtďa8FV8ض:^wKw=γߊx77/l𬟌JJ'&3jǔ`Y&ǣi,e~ݾ"^I7H" AJXMXJ?ˏj2 hr ~2Murt[ߍZN"u9WǞ~,7z(:q^|PnWhIXz:Zg-DLf*-{I*:D&ZT1@;2lZɺ5+jOR3}00`e{6/r]L u"T?ʡtMɖ{F@l~y;=o9B%uCvP}J_c՘ǟNŠ% v@BKi'Ui;c E*ٻ6bر.Z`Ts U!0Y؍o[jb)Twm:MX<G^ u~V*袲^P~*7Ry/[J׋^;5Ȍ +s}~kX6w '5̭7|nWjMKOx;Eo{$H_8 ~~k]v ob' 6L"Ȑ~xiSks3[b1jPJ!PộA_\wݼg:ZG4Å>~%t=/_!3SO<\ţ~=UctrCCҵafM<8p8qb\T+ bfamް;u0Q:9*hsjz9 aYlhi:$%0t7A>mѼMɯs,X|4ug7yqw pEkO/壗/~*뙿xo> B W*~3}>+^%ޯ,~,>\.>w?巹~(ˢ5񶷟8JI?s>o|m ms[yqK Ԟ}@f~$gh$G滿7ú$4D_fIgR]u^*Gcw|eYRI~f=WC]]|>T@+zn ݎ8EiZwX0;_f:B]՟=fh`Ms[;(dLdhhA-[I7>A?Ûo҃|gFNFcGpdd==,ZP޻M&vՃ0(4B*3 ?b,$BoQ3w__d谻{t.P?ɜsxt:Mggg`>]o:\zHcvkY#儞===dY:+ML7k=acH-Zne5Ղ\%,l&Լ.t)BQ2PN^|a`+^ (.l{\g9MErYҶIClZ!͒;Uk)̌`+$C<;-4– S3R쒫-J̊ Ѡ9WwS@<I0'~c~Cv ƖBM$rE6XzaӁ7g"~'qXCO2lX~&̕yRq@Kt\^M xP~oG*d.i`8IsVa", 0»h2o#BMpili=s ^iۈ&U C1Mm+Gn/3܍ۿU3V@JtjdLUNXUqW䗴ZK4[ޣ-1ԼJd}P)U+8.=.Oĩɽ tyCڢj%Q*9 nU^6huwIy@ۙ;LЭ4c!A:8#ݨ2Zwu5QmԹc\.nEd6؞5_\ wfLRHZP[!Db`@D2yόBD sNA&f)(Gڈhlb" s6DM9`Af1Rbg[zkBbkUaYQ,,X؅ވJ`^£M\͋9t ?k< ֞GG̘p辝kAk15-'{;9o0! cC*Cgէmuן䕯5bd_Oހp\a w=p܂0 -*vEL{ɥdI܌cMBM1iߺ[cL1bez(Cj1<A@$hC.AT H0!(E!RP D$={cF"4dwC}b"+V1)Gmd(0Z#鏟E7ԥ;Ëm#bqr$}>mD__$`8hN G^ xM^2};w/\h!q n3yT+{qG:2q:3ƏcJё'N`v`¼b2£[akޭ7qX>|OEI@%~hn?}xg<9襧л ܺ=⡁z{Cfs=\yv( {kytǶq_QFܴtIJIMd=l9Z;$(k-r,nBS  Xu8!@9/#?6cBD},' UGE=w@_"w7w=QC1F[RG`G]r[ CB^OSAzTA[uA_ݿܱ lg$7Ac V6IsE g x}[X Gx*Ik3nޝq=9bql}lsDvn Is!?<6,QM>&8nMT~1 2v&o< *o BPWU On'LNW ?yu< A,/~G&e!+LGK'RRJFjM@ s.bA݌#JZs 瓽Ljg6!b$ٷ%sޏq*0Wc>KtÐ]󑃙qIa"s1Ro&dFu=/b{rkR3WD_Ux늪Ǯ\˗ mt= x4˱` {r,mݛٍl'mdŬIDwz&" XDBSHM 7 YcOcc7&NmVYIHg-$Ɖd ÿKV94uu+wns1Ɏy@l|nͯ"8 <߃7.ۓ|T (V A< GjSPy4Y_p*=UՆaxN/Y;ڈ~}fvmZ6 w(5`:qfhn`"pU 煇1D!c1=/u Zf!-PA4A&w$mXIMǩ@&1V򗰿q uネ}0W!J!fC|cW݄uj2&@+ǭz j"[inl>:f~" DÿѰH)ҲP||&U.{WUSAZ*?TuëH5㇔#JӈPIj{~ >ݾ_尥 o^u?[E*gֳ|>%DDB{ sYi w#7> };gFy}ٻ wyDɀh<$MHlw:[qV(5r!s'br˹0+ "$H?b!zQB1I>p=B?>dAŰ(}ưoB]ڂLMlömFF8!֯^TK}S:%M4I {Ei!B3yo-btt֬YَK9eR0wI?920QJuZgH'$ `'u=~q)D*1=ZAǨt+m1&|'D **^W K |߫ ,a!QxaaI jk D7]Y[+#ꟃ¯ސ5(%JR~U9qB U-J%%I }.RXH}/ɉ `J$|mtN5{.Lt;jJ ̰gj~;-+LpFZ?hY8&V"Tp`p0²Q*`Gu#]  r ʢ*UU>))St]-%*>*#PÃTJ cO唡’(" @-!~?VDyErp ;%&\4 И0bbiCCncԻ&d%uڌ[ЈF2s?t3DN,맪YU'fMvT @bou+Ḻtrb Քqıg[U6.UmO4kyRET'Jى  TůC]t ,qm7~ącM7B`uZ&PQU&nDa՜McMk\PQSilLtr9L^ ;{i7* W+-sxϠz{Օ_*)lU BX(s"9*X 2›;Y/YûP ao=fu^߅8c/&R;6 XEAuR qV0E_79=b,a.]=u<ૻ,Xa0cL&Aۋ ;EYP'?tdNS8=_XVQ ?'?h-\6~şȋ(ɨW#nFmNiwԸ$͕ ?xځp4&|: QLnӬH6r+u@᱉8m<+rГ,J*]|/2va:€eu $zbWݕ໇Pbk vWQcw.h9 _R琻#lR3p {7Qv=4/^B歀.'xc$n>Ӫyv<;ʓVv {wO"+~D:R ?LiLc/;z:G{h?oPTF~AGGfGi{QZ[X%tH.;Aܻ6z=LtEGG׍ N@rރ}{ֽ O?%sG.`.a"?D9=!NGwo|yg0;{^!s-Uwq͸X :pv?8Z$s'Q>,ePD=,(9}{?< {1 B",݇{on\-#{ytrcah{Xn۽uV*U$y$"w2äVC'J~z|"L qzQ}HZ"j VB7_{TƏVdxjS?dW4'jn2krx8)onɃk)}ݸ y3&ċ/|9xB'ּu-Qڔo{\4u70x/O ]X:|= ?&szpHGR8keg@ozU6^oSpּW:bU;/qoa"g #_xd!TPƚN4o8dY ~tENT\31:} +ĵ%H6q}Di'mQcP>d/{/jK3N|BEb-L\?9>pJ'G#A(-2ZP~T.׬ľjo9{ 5P/E*E;mR.asj Ώq(.+#D,[XPA d~.8 3NC>:D o@@Ԟ J:w56qcDE%F_[ q!A%&?f?ڇs&~ݣwLÂLu'Lh$JЕ?jIrt7GX\IO8{O:5,AvB_Gݽ"$Xv@rKD "߁rΡjؗ| \%hVb@PGQCè jҪd(!u*@ _ 筧:΂_&RtՃXPTë< 1k>) fbi`Jt LV<ϚmgdGX[3Fc!naEh'~$S3e1S5 L8+Y,X:7 '!ٳFI[IK@F-A* jtJ^ PAdm2ηaY@\=qx܅`%KK#GPWճ q̒9 ;"ǰ}B QBԫ}a@f*OQţ02oE=v/b( !(|2;gܿ`T7&qmıD<밅b=*9s'noɂ5abĚ= V'/Lk&CԕuQCiq{faNQcRt9u\i6萖p,`&&u韻L&!m*k!WkVTWF.Yʊ:~D,8XW OۈZЇ m ܆eD,硤\| J:s"D=p/VZ,Ȣ֚3s| EG,: q󃂈 WcmS2r6]5`NJAqDʷ .(1ZRJʕ sgQW 'adIj=K)T*e´nT%Zai'~8CXdV_ ~L~J%ǡwc2,a$5)uV,q]qD byǍdGҐi*L#6-Lc n9NѸu<4qާ9'FYeymS,p&{oQ_4 (;ЕA+߂T,Fh_u@ W5VB`Cw5^BǥP*6dl[F  eѝG lr]A9zjS4SCeȁtCO;ժkZlfdt#bH)StxìqM,t,kamQFFFXf0Ygk⥉8N v8GX|Z!`hhB%Ku^T[q5O,au֯ѭ188HTbűeR$dMEy*~!\x"cO.~ΗT[QI$1QG'&'TKLSwM=VőW!A C>*k#Np8/@p]bVr5VO g#'(B@Lۢ堜D X1Z.dB8P":)7<G@yB@*^PQZqT]38 +IuLIY1TNZ{p+vӘviI|ҐK}Se:iӳX2wd^&<4: &u-oA΃UC‚P ~ FNG9srE+bJir2剘k]6ǩ$5vZyV]TTSDq ~]JEqh4:) o24Jm㏽c2΋P?:w'^+Ra]i+U,rx+R ;ȿkgJ?Ql_,oAoȞ/>L(^pmG:=={D T&99~߰_BeGQ=r?.|%xއ(B$Ɔc@Ң:{Eׅ>CÛFQ75O I ~SWgu`lEkVub+4G hUQF0r밁5f1 kƹhFKVJT` b|qRIM -Ps^WX>RFys+3߆+ ]%_-]d^q5~2T$׆>8: ERABR&0t\q(ao\ϛpf/} kqDal_Ň1fTƹ pvᇉur?89.SDSh܏Qc2uX]dCܸG39du⇎&3~>40Qe@%uLž,ɨC}Z46aiQŸס܋nOO A$6bl {!,\Dg+;<ݏG~zF8 lu\Ծ2S*{T|#ckِkV* 9Ta5A,y#oD7[Ĭ+7  NbgB &/>C-]_&4=aA'7NΩ)uiMiGy?]j+/{sܜ d-0h!?]e;#LYMMbҊ KUĭI - Iksfbfğ8J=%<|ƆT{oAuyGU-A=,0 bw'={/C,v\<읨v܍zPG@e/M*~{PsJTy1XI[o:q3Z ͂J NuwtOt#m4Ctֿ. V+MePvGzY& ?LQ sV (m MqZk\,aHKJխ#6k􍿃9X w^!o_ĵ|v=-d>Nt|Ϗ!Qa? [U܊5w5g!0ſ G?4~{q^2O~S!=YYyН+X07[m<:{ߧ|ߠ2[ޏյ݅(J{LC`|aG˨7 U]q:rFgrh?YN`*t-pQD Ж)3 ~Yۉ&U裞[|QO:VH|1PǽtuY?RУVBS+NUg]`ѹw*Vk IDAT\X4] mP?*;ȅ#(u> 5^@d3`Y( u]/('*P9¥(ۇ!ԑ#|?bXJ{6rOf[ J Ωq%4#0l*mviVwg}}5S =] ?UBoVՖN%Vm*m$M,oUB; D.]䘗\TsT f<'PDlVsU, ,THX7b)Pt:@P f)T"@oq PP}~9 $@yn5IVc[I'Y'ThCMǪձm'md4:~m=N{ONEViB/{*TƋ"'?l+E\|l=q1kҒ1ϖsg&VձTj80A1V2T8>!eԨ@fK*GJ[3 *W y lP%(O*NADXA+#27hVť' v@[UqJBg$"#HX/"d%T|蔁PpQ3"RX Q&q )mIUI5ӈס4LՍJ7;:c:LO?Ls<$'ݼ$MF1H&cu2C7gp2tO'u7TZ֐VhۡN-x4^ݍ 3DK,E kLpveC&(&N|(EgJRz>oAp_?lù }'w!¿"2g5>7SXo߆뾇5ދ|EG}}ҽFKc .O]{ތʅx/={Fr'v:)a2^_|{O GY>rqXjg{[ORYpA+ka8? D&iqvvÄ;Ζ5a}9Q>Iҍ<"삕>"?XpaBv1f)r| s}C AWj`yAl@nImP򃐭d{^ف[l PN 9p/QĬx/~[d_|U(*Pt+󝯑YߡrO;6 `rYĬ>Dg )d[WG+%IԤIedfc?&?R7ˆq!XSa͙XӐ[?Lh'~$!9Uc&Bu%q7V L ^+ӏKW_ ._B}p 5'7_%WXfOw)]x>*_o83@UA@9A䙗QDAYNz5:CFPxwI6؋Τ?}w.Pr2?w/n$k67K/Pcx MSzT JOvV%$4g&k?H ?BVտ!Xc]u:u9C.t%lt&j ].z[a>]zX[iFFF8Au. 5[7֠~P/FQF|cQG!t Wpaܟރu #7~gKנJT"(}. ziBU} X.[йb%-TAȾ8>=ݍ(CD"NW _NsCU)A rOw(yZ]ESv::m4iG>Y%O ?LvteS[e*II2i{ډ ~!>u nu`Jgㅕx7ՄJ' Hfm2Z8qmWJ: ?w!L^CP>"߇b rQװVi+b<88LfEXWX,n+Qfk#WC.[\zKW#oF,ʁ_^srRU+Aw'bb́0:A2k/źm ZB!*.rZw ]]ek _M %gAb=ֶ-DXXW!y:JBa{cq-jo\?͞7sXJB\_kL8hqmjܼK(?ǡP,2Of5BP*p~2Nqcc{I8b$z(hTǏy^x ?tď7hasyl趙4= VJb#4mۦX,YL:;;q]h =YP@仠cT%`NjPAFS5]Wೂ]x!+W(`KPnP7*:PLu!SKEݠXjR j@mYAQCU*#< T g;#+>X1~"!Xa4]qBrQ!&Vuwֲ,FGGa͚5^VCʢ䖎 brzq bf#! K,<+`gp;}*PJ%/^%wBڨBЖ%P #RM@*[UC}B+TZ}GFAEu!o'V( #_+i]Nsi±!VL76 o*7#u>|&yjm;6պ}x#Guv;~Qrb=uc,qmY8*[+n2%jFYsMA< `LbxuńMi[: XvHTe#(iz;elQBH ,PrQoΒATnQNU{)B{XAۨf$V"Pj|7^.} =wt@0>ɵVV ,qcg%kBGLi[r?te ~:&~RΚ(n:9d֣IHWfl|L捂&#I^t!2l&N>Zb+VJVVwTMJC/w4rrG8J6hVQg(h=3}lA+.nӤF#0𚶯ë{4}3r {%25A58.}%gbxu+VDž{SغIribm'Iuڎho#oquq {Tc\|W$?|2DLW;?H3~3 3ծ˶m<ϭ=P$a 4)sOiD:1nQTyo:i3~97 irV=4d?i+Tp׮]3䙫mJL`Ii$a$x0 M+qό EYL ] oGZaNt=DY\&Ě׸7)fnj% {fmR$mZtHueҷV+7tֻN]ILiwTƏ$u@G{x}~R {3dKJeN5T,ˢT*A|F,毘&̉8PrMXt؝ZI"Mai@(쾰v5$¸P jV3ފzNRtE:NaۇI,Q(J60t0>Y$tnTўxM#) ?+WΜe0fklVBT05iK VNMtivINi>&aV1dS+UÔg騹h3xQ;1#*~$ }:Uc2ϏqǩvX4VE؁rBok+u*LbϞ=,T\Mlpo[}_9wF שˤKEih+;IsZ$ߥuKzHw4I&6s0GV[]a$TiXIu-q ?ܷ"C5=cj ?Hzz@p~#]cE>eY̚5r ꙫ]9A19 r B$?,Ĕ$9M!ե\BP\'Cl$s1/&!7&sJ6w;ToF%z@MS?Tvfq9Ƽ*!.?jw!yI)3gNx^a,n4,ˢ\@VT۰0]8ZǸ ūNVa-qyiU˳Q7j2a@fsooL[]g}\ﰽ[Q>|4Z86KxJ:m{ϸ01 , 6\0lʞNX$Yb14 a5 = q7ܖdWV4L׊nJ:[~?Z4㩊vT9%\mU@r=t-H~jWJ'^Y?8rg"0M86]þөѬq5k?I@> [#qEԒ&FՓ[S%e'6:y!kXt>bc)Ɣ66JƑD:rrh]Y|]*T,\RDũ}^*>XҪT*8Nf|?R[`u#^{ucxGEFܻ9 l&t,0qf :qq~Is@'iNk֏gMfNZ&qӹ7߈9 S?Lx;#~D 3~($\pRtwvP*)W2;Ӡ(F۲)<lݺ˲T*<ă[l,=$ފ@^ཐR?S~0xKZ}dG5kYZn4#؟-:Y6Į'8p/fdY* >,d媕Xl&z|r'cٲeYB瞣\ DA.c޼y$qO twubr 5h(t1ĢXƅ{uCAptw*h&̥Lg@PݬTof;`E%2'6WS'@LV[RwDž 3up!]wMWhuݴʹS? ď$V ~4 [QuN|eZ.h;#cChw\fU"/qb6_җd2(CԟS IDAT뺌#-IOOP,,n\ϥX,m랃RD6%.|3I&R>|_g˖-l۶ !Rr%L&y R.m#dtt4d2!я~ĭZgЇ>>nmr-d3YprWr7sM7՟sײb ٿ?]]] <3 _~9) ^Bg3RKgn,ǥTT-1- Q$Q-n3YĆGYi=F2nǤIes'cgk0vlvLj DʨRC>QN#T ;@zknLmҩt{;$13#`#ځ:z{6n3~Q"#m[~)~xgoקQ\č^ؼ«?`㦍s9ǩ=;v044ʕ+ټy3<̟?+WR(xgNctt{ﻏrƍYbghh.CGGguO?4{aڵ_wy衇8t֭cŊmܹW^yEi&|xb:+mqorWя}v7tqs9|c+_ ??17o擟$߸p |?'RիWST"K&\6Oȿ<..p;mĢ(*T^:-鴯4G$08q?k`*]a7*T2ƾtS܎$=~cY{a>{xg),rlժzGt}<~:nl˲f ڵFFF?M7D?_xۿ[>2سgRJ~ǟcsi100ÇyoP,O>9͛m<k.<8묳曹rqۮ@R^>qJUW]W_ͪXv =O=J)..]ʅ^u]wߍ\z,]7Wbhp+~'>5k8zh|D)Wg:˒m~N~Ӝ}|ޙ̛3Q>4AṮI o" G4U&CGGT*\ץ\.s,['ˏ+y166F& 4D;ȳ9tJzI-ѣ:to}[̛7۷322r"C:?uEBa|r;_zR\ϥ kdXG'ҧ&Vm)y8dYҪhuVڱP5`e) NCTǏF%##~LnJ.37;26^dX[剤# + J)p 7P,Y`BUVqE_ΓO>ٺu+yGyشi<(;d2H)ddd m6/_N?˗/g۶mFww7r}{g?.OO[p>>'{G6`ΝݻO}Shq=ѱ,WbB֮\h!LB5F}# ᩻fnfό]xfcfM]( ytslX;kqGᾇpU:5k{v|| }/}K V\>^u>̜9sxu>2L+Va~.\s AҲ>tJ=ܺQSNj^Z88ccc8pE1ofB)E&!reQ &5WIz qfm5{VؚkGq(f7>3L53cg}fgⶽh"tt!bui\ڄqrd2C˝~E<;n'??@9rDpE~S s7 ,ٳg8###܇.\edx^_C(UNXayo2/a1k7.0e)ӝ'N,dQcZ,O`*l!It|;~$]s3ac.[ ?'`M' 5Z)0DoD$̋E9jߺclh5g+ZWY4DU^ ! VX1JgZȚg%+*$%JXQwwll}+ٳ`웨gYPZ (f)y7'i:;qJ) 0.t]/_CWL0. ?tGmdp]F%LHAm KJl^`/_{^`-9}R^nB,φp\jrn6;zM455J#"X,kj ( M#* `P~ttBd2(bdy?]ccc~X Y LNNbpx(Idl6K8.;o|bbjFTU%  +QL&-H$b!mDYgϞٳtuuIRh`vv/gd*F5+OUQ5;fb_Ηzi.{Hf~)>7=I[%0T|8q_=\r%\}N*<Ắ[vIHQ]yWٱcr _=|v>4}{kȂ9PUH.^?kw^R$fmۆG40^:.{u]W\veG?[oǬZm۶iA=  صk GR!W0ȑ#ܹq àyG*R)~OĀLFꫯ_F4W\q_~9F~=9Bmm-W&N k/#+ XxkDGa͚5Nj"hΩgChZeWIL8} a|*4l3=O4Tj|_Ay96OYtyݹ4@Lhٗ^zg}NwŁcƍ?~a"ǎcdd+5kLK=2#CCCxbvƍF:u /gy!z.YB:9HR,[;vqF֮]޽{Y~=;w^+vb Yr3 ---l۶o~aJvΝ;9x K.!6lݻ1 .L&$O/gbb|+lݺ&d A!  捳7+ '9$qYp?U޲,#8A}hn6'gOoIB$TEAy, ,#S噧1@ k.2>}VX7ȑ#Go~ի9p﷼T~e˖Jy֭[$I<߰#MM8$ }n>E!J\S5}Ch}~֭[G$![~+`0{$ jkkU؛ VZE(;۶m ӧOsUWm6O!֭[m}T2`dX"`ttl68Zu aJسgʹqq.[d2s>˵^K2Gn>sM6Iyikk8/<@Kn$iU&dYV\ɭV16:FKk p*wBT)I6% zj~}"$rDFOA~&&&⋩ 'HBkk+6m3gXu.\TPHAVAߌr>IFJ?7gt3_"VJMaH@Glg2< .1]m ](H&:_!\hȖL5< EmiVx)M]]zp =)u4mQYR ?ѣG?C930@$z}L&suZAr<99麟|a4M_*nii!N''E FB3LNNfihh`bb;wZE+V NŋiooBY4hkkgaӦMe߾}|3gillkP;wCq Ѩ+Ğz4I%sַIz)]f-܂<MǬp&b_ioo'i+b1f$ V̐O=oN"} Yn>"za;w.QRj/j\ IDATCԄHy1t.N綆3iDhKo_s4e+姨H ~R=':8hC:)I(i-5 7abBSvϢ0^T'EmAzy#B> Ed3Ein_\zx"x"?;da4A[h[*,ў?6^Ms |;zK[Ӵ"z{"@;-?蝋2_ӵJpfs{Ox79җj=[!:F' YOrJ"@UU4M#NSc\7tR\VMM hVV4_(R;TT:&&&?XiF xp8DiQ__O,#Jk NH&k8& 1::'066f};$HBH{644k:I"CD"Yd,(gpoՄFVtG4vp3H$~| W eB2Sz9r/`08-Dݼ'NLIԃԸKo}/?xO>_խ@#?.?f/uۋc1=HS$HC>S#Λ?|_u{4:%[q |?`xa8zD<"^N=(*i8 &o|+6:op~;oL'n#$IXg-j8ͭR0hDN-d~$?޷8l~u"\ |[?_4JATՔmxNWW$zS"oIa]z[;=<Z4_?#w&/d!$Dr0I^$?ԥ{L>mc׆E~?pF Mǐ%dIٳi:=7qXyKafٵI= V{3%']w=G nrQgT `,ZyD4ⱸ###w|y-̜K, X=s `llM,`ug) -q"oSTQqĢM24]1 B%x,n5bFg6/4LaR2 =Keߤi9E7(!aҨte ð_WE\ȓ?A1Pjڹ>ş<_2ktzӻm1AHF.6koTXvf +;>?09zgF>sMLb<[sf3 ]bphzu2RPgqYրBó7/]h[]w+|^&~WΜC'Y{5K(l/y.䇡KM{uku"%b,x#9"ϣ]ULoCcfͼv/,pcۀ~~nrHJ_B2p7t=8 ffdlSQ/Kcۥҡ7gch7Rf3(jUs4z9yeY&LNѢwn47ot {xu[sR:8"r]g)= =5ύ庰CY]'Tk2Zj9/]| Z?*=*59ȷvi?O^{yer^3Ml뀱?hǮY!UApzOq\z=sAd=THJKђ9ˉ7_'E׿_ǔ' #}"vcUZÒhJ}NLZn]J6wW`h:b):3.*\i's)?2_"4F/Ayz˚ĩ:3F0kY՜\$"t/dO3sQ%Li1TUettQ/^FQb G__N:~Wz_y,KHlESX҉(vk$t3d_ɉqYm}qb cN!t'x)"-]D[9'}x? K#"Km>n4~kJ~R0-b -jc깄чyr j8sfiY/=NbW똳&b$kv~]GS#hD @xh,?J=$Oe.\-/9^}vqENAsqj87K?+71)_E2B.36<胼!h:Jy(W(>;%]emW^ |5XJ S NusS,[_phoz<ό>OUUl~t:]=3بF|O/1J L&:LfzB}( ԒL,8P\zc"\P J7*wrd`t"msQ(7ΰp`^;r{@vP8D;z;)LzDC{qCN1Ϝ$MUc|_bgnV7*(1ڱ螓r%L ,'ZD1+5s{*o~/Y=Oήoʄ5G^z(gxyk'Ouu@QTTUxJ&Mi$9qc'#Y?V2rʖO/u)Nu0y/{tݗ"M!T<&"? a'L" 0Z} hk6Bj$0("? w!Ź9N *\fjiVIqJh ()R)t]V5^x5M#Z}: k(x{e _nNk~tt:ɷDS {f&NdXVPb.։څCE:B*ߋ6m {͵|'XyiSAϣ[ahZ; SDaxKz:Ilt4Osn[5E (}NOh|ѩ;F-h]n]~yWG]wš74̾ ^g*h:ˋ^vlYJKe:fAÂl{ +6*X,QXȴ55\(EH^3cIR477[i]3Y;k0>>磶NiX./);X):`ğDF:,OiˆN2gꍴ7ܓ K  :'fY( eI'3]ֺgNĢ#{iM[W}D)*vL2Ζ羘Yn%` O+,>>'$s/׫+%M}USL 6hU>">lٰrvy;G> DtH:ֳNj={c\>'>trb|F9^2ZJ4?W &,YdE@s̙3~Z[[Rt-}$vQ.lCQi7Y>a&&&X|9T+ܘ~Ǐ$(9H.R -λU`8_axrx]py;[90ըqһngj[y.axEE0NB: P ^(^>EC:|9 B4$Y)J=0{EvdJ= |K*>cfzL`xϕ(Go7b]-^7}>50Uem@Ajx7׀1B/)LK ZBHLe!Me,`R:.z),nqxTUs̿\j[9ogiEn BdU:fSۋeBVVީH.K.olܨnabшlD?0bzEټ*m,妴JԳ+zN퐦]~OgYSn_8^ĻD6n $KnAL~)zFR)R餫ýFg"SyQ֍X:jpq0LeP6k'Jt'R 9ߦ2)Q!FQ(p ^9+e|KatD"(~a;!+2?%'ʦyaƝ[![3q* X]g\B,ȉE_9]=^u+sٳvшn*rD!JEdˍY sn]W+թh?VW;W~iϗ;9sIObѢ31 ':F&NSC*)RE|noU~Trf\8{,NuBӪbxx]שBQix9sa `H&Y[ZZhnnSG4X,F   2 tvvZE@uhooy9___uu47 ETJ' xG\{uM:a?=Dus`cI&-dYsQx N쥵ʕ+gK^i/PT؋hyxx)" Vs3Uӻ8[ZS&^0*Y_kH ^IZ}Sڻq7hj嘋DM*ȏ┓JR*羋1U\t.O߃S7n &)\Y|-a+W1G@{]iqb%C=7 _#svu7| ٟ;qbo{# _n)1t C.2b ]yh#IkV.$I*FAf.FIԫ>#<½OSNLF)y,Z͛7S{"r;;O$I~z{{kwsd/۶mCuv[hDL8r{rtݛn[$}l)/r;٥[G{-Twڏ"w:CnߋNG_/C  }%G0l؉#vg'r^d =9H\DFcd4ϐ:4A_Ʒ .R"١Q[_OO%"7v~8@򭟠 PW@ __;dHy03>#"2zrmr̙1$I#ٔ#C*J2##ՖN`.@FpH6t*mD'WwիWicccqFGǘdE\ɉIFGGi\,]iii6;Ld2I:fٲe,Zp8̛o4꺎c,YEQ4Zf*" Hysϛ( 6Qz{O~z>?6G266FGGTqN2d˖lݺ+c׮-(}m|֙vuKίWLtanіrMD{*oՓ{/=_?Q/hb" )<(0tQJQD @xj)܊LEέrkp?'=ݔ&GQZ]@vx}`?@[l@$a2' Biٌe1$: SurM'+edO\\L3B_AF^YE 4@F _L>䚵lrx?A?|9u>HډA5!7<ë5N,HchhQTUxcn|J2dUF{}躎(XO&axxX,… DdX,F,#fڋ@ 0њG}}=LLL344DWW---;v %jrrY Iܼ7===~9~8T+V I>6081(h6'җ7 ,~A^{59BGG [-#ҫpOӬ\+ޓ?/o-]D"p^٢!t;EWnw`]f4X zSRoƈ@Rl&?獰]Ք^j'`.ˏ"ɇB!~?gϞСCDQVZe}:~P(D*":9Im$(E8z(@." 8u4t% î!#Mӈ霱L&э3&{&#Hӹz ][D2#\GeCקP(,z&t]GQUXg[ o' :ɪfƐ\0CCC45D2d,eP/5L^ YI&$IǩaLLLpq.\H jL)ē( 555S%p8L&ebbVh +tTLHӧO#2ØN^* /z#L)} 1 //lٲ;3&(5^J"X~}v>OՍ@OS#%"R 9;V,N ͭx_$܋.j0fxW"ؽUIRLEԨTV*[%y"[d]v)V%^Wl39^R(}`jCz,JB PPڀuS- ab/|\Ж}NTXR>!t4cd?H>-KQ0J2>nH90k\ a3&mY|D"42BBQb}}}$Iw&HDftt#G062بU:UeZZZ8s bddQ4MFz{{9y$X1hoV,^dk@f>̾}eAZZZ$N*TW1:4Mgllh4Y|~xG=qŋ}-"-ʒŋIӞ~]t۷?o+il޲@ PT.!ZTc p}FFn)R)SѕzFg˃5SNY A>RB^Q9F{bz)֟KcS߹ @' X \lhQW;WGd#tk+ҸJmEm)[sQH6R=:64#gdlI R"3؇oB1_g`̑ylʏَ]ua Ou0===-xKK ,3::J:n+Ra*D]]ePTU%rJ;pnjkkКJ iH5kK2+WА32V^Moo/hF-Z+DGUtww#2CCCdY-ZDOOXu @*n4:P/ "St%_"S˗/' K(S"aJXl9__>ѣGYhԧظqD,llfۋ4j sq.j4\sy/̕wK0,*H!jYRב$+:6%o"a )HXPCHj~F)쏀?r@VPj;Qj;)5.*LCwX13Մ]vC,VbŊ|b SIҤRi[Fm ֭+j5k-֭#eQL&C*T:6mD6EQ HiPu֡iJpH&֥_d / j{ה^Z^g%I__fGX$aj:Nʟ>t]dI&S h8֭c˖-$qB3::sE Q<^bB=:AyD 4l5ˎH6y-LvfgSDe/yrv z6I,QsPDWZ#rNDәDĿ 5``qeCrIY)󆞷]ߘ<᧡?j Oq'|&55ԜJ`6!+fK~xܞ+ü_-}aq[}BLOw**j>gw,h,ˤT(K%IrN$ZpK$R0{ZŦ膅ed!ĔL&ّ0 4Mܕd9{6%)> AhOEUT12Lxo~X'P5MHLSEv H 2'sQ&Z-oS981j!:GJ ΅N![R*t4k6#/^ҬD0(DәJu;4凗s`Lu;N.v(QP1zS8l#7t> czaTژdFAs%?fr!?*qhaF)hKӴ ;5.s] 00f} ' 'r~7Etr,J/5[ΣbQI֍Q.0JrCu{ăUIDtLQKNty-S6N{M1vu'Ԁ({K>oen]LUU!sU~TWʏjԀ[*bUze2ҙ4ٌb%yZ*\KM%*=^sLEq+T k ^=nLk}U> ^m]ݞ0[ȈhLVF@D::"RDN^# xwsHTNџJeG%P> "KëB\M!‡p'Ֆրxt]'JYnVv6%抯 ~!!!|4{)1}r+J0@QT24dR`݉cJHӎf d# YPdradQ?0 T*eA;:1Y BdY 0 `d2E:*S;ޕ\\s]һ=1gΟ|Ǽ3C_S.\:&u s&!NMO2@s r0DQۍO9#)%YY UU+H 4C299I{{---y(XC(]E0rsFB$h.Nad8zXsEor#pׇP(D:n>jkk-xs`ϢEKiii!L(6h$Hg\ze\{=F$-ZĭJgg'Zz j>ES6*YLNtV(vRB|/}D۹/ʂQ^y v[7N"u 3NkC Ά`c^~x1-4d2I{{\#^җ6gKӉR/…mQ|E  AU*o!IF&IȲ̯~g}??fŊ<$ 4M$C.n ;;;[d2D"oNoo//BVdtCE+lqMW_ᩧS^z)7wˊE,2LF!0Gt2b8wDQoiY>O"ɹ60#GFSC4]#R_^ΞEQd<ݻ;@ ]wOS>Ϡ@ ft뵓LJ;1;yT*suU#T9~7ӳP} ᝚_S9jTz}עnvw^~ˏw6>GQKRijkkٰi3"RvCGe 5,iCA¡ vT2&7)(XxHSeݬ\D"c.B."R|o_j$Ji444Cmm~~|cK/cxx8g|8E(-tCG%ZZZ%FItwwDr[>~Ň122B__?\s _v9dOl EA<%rtpP__kԫ!9† غu+,i&ٳ#SR =P!^(E䜄j*V"qCREญ)Tu4@GgB"V-K1~q$J+X/cq2 clla{1nf>))M*4D$LQI\uUD\Evd3Yl믿=~3~Ʀ g\;MPOKK /矿d2Ɂ"ccz4Ţ,Y*9z-2\t:WCӲD"$ ׼0ͻǮy^Ív9"RD" %[Wܩ6ƉYA@aZ@SܔJװ':'(@3ijg, u/939{8mVuQ Ge mGue&e\>+PWm I'h,Ie6V<Mj:j IDAT;nnFgW7'U~fzdKD6O%K^x+ΎbU^.װө$Y"\7ᦛn\QpK2;?sp lڴ Z[Z Δ5 o_$r-|;_ VV8Of|bj[Χ LYR/Wn a)*fRRiJBnͺ<%vSdh_GpE"vz_.6o&"*JxE{K9ShH/y^{5 )ҴiJϓ H́Ӛymp+)sM~xՒ"\^yJ5凗5kc VፚDPU{}*>Ɔz3ϐE|.O(2>rrpѡ3LSkjsƌnX;bpP(D[[==ìZ!TFqḣáC\+2faAUU$> {zz||_f=twwE+4BdIf|bM6Bo :x'8s [K*6vJ ͐a!b * Eqɪu4\dC^sfc6+2\8:ȏٌˏ]1n b_6O !+pmWnf2bo)SjY Mkb <أ~s[/ZGm8cdp>L:CSSK,g_7xGG{{N!.0p_@Eɤ3a|v/&&&٩^i@\#ɰ`AK:tP(Ğ={Xd 3J [% S9x&wLNNg^/EV[iD4Ɏ^atk&+{ykA RCQS=@t-tuױ~կ(MLF's:H@A7\q/ףxږKSSP8M7׿u/޽{ ټy W__OKK3w{!7B2*F*QZt:ٳ$9TP8u][OhN]]-r 'uȔ5SavpS퀓U87/!rTE^T H['RF焣%UM_ PDغq@7;){t&ݓKTT!/8nEvD0'EE'i|Q5._5Dݔ.?*,̶p]~T+XpՙlRbv4\e)L/$F -@$4qtEEՕ]+uꮻ~uAEFb"MJ PC :zss{gaf=mIn}#:fPQ0MڵdɒLC]˷SN8~%M :+/:H%Glݘ6Hhlŋs5_egbp t$1}!X( 'ikms HAQ0MT:I'5\?(k֮e5DQS Drh[PٳgcOΚ5kCK{5E r_`޼y،| }YlNcҥbyeO*)*BW.$SA1ZYP+uW^kWNzAW^뵒Jꀈ(xjJ<9^ R+D쟠Mj5d?jqU jtyZ?AG-?T! h8IJcrG*j`!x`$J6:[hi(%AA,3 D \~_ߟE"we+m*N'>ituu9HJG8SiD$uQdٲZu eCb1 29 n@u@bݺ8w!I0<ֲLƲmQDhkk% a5(mz]e_gB"DX-'Ua *T)$՜PAoUx'*z\r"Xe2,YB.J:!WU!fΜ9"Tp(ys5˲SpddNBW] Bb6#NՄpx2NC]CM d# YHXQ AJ,:YH(&4 ֱ"6' THP4XFc">r@&9+Ɠ' ֱ?ϫ5l$Y2-$$SI4MI0L%IR5aDa#('$) eYitCw<75C*4%IcFب9R/,6H D,u(yܧK/FX-DUPύ(&S]_~gMJ z`, {" N6Ē?C$`2JZ3_aއcMVUŁ~%nM|<\ZV&$!Ҙ UiTYs0ƲT[:ȪGƪJe1,Dx,_zv"+DSj Vc=B^1Jd8Tޔ?L(/)r=vܶ^:c>τJYicTTYt+%4|QӃ1ՠԒ9eX}c胳8QL-m-Yiz4tHKSK$ja+1Lc̝Sn.E(Nls׊mq& :rs{]εXJEnRW%ۜY8 BȆq/O4IԪؓ׻ͽaVJnS-z+]+ L:U7Zf<8nkmAhrQ\CZELV O<|'󏠲C-y?ΊnN CZ,F,+sQ]]aNb{HMu=l4%itZثDrY!XQ(b&T 0U2v{(B2! GH8IHh tt:-e6HEQrBE"BmJrhb"_tA$jd =DabE M~qk[.x?j,=^1Q7H¯__vߕZֻW  MYJ~tA%%{{ ֕ΡȺq/GRG?>ͷC?OFQYT4YGaEQ `ma;"EA4< ,YD`̝֭;Yf_;w"I'|2/0\%nvÑ!U9r(+/1l~f3d̙q465NkB]Ydi]eY&K/?ǟ@ssbvNak`f̜mgb8J&{,[7) b=b P˲ؾ};{졡O?ӧ+$I6oLkK ,!LsNz{QT9Ċ+F7m%*BBA )Ew@T: ~+EjCDګEJEWPV^P"BUaR/DIwC*_DDQuSIl-rjqY}4D)hɇ?>\AC7buMӘ?o;f-7?>/ ?ϧ.Kf̜*۶Ȥ)=K/<\qKaE׳w^zt]+y 0<4L?<{^}U ̙$Iڹ 6|2czGRe ]GfÆ{PT N* صk/^gdUQdD"Ç lڴK.e˗ckJ}}$/p"ϲȲ,A0^m"!7^̴$Z0r˜r r(A߭,Oh^ Jˠ97z UTFǏY^:P>YD_RzՊmO&Jv&'P}}={od``eXǮXۭ ljF#v}[xh&z!ijj" ( }lܸo3225\=)B}CƳ53MӸٽ58QIx79t ^z)_|M|{I$cƉ m+/̭XH4 8 h~ݰ0hhh,OH\Iqc288H{{;v&ΘO'?)H&K%;(EG8&O~m߿>N=TBjUQٵk'O>>sŗpA=J}}Ʋ:< _344D*ʄqelؾ};梋G{{d&HZAH"x' GИb?IAS0J<լZxj惆\Bd={F4XW̚ c?9CGeטt*s_r:,\/~߷;]s^I*m7͚5k9餓xgؼy3,s%`BfΜeQPG$2B_9 ]b@<4+0 zm۶n:4P2- D*bE|_dy|P(eY}]̘1ŋOIKӜsvi< NqE&Lra[8|'|2we̷(?q3V@QdLd޽Ba׾ >qMF2tlv ܃iHmACCs=Ǻu袋2sモ-XǪUk]AhZ Dj-XIϷkڟMSgֱ?gdcӺnէl20i!INa֖N?tPHuFi̙;3$N9e˗/{>QnM Vyʣ9uM]SLC͆؀deYsɻdYVJPb7'c.x"(۶m?Nob i*9ŽX_)L(bsϱg>ɿ`͚3СCVAJ>2R!2ѣGY6$d-[p `*Y?GQPUgVXA$!N( f]HTxKdYbD":ҙ6]cS<(R6LVbttk90.E Y6E&踼>}rWB,XGC3zBZr HAz!ڸ%y'y+[BDo"ZAdTR5ZZVҞ_A5w] &~B(4?YS> ~aci$0 &iy/BjI4-Y$w޻سgO>[Z8ġ IDATilhpbng, @4,& 1_ׄax`ɒD"QQHq$I²4|sdB!ロgyO|tɎܻg)QtĽ"4ov:;˘>}:Q¡PiEK81a&,j)lذYy300ʕ+ B$SIBg9 ,+ʛoE__AJ>EDVlUzE=,6ѯZK-DkTRs b=? j-W{"c¼~DRz٧Ԃն&T"}ܭ(Zws :?΁?ch}?TWgNYQl2a8J;? 4KgABQU>M<أl DO<ŋ܌irRoYqgs6nȋ/\vGYv].̻Ze9O˲PC*g!蠮9sR__`6Bm IRx҉|K_⦛nòl?|. C/=F +\ }!J2w\>Osm}Oe2:#Naz$9yP3gN2 6@F"Fcpd,=,ۤH[x⅚NQvL$1<<)4oLN=^M[^V9/)Pu2h*^BҬ4^< Bh^t 8\IRWa !Q"ēS"{Etkʭ 8*w"1S5\+$?Z(AΠ*,˄X!X*`sey֗xlXZxѡ_0:U!`(`P5}:sJ jxEG9DBDJEcNEq"+)T&׻X&TՏh݀JlD m9ϼ,yn5׫_MDϞ4[~k q fZ]։9$x2J-ܵd{o͍ TUЙ,aDfѳ,˳?UU4MMS@3VuY>t:CbD"aVB1t¶mMaets*i-MH .xTORD-tWW5kQJ<1ndJlz`U2WOHq?JbZ9x~Guw*8Vx( dj}}KhT*g2˲( ̈́aZ:WUvXPH%J hnn&JeR1f-èB$)p/{D?Yu EQinnFQtMsšxBJ<'ܜ-]s {CBCCH&NQaσiY4(ZT44Ԛxڛ5LdVhu 2s>,˩v=t]At,"Ne|21 E5HөLCe,Tt-Gӥ&1Z ؘI*"LZ,aR)R%HK7HL2²-*֘Zd$UkY0+x})2_^V2HuJ-]A6k6N?˴ZJ5ַ 4qWR ߚ{ދ|6. Wo#XZýi%VT(m?DjLt}֒ݏ~IA,UW@:M[ݞ'_#= c߭?-dB,qxf+yʍٹvxdYF.C+EyA&UmRh% 8VZֵ'8V;su[!-f?TY*)w!KZAXY仵)jI+9W=k5 2J吊̓ٯҷI&<أܹ3׬aݺuԐ+}%I"ÿ{Ļ}>'|2w~shs s7ƕVm۶QVXymN8`Æ{}ﻈiӦaFxJ˼D(VRgE5vK0`XfWk!hYD[)BPg U?l0Tk?D= brT Nr֚0lܸ_l=@('Wrs7:bYp_; ?0::J8bdd_l۶P__ύ7{H$w'?1? .䩧#H8 pb gBУ7|_~\uUƛkl޼N[$Ip!>_֭[׿޽~|dy/… 1gCϜs+Yt)<  1<2֭ۈF Plܒb!P>8ڵk"CCCݻos9===k{7 Dѱ4R)>'|o}[޽O8O? /kע:7phFiJj S*b߾},Z~s̛7!oF_o/fbml-= 6X-Nׯ_ Vd=I,?axkY\"^{ֈ-A'׫wm`xw2 d^gx?d<;GRa"`|f?@`Ȓ_́79|0W^y%MMMb"˷M>&O~R>xL$;y!]] K<'L6Jo61aLcen6}JKK+*w例f,XWm6zt]C"IiW\A{{;T;wYg… ?ʹieǎrɫhii&Hv)K, _kfϞMwO;v Jgo??e>q'L& mQ%\B8^z{…8|w\yᇋjAk TD\*kgEbyw:$ʺ3V AX q~;i+/.v!PIa)1?u1YGZ^cn$\R)zz{sV=zń̇x]4]gʕ<&bQ8###̙3x"Kj--,^An6lk8쳸;,4t 42%`UZ` ڵ_8篾iHSD"l;R Lʍ7r ǃ-iӃr-ttL/m"0~?Dh=^0DvVuH8•W^ł ؿ?+W))EUnzׯg˖-P$ $4I&466RU (t1[W}38>tMw{MU wȶUTopVZg?Yf̜V{7CqiqUWNoo/nV ~߶;vя~O|0MO:kظ|ߧK/a&6)~)nF5_sgΝt̘^˾}7??eɒ%9H?kSױkꚺDS-BB%HUYQ4,]zF{4E!HM^Aʅ4I-c`CH q^uVXUW][oYgE{[CCڬUB7֭[g>å^J*bddsػw/gu̜9P(D,w,vu]όW’%KF dY):)GSpx~~=]t1D"뮻G>W\,+[_(HB" J[ٵs'x/!HJx饗ضm霍:i`X˗]L_z믿 w̙3xM_o/d2W#DU)Ҷ݌k ƁY:Eq+=h(:AGA+ XyGV"mWJ[d% 5';h JZ5^{2NP/u!Za2ZZZ"'2?lv0N90"O:mmy'̟7a݀@rIpSBHI"1X9hYض9߭r$dV#?Wv yžTe%{DJ-{A>w^+_y4VU #H^{y9#ȚlCuC0-FN;T.\DQ>Fyy7Y}j>thoo'O% _2Mf͜իiooG4ӟ;'`vl/| ]!]:ka284aXI:7a޽,[v1h,Uj9r}/Յi#NqF0imia̞YS#۶i̙3]4\uO>sJb&YQ! g}6e?ЏNsʪU ?*/W HW!MYy:twa*ۘ D"\켋Z$V$+^n2'WxeVg< |b"An+IBQ`j1ߵJ.[d\^)U%a"ЧG崛JCzl/(---iFF,:ZZIAs422mk]:t **,6hll>p FI$ա:#NH@32:ŋI&455܌X!(tp$B*btd4GP D"tvv!J4ŲL(&a222B2&|LE#GpB$$tQ`ZZ[Qd˶% $ҚR_Nx5P( xEǑd&vy!iimAQd$ ap!1iWr»ZZ92I0 ax.H$`n%I&J200uksէpw' z{{?TN;Hy=`K$0S׸л`T*Ŝٳ=Wl1stG&ǶlGiB$W lx m32W¹O0MxswpgA4t~4\>Gi_[]O 7^Z8wqW>({S(@vm&am7–JsmʲxIJ-SU;+F1 3_f% 0H>rS׸[ק=tt:͑#G`OLQZ08z'U#z'9E w(>E T@4젅`BgM9skK1ȶQX$ێ(Ip~Z㍐xu-%RB:#WDEv&)ts<* 17qbSb,ێFDQ Ø0a*hF4H3~u(L{靅uՁMƍ抒3Dafa8)ze6b:iN{"M9!w4\nS6s!Z^U_8tXE*BKk9MKٶX-{NI5E.z.(|m(nؖ1Ta([F/jsp<$Rgg̸\8e=L&ZtK;f-g$1yKӜiSĘ+N:S+ƷMcbI":E 'PISHdxxxsJ%qse}!5s)ӟdS= ύYdr)֤ py|A~/4(KBuizzz ҡ qdY0̂f-R:8eh b((Z*eYA8ƴ@,l,eKJ^3MIs$gۖV&T0²,Ǻ.(ኆa"+e]Rx> CWY²)^߆T޹Ss(*rgirhEɭ"Ks3o,Iaز"̃aΝB*i!6͌(e}Ȇ[9Eo1m͑-T pm,׃,2:{ pR^,8sT̝`#rK1k,4@,'ė!x2%3O}̟?.e\bO@8P%H JAeP(ȻA2Htvv1r /Z/_(!̟iωبtXٳgH$j,-R~,*_Ђ`ܼ4^mW]۽A3Gjt9л%^ְtvS> 0o%JfuMj:;9p-:p7^|='YFg]zVB=z^Ϣs'V,_IKlڣ ]{ҁN=-+Yu@j'k!7ͮO1hrƺ+ iD}G:h3̺vdmر)FiT(ee?ɥ.B;{m&Γh.?Lv?;ξ8Y`?箍00fOs}sj*R[i l+ҳʭ6B/ wiM?_ϳj^n =#s̚w R ]xUB/wWRi3+]zj'.Srgm2e/~gyOg1>7ZF[]".᪫w=|b&+Mv,-Rv*~G/2ĚrcV4m?w~ȫ],jV|r z텠kYD;Gz_Ķװ ?g\01΍r:oοS99& i\}^\NXs+l> v+۲=+_QfF0vhbMrt(sWzo~ӬlM0 ,ifm U|UQAmN1~}<}^Gׯ?d?lgр*E4&D Zt#x=Geg]KGU~{Tt&:,Vn};oڟ>}npM|>f럱X} wk/jyy j/W9tl_Ͼ|56a,:3~N;?ڰ+Kn? wnG:nߵa[ s- #{m{郇_n[^{.ܸW߽ɧ{yxzF}yp+v\??w|oEvn=؜U^xÓ"jN]ҷZaD(E~ rX.,ԘT8sBDRacm&,p%hفT8wټ Wzиg(cM ̅+y>u3wpټo/;^iQOYDIUUJx-MYO׃x93V/y] e;+} 0̩ t>XMsnM YsL7nKӗqkx{k>[bA:zW='ZY[7?+Z̜Dj0Rqi@A(,a6t雟ܥMf503L'29Ԅ*xMa1m]X,aZ/:klΘa˃/aupҲYϱsXz8}nX:ң3X~RtL(y_HBuH)9q bWŌ][Hcm_K3 ]L+;xc>*nQ.B\~np>+~ftaF[W 37&6e6z>s ?UDEhU}}{Uʇ族U9*v-?s9sIk@8X8.K"WOs[eC,Ro۝(ֽ9e&LF҈(z?z ^ABqDiuߞ(]GOcC`I1 Ojo|}̞79+m° 縟+$Z$%a۰`%,Hv {CC 7\l~iC+y"H?zK,:,Hsu' /"xx?$DC5'` ]>yW\ì!2h&hllժ݌v#MMM455D^. Hss3H0m3Kh4Jss3B!lInll!1W(ضxR hnn6F8fhQBS”-6Oh4Z4uuu477S__9$r =Efrc[CCMMߕee4"s%Myf*¸̖;8(ŇYrtw'|{|;+y${ž5?0c)n=+W<5u|dG@Q:yvMh46̧.LXkucF0j?2G}9'́=_\MK.X!3:gF2)Q#XrJ[GD y=-^甜}|f}S+ؙ0(i |R42șⵟEQHO?i92o78ykM/)|;f͒0e! RUkj"NQHޗ/ :'tHoqdɚpwr(vsc Er ۹_yp,w>__v%F~EMGю'ë~,IA8_-Po'OrI$ضio6V+mD"$I̘14M#Jx70M9sPO*-PH$¬YÌpѢZ#Y!=+{ᄅaLd߾}$IMF{{;e*D={`Y&3gΤl]͢tm$I&ط I9s&A(>1UUs 1JEGQdY ̙3sEE JGG#d`\BSh~WOA|?`]uUl(bӟݻa]{9xgۇ A̘ь~t\Fww7^~8~84MCcc#n&̝;]]gu6! }6̙=d2'dYBkk+^yei.t nƋ/D"V&>qǝ+dz;p۷oG}X,RpÍXr%::;+6Ȳ*[w-fϞ}6Q܂ӧOA4L> 7| fh޽a֭#zXb\{Q7ӣ;o?hnWux֎? D>]+WBQb52ed07svgqR)^ڈ󜸟g]%Q -@?bsUy ,{OX9l}+?|k]:|OU ++[JH  z ?bImlű VWͯŕpa}Y3IvB(1gW83Owo;/=X~vXE<_<Ԉ~ o' /I0cUs||BX瀵r=+l$j]/<zfudp3G#@x5͎'~ۿ/q;~x ~ o=v/`NW\{ͯe3/ް^. 8q;ޏ [ꆫwc$ׅPdu߳-~pOzGg:\/d gر?9x!XMSka8&OTJA[io|. /Jp%QSSs`Kp oDuu5$TUP:*rmVҋo{G}ŋ/ş'#| ׯ믿cڵ)] F:kJ&_'Ok̙3[lA8AUU6mڄɓ+ć^x%%>̝;/I=!LT cΜַA̞75(mN7bƬhi*hT eee=I|?:}N` mmm y1s̚ 6~^|吇agޚ#kF?pe}ޕ tu $]5t;a*fϞ6bѐG=W0dlذ7| M߉ǏtD"x7QU5_~pkSh1H$*\zb_CCCH4NX|ގkע"B!Eup u]. _D?jkk0ujpIߏ%^ޜPfwtEQp 㦛nB}}=z-رB]m<R)mD1PP[[ ۍT*eHXZG$ƩS'p]waʕ+C᪫Nwζ' TWWG3gBUu|>{A.\wuXd)g8~'O'C\?r`7K%:Rr$-ً{Fb?]2F#YE׭Е 0tjY .K[ ~_yKFO>Agg'lقk^H$2c̜9 ͇쳿E,åC49s~`5ip nF|>?7|͘1Sv?!^/<~!.bYi*Bedw(--C[[^|E?~W\q%_Y֛oaΜ8?:;;QSSX,1!nfcf\}{.Ďނ冮hkka(--E8Nղ#F'$҈1pVBzBXPC r+OVw+ie鰲Le_flhi7l02`Tf =zerDMc?ͿG̵u Ţ kV@Ê =OUyι 7X5{,ŭVGojGijd[\հ-tkN(k(BQ΀պ+Ϣ|2ׁAk~+}{~|;s|=NG񎡷0UE(ÍfPu`O =n7/_ٳgc޼O}~!N:Yf#-JaP[[[B̫0r2~x7qkquPVZ뮻۶mÿˏFVAeK%BaȲ RsN̛7.{xm 2\)iXYY1nM{BƆ E@8RX tsY(Ytr[vɂ޿*"X".HIL0*ͣۊm 9'\`QOqgtZP`˛ <c ~_.nY_Feo~?*K#<>pÝ$Pʼ(`OY)?V5`)*ٓepe,[ >jkkbΜ(sp,"^ N:z=܃ p\PT&M‚ PWWǃG$I ٛw܉'5{.l5~? ctahtTyZER@[nk5k@mmۇ7x?ϋ`0^z . .^D"٪رcx_رcxq뭷"ߏ[o sA__O+AYYY:dPp5)S{ɕ`>_ ¡0Bjcld&|'$l2O f &,d/mŌq:ƱYqtH?+* GȮ{^ o%u%mك_|1/! ޼==_5;6uZP4\W_ŻヒW_} N:D"Ʀ&TWWc{' O>ŬYP]] ˞B0O? ߏo}[袋 IPSSxO>E8AMM ZZf޽{1w<|>A455+eBۃt7c6iei[yUG$." O#hS*MYYWDYk^Nvֆ G,x5ĊX>DאKNTCJkxQ2r7XBh)q˰b>~Płɓ{"୷›~={yz/GH4֭C %xư( >pZ[?ؼBF暫q!wQVVh4u\. bǎ¡C}~55xp-ÿ뿠 ĺu0s欜ea:9r|`۷oǶm`pp\r ^\*ǰs{իf sr \yػ#{MYgKo3{,e`[ _WF ݀i EQzjcϞ=$ ˗E]4*+8d3f#~ZJC*y|+:uHi\5GUU߰˖/H4hNj&,['OH4\Z,[ȼF{*ia&սB4-TVNƍ҂SN/ǪU@ `b*++عs'zzzpUWVcJD"Q ~N/oCr? ?F倘ɯL*-IWe ZJCOO/xb\ J%7o$jkk`|\. $YF<CwwzzzpB\#?yM0w<^&]etGAWRzp]]ݰ4g=Jb()eAF*BOO7BC!YW^ypRG4KϾLǢE eYF4Awwtmݖsa! @ @EEt0t"cp0tի/| $/|a;JD5Y!kSX zx̙X,sF( DzBz6˪-%Rs? X, X(p,I^q, U0h;b'O>6DzT"nμ0Z[$CTI,~Q,aǫ~*/ł$tDz,#J#}EV I@GG'dY颭A٪U,#Vy[5" o4QG'H2aEDC$><E师.t2D{[0e0$CVH#+%̜O8A x%Y"H$8u*3weYF(P0M_3y=A*n0ew[H*aj@4.8 N,+d'tQ:V4;.5V ByβTîA'Q&N"cHE"!j5_ea MVFtBK?(=8?쬭S^EBqH7kl92!ɲ̮~HxFhPoռ$lD[&\f;d(*򈒔I'Ð3fGRN!˹ehu.M\U&Lû&.j4j:8B'֝Y{⺰~LSf "/ U% Yށ1%2\.bk.i󹊢@U]PU5gqzfhxB5L""rQ|]եBUTȊg$ n@73t\U èϹA2$KИ)KI. RRy1ʔļk, #j3%cW 'HOVzj-sj-}J\=-h'aQe{8ro _J@2JTH:}݋ =ˬ}J+~*-#~PI!g ?$I:yjHY< lb{4(DDKYR(şW"xPoL^"UX)Sjм٢e~YEs`BI&)ժ({Z byňvJ:],".F0 jh(T0wL!S VX:YA$^|,XnTeU14E]fܩx%x (,*xq=Jj x%X*+"QiHiz2(F )LQ)%Y>K!C&ŀQ=2~HՉ|kd@1Ƥ0쿭rJ^9Vf hfWtΝPk_$b)ZueяLjk/Ka,viۣ V FB۬R۔Y%ixk/P /,K˵{]Hx ?({aUܢ0N4~@S ? E(e|N&A5MKh<Ϙ'Z73eVu}~gҌ1,2_N] b1,+OP&YLɊ{;j)p@]7QPΈh%JH"  "JJR!jŏ\e}bX ;<<_b>~P= łx?]:i`,L,[^^d2X,62nz*b<4MC,,H&|H&H$x܍\Ƕm؈kfGj =ryI2?4-Aww7oߎL:^{-MӧO7@[[̙u֡gΜ믿'O7poߎ@,b5k87iKPوXoZEINQTfeL"d)S)t!I$ =_H:KP>S׉$t;Qx񃚄^AQ(jxՐRH`bIR7E;s\.0^~eTWWcSO=ݻw]vG1iS1x]1O+bYMD,p\X|9p;^x<#PUv[oH._]vdYFkk+^u b޼yذajkkڊ۷#bʕXn:Bǭ()) 7܀{⣏>²ep`rU$~i>|˗/ǺuPRRʫ8|6s7ވlٲ8z( {7B°b~>|_p]wѣG/} _:pA~ظq#6oތ'|Vw0044GQ444`ʕD"a6 J0эk7b n`'YJO;FXyN HTŝbq.N`)wKqSCyD\"-bW[+%V"VԀp*;Q4}HDH ? ?"%Dܾ!2֭[g~1dYᅬ<Z X \+ IDATO<<+* 6m^~eĢ1\6m̙3Q[[>qyɧp饗 ;v~+V@Ql޼'OƒKDZ{n|zxQRRk߄^v͛qmC{{;tRHN*6u/F @v#Ӧ0 455!LPUF>ohhiCYY^}UD"qpH$P2j35W36ȽTAN9IԂEyK/(Bj}vib ɋ{*g,[Vt~8ň]9CeaNv%IJ+ xߏ~0y!Lb֭o vΙK" bǎܹsQ]]^{ < NTUUkwމ3gxk#0ދ'N`ٲeHRXp!> GK1w\tvv駟ƌ3zQ^^iӦK.~'x{#<^;R)qR)x<]בH&G}H$i8[bժUPp5<ꤰS(IbMk}wڂecY yDJYS;l|P=I,K"&#?\cg ?Ti+>Vbap\i8vx$ kV3<EQJzL&!2Ӄd"כpUVV8p8-[DPle?Xs/fR5FeYFoo/vލ@ m۶cƍEyy9\ s**+]ӱk.Ç1c lڴ S ĭ܊bP]]'N !U4 x<``8<|뮻CCCطoV^ f׿u>r]gP]S׶o$Iãhrގ_BٳSL(عs'k.+@kk+}̞=>0c b1=znc4쮝̴7k*(U@ywBL*)I÷2Hڬ'[LĪe.2#,Z~3ڱ]^`'5GԽ**kW`ogʸډᷪrF9"{B\.~YlAOQCc]=RDu$ /#GQ^V{k֬$IM7?H$o~֭_Xa=O?O~TUUahh< c8q[4h4P(~ `HRbشi= EVpWb9[u=zXx1o؀P(H$EQy-޽GAYY6mڄ@ Y~wy'6oތ]v!JƪUp1Ekk+86n܈3fɓGUwjO~EɱjhU JQrd*kew=y4u*;ϺXa~îId|};mhحԙ`=(UXI0 ? o a+~Px9.EQFqiR)˅ںZL:-2i$c޽ /@mm- `޽H&`>jkk!AB(޽{H$0w\477 ===hhh@YYN:u SLI±G1i$ՍCT*]f͚۷gΜ̙3ҒV>S>}3f̙3:(PRR*QQD"ttt`ժUx<^+,kOpdY%,Ȳ.l^1h=>m)yk("xxe%IB$Ao_OE3e)Pf\k`6Eo " PGJȈ_hƣ $I@$ASS*{$IG,KG5NNHV1$I'h̐?hoQG[[}Q]] EQҟb1 kz: i#@uh4:r}=QRR "pPt @UUDAUU1yd.蚎~h$ Qu(--햓>$I@UUq "Lr "LbppD. 555HR?'kguYjooT@D~VAqL1|ܚvnޓKu GU:M芮|]ʳXSJo^"g?dUu='N-Zc;gz(i.dT@ 3~( Ne'+^(1cB m@Uth$I@wPUP`0M`0QϋD"nۍT*SNAQ3gΌlM5J$ e_Q14p\$ ̹i6jfe0Mޞ/9k'Rќ%کN9b;‡y.ʳX}GKϺ81.j?k vx7P#Sh(E<8&N KQxlގUaOO}C ?Tv-j$ٵ<d*m ,w^f$IzgX x܋ͮV4d$H0F'a"a'mv]gU;Y~ dB0eRD, 3>ءg  x#Z,6ksъtQ|[}@E,*,|Ӊ*XŌN0v5b` /O+~/P`v"R7U% ?=(,bu7zS61eS[}@Y @UC58EAתܧH%2b</*]JI v&kfS?( ",Nr.Kg`uy{Xʣ9+ŻX oc%PsB+V)>P w-_.F$i8+fςK`yU'xs{%D[ Egzw.E:NJfNV}':o)zxI]dJ"䝓H"UXLHY&˂E/>CDSAJRbDYyԐʞe㣼^sd%Ԉh,j>pRꞳn~I +UxJXYDWLAz dbBVѮCdJӴt;(p\H&Dj3:,@Mh&30 躎T*eyq0Jvsiz J$Mˢzd2I3g\MҽL3Zd˜+%S0C2'RO-|KwZF3/NG:=.ּ sv[/:;Q B=S<<ʺԹ^?AAN%ĽÉ+^bÏi n__a`رcR"t]G<G8F<G__:::JƄd*41 .&O7^>(< ߏ'N@Ӵtc k7j޷ox ;D iH$FҺON+O&EQ06oތ^{ x>,ۑH$p1q|>q9swƋ/]G+ezBN:xqq{xwՅH$T*p8 0F\}gEOO#@]]]bf/[BQl۶ Bww7N8T*'?;4;N|V'P޳E,P̑gmZB(c68aqڂţnvg5NzpQ5N"#NlUs)vξ]dņq?X|f?$ttwwCUU\y(//o޽{]]gb x㍣GeT:;;q)>zСCزe B,]r" 0 q9s&xP,]ױ~z\tEnMMMx饗pUW!84V,]w -[+WRg{L6 1;.444࣏>0m69rڵkꫯĉH$bF1c ,d~?BYY,'JF0jw>$y\I"O 㼼 >v4P+~J ?Dc1j* ,k wA*7]?0X/ Z*K/bΝ+0ydD1M/6ME4śo\uU/~|xWڊ#3'/2^/R~Gr1N8> [lAcc#fϞp8<9,˘7ov؁;wbhhh;#YfСCi{׮]8uR/xw %s}>EA<Gcc# G<てiB<O7emχP(?G464'N?y\r%hmmM.3;aPSS{nƊ+pŕW 1VB(?]ΰ,z}:~a…زe vӉ,͸袋 rDeDQL6 %%%x܌ B4c֬Y4 h͘1cLd2=fU*B,G*kqSqJ$hhhyҹ ٗ먩f;v$! _|1$IQ__tC\DsDDp.Յ) SpED.fuEQ_:/MMMXlY:vvpχӟ$lݺ݈H$!WycK9iAzFE,vNY)4'!,eEt*F4q{J#}v9)%PsuD,Vґzt䕏+U*/r?GS1G'~OńH#B0zi{1ܹ}}Xd .^x1~mDҊc1c \}o~G}PH$35IEQEK D#QAa̜9į~+c޼yxxT2 0P(۝V󡻻?qCu,]8}4̙ $ {9̞=>D"D=0"̇$SIT  bҤIzxb(ACe֦sSQb1:TVVǎC*TWW @,X1Œe@6mbzzЀr8phii9֎Ǐ hlld&y˲NZ~Hr]]A}]=P]]=*_ekDG(BSSdYF8F0DMM \.z{{*,Vu\0`}cx΋.Y@ Cv S .DIIIV+kBbR,TwPj;UM4EOo/Of VE#JMѐ`J?yse1ӧ3BkxRe=[;JIMx-CogOy6cr_ Ih_S"O~xHnx~8~Hߏx"Ɔa^~PlQG{{n@VdTUU180X,6,]H%SHR Ma4Ni(++C(C*B<ɓ>kz? @ `,㕓+1B4Eee%&NB*B"@$Aee%\.B麎R񠼼H&A8*++QRR. :s+//D"@4끖"Cu!@uTTT Jahh:<&WMH&vQ^QVJJJ0i$tww+Q4E{{b6^:Nb< KRQFyTz@u.j)w=XY\ 9=a'<.] 쮁bg|S=+yݵC+Dx ?r) * IDATϋ?*m ?\]+6!1e* `gdT~.܉D^7'M!9Ԩd.ٜ0 x<1eṮtpݣhk6"LCbcIZLژLe53;-W}?r̙3PSLaT hllʙwbIJ \.tvvv1:cǎc$Bk814j R:O1%PIvXU+Eʉ$BfWIBMB=7{D;Kglj$w:ɹHB/=Ya5(~䛄~!F,IH$:zԲ,#Ö2{x+WUU$I\t%qfNe*HdT %>J1{d!ߵK&HR())CJrM$>񀉚l5Vs;ϣ0U朏PN=xTyre7`ⲿ'q!ֆ%#5pz&|o>%/4$i ȎB;D-+Z<˂q)Hڙo_b+PIQh$J(9o,EӮ jeyq G$67WHHoEY=knE7뼊ZyMY{#"I'Bx6"cPdu?x>!|B;SsG!U[ou A1xҒ an5q]&k]2\) N/]X{|rQps>mBxMoP L "R81bN-U%|] :e(e|Ƌv©RxT؜x+}Dy =Dm?㉕;D 9Lǹ+f;~O+ł|G=< ʇEP'*K<>P[[;ܲȆe)juxޟ띢{Id[ų/k"N^ܶ(}xcT U٧Ĩg*ގ@4ocM/6LiT:"X-Km&@PT=+smS(P=B}gݽ~PńAņxMVr}u*N[u 瞃C=)S ;j' GFz Z;w|x&e@ҙgX'I&bR"k||hz]o X jcd~3J#%pj W཯O ?TJrQ-,sfWo |-W*Tքy]r8\a"nތOɓ'pQ9vf`zΗrk>Uu=W32w&u>J~L&~"j~"D}rm#BE%58Y'33̞5 5P,ҘE,wLtBSrtNdK ϝlytݹN ANn&:k':N2K4N,&}5s_"(ۑH$с3g8vʖDc0 (b]ɋsF:N W!%NCS>kgV$'-t䍋wϷ+(Po>9 g'Eb'R?(gc"L:;:'&>(*Q5||*Xu;5B|J;Ef V.\:W&x?7YC|:zHLqcS6JL.Qr]xImv99v,$ N<\FK)K,+:+|jEXh*cU,Mq$f1E'+/9LHxkhD2UhrNVL3K· oh<>BlSx[.Ńk?(C!#~7y$I +>YYHaUтLE*}PZD ͌Եe 5SD4VHL&%T$rV-霋vVco9UX\B!E&<{&OXk})1Ǭ",KLy8[ h`x8Y{<O ,^z>%4jrCx8"&sytt/v?(iY)`u/f0 ct#B*Pz+PZJ]Sf] 0@te)l<劚\ȳrQ5ԍgj!Bd,Vk@oa2-⍴svy#Z7^jh-z~+ !_,wY MVAb'D)ƒ}xj~ND5٭T,VlQHZGT!Ce1_cVL$1D]ׅjESƉlq>YNc'r33x2% S/b*5oo>`@֏7xX6-*vBB`x\ѥ4(1B|qtxD`nM1(옭ʺE(4 .+|7EQrq)t0v(H&Ügo>kx /qIaPSnU7>wC.^oĕΗhE4';~ J1^'z\(!I~I;ЃD">hVx1,#LC8)֐!2b @<G<g* "ud}}}HR@g.W,H$0xr$!# "%.b7XFr$_H*6AP kamB(ܞ(q.fǺZQj=0 +H$ I|>eVKeȲh4 EQԸeYF*app#dI$IbPU5oJsd{o8fVMuV]m,=UDKeȊEU4=V)5P;&sLV2F J>5\{EZ;^^@"R.ZH),*WQ){WQIFD({b[?(B=ň ?x4/V0 jee iD"$IH$A)S 䭥˅D"χB!BR(`ɤ#t,˨G$q,+ UUUAQD"RhM_!Y7^|JPn}I [I:X1s+Z)@y?E{Ej5Q8' nQ>ZŀT4~Pb'(~81 ?@r\u!!J|uHPȑ*D<˅P(6bRdI#FQ@$А#HRB8vxY ybhDHiȕ&MTPHJd}D+[FRN)vJRϒ[En#B=ME,N7"6"ړC"$~ᅆ,ipᅂ$Al$}tv$Awqru\I2r¥ "ouWeUXUQ dra $!K2[nNAL&駟΄ H&f/$/M("l2l°a83iii! PˑL$yٷo +IC ᤹' @+rKItwuOsN3b8I ^MO~"~&E7\H@ҊIMW5t+pjdyVQBdȨQ-S[@vkW04DֆӹN{hYh݉tҏ&:/;?@?Yc]Hj+@UTrƂG?~;x׸馛8ɤ3EN@ ʷp-T:رcYx1Wӟ4 &t$u{'e) T$h]UVEQ4iCZbcp'}"}_ZΫܹsQ.}hQ2B}o‘0]]]pa&O/̆ lj4Q K2uV6l@]]a[o1m4Ν[ܼf @0ÇӦ~zVy'8q#Vꈈ 6xՏ:EhSn߉xmGDڵq_v𕻿rZ "ƵhSd龜J 8t2?"\G;wy^㠈_{&$@Q?RU?D`vzigUUeƍ<쳜z|k_e|+__fȊR(g +fҶm ۿ㮻brW3tP;Pg6_Fٽ{7\G h.#cD`4i9m۶1uTz àx|9rd_)Os 4<|AƏɓy饗zUܲ ErA$Itts:;;ݻw;w$ dQl4N"G} &sG)_:@QFm6^xy{=D#f$S.'b/2P #DR)l+1ּXRTw^rrhW{T0]j+R>Ns$+p;MԕʾVע;3lТ="<[;}Jۿ@nBTB:X􇍂e5; JtRx_ɓ'eRY2I؎Sb„ y0GJM0aȆaaGX\Xd ?z*w}7~*t!_n#][ >,d2&08pXb6 IDATeú%sA/^Ν;I$^Cj?.L$몪n:.\͛I$$SIt]GQLLȆiPÇ(Ufχf'Jt *EQؽk7D3g/ 1$A,qȲ̼3ٳikkcǎdҙ|"bƈz-y,|~"TsŮ!߈X5(|g-\pz yɤʷ5KW|]R(Kx=y~gp{JY$IE\y^V;􇛼Ǣ(Sޟ{`$D1[@ ֭[y~3fΝK8FӴ2D#Qh"3{ ,@4&M"+I3 T#F~Y ^od̙fOT[p`0H2׿5:^{-o&;vkniгn:ΝcKf޽,^I6m]dq[xHen`**6m=EQtt!Tn2e /">(d^{-pYg x1Fh#oH㸼̏ɻFgg9T+} *K2vDUUxꩧHRi:,f͚e7B(Py[UU.B8 /J ´5_S!_>FUUZ[[mV1bpLonvW)`!ϟ#<½ދ(|c̳$Jyux"Ή'-7‚ Xz5uuur-5d2i[/9eٳg\-}=*r F+@E'ryq.]ƍI&\|\tEv,2ZHi;w$r"ǏV+ɰ}ǎrUvǏۏH;#˱}vGp!KlMؾc`Y~\GBY>~\Gp/߲uaveXZ a ,X EvrZd /h|6 p(L(bb1 Fss3xf/D}D D‘ $H$~Nct 09rigs}GaVZ.PU>7x217d)3ɠ:CZ0u9K4\h۩e2 ZƐ!C>|8lޞ^ɉ=2:Mhll$ лa7Pe`!-Dkk+N,C2Po<644( P'=bRazq}Dַn$qqV$slma4]'_y;e;@8 81}y฼b,>tD yO'0#hFGg} Yʘl'8 hDOo U(VV:xΤIdYCC+}~>lEQN{"+uirBZ%*VR2@L"Pޖw\[Ӑv_ sKzA}moLXʬqIM?R׋8Itd9~ț52֏ۿ k:HFF5M=帼S@Ϫ]I[P#2rPo]]h*YUT4m88rsa7ECrzFib&/1^/{%}eK!9i?GU>{~|ĖT~>*w^BqasbX, Ջx=MEfW󯼁cd>VZ^ 5'sXd{.9sb=uzrQY ?/\yINc![2G`>^uG7ٿ۶)>\5瞈,e"*rkqcwY"EId /YV̂ẋi#7Ws;M}cp&8;"{**K/k/s^9e~=0\~ujtD/dŮ _v 7Ju{ܞMt#/o#;K%$tC'N؈ BIގ:̛;4̌)H0IYEܸDzDNNᅥop:;xOb{X]yvc;w-s+}땅2]۸;歭Zs/nb3ho>VVjQ SHRdY~wmVw;<|+cOG~뛬Iwy{a&Ir ʦIa67J:嫶0f $⩕H^zi3%̛H&hV$o!>uEa΅N"Ƶ+XmMi R;::*7]~fٷo_y `b,]ٳ{OQOG5㴔Y.#_ YXl6޽{Y4c\={nt:1  2M*2SUSH^k腭|?>PO9~wC\=K\ |H.C0k,j9ʏ+fы;o+D-g+h0%ksɌ/g}?W;SOCSIw:Tc?͍W0q/a34ƊHs׿2)/Ny>  b#? X/~~'џ2z|EQ:thEUr%ơC6lrU+PE1Q$mmmdٚСCAk&EQH&ڵ˵m/xKecu+euRR"l^ pY|1!:d cCD N|(xʥНφYKfaSIۆ}̘:It7%{ ;5ؿ!}Ũx [ɇӿEYDF8nw?̘֡ )z 9@7$dq{w05"2*ItrsncO̝ uM 0x{鞨q57  {Eqs+qT~IN(?9}"S 9Ls] Z"Mcv7cUt.>Lj=igj"?Ge,g:oocYg3=9 u-=\Mew+!8alZarNaE|dGYH$[몪jpz֟V鑝BQZqT`&rXaT-]C{$qjn:S1yơ"/7?_w,f#@E8,t_Iu*3&x~8򙿿ع |w}A|1FDMՎK:i̘Fnz;X^cnOҳMBӫic~-QP|7T ʹ t5mOH&x'yn5Gx,0 f:]Ηog2gpGOa9dYĿ>ea J,2 DY,|5:)#Ca"dNbfV=ԫl0>0` HcCcUM5_lVT&cr_ؼU,du}R '[f~#V%L&ip,v/L5r(5VKt:AN}*~_f?'/ t>P< ?}|sFd!>gH|w3| QP*&j3e{C|lkqi't;:>Ìw%Q̣Չ쓿)=+_ Nl7DcO~5 IkBG-2^NuHX*mwϰ/w;m*VDO_iS{IJQpit t`h^o~GW=0|w~ LK'Яf2) ky`G87rX qXvɓX%'ؿ yD !<ԮXN/8eޯ#?daL6*jl|f2\-xBVg] )%)v8G\Rп± dLj*w7Ypqjzd](O Ydmx 븽"ny=39G˽4e+6 )MǷI¿_>/M~\/s}lpP EݷdcRM#"'a$+lAs9]ǂ㴨N]~^j?.ՐEW]lXnnv;MnVt*4UrJz܉(l\VqﯳyW_h?ǤQ6y/&]C8^F|i/OtlEf5S&pϿ>xM\w9\OƊ'oN., :y7U6ٯ.jxE=^^3G/c˾0]q `mWKM(BaHp["{S?>{=m:>7x۶1?W~X;7| gw5,w~vF7dX4._+D>yڱe؛ͧoSF׳ry}[4ecΌ{C HOѣ?y_~a+Vj_q4.޿~q.¼'UWcS]džVf2膳/| wTUEQ-J[+`[FUU1Hxd_N𳊢jy׶^xX(M`7ؙs1(U.Ѐie]*=ؙR4Sm{.Rl6(+22J,x<~axݮS`Ѿ1uDm$2|4&L`ќvDL#Y}xLyHB/Z\ku0yr;)3&2pᣙ8iq CO\K#מ*Yz=qTkVN{I i u4'Ofz$5&1}8"Symk-0%XHgO>c4ym2w:z:INΟd(KL;‰O.>|4X*RHQ:::hll$NjʲkkVt,lq), }qg v!4rKi:yI9ˈmy|y]Ci(RRC_$LrAƎ#L0'RFUNPB]'y뚆ܯ@70ɖG"C;5*."k?HޯARI 䦷5MGQ+}{q>OޢkPm}DjKI-+r9 ߞOjݧD"Q|9 R"WMP,oU-^}oR)Fj<ge"Ԇ/$%}F~-c e$ֽ>L:ad{0! hvf l۶ŋw^85kV٨[r^֬Yòe˘7oO$Kb1,Yʕ+sylg` ?϶m۸K6ll6x.]޽{Ki\T`Dطo/f̘1̟?v2U%(:۷j?Ly{&|WsMPy=P%X^,Uuddխ* }vP(_̪U~ƭٳI$r\Hkײj*z-:;;5kj@%Hwy+d2E]4M^`Æ +r TK.eͼˌ7֌B!vśoɺuXjuHY"{1 IDATO#p90|pqmVTrU +Ww7 s)8|0?Oسgu_~>$_~9eﭒgyYǎ%e"[neL<Y/uP8myYf ֭cxp BASF wSNСC477ٗj")r'v?qnQKX*eϑdET k] 5 \ 1eQ1*(S ^$r)bd{>W [KYJ/$:t>< B'B"x8DS K'Z.x8z I.d%_jU$"KAlcΛ; FC9SuEKܓ{laQ .cY=m8Z~12nw/FVAҚVCˢum1ύG> )1d$0!sFF7.-7`6_`weӞ9an/,ˬ]}qwp饗r'}7|3fPtT={{f L 5sNV^'?ɞ={Xz5o6gϟO 7ങmܸ]vf ƍطoow-n֯_Ooo/PHܹ'-B[[{孷 2aoYUUvƍr}$SIL_Υ]ʛoɒ%KB,pnү6o^E!9]]]<1i$;kR5@Gg֭#r D"L8UU9s&&L 'BKBx5JD2 2Ѩ[dT4B'J,RTȉ*?V?EpD#^u(V&f?e%kkW2"(SeE^ŁȀ8KttcwC57&2&󺡅fPia۽|dTp5N]Զh9y<կbhݗpz/EJ+n!l8}6ϟϽ?~̚5K/GJPUnJ0{>{1>s_~o2g>a6g3T={k.x ~կ~%KPBF[Ī4ZE)yŰaoT:n?LB~7Nj͵l,%6EfrExNqwVP ׂZmѵ( v;6[6DT~EZ%_9 O'Mcra݌ֻ__4sd$ΧzF_>+b7R ᚟Swdv֛AO$mr+l{ HDE㵿!4r]{?Hm\ (HZYȅ/L&CSSvJ"guF" G5 I(MfI6eGCA$`UQ! (Pn^X&!NCs[x%6`KRUU;E'KfMMn=o^NʗKhfF #RQ(]~ƍg/f( V))'B4 ;aei ݳ_ 2O}SCA6EQhii)R.Z$BKfBwI5HQ~Rw"ᯄ ݫ\ hHtݯU xHSԙBr{d'Dw5N(oJ+D8nl"k[4bZKp~\.CAГr{0&+D]=s Op#G 4z*$o̟$2i uhe@i"4#&< гO7."E۩?h"c(uz]&silcķhǛ F٬n ٻP&HQy饗xYj 3fJ* QcKB"NM.#1}$gu ,Çihh`geU5؉D4]$*Ѝ\.GwO7T@0@gg'O>$۷o'>|&*LRq(Tr9SgLN`;vp*mJv/fyLJ.MMZ}k̛7+nGU=Ǜ!I4ʐf6B+3f d ;*Uc:ֳG86guFyf|[ky*+圻W96uӎϸ#Ճvx;jB> @p94lFn;0Qdh=%5F޺ej B'^Kt#;y|8ӧO'Zx0$ d4{$SLazc:t#FP__O&AQ6mvC&?%9k& 1c ҩ4w&pu >h *ҏ Tjf/L2$1uTFX' B6oJD*"N3}tZZ C̙3vA&/ꫯ0 292E^ݠ66;54tF.DfQ&tsQ6`~E kG4+lf&t?2]0DEe jUR/*;'&t7]qav{jȱx'&tTRߦcYH%LJ(cO'<"B/@mgNQAP!OppGN;eP+~Mfa"s'4a8J8Fovgތ $F.Bm ϙDO 4y s h 0j2;#ZMvDϼ ZMP <|Iݨ):(7XĄ~$ ݼƦFBA =lܠu]#Fl"<FڌpDfMA]B.܂mD@53 `&y.Sz}}=* ƶT*Eww7l[itwwۑMeĈd2$L9DL&1 G*B ȲLWWɲL,+˄n2Y 0 H8BKK DnY-9XsSoFijj2IEIgHyR=oT1{~yE7^ ?iB?Jk>/DŽ}oرeEĄv5!\ VE&wz5cֲz΅1!8?b&t_!!#l8ji ]A}Y@Ϥ0^>?xW&*- TgH Zx1P03 ( X$dz\:bx_"Jdv̋DtD*iwo$ڟr9>߃0 #+L&E-Wɓ4ΎFTQPf:Z^xVpdt:mϛg"[UC?C7F\H5DHED"іZzEDE{@D˽Gt=yܸI&RYK^fU7ﶗ5H!q{~7m{z@B7"B F7^Rd],~BR Bw7pL}e+[,%~VȴU?t`%3*γz(!E%~#˲]#[ 1Yײ1{a_y!W!1R{"Yu,>+7w=̹,yy^jlR/p5L"_J3-nE/׌ǼC$#[s#9Buebubw3̼ TDC+~fgDֵKݘнJDaB5u%k'yghÐ >s?:𙋑 ryɗnW  6 6!Ij&hqu;"ekVُ^PY6ٳ,dT*e#Mge5[eE= >7Z[D(PIE= ~Yxr,nu2ݢARwHxm"XhaV-ZaD EփS#Vbh"q`nѫr8~ SѨk-D QCoͤ99D*c$L9M]b_5[bMg 9L\MRni]]]~kvwwrLiqea#U3"b12L`9 "[]-jHCdsX+Pbyfpj*]-.e/N%3?_t-{=:e^f8~>BԊtZhQ4J3QD?D;CNTaj[[+(FaK4O{{;Eȓ6jѣE{ Ç'H8`F',9r98ȑ#l,/e6T2dԨQEjNUUO$bd%I,YeTWYEEg-^lѕj7QI5|Vbؖ3"~E@~SD |/̭į4?^Ʃ܉ן#@ Rq/YyQp 1UB'6J/h#ܯ>GCdlCM$5-Hz2 VsX`T*eBii,rVLI`3 H )$=vJ3 MV^i=(,-=yATYm@֢ OL#_ι|gv2ʼ"JhԾZ)c(Lk[viTRZw[É m\^h[NQiO_ƠFTs,J Z`$y`U5eBhXwu,dZE~^1[+E-1ү|3?}ѫW UVy[4 bLD3)LN5VS(z]kDD!" eLq^F;6ߢNHwEMrܠ('ALT@~?qȪ^3Y~ *Il~niu"^itDWWD5iGU)H%wsD2ݢnJP֨U7itBzn`tj?`F:(X^?P=6. @`Uo|Q!bW$RK񗈂eg@D7%6Q׭KnxcZ~z"s~ Dqh8~?Ά@cGq8?ǡya-H$d2c'qY B6(~\ξo9˺U1YeO$D6Ԯg8"aؐ"At:mA0$i?Q_lQ At]'LڬV/J0DU"Fs/iF$ɞswVJ:U/n]D"2n)trcM:9ƢpznrS"r@"^%zm'90ՊFHI "Y%X"2`{˸}5(XnV~QD)?0NH K޵**w?:"bYunMaf@PUUdYf߾}477ƱlܸNFQlܢ)~  ͲsNhhh Lg2ٌͲ.2h&)I(YݴΈl޼Ç3dƎK0 ~EeٳUQ @0u֡( Gv^4#IGn?x v"0n8BPQ&{r(cǎm9y]]]qs"Twyd2I{{;d20T5k֐N9r$Æ Z#A Tq< 6Xe~Xؙq|-[Cu)ܸq#=N<`0H2䩧b͚5dY8]t=,d˗²e\yy۷ {AA IDATn;sNN;4>ON͢ ٷ?7}=^}Yz-E}欙\tEՙ~Pׯ=sO>/ EQضm-b]Caڸ7v,P(͛Yp!{E4۹k1c+Wd… !1c 2,״˗tRl9spUWD.СCŋYnl.:,G{=,MMM\~|6 ߾Ѩ:u{z}æ!)W32E։fDW+uZ[s+,>jDڽU$ODvN^OVzJz*tK?ks=h We0Z?~3cUD"6l>];ٷgSN/>,9ygfds9cKϳcv 9C %^B:~{ 'L L&FkU֭c֭L29iٴi//(K,c1̟?nsQ__իM'c.nmȲ̏G,xn6E)B4?|_<466( ȦM{D"\wu6zw Y~=կ5k_㋼Exƌ1%lfmzکByZd >,7n#<ĉYd /w|#0n8i~sܼwH[ ^5D^=SnTR]zHi & ? ""JdY /Ss77)aPtr;-rO?$"Bt{9}JxlZf%"U,0= F>}:mm~0Kb+V`h '>!t]'eA :Æ O۷#p8ܹsijl"Osq%pWuU5v8(K1 6Vb#Gڊq̜9V^uΝ;5kgq<\{{g'!!$!!aQB@LTG=}z|S/\BPAAD1!sB{蹫TZ:doz`Ukkx߻w^ bÙL3gĪUhmmmr8qp-`ѢEhooƍqQdY<_QT\W\q֬YE !6?n5{6"dIue\MMM[j*455aƌx7L&ގO~caڴi8rHIE84jq,-^X¬.Q'~,fxaɫa#)@:d\=fd@1 < Q1._7xoCf!I9QL&? g?Y<_b6O$/ǚ5kcĉFr(C&_8pַ I蹼Qp$8z뭐yĉ4 $aٸcߎ#Heي^`ҥ~W_}\s ̙Sb6eY$qT:5ᝁ@d_ߏ~ʷ, MU1BE䥼1Vk.lݺ]vZ޽/OK.|@r1`|H7Mxhii7l]`܌h4cq7b۶m3c %ͪ: GCC݋chh_`$ RBn,Q J1EQ=,X{ ~H 6駟ƲeOYN4N7L[bʅLz t?-FIP>@OiNbb%=M[R tJδB~sd%I pk?0$U?܄OQUQ7UQ RPӦM̙3qEHRӱ|[b0q1Ǒd`ZX|uΝ;1<}:BP| ]b[lo~__xbDQWncrd!d [`=xgb tuuaϞ=Eww,^ $2z)Xv-.\7xox ===hhlĮ]p ߿ǏG__TZLχ!lذ([oEcc#v؁3W JhDxǶmbٲekq }}/r^z%WY]v̙3h-ڰ/"$bWj*xuV=z mmm5qE 8Z$@L&EQnoZ"2ZZZn,B~?~mH_gyx -7urwNtR\}8!~@2D>ǚ5kp¹DMR|>W^A,Þ={o>qǮ]DZk.޽D?/بBsH5hёX6hN4bbI-.N1vstZiEGhbgIBX$>s1 YVMXUӞv i R+i?jeݧ IBR i`>U@&84hP5MMB%@6J |, MMG;===c8LP@RTD8C[["^ X-TKōgd2i}B!!Jc||ȍD"$Iⱒ2"20 <4U3<@b v H ([f$Ha,B A"ؘh hɺTR@#mmm SWKH%SԳ1$addĀf ݁hqJT}7ᵺiWMJ ]n^ 'aRR@O@ҷkJBz' Vg hUIqRH̑LfX( ^e d%IDѰ?a (\aH$Ō땸I]%yN2˫;TUࠡc+I8/G+0 2 ǒ,=g*jhd2H&5[=|@~0 12:RY5GQw=8TSX$I8}tZ@3rI1 B#qS GUr:!INYϢ ۲䑺i\$x'VQ 4v˴а4:Gⴿ*%oD݆]1)=Lj0iM;D&'K5D^D{R^'~$lxcHt|P; A{GOvS- +`2D .l|93œþHW:usaBGlyzrye+hM[>;Siת7ږ[|WdϜ,Фj]v.t5"ٹ̙ƒC층Zɲ[ V!X4BݞօnշMNF'Hכ,  ~.Qh$/Цe\x@&+pc-Íփ?Yiu!t0 f%uR3 A,^FJN[Y^iϬ"T+ӗ8f:L]1̋dvzzzzz`5>;j1N`4OY166I&xVBꑑ#tVV#a|QJ¿|dYAy[X0L!C8ާL&NKrzh,YtB"Tc%Yoˆ]4nQHS  i©վi?9ծjP S@AJ/FREt9cjw~۝ Ig߉/% %gNh2V)q*UKk> z:n0_AXE.(8^[GRU>zw/yP3:Ȳ UU  @6NBsvIi 'nE#]jg5n:-0i)*V9 Sݷ^9n-0 X+1UU!":::iaM'ӳ mggEbwUKA 5bQ'N5iX/HapI?#h!N{}}Z8hL{IH^JpCF@yyђbR󤞫F<[kZ mӹ;ƪ<~p1mj'OfVu٪V|+}NBhsUy$q 󠉵ԟQk*fWN+Y9}+ՍnK:f]!b:̨ `\%aNh`UʲbEKuiJVYjV㫴H?WLjռ:W+!浐owKe;pzo-9j?ԂX j~ߨ-"E~|>"j9A0`_s\I1 #ˁ8?BIQ`Fn LA󮋴ٹʝHʤN~$[@;\8e;YPhcxIPLl:]I(i؉H$N;sڭ  S+ZVv;tTj$y.${)$ɝ$RTNZ{`*RVMT À@ ܹ### |rԩSعs',.\Ek, ߏw}4MâE0w\Â( ^~e,  ۷oǻヒ\veE>ÇqQHMӠ( .2tww#.P0v؁X,ٳgK.صk1{l,] ؎8|>A I{1A@>7SuVDZC IDAT ~_att@/,XPy$IBCCdY6&7oƆ 088_~MMMhii-["ĉxg |rC=P\~l>(^|E,c޽3gEk?~H}0k,@$pQ ONߏ`D&+t:o~"/1>6;vDed2Z$?-ɿiAr& ypr@b%eLTa^fiZЛt4Jc$ L-DuCZU@Nվ&hj&-PZj/gC^'ICӞs'Sh,zT?ho*ފ\7dzZ 4 ۶méS|_q9/n݊8ro} /}/n~ׯ~B>^c"C8}Ȳooc˖-Kۋ}aӦMhjnMtAl޼VWUm*M3`ԧ>YjVLz֭[1<<Xx~toÕW];v pab/ƍֆt?oaӦMXd /A4C!Zmj,cٲeXz%}ᅐdYFss3dEƩ'DcXp!nf#B pM7o4477c$:hllD0D0D8Ʊq୷pmaѢE0<ދE|JSS/^ŋW^A>qUWaΜ9EvSʲ/+WČ3 +jnnF0CCCN>Q^jM?v PT5Z"n`u9XZi171V/Ou*l4guDzH z) N2~mWTZwd^uA?>uxs~ҥ#y7oƚ5k0{l#7HٳgBl8>1~u?CCCqq[oOӢ h[A]ea޼yd =~__~9R"l2lٲ?0۰+jeY\zCFxwc۶m;݃|^[o6\q|0rYʛ(hjju]߇ůk$ |E @2D"GEN|rb1cL*2f̘Ce?Wl2aL6 166!za#RSUK/^}׮]XzR)|_ի?;vG?Q<8r,^|E,t9l]ϙL=~ߡ_ ߏ` qXlU)UQqQ<뇱o>r-;100I .>9L>l;wĩS0w܊м:dYWwA$|+_+O q ߿W^y%lj.d27'̙3^wމ믿?<}Qcm¸(PC=~wy'n&o-Ɯ9sL&'  4D%0%I/*8]n>;(ұw-*;L%֒${Z"ɞcbnk9Jgۂt^3pJvUQNTF7Y k?S޼nΩ?~ɓ'7pr>z ?3g`Μ98~8FFFo9@ _֭C{{;`d2طo^{5d2dYkiTTlx˲xꩧOꫯbhho(-[f,P@ A[hj*R)A"WCڹs'ޏ}k;w.2opEY*t O=}Y^҂!>|@W^yygqq#,xUUE0ĩSn:$I|{W_x EW_KēO>iӦa̙3-A|I$~?"?c||ìYg<Nj/3goC:qߟyܹk֬(xpŋǁ/} {^߃} I"Lwcuz@["egIA$𪭔K"{]u Mݼt-hQNj NܷK S`܉$WPX=J̷37}bO&Vr/L0 xDLA0>>'O<4ׇhii=܃Nd2'N@<Gkk+oߎ^z Ls1}t,\>f0lE'7ǍzO<DQD>g>s7bO?4?ҥKmu:{D"8ryic̙XjsA$ӟ4 R[G;s RZZZuVlڴ l .Eǎ35RY,8~8x~g@|͸[1>>͛7^C: 7܀+ҀFZh4wo\.v̞=]wy?3|>V^wĂEnmC*xMZ2l I/L4N8nBjnGC7t=!I=bF6\qa1XPiiBPsڋ$959iNī: A֊S5Skw!B\ 1[jpӐ=F NHRB.RLHCr';q5Гu^]8f8͚dҀi<|acD"EE) Q,ӽ3 BHRgapaC1)U5]]8,Pzx taټ$!HV!M,"!LŠ`DQFt:EyMw=Ll;Ӂe> 0cc%`Xx0iEJm9m 8~Ǝ!ijQbs: 4JC>p̐zuh{4WfnIZj`7>wT5x?{?/xLEQto@2a(fYLe Lx{]x~˜t4DaǢ}ôp<ނ.W*j, Z@ n& }2f:YY)*J[aZ@I]ybUw4q$S:N^ fcvkduά :@:ՍɮJq$=Md4{rq; *֜z餌ĩ̻evG/j @);є$7nƫZkTe/j_P L,0$BYH7 ߆P:T9X+cl |jܚY12iCƆΚ\diivh]%- ;ЁuL*?CfU$V7`.*Iʄ.3jٽ4э{iZDIStNhﵳ@dspH$U|iH.fM"h9'4nI X:z*M'y Š,6=5 PnkIǑL*x0aEQ044(  P/2 \!ңDh\$xՍ}?m 7c8N̉$fQ'axN.iN[LhXTq54y o>w \$Jm9pBb`-Mж? À|Q@OYdNYV8yT9`ll HĶ!-RDQDGGg qCssgt8LgBHIv,i$n|4jG.9 \qp2INp% : $@z>ϗ: nI-v$ICϧ$?dLB?u@j?j~B:* zf`jqP`$ dUciST "QL<'XYӠP5 a +9l"\̲, rer޿U8E `Sd,Y.|:ݳ8!i6(CpwB꺩@Jbb1jyQtQ膦UhM_ZeF$g2ZڳOJ\ 4L$$ȍ'vMh*c ax'vԂxqD% ?4M-ց(z"#AXC!r$ɲ"907؍X,CQ,DmׯMQZ@B=YNC (ҁcYdEYQ,sNeY(\Q/WTĜhivlq$}Z WlI릸O5u%[>)g%WRmnKJW+/]DJ+=>*O&žrRK-G+a,SŤ!p\%ƲlH) IeYW :b[ O5% Xx/ ݪzk}-,d^{@^BWh-betSTn{@$XNVzHJZZ+u= Te9VօWQ(DGEEH+j&D#ߍe5tS{ [>M&4AVz11|3iq7seN?w-=ThͿB ];Ӛkq'/ ,|>DGqDQD> ދJ۬J^ -Z+)0pRL,˂)B몪 `04ӂE17|~kxLʁ9LLJ UU Ea477T/Z]N^5hk_ޯ]Nd^eh0ZM^ЍYoǹ?W1f5P۠* څ-[ `k0 vlߎ͛7#CK`ժUKRixd7oƞ={pW+WTj~?| ر+V /$Ig|"u9atdpMMM-l)U_$ ͂a  & \"8dYF0D$)QJЧ(< lQ h; ZaWiDqSUUىP8\6)/4L)s-74ЖKjQЊ 7^SBА6V& Os }!v8Uv krSHJHN-|]f=hTAnYJ\6'zM(.Dzy/6l؀+V`֬Y'N~ؽs'y\qij>ё|sU- )"MI<݋n \6l@,]wݘ; IDAT^{ ~wD2’%K r |Qf2H$Ȥ3YCA6 P y;p0u, Yp)@ww7$jZ[Z:TfYq9smmmhii3gpi̘1  l7J1ccF}yeW"ϥ'[C"(텦ie Lȫa½`]%*Že;Z.Vs-E"9;jy$Li]@Rnܤ4Ti꜐ƮoEFA"E"\nXO71$DW؜cU ܍C{Ѡ` GSкV T T: $mA^p7nC[[^{5 Lbg?Ytwwchh*V t(DadՅwߍ;Gƍ144ߏ'NȊ"~UJoo{sTE-6qxfZ'C ޝ̘9șaMUla*|~PDh;)Lρ²,$2 J VR*xhʕX+De444  BUUar\I; Z}_V?LI8N4$V-!<5 \4{?^:8?E?4MoW˯:D"lݺO<N8P섢(  Uv3 I؈0xtUU'CkdX hp(.,btdh$ LlJDchhz 9Q̙3ґ@lFGG1}ti lFD[[[@bx*_kdł'!B>C6E h(2؈fKIgنxhD0<oB? '!=%/BO5PB4U Qu!j6YG: ۂ0Cql&7CSS/_+W__Ord2hFZEVJ3 H%<a*bL0c L럆l& Y 4,*XA[[zzzpq;v ǡScM)E+d3d2D&(8smCEl򪠘G#U T8|0N8ߏX,457EMXPD"B"?}: ͞W!(Ȳhlj0N>d2t* eDq2TJQMB$sDby2%zA39xBSMV3/6fVfuP-tώ$jIݹJBJ}ET}е(x@LB,׭W^Ywa0|?6n܈qvm?Y X6IMֆw~χ]wQOUU/GkkkAyq~tvv"IRS[,B`|!pM)>Ze`ܹ6m{zzb%oB-Iɤ j7c P|L(F\|@>GKk z{z|Ȥ76$J wN9BKiН\vnz HBHP$9$liS,ڻĉnS9D&ٻ!X$kaBedn:\!XVw<(` @3 }[pM7AVd!iqz  ǑJ_n0 ҩ4|lA|br>rGvZ$ Cvww# Nj522܇o zr}ఁjW6Ekk]]]PIg $x~bbc* 4JpfETʵVb\hTM1'jTH¤P_مxn~F1ErEc$XܣNu?hG?w>AbdU2H%Se@eDG  sˬzKRB:hET*t:m9٬&NtLYϲ*BU^Xl!T,#Dzd2T*U@r`$H$HRgsx*@ϑ, Y0Y˨]2eTs㦍-,߀ǁyAY*BUSD|F"2V˲1^u-Vtg5`uIX3>#H^`^)w|Gs|>٦浛gp49}V>7?iH_ z BxQnUA;hYv9n!\Sv>|/=qo25Ւxu'|>ՋfTsO60 x,"H@UU\]&uZEUUd2~hF,0BPnN^pLZ):]GGG !I96J0^DTCvN&#Po;H } C6EC8lx뭶Ή"uzz!# }O.U`U+:ԂAւ^cExӜċUouz]oNMӼN)Korgy(FњhhoiQ*y[uzZN:?EV}{ٯWSdžrqkכg *ӻު4ӻNI1^( ќس^.n)g9,χy# 9[xDQ-@f,2 BD1 Mch@^Ѡx A- *h,4E3@8ElNV@k" aK"C~?|j&---P(m4r:@Q ٹ <{"+ TU*g+H -/bddgƇ>!HTK*M94(*p F$:,** ZxbI#zH gJmw@P0DEĬ-pS5ըiZ]zzzz5)2x'`x?~R"˲\DTcrBU++s>R^~+򗿌K.ZƋjTkB)UVh0C"~cXBY s  d Ԝ_pz 8S¹P*gc|>2 yB׆ Ҫ"aXp!ҩ4X5iUW@ HȮ!W0˲x'n:u]^dgsn/[^c(.VQ E4M1ϣ\p" zz:EQ + )[3eY47U@5 Ĝcq@<.)XXKf gCTUj%P>cccx!I1?}$!`Ŋ!rWe0ա& Y6zM6g|Jp!̜9˗/ƍi\, }Ѡ1[ҙZApeT6#  #B?q (E(2d* $2. OϻchiqɅaMh\>fF#"#PIH0AB"ҍi(IJJ]zh!6MY$%ǍiIk*ٝ537qo4m%Hts~ %-y{LuFz,I}W_}U>3fffx7)\z5^|E6n7V!d{rk& B! Xki<3:u%ܹ'|BEs\ett(/gjj*{M5SB!^0j* \|,FWJl6Y]]Nƶәw!,Yzq ?|}ޑZQe}_idpK҃ HB`۟۱s!pac?;UtK7,7n~!yIhLc$j&9yZ->cVVV$I CCCY)=LNNh4&-zڀ.!Bf1ܻw?]|G|W|4 ~i&''{z7W@ s\vN gǁ|މAA'c<˶)763UX /+b~Zަڄ%ĝaCEXccBD%Nw}uq瑋vlfI`&W&B!^S{@<ϣVq;;CRa~~n/ch-;o=ߣ:DR! # f]m/R)\%Z#$X ߞX\a %_Y\! 5ep15˒޷֚Ǐo;e8V}r?B!{ e_z'Npi.=LNNOA֟mNOҏo}ߧhdȞ4b!=u?3hXZ``6BZf –VEb|Cw}Loemm .qo&>9hÇaaajʡC8aq$EǩA & C|ߧVjUfzUz1[O!X,l61G266F\inV!BݕnZrwۦr?WJQB111yY,i{}uŅ9 /_Z2;;a{{@)B0 ] 7:yZ㮭c9mRx>nR $[7!B!FY(HNٵ87чCՏ\|Q=|zǎ˒zOggBYyXc6&OQGQy]_]Lj_EamY7!B!BoQ80 ^OJk*W9z=.]^3;;K}|-/2R(Ip4m6.b< Cz|#kB!b78& ýos ](t:\vÇsI;jssscr W*Daؿrg?0:%hG)HO`RQPYTLbaajaYz[RL9bitcD`mhSrpqzof{wxynfk_wՔһg{bKGDH pHYs  tIME  BIDATx {ƥ; JTW3S@~vv:;t_羪ErƏ$$Ge)rz#wEc\VKy0w/nbf9?] IzͰur\n0&=~|9|:M?GtVm@ޮu: #UW?24ς<  Kl8|p~m|6 ~̽B67SSE/jE#ǿ㟢9\xe`8|ϪMp`s4ma,`on:ܡ˾ fY'C?黎=hY,.G8Zf,[rsh2Y}^H;oj"b;>9wi2]۪oqӆ`gogj}̪}UeQex\P=4VWr6vm#߇~um9jl?f7xۯetI⬁γ=_6(/$AtoP7wwlo6}=nW7{ɬ֭wiϜYkE(JwN2FElg#~ܐ~t s5Me"FjOY2C@z]*HYE: UtQcC\ ;sWJ/Xi8^]t_ͥy!_{o%߾C\k gQFz`gTf )mjZON j4:,% j'˾=hSU~ \n&0-רĤYQ..f(egHe> HqQo| 5lgJפ.뇅G-\Jfc0rNK\HEK{}0Xr<ݩKWL>Egb:1-l^Caozb!7?N\+΋)ӎM. quPpnjpLyC.Gk#µժc0(7Ll$r&xG9LկrL]  B\H?ϥФRe@$TQB".ą~\˥qB".ąD\g;SO7_, }/٬ǥ;]xm~b`_?g Q#[.]<+)cs}M480ǘ؅=,r겥8 jpN0 l"f+gĸϼak|2p [J aMgcnS2hmD6^v"(D'6664t&)U\Vcn2uGNf>+_ƶ%AFssM@&ON'&FU&̄J* >ֵʘeom@eF tvf6[^q=1S^Mi.慟ճIDž.m%NnT'O9o7t]cdĺ.ƍ,/WԣDڤ^y\6^USƊlom^S~ةpƙ}u Gշ3\3p9 , 5D;[ӴajW;̵ELY\\}u뮪)N{pxǥlg)[A=͘r2Lm4D[4Q:bcEx]v9q]k@Q^)SoƑo0M˧'X:NqYoV ۃd'ڸY]By9q1sT86=snR|?O2<#yi`F,K<Ǽi?elPYki )GEK1-ҏyL?Ǒn$ϸuN8j*6}手3 E]ЖW hNt/0f)'.mN\\qs{E"ѪF"0e(b^#yNJBOW{ɑ.UF.z#U mW\>ry x^u*Յ,L)_>ч :5| ER= n麼]bWgbsK@ fKdk2QRUg]S'rQߓq!5}}mҷ>]]k*#D;u, ph .m~}F/0^ͥ:qJ`5Wp]6v(Z@fS /dA9" ,N ɧmu*;Ѳ=]מ66NϮ``R6im*,_~.E`,E`U |a2 +Y8gr^[/.z9p%C | bfZ\_eM.Ařе-h.,v٪‰=:rgl,r֎=Z5@ @M7/x iK.IV/,})-tS!tB,ӯ9f qV{6B5K&k^NeXk;v‡Qq6\P ͍n1{9}z.|q-x?K.q `zaggInF xkV±C&^C-Հc8 mC!ñ3d>&HH ~0a ӎw#Wp9#j~sm{+o:.m>²< 9s*_E:2;h>ZnȯfNHg?S8 4+5h_ /< jm߿ 548 v8mU\n9٩u@ؾbqjqZ}ƥ2x˩ځϟö\>B!v$O8}-WsYVf16#qgr\rѼE=shiOT4kMzefiP\Cղ3}Y8s!̂-^P{ or p N25K UZb+tAb\/fT7s]s;tCEQ\c-q{=)uO,S}iIGlcJ54vc$F\ rrۻ?W[B|'.ɥI\hM`.%.ܔ zjU;mn p[b8w9s4йW)OKL 6+yRy}[>ֆ'{spOilUڑ C켾 x.퐯šQ΄븤lm :ޓbShǵrgmis[A,y}HBUF '&^V&]T|P8O3Fe} ׹WqsuH q!.K D^U̻o}ɂ>\VB aes-J{8D_= 5<4D3t< #[P&ڪM_5tS}"?־}s5gNj G|hNOr;KL~+$ߚ J͸t+7oWĸr|B[E4\ʰBM&ڻ*hq~8Sbb'#N0 h=&K-!]3]nOXaٵ& N !'.n9oiUpllK\r?UR#] ڗ:Mϸ@y X.N,M\Ex0Xȡax\Ikyr}h_ ?r/brS`F\iˡ91j {(m/, j]ʹ(*Tzµp^0ʛNᢋ]) q!Bz?.qQ"z Z/:Ǫ4vu7z;\VX~ K5Orp|t\tok銍ȕv|صkբ\X.oHYo[ba \jE-[ sD}tb0zvidc^8q\z*pg+WQ#$.gp~$Gv)fR\hȸ]Z}<38I;rp-%.Eb,#_]}y op⯘7pqy[S\,#SL-빬_X.:I4]ᚸE,bjzkfc)=[&BrwXlK3Ynn[u\_ ۙ5 0m56$XMܽ  #iz[r<$ pYcsp^Bˋ\Jouzv2ZNX^ݶJcDۻnO,uY~&llJᲹ |q}wd.W+?ܯc_VԯB\h_аgYÎ8 ;rboSƙ_y)B\Hą q!]G.ywK:S2fevRsy}*3iU.5IENDB`davical-1.1.1/docs/website/clients/iPhone-2.png0000644000000000000000000007556411633117640016150 0ustar PNG  IHDR@[#{;IDATx]|UGvnu+[w/h@bĈwwwwwwwwwwaGR($9{F9H].)럜71+?9Cq3Y%i_&R Z $BZ"fl0+# ?Nΐ4sh 36I^%? &)O MbMOtu lbpjw|bUv_j-jih–Ͼ @hWrYt- p=:7136]} w|}xqNߺG{Ҫ/H0R3[ٷ"ã@`b+Z#R:ǧHozϠo2l̽S\30?=Kr mWQR=K R[GZ^yYN@"[CgS M4QR.A1.Kefi5rwi- >LncwAfQI;:0\ifcgmKm)ZڊjQw\z%L.zQäw[Ua)4,cXiE؉G8{[s[m;wn[ RE5u(+0xێ<ǎeCWspc4E{TPsmJ|uxYw~q;>_c,|f^ 6_j-./^׿#mL5Ç>/;9kTϲ=a=g~wZZZM '",, گ-iQB(W_܊\NOIV+*N \NNǡCzN.*rA/xA! c.||Ǐ?q>yyy;v?sB#8:Zk 8Um-],vw1Ub%s;f~fl:;WI1-[l۶m=٥%u Aݻ7y}v.n ͛mnbaU޵ ]]JYbLwV7sM=%F{џf}^ꃆϮe{*Zږ}Ç.+ NeE\ b-o޲eÆ:5uoO< Xe,xc_J=C9!Zzpb}8YR+k`c- b 䕔_12}޳otJ:D*_k>~Cn0PWS'ʒ+儥T]Pb00^Uߛo1/)l`LnrMr=D2?3޳&Y-5M͜Eޚ] !XX]QS_X8T^{.g@AUmC{wcppJ5#ŜeIJBkƒu+ ࡣ'+bg酥Ii~Eϰ좲7x}X;$^##e.)50Bݍo OLBz׮bOMK{aŕ6{5ò/~$.nܴ ܲJ5".e?sNp-ejc''/nbV.PzKƌ9"Cm w2z*JJ #;EU1ͷNEU?+dk\yAU5*)߷?WUWZSw>;x`yӦG)k>rhk>lfEau#1u1Fa+3RZQS7X3zI=80Sɍ%U*rH[^UV[#\i_f+U@]XJ^Q`Ǟ?O=4焄ڻ뛬bZ>/PR[H +0eW ꊺxUTT1?٥ #"#=jnn^VSSQ*% JɩyU0A!Gxx Y+uLi 8]P?z@XJVĆ=+::h! nFYZnң80_k}tL~iDeN ,gV#e8{++)'cu I؟ Na ٘44IyF}~ٵ2ږ̉Z~ږVhI7#**EEE?/\YYIVYezq9 X^}Z!ȊoXH^^[ock+--SPX\ۀ95K+qkʪ:[;;;I(I."2ݽ=}(gTԷ8V &ڻ{;(,,,YܤEHI+C]2ie5յ u@vIJ49FݦΞ>7 |  ߵ`0H-*C1lH\`!5Wc:Fw' %>֮.|U\VXU%}X Ԫjl *K ܢ '6;::ڻ,IS J`-5X7] -Xsض3+̯g{\8{eW i79Xʢb\AW.X*FLJ^IyE@I D_Fu L Ji2D-A:>-H#I7r{EUU!侀.rM.Xp0e+sI\{p綰7AwhpnqIq%S&E W"8>7`fIHY|R \.[fXEcl~abq462 [ZKkvCpl׃)iMJCD',Eo_^l7n;`ֵ"nI ů]SqwTp[3l2#3H$py[_if` W~GPe@R!rb7G!ŪP@AAJxQPPR0kTREz{Dyl)(:<@Ϙ{ MXL\csD"6I*FΊ)|悒SwXfA5sa{ ;O]dljg2Ў/US[QW;dWXi4-# .$9j>uB_ޢtQ.lI <Nً؆s`ac/(@c\ ;d= ,-#5G4vt?Uut, 寜(ck뛒2pIHFI>?UWPZq%/>%~&`ٹ2?IKP2 |Q]3$tCeQr Z-$XjZ>)gt&mL{?5龿ĤM};q`pT^Y>sm Y譒ŠlYeyC_5"]сAdm8!(7pƦfߠp: R/*Ґ]F#9*my'WVס $8YEOWH/{Q=ys_{ +adݏOθF(;FN-m YUW´b/[pcqy!YC79E%]q MkZK,&'*Yjư` 4+y Ԝ#= Xy185^s"BҊU#W#q2 dDnFsw1k^ SwJN.dH.VEVݮk/ڹ-+|(I;1%5=jK~YRV]f? lWp"cUQk%ݪ>&giy[e ʝݶ.es(dϲ٭`D+U^3hu+xX[W\ζrj9Z\Vqኾ}&*9DFvjF[VslSAZcE]F,=9/Xy+مI(y6ᨢc;3&fL}U~-4ݢ%XFQX(wa:Fڑlrͬ*[2B)Ⱥħ<~QdZV:Ju(4-z<3콟@9jVPZ*:D䣻aٵlbjqy!zWgTjR0' v%lv ~# :T]rE;o=rTFGa5wZAmWHm>Atg|~5:|F!H/h\k{ +ZNl2\7i@9\Pe{0$z0GܧvFiC{!u*RN5[$\ w a㘘&UX5+bgH|k?_,k>]xvY#ǧe+X(XƤ \tt{!jǀe צbK9#Qݪs|yF-dNzV6豳^|F6s̅BF~'sgN~ 1;rMk8߰`mC= ɿ]^́HFl^ fFE٧$9*bNN75DeLyuM1'MpyϤG!Vn%BI Bsy 0|uqo N2UEp2d L8r [W,{f'0KrvOasŋXܒE`1hUDL{8jKjP;_JB!>tۯ$YMW{ +XYdwW<(s E|raڂsz>~q9%RVMϪ; } ,h^#pcKǡ Z{o?+' k͂xŧ(H#dB f86Q2- mre#=r^ fWvM^ĤkhjBQ%鴚 T=9:}ufno'a?q9x] jgZuK[0  kN(ނ𢿸Z9>cS*n)O[Cqg]@gĭYKS; OJ|D?p-he|@zk69X5ߚg4\ rd%ie(w:.kSR _l \sw)IX?\&L?X=Z?Y'({$ juvo8Q UgO9kza3+ \\at8y+kBx)r v8_$eI]wVҶiFF;U:u gs^aq ޚo=- 8dg*8%VnZo\IUaF֫B(X;!W,/:&ꅼ˾{L7#q7oҙ_5щiIwBFBI_5ظ8yo\x8=#o\#[5/+`{\(cx]xM1-UI5Yoo86$#fȁY%0&ۗ~^ 嶍P".Opja |jooؾ"hv o5YX4I߂՝%̂uP96 I$kZZ]|g_0a[ū?_ş( I_[ɒvcdܚոi] H*4. jf88-ov8^Cy5!09 g0P[ɱ$}=׼u gD85^9 >愭{ ~Ɓ: ^8O`.چ ^FO47' eXՀ 8E@<䆶G<"^3E6&|9Y,EP8]Rw%z-U7+lzI<*č>=E`^O1#_N2p8MTS:ٿ+j''t=GAAqW l˯1YFa|TS|F>ܝdV/!}_Eaxƛ'VH֜8(o!g,b= 0O2ll(s"9"s$0gv[E=dt-3Z{Xb}Q~AHA?8!-jsCG@ AᾲAAq~V=nzΜ}+(((V)Sn ;*ن(ýC"¨Fe}QB,zFw {K|CxLFq5ŕy%57*ǕY%E ݙNY%,e^U{%fc*񈙔rRKJ*KS *nTV+ `33eٝ( XJ2UYu#^A'+QPF L L |הlZ?[ Cʕdr)@(  235Bc z UR%Uޖ@.S@L.!QQ1M-ss?SBw @t: I9E0YStPD@xN/w5?@g {#H|'QiQRr0"4,pni@pH}SM*T75l݊@ljvdt,J*Tz h2EyB~ F ][WG' % h I' % h/FIB~ H L %0*T,,,ejfn`xb~~k֬y_ /\pdAgJXz&q҂>ڵk_z%-Y`5O\ѫGu;T |Ս7|ICCLww'r=o||[֭[^__ǎ 7m"+++O$8xb?sEb˖-+u~o[Y#Y,#: 38<15sRe6>}@;pU&#: |Ұݫ,I{:CZdyC 9qM'k~%`"i&/V&{7 ZAΏNSX5ퟜ5F o`50,0yû ymoEѓn?4I#LB$;󓜓m{ 3n|M0ﹹo# 6x_3N찳3v B`WE>+:kZz??gW3 #f1Q&\+gffnE_-\bdl\ E+9gH%]p [€t ;هYMo5vEc儓w e@aU4' w )voryVtV %',9`"L&KMM%i0'mevO?,--N"2DII w嗑_&2b4s0}R3iL s )|fB`J5x.` N׎!ŒGL!(J[Ș}-h!p[$؅4HHVY3̟8ϭ,2<.@8v P=&w 0l gۤ$rllD6o lZZZnnnୟ ,q!wpܳgH(((O>k9e؜Z0yd| C`UE ~X!౫Ǡc;فtuK" \Tƶ7P7Nյಱ7b'$wWL?pJ}Dyppvpp{3<ȃl N( HIIa/xuw` &*0[0rLv5<ɧ; 'GG\`EsR{}9q6 v^=xMPǏ8';d/zU@_i\.C><6I | 8!᫯ݻw?3 ɥGo ,8_%NXݝpqFZuy$I sOW Lp|!8 ?OЛ5#{K;MS7K؂?E`ۧWxFưbF{Ae Očgl+!(R{}xT)^1ZőaUhz%vs{t!#d!vE |?X0pqyKpj "p|r ~ܹl,!xKTTTܖLdݺu Ȫ#XPGΚཋw kBR/.bEIU*N_ q Y85mxv=iOw{`0~>|y ;ϰ#LQ'Լ5ƍ@W}o2\2Ǎ^Kد).dĐ.*j[-d vE{,E:;SRRp#ppo^]OG䢆Ԣ!\N*gĨI5%63rm+<-okQົ>6EhZUePrz]т7:ykڦAe9;nC/NWp(~YCc}269C L5!nSA Le[TuSSSYRRiAi*TPB %0*TPSB J`J`*T(PB L J`*T()PBʊ#U*T'#EGSB> v f *I@;rWPCI@@ĢBFPB L J`*T()PB %0*T(PB *TPNƏktttǾ9J#ߛRs> uoy^,Ν{ꩧ>CD0GC{0H83p~UϠu gNx:tag}?Q~Ϟ=`g;%_7&czB$yg߾}7./yn?|<\YYY_~ehĸ 9o>J޺;7ͺz+m8TE ((#=ꫯ~kii95ˏ?~߆ pNNN{544裏ﲈ<>,K`mܧ~sϽ'N$YQZZmkk;r+_>||ƅ58"fxlR,<iW]#+l>p)<U| p %% \L+n,#;/a !}j)򫯾{z!%%%Iasss}Q$֮]S4q[H:m,a&Qkl۝P:O@ [ 4k jرcbbpa'/QRTT0{zz.k7oCdeennn0 $9. 0FڰZZZ*++KJJ}v]%!fm YA3L{`yHo92HcNkM 6LcP,++C800쥗^"vT : -899ڲq<33Ce O4ҰcBBBQQ܋ zߌca3"`t&}[[QֿgM^}g6 NWykLzJ^.omi[{'gg}dJ`J 0V00 8y7+e._qFH$bޒR}}=Ʌ ߕ÷K`]vq^,oذiDIl7d]{^aaaGGۊBv`_BW82r'C 0p AAZ.(׏?H-,,nԵ ef~oSX.[zc}Iqq෎ï~wYf>:kb蕲,IP466ley/lĘmRT#7 xK0Wo#tri1VB]"CGDDͩF5iuW-wO8v Mo726qmC*Eq`.@ 9Z~|J`*TPSB J`J`*T(PB L J`*T()PB %0*TPSB *TPSSG#0u *I@Nఈ(*T'AnhSB> xG._*T,+ bQBTPB %0*TPSB *TPSSB L J`*T('~444 @WDt=QXTTl;[{g}vIďcmLT(>s z,'xG%={c9mٲ|||X?sssQ@HH0_ $MNNNOO/͚G/?<+Yt-Kqҋ ?䒗ٶm%0?&555qP ,**:wo㏿+C^^.]?9~86|0 = ܹs׮]رCKKTLHH33ڵk=<<~WW4tDxgTO-Ȭ2Is +[^V(‹rG'+Ѹ[D^eSE9fi1ӳrF'CQ=2gi6s؜E#^nQ4 Ovttp *Z< ._{˄mmm(~r{Gyyy9dee%Z]ǥ:!r7.~QhYO>ꫯp?2kkk^{뭷H-~~衇0߃h&(M^ۭۧSO+@O qL/ӇW-3^V]*Զ0Դwzt/oW,x&zT>#J-]/vHٓQ{焁sx4a5W<{-ve'ܣ )!W(qsuué`(=FFFIS0nraN7PYGyzz©~7%,,Ln$%%kjj"{ndx"L&w}/_0)))O?440EI](544@xXohZCt~>yPx6xGޙ҉ew,}N.~rR&ݭv+*ḾKpU3rHubp!m0픚 MvXTCZ) :nsWnճھӳ,;<0<>GS/d6RND/xx}@}Pl!Vfs-p_pi±1Ѧ`7P5k0,'luvv6wyzИaiiih>sEG'08@innΩu%~-?p9,ɮA&x=XޏX>_I ܳ76k0c4UgNE kwH_R]D-Eյ^:STr1xxqJ$0-И H7P .L%"v1[B{JNxE5GAxx+ oCmlp:4qڱ}#SO!vPA˩"""r lC >I!_d<S:vt1 ӳ߉,2Ѩ#Zr# hHj"0D, E,0ήpw'HΟ)xOH"*§<4MØ3>>B،ЂeUKhI\2>SrB(Mpw l 3$?_ ZؒEϲZA>H;zG0(JC #DǑ1cn\"Iu5Xw3kZ>8e{QN,={a*,e_0=X tB|G!%AE[YY!K|)Zd㰑9/RàD,ZRRDac*s1^q̲Τ 6оuֻKsZ`Lȃk8O2(p\Ջilb`٤:ƫ^ɩ^1GAOLr^VrN&ql/%eU8H8ؔ_bTxu 7?!}Yy]ikfG(e% y ӓҗ7(^S3/Up~Ȕ3Kz[wd0\0vJ_=^GNb<ۧ 3."g+XژRFp J;J,\qpp0,}f|0k3viqEh-,7oP{%)=f]'xasz Ϻ Ȍ׾G;=C4~l9G=.O]%H$X"X"DK$XK$X"`D"%,%,HD"0O"`  H H sn DR@ryĒHH$X"`D `DK$,HD"D"%HIxճ][⯿? S'+Wݱc>oF V}f/:4aܫlqaf]NCiN F-_y ,y>Ѽ՟jZ[ J<Z e=4>l5db_w0%//˟jNOOlݺ7lH Zo۶mǎz[=F֣s#GٳghV8h22,=쳴[$kżz9׵ʏvuNt.zl@蓕;VO=&Of\{?-S/+|Ht//,tu=;3t?fKy`%ٷ={arvÿάֶJfv6nĭddCPvq80T!/{-t8f{|:ʰ0|i!Ŀ}})yw6hЀӡO>_~WEOǎ_{뮻UÄo|ͅ .]~ҤIo(лwN:aZobŊM6C4b =nɒ%M2Dw}M7>qꭷj۶!C^zn9C_>W&WlG+t5>XԚmw;(pg隟0o-/ZQ)|FktzEkx5:Q'joM O >ta oqkf,?n̮{E]d ,諯.`SO\s5lS'^|E ./2kjRR=XHHcyd8}ܸqV3°5aÆvJ(D$''?/얾x-aÝ_PYH`fsu'ؗ4-F̀*Q7sV0Tn>rXpr1SܹrQ\QO߬׋:"tF+{MGSmA#@jqDshg0<}/,̰ȶn.Z9˳:_w=PD&/"ߖ9!KsȰ*3ϐq޲ُ67/qCfgbCz}5<˶k=1/ F0}m.y՟W^=&nɒ%XHBb ]||Ap~)ۘݷ_?LYݺuqBlxww111χ%4(fK/%$ƒa)R.N3 á,txG^{{o:]o)*80A.޶cM)}Ԡڍ͸ghXzS <\4/|]dy Lg}ބ \y3nb^uᅠ) -% `†yKM4ߛ Pn{NʢeZą8ۿUi50CÐ1mң=1gun{8n(2uQipFZڸtN>e&L>27}-)[?JLl؊OĸEA_rAbСI]voA9cpz٠59ddz٦6WY)C8vN'ŝFa/@cHD#pرl2s 4ibYkkTy+ ψK-!ǚ>f*dU g-Z-9bHc`rQ$`B=sQuO[.9,">pSϙz^^Q6!GḦ@L 0yObdU`L޺cMn4H >}50z@/cM~5 qؐ4wE߇Z;+ZU'&!g!H]s _>3WC|իwGwqܼ\G%!lDם[la'd;:g嗙dC8\e˘dBܬ0ޓ"9TNxFU۴y&ap.(A.i@p)\hQ`h>w"r]-X) #nbO jtm4`v78pTb0.lOI]<-ȱ!̝91kNl5sω$8o朙Ŏ=2Gi::)!g.Ʝ&)prCV*B'd=ZR 7ŭ1?5vfGxJfJbu^f3CyUp Ul;S zJq~9MG V6uTfoYhѢHes"f^'.^_EpB f-!&ŮrR{3sLݰaDux-;v_ ǀ;۹{>^;;̸D%p冬K>q,YSa A3*Ww(6=;]a6e}rmqʹA8[=B8 nyqLP È'Y AS=Y ^½k7~|*L M!dՆ$Ob/c[NYLT׭>-+fL- Izy`D"%,%(2$[0aEzIA !0`ӓ%CCb'+߈HzٍO|*=J$ 1'oPhdph޽4%=tr03'&[OT"/7jf#bZ>I)Z']Ĵp6{r|x?u0I4pq؎`hbg 59f޼ks=$JVbatnVs0MKM̲RS) Ħ$7/Vs Aepz>!ejf>q*S DK{eJn|h&rVA(SN^I9Ged_U@hܮT^(r<ԍ V9'GC`X `,X `,X `,X `,X `,X `,X `,X `,>|'OOJ1%)mJr r|*S Ftir%?ӓL*g\eB*XWIIxϏڅOO\?RJ) *2+1~.>o4 !>~S.]q㦌ݻI$\KFn+1 g?+M ~nڼE?-<1@CeUa$ ЅOMݫUf[ÔizI~ ЍsvB ;%| ^tvd| w5zI  |魢I cN[%-Z( ~k׮CH J 믿%H$X"`oܸqGV\y[lȎ;N>)S̬YߪU~%%%wdž xVqqqb]v1bڴi(~{y+V%HJJi˗/ϭ}'b0TV.Cr~ko ȑ#QF9f4G1cP\`ap6n8>>{=X.\xaaaVrƌcW2eh|-| G9 Ԯ]^/vPBE6S!C/5:! `U1;vZfӦMH`Ν;.:l۶mGnw (fٳgݺu7ozQjL֣V3.}'r]\r? 0vmiPʕ͛/a.P]J.\sܿ۱@x,+FYv#<(qy0g Æ ;Q `z}xۊ+*T@G+-ګW/|]tyꩧ)PԼys45k֤_bؿS>̝I+♼ xwuG xW_%M{/Νw3u>~xW\A[.U^jeʥKvڵ{͜4i&kŻ~E6NZ?x:uhihc=ưMsϡZ|o5f.]믿kxn_SK/ղeK'|w6wC0qܣd3*|駟y6" HaT_Z?i$뮻7}ѢEVτb mvipxhnF+o9τׯ`ϳ}B+??4:$tc]v--[Fg믿thv/bl&`TED0Akt${s8 ~ ~` +Gɷ~mU)g[o`rܹW]uu\z6Nc%؅P <\h '$$PBٵ ^p#""$f _y啳\ph>wK({agvh M1T̿Tجpxb6[+by ]f<3Szlkэ0g.Wc$ S CZ+Y$oRVT]K0q$Vݺu 5k֌ml~F%X &p7pu7q\17|me)uDFFy@ۭ[o ͛`NȹGch[SFx[o 43Lv-C϶$EF yl6mQsa(sWec2=6}}}_BG6m =O:'O.KC8~ݸq㜜2ILJANw0.}''n(A03[c𶁀l[0o#䐙Śq4$$9ņl& a^| 1NL9H_pHS\h:L'p,>}:yv a ށ{Krӧ10E@ >&rQ&--Hsz|ݲe "̝6Ι=KNNjժyL_t&) caDm۶-;;(\ƿxh!C&I잠Y $&_e͜9 qQ%~y(3-,3Qv;[Dc0|D1 x6pFtuN^sUP`XSB#L= 25lAez-ˋ2VKaF 0X?:et0oÑ@6%'b7p^KL]68I~ &摱~0C,XN%Qض $ ;5c37p9!s62jנ085m`3̾266Eaދ48rI~dǞ-ILL4 эyf,L f Hi*.N~t%L0:gx$ەȽ03.%!O%h={qώuHԉkWlW5rwNkD;dK].@~+=I[8ab`cvfHrc4?5;EN=FyVC]V `|==f:$X^$7ooya:. ` hxIENDB`davical-1.1.1/docs/website/clients/iPhone-4.png0000644000000000000000000014071511633117640016141 0ustar PNG  IHDR@[#IDATx}|]E/."¢lBRZ(mmjIָ7nmIRJe|{=3wf9syC3WgQ<};<ӥy)W ߹Ms+"h#U52 Ptm`XEA2+図4FZ;G':\,&g a-!64TԹ$x&dDϰ ane=r7iQ<0>>Ԯq" mM9#(0& }83r#}־}mFqD^}a[x}3=1o_"_fjm Y*8 bOY}L}pd׹)G`x=C7D)޳q8̒@%uCflQ7?s>򈼼pGX2N]4;O910~{ĉUm,C-oJ/,.kj?`+()!Q ]M}+e`9YHtNl1c9% =R +ԌaN0J[z[ e*{Ji²p|rxx'f瘈){f*Wo23 ٙ}/~ "g?,'PPVƩZj~etJ/a@pԍ*~ɢϿr=[Vٺn̞1oF&$}o_~Q '#ӳo Tl<|pKG$F۷oO+*);tVPX8ϙ3o@ _ W8$b{8>7G0H;s ///>}ԩS'OCy}*jkc\=>ƺQeۙq;&CYo{X:uz{9p`~euES˷~{ 4v[9|s];},sN=_Zw䖾nF*ua~|NxGtQsI+ndbfwdpnn=w/j],[= :8jMLv0a$*JFbIMt~JysБHhXȘyX^ BIiUS=祶1Ê8y7ߥda[.y+1q/ݶ}CC涓'Outw}CИ8CeULQіށچv]mcwy1em"WfdV(pHF^F\\0﹋t,]Bpu{WkOwG5O{Ճ3ژ&:=ZD01Q E-]]9rG}^ZH\ Y^~4FX|bem-!ml^ɨo|zkpKjF1BCNfϬҡ¦ŲW]{WHzv5@=2L3W*AT50U :|ea!UQũ@:D;w ML^~<5'5}#8*rϠuj68 #5778z( 51;q- V‚w#14 (,chf|٨FB2Z|y<nxњr3S_zF::XyYF^XZ#$4e:v=`0_ջJ[FQrHof†yGxA&;"SpY}'8PZS%'|ˎOK|gopdᅬWIݺIZ:V֎g,!ƴ?M8Qϫc].jc8ha5 0s蹋ލcl9F={IcSq]GqLSߐ7PX]oGԶw=8{z+A\=4?1cv ?wC_Ŋ+aؾa=]}A1edݻBUMMD\X;1Q ?xىMO]sy1n<- \41}LMr#38_je9q?96lCNq%eUhs*ϩ]v]pO@@@DDiMG֭[2{Jyy|CNup\?t¯$1mmk+ol(a;Zrچ$PCgIvgphkNlQ^ ]}"@eyޓgxY!:V"8ض}@3 Nrc ƶFg!t 00$2s>dJytRf116V#,-XXۈE=0ihjݷ/%RsʛKP_@0!%-4&(}l+[;uk\a\c0]DŇDZ)M^> :~a9Ei$S\Hen0&3M}/c\^<[~|%J ꐯX Ȅ9u %6.nlmɫlPVӀ^=%uM+6i mopnay;;1RKkKNcu3ڪr:.kloϨg󘳅x^dv$ߪٴ8teeݒ]ZgJH/zYXGD?#ʪ{LPv绣S3Dq77X)GZquݘ[oy_@J^qHGV1I, mۦW ܲK]N " /,*ղvb]:kebNaFqAaaAႂ¨85AK-d 2 #6bW8YSROKy&UգoFǒs *.mٲcx *!qyN?ɃUxL<ˌl9|䈕 Ugfƴ Ȩih/alVƢ1hcG9֊ł.jluaUSJ^5W/Sl- L3oO>KBBMmNNE1K$,"eHJhlF&0U7aׇWXK}MS BYlk jO~e-˜Xa!S<}uuu&yUH$¼:!̊E`T @^(##cddTPRZ؂ +囱̀5DUu]}=$*22=CP*jk ֞><%Ɯܲ܊eSS 2r*PLfi%ᬒʪƖ&p~E7645 *kPmC@oVY$x  Hu3ݐ ,&$b,`Ylɪ1V=QIB@r[gg__^ںJ3WIV2JյvULaS>{54cdTKWO[O_Sw%i|FIޢ#0v72^ô[^d~3kQU困ëZ Jnsx"Ը`̂U-7b28VTZX NǤr"O/.dsf˲J*:2idWܷ z=M/.+T3%¤wYlkҥ.N׿5V)~?DtyU:p׀o&Q.jyh8BۜR^$ J,fB!v~ ;Gd丬b?@3chn}Y'e3u+VtUxc{DΙjh9>5c%'Mw6c-)j+:$ 83_8rHZ]Ǝتʩͭ" 8f k1Zp]qτKVrdv#V:]Mmm.@0RB2"ʔ)?$RLe3.GObObwBwB`'L!`=&#63@ffl~^f.Xaw(S~8qAvq UF@Y6J3]+SusW#b用Ktޝ2凃۳}XCD6AUYDE4J چf`(S~h ɸ=ۇg >#%f%"휴9Y1᰸{]Xv64jaYR^*BPw eM}]<ʌUPmh% $qM˒eu]ѫw28#F1l-P3\-S~&t3$Ptp؄d9_ֳ7uG X0y<$cINxPL|P3fkyPg34Dmb75v )_ XDY'<0Eŕu.+$&ft!5tGf-5 iQ1 5=}3MA3Awx;S+_yS%Ks궁r^D**.+iXCL5-c,79_9(cfrN\JiE$A&+.5lnH|{Fɮãc>d䝸R4 UCAshrr29-s]){*O e,LXC}7IRZE[VM_5?'):h|4]az2c웴*I;}rRQYȳ+8y"Eb%Mȥj,*Hޕ2T>FV^ &n׮]#``RjT؜,ˎG[ntmB$ègE)Yv-gU`F?`q t+~G8 s90ƯZ{%` q_}#(5={ObC{sW:W|Fi?^#5K!%Cĩ?ypF\Y&H f`+X9"y#N-czAK}rA dlNT#= :Sh;w)gwL? cAMw Ga(WTu@م_J(Wv>I1)YqQbz}-j83ҴӵW 㟘rD9K?\UB%rf>:8hDJkZ iXe@CŶi[țy;{'Jx[kY+Y&s8|tc\qԀ{'r)@Ml"a)e;Ge^~)j[6Jh{t]S+n޼YkZ20:I-=T-f)SB-նU \O"oO LL(Y)X9șxV7A8;7,k1K &{'a [4yEP\Ds4PA1.Qh bl#c>J; 7 Ȳq~@ d\8(Ec!G1xL=Έ}rNnВBtHz!ݥՍx5Nxj^66P3U>%(C~A%G1i 6GCy  {`+2"F>u7 EmU;bDUKᄒܵ,#PJy%hŜQ2Pѽr^\ATӊ`cimS!((Yo'',*wP8)(-mlofetA\ᜌ. ֩f $J.X34TP3L`7&vƧbrNL^YۈT'tR\M9tXqRD6B.Q ^6i.Iܮ;j>(M)cOrE. oՑk!dѾ B5!Ws-kBV@NVwɶ҆N{0\7O`ܢۻop;W'&\YEmk\@OTҡccb:vZ SKqc`h!ox\R61qT rښ16r4,:k ) [PQ\|W6hF/%mXdQ!E~sY ,( 2&k.*״^>M2],|b|~̌Mpjhj!FcU=>/߯ejQqQ-~m}o,ЌR 8I'Gw߁agQU[/x-C<hr3NC;.~2ާS>2)sͲ0EnW Tr;<d0$^ xm̼.V0[GifviЄ$B+.mODn=C%N)ٓ!{U}W=YKtaYi$2tG A(kmxSE0_>L #.(D&e)؅Jfgf iUr '1\I}g^mb*'&M)  'cSSDajzZ_#^/gη'iiJfc{zmFXbShY3mUM"g;G]p V+0s+Mت1kj yyU 5k}Ssdx]B/&c6Z?c0k k;FfXxhK0"3g*E\r:=drzR{T1D RͭD82>߸InDiI쮁֚wi!XZf0Mr3-gվPۭ곒w({clTSy!МEϥBcf0z|"egpKAZY2noyʶ†{*Y%[l,`%-(ʶ_WO=nYԭG%0KXթ)UK/ X5X pz pKM#6J X}Cu}g"J#+]1s[\uc@4Q(i Ig^Iy^%ne)9Ek '2͉i,UhluO+`M%Cc^ђ&f>IyjelB]C~K :iLa^ESʱ½?ݭ4;;[^Un`~NP5!gmTlPʚGFF-T\0o S A঵- r#3S%gxӫn(kB2]p]od x5;Epʰ2R8Z8Va786=4>8B)jUkyPQs0˫` |VrNif$}>uKfʻ&u|V)%ӆZ^WsIa9eIU!ie,휰EY: v8~_iĐ͂YOT= Wku4b;1r6!^sFY2,M$%u0#ؖc$60aFH7vxUO2YdMX+uV"᱉š6Y05((+*$V\ N]Hr-kM`ۈl=װyV:=)=礐9 3Xj\cgd *4C%_RIW^r]1=*G֥M{!}WL4DbÃH*8zaPR];.ǪM9kI5'c Jj[X-ԴK[6y H}xz"b2ʤmB3˛8qI!B He!Q]T$fdm#9,%_qUeaA+CS`%BoVPYV7ws:Ar,OA\0 cY[IK"t{/]({Y,K!Б5tlޡjmsIUACoyhN1p_ <.IEIu}Uxl"%QV.R.wh J/'jcl G-e.cuBH@N;0+vtZDBKj$Be"%,ETU_ %Pl!eb 0LbWlf"J;dmںNMW<;*l|ϫTgWΨX;z^nq5/ͩ.m`ԀK*q%>ǧgٷl`-!CN8O/y,86E-q7Ru 5㑹Fd,FC)%b)ҖI"Z4`+b ;E _8kӫ"+!/J$?~9%Sil>-)g!oq@3@ƞ#yY+2f_KP}s$U@ $H %\qfGwVy ؾZ#q>}O<[;b1M[_JE ֳ▬m"EMz #-B=gj,,G{\!,F՟A=Xz%TUqneIo"p~Uy0xW Wi;JZG@G.ݎB;O(Y/ZxC`cx{%Ncg?I&cq!eTnr4[6V{_ ED-5#ԁE0=WXݸ7[oY]+ZY "f$lX X-V:\<4$hiR!rZteF/gzEP-fz6 ":~I%k$wv?{L5m|0I]d<98=m0ʚcSs )_b'4Ÿ>>ۯ{+oV *YXxNL冞cG$`Lj$N\Tt3 ,^ R *E͗wb"7k'J|R5(zeڥ{xF5[l*TԶa3kS9[Ue~(cg*L6O]zxrvxl39g.FBmr/ ;0K& /pUBL / .SXu܉p3LUS''AY*#x#7#{EzY6'9H)m^܄68n9cd 셛5m݉^ L T\ׁIҚ6^J{W=M G ( ZL_ $f(kœBl~-i Ֆ1j0!KyA67ӨJL cXXK.y(XFagh'<0{mũdb^3ǰa`7+ 7/z`mwLK+{WR2lӿf6r;‚R`( w}RA%RW&៑ JEE(#)H.6!lU!V N+wǻ\%O XCX<$ipx ` x8Ǎ4\EW3R3_,zL^-Z1ro E&GhCD.(`+8DC[ʎѤHV.8ňkCYy: MO4찜OA)TV #@ّ5 Z _~EqsӿNr#V1Ya+U lE$ҒPmYpkDҕrTȹtEANm8X@NUҒ>h ъfYqڶˆhŮD#~Xo?&w_0Ap 2DAdvM6c=_< 36`7/9Y-WbzƎehu[bl?:*&7NtA`03݆xm_:WN`3аq 5x#׀vuKB}?`܆l`X⣶/&&WlUd{Q~@h臍e,\b" H03#x%;kx_Kz/]4}Mu1h uY!==1?@kb>gf#pl}|IE^WE%6%h 902P3a3M89w/ʫ+ͤ ]=``5w2净>C;d~_Q h|U*,ь6Y۲ޘ4h{ݡL!`F|A߇OЕ{ЏOBC 0{e?CfySLe؋2e(3t(S2M2-~A2H. ["4aOz~+a&39--i,mέhU3 7D x3iº"̫` j6VشB&3,̫ͯ,UX3fTogӄU?EUbPa 1PGLLLLLLLLLLLLLLLLLLLLLL* ` ` {&dÊ-ٴŠČȸ𨘰9,<*B 70 .@,8]2>5+8,">1mphhlltl9R!RPłXj$dvqeDLl\\B[{ewJ(s1 p>`\RVPG73w1%J4 K+( pzq󜜼td)QZ7.5+:6^JzmR? +C#hRklkt()QZ@`G'qt͛ B7n܁û0ЍMM(C/.-KHʹkaaahh궙'!!a|||ûphDToo/9J S׋lmmC68::ɣۻ 5;J&'cjjj***Jׅjkk|}}sssKJJ7n|;55u))mBR]]]TYYYXXwmCVBCCC))m~O$%%d+בÁD===S)DDDPSzxiXL$4 C#)466֯#! cĚ0Ca6}W V"i42>>~c,,,Ͼ{H8B+|3<ύ~կ~SQQqrrDGyirŋh? +E8- l:RSS0rH@m xD6 dŰο AU/p'0v7GN!OC~{k/P3f[/&ڵkPpqq![ҥKwBO8-=u$ IQQQHaZ _mddte)6@GG';;_;;;䤹HBB{B ./璤9bD'N<,s=~{׷lقj?#EqaQd9x۶m 4P 9ߦgddtt#Z?```OAAd(JJJ\dooB[UUU]]899q.a@7_"ʝf8xwywV F~uټC}1r'M 0վB2Hko r k4@q իs\455?&d<8|^ Fa/r ]am_o ?N۷o_P\"+]vY[[cqVOݻmll"5(7YY֑`bbb`y&4 󻊊 #,544aY G`rr&BYU"!n0 $o^y?oۣ> !pPPz; I)f~_ZI0?ϭ{aMi8;;읬%b0KOOGg``SA;`Lᐱ/&DX9WMM 93}1aq*\I0{,Ա?~6>tNY1===% &>)K:0uk}DASS=orD-s+`mf pNN.IHbµήFH`#(r Q\+>%1}Hp0K4 c4AP&Ăg ԏzVV?n#Dd-WD !%^&宐!c;q ljpҗf"r{wvvƽxnn:>X.[rfV֚ۨ/;8O&[D |F?6Kp΀Z%+d}~a57tO=)ȁF& %[ 8j@&Ht"Gl&}W8EPc%J0I1HSaiȫ 7  > Z`rd "Ћ* r|յ IL$-% BD{3$E ɄR >~M)dH|n'|B19lBqqqFȀt(&,1}7xlN.7h(v}ߓk -Ͽo9Ͽ /W_}_F6A*|/~<-g|?򲓎[o38bKSQ;+UͽԚ)=ɯu~G9?2]#T?<*xMZq3 NkzǗXfq줚UַMq2 9"#r^H_?O~_O?]~q%K/A̧S܁ Qܪ6ҏSSc9c"oM ''9B~~~}ٞK//[nΉfUUѣG/^oowjx> `{XɃG݇#ɫj^Ra#BTh9We,#rN^_ GA GFFPP̏<^|Eˤ$;w$:}3<_ {$kUX OuÈr)}h' i>UppY ;v {?d\QQeHߏ_KMM/~ ~tl6Q{B 9%+DFV2we-5J>?Fmx%=8(?UN,!ӟ?L%%%9 ?50#3&mCr dxxx Da۶mP@S$??eeeH}q&~X v^=}C KۼpϞ0TE򙘽iKD G&MSߗ$VSSӪ HAȑ# f0~5++t%bbsn>uL yJ[e7C9'gR/FyU===( /A8ɐ?NOO_rA>:iϑ q/4jYyl8C~4?_U?CB^ bq5%%e%{$޻w/^߃ |AH\Eg"0nQ"4WI:yฮkckASc  }- Bby V񖕵5q&&O=g;4!b)w,68W%ΙsMV79Sscpttt~N>66tڵeE+gC:Fs*[Ǧw/TB_4% `qBJ()QDL% `J())QD0%J(QSD%J(QSSDL% `J(QSD=oPDi{GDEEQDi ;֧)QAo(Q$%J4 M% `J(QSDLL0%J()QDL00%J(QD~xffM;x1! jkkkcc#yK?}|+ r͛7!oSI'6=C⒜W_}lݺurr#{ _?=[l'E^kȑ#Gfj6` |ɮ?4<<??ƣ?֚q_ˋ޽{j?3( g (NI _ /|oUJNNzXmFޕc~.IQ0U`IJ7Ϛ%ax٫,{eHZedV6a[E66[KЃ``;1bOOO-++(򗿄~; ꑸVmW^ydXq]C/ c=5``#;'9tEH>C☬NR< ~I⋆?^g'sw~ .Ե@8=w-Nam=#q_ɺuiw MΦ5e+{zf=d3 WVѣ O&4״CNuqղkl7u+<:ibz8k}y5-}OA!t ŽQRYsUͽqjF10<-nͩ+o^X ;G&1 hF~u;ZP\̹*Ly^_!k5>~ `yfY[ r -r%\:xN.|NUTTreeeJ$c=jhh('|X^^1}\=~8ᖫ&O\1RJ}}}^`*Eii)qG JN<ӝ;wpw `27}駈> f5]qJ񚄦UdI5^o.jw0xh|rT{N7O?Z|/YU6fgVf 3WHjN:gܹ8 L*LC҆ p]bDP=2[8566)cNH *100@r?8\o!ٿsrرc$'("FVH0IbqyEwW+20Jͺd\"k׮_n N'A yh6?\^CjȬ2 D4#2`3Q8lqL%.хaU XCTظC̞/0H,`-||L10nش[+?8ҷΙucf Vv,8>:^c'B6%|VA,@ sIG6$-AȪP1 ^S!cJacCsG-f:Ƭ@o7egbvX`*5g d&>Ω1Ê# x\TTD6؄*NXs@Vf\_y 8G|)))"$>+?\i$>Yh8UHIIq̙3:Bt@׏>(p̋:)bE~&U:lq F=S}Fjͳf-}&d1/X7؆  tURQ4bYD1E2}2.d:`G廥H xT8F&(Ӥl~KE`>%<*w/0Ia}P t&a² >V # .fFbESǢ#3 Sw_!J1 Ç!B 茳LFR5< Fg 8E9aj[[0nx}*|#B܀AVV$Gs{qlkk㧞zgpW6?[?|Vښfymٖ(b9$2@0gR̢r@QY"sHe9"%*ۖIlާM4 8yq{MfBclvF`t+d 7fJlk`ѴjU_(ѡ ˎw1] cK <{Y bk{?ʑ9`y쒕pOkEiٹ?'-ԑUM>aX,_cX#ЅZ v8$xJy[ed! )ܸw C4?ZvR^Y<ҝbӑ>YW:0?GtGaD/䂕.` L(0\pr_Ӗ8qtq軗kVn>zg.}](DУ᫅oo7ƺNdN6ƍ`ܮ`rLI-BE#Zo!i?Ӵe/ 4ZiX`,B޾};: &c&>~':0=TB1ŁQ\r劐3\yMXM70#褄V ̇]5"Izޖ<ȣ?bl8 vBҘCb]z1`]S׿ucÌ\-[} X,,N, bdJ'xh̥4^ehXf,~NW1~hDžSx&~DI2,9ⰃӍ}{0#X2[0@ Vȱ~;v1$zlMa~wF1ljjBI /Bv1)bi _:c1I&"fp- LF.62Xv0k)S{)4٣FB='BE\^"b6հM\ 0+^ @`o]";eBO3~+y^h8t/DI5]?j0Ɣ Ha%}Wo>D"hFbRpBމ/k o:FekɎ^HMo<}}LυWl>$~Y*|\H`iyc$*ԥ7{F۽/>K_2q6f|s]dìns h`[Y c`Xf 1=EQf[V\Nf՞Vc+l #}X \y>>evsl6LuzaF'>ؾn ĝ߸w ЊKI&??! M 0֨KaUa1hW#X,DLVq`6XkH?3}@ۡ8 |_D*;V`_c}:"nҋ/p:}XlbNw8*KY-$ֱόXpL̶Zlކo"p;oعdGvrMM3XSg/{F'\¸nw満FLuL\U7σI=-x7O c0d;OV< VҌ̫Hf;&NJhcshWbF%k%lerl.|ľ:6~Bcn }sc;8Ԍ5ޙkJ%_~~]cPSW ',<ǘbh&5~!2TQ>M׍Qn*2>w6Z?4<[u[A^pWnܸa{ץz|q8*k`}O jƾ1f{A_CUTt >}&8 zB`Y_k8@67?%fZU(]\P_7ӱawbbp'=F{i{Qcԁ=IҸDȴ(a9~Ia%0=A L LzPӃϞ? ҃R >p0AC:~֝6 "=!NgμW&Awz h /9w}e0=!s47 p79rׯ);t9rnс>JzF g[oݷwVzc tζ2ͅ&0;>/_ͷ҃wb vm8:C M띮N?pʵ|7?:=1T@+ ;x$ :.Kwz1>|CGc3>a P%mi_ @wA7 ዷ{/:w_8w;owNRe4; mQ*oKB6.lVV &]CJ*Tʮ(0V~- Iv3/]7^nolm+/YST s;.TG(wRyiܯD珝|g.V7W:sRyʉ JC ĢƧ039) WX_ 4۷[':M,-ZkX͂ev3tub:[uʲ-ljZ+[muЬ~ k }S_gۑ:2㑷~]zQ6̖} @0i:g\˯ !´Xc?GZ\wWzSf j(t_UF1`Ut>2aRJՄ[m1Xd4q2έ}EBBJEqhalN B`# NX8V2`g~&YVczfW# (tt&t>HBVdO^CO}@:{@3VDXSCFk".cdʞK1d9c4C`4_.#EU6#5;'b$4NJ_UӠ#ЙVJ8~U !pVE 7w58N 'eR 3M>sB1&kb͘Lt'8'$>QZ_8P 8Й$ЄQ!qdhT}>U *1cDG *Y:yH2;.CňX#X`E\Lh|WzN,ZYXINB_Uʌ|@S -\z]y~QAibBk] K`EfD K.,XQvYrn_B!%iWY,tلU\[|ڟQa{Jz+y43C`])9_ԯ[?3$Fn(4=WY!fO=wOomI6d2VJqq>+IoxN~/2xVp]&3||,N!5tf O"Mٴe-AEKW">@0XJ2!Ԯ˔S8+2JS%1Eŧ_7jؚ/}j,f ˒YJxI!AG IˀJqP_6)R4F pUs]Kɡ`2[ |ω@b#p~6l?x|o ² x8Ϻ ϵ/Kڲ+r5 V#5qO!j0)C#Z+>p+5- Ji1Q'y5s:{x0޽7OzI@(Z4oxy z#4.?~1M|O#ޙAQ'ONzT-Rdytf.F)y񪏧4é~iА,@S6n>sOQ[@ 5oEV|3q G!bSJɡCXuN@X+4QG1^hjM0"/_ϣcހh;i"݄ˣF IˀJV5bHYY5o#2\h{FŤi<:ē1_~!7IE}3mfi> BkdV"l##jNI< Ipj>YQ;5DH䣌 \%ej?*5<oƅ?b%Yr0nmc\feIɉ" BXlq~D$8Q\mCAEu,B1^Y^ņuL1+ @tp@ȚD (* ٖ V2g 3NPRj?JD`m0X8io.m2v0eaM,3f' C}~)!2>aIS+6>)f lp'@ FA "(;gfx2A'-3}_d F!0HOe9QFV$YVˈ۷vX+n>5-8^U^;z܃|VHr֦wҴkǢ)PR3f&E'];)^eM,ƂۚҶ / M$@6{ VV7ﮞ84YhyWn˶] l=e2,|3%I[5m;Y3W("5:rιׯjz:.RlORtt ܻKnxra|iMN lA\K, JТB  0,=|Z77 C8%3a #:(<6$2>$*In!-qPuѼyyjDOls B_z=(:jfw@go{#\0#( w7lmFD'\176>(Xw(J*>48+c::1`g`?07k.) :~#6 $.C@@X4ɶKjLzqhd"/8FAʻlg{)*ÞWCuh媆-ʺr}~榽`,v|2wnݱ7R )PφkvLvk0dQ0`Ɲ-"%mG2^j04V q)>qmJj͚$l9#iXj5\At5,Ӹ\7/B1clO]y԰inFc??QFn1؎TEtV;x^_?Ӗ,. Ui qg /3T=xz΢)l@Q3#':D_?w?w>}ә:` }OLC*s!aGGmNBqӽLuϩ(){x.g>x2<`R1lںo]υƐQXLe밃zLKɬ%+W'^d^4Z11 hܴ^}.5Z~]㚆su5(s i#\{ 4YV5=W\KNBi,954ъK׶wVY@'cCz!rV5"5>rv1kd/oWݽ5`u{h ` ]xn7nwfPyГsa޺sndutAw%η^Oܤp ET'L<>KTÝ&{ L6Gv s+h:e%0bHkX7Fo䰯ɭ &8R蜰,5)c_%vWjre Xk&}♙B39gЙSN# +#F [aC:">!pZz!4nY4X) QzK+cK39쫲g!R :'#f(Pb\ƙ{X *]niUYe+< :{6wٚ#޺8BUHN-Sٞs"g™&9ij5+&-OT UL]J$Yxwdo ǫs$M3{Ye*Qxs4)3?P$VyF2`2e q./#FDu-c_EUY55e5ŕ eV)3 ˕+u)*}A$J}&Se2.tХ[<'8e40]zvCo}xQ\_啋WKKLX4[ϵUq vr"yu%F߾KOMg!ztrCkK+.ed6#LbYv~qW_ c*C`# _9yZƭ{8lJX$"v)HőZoS0}&u'jiUcCd4bt%w V65'h^x[Lb(9t¶`z@)G!o 2ᦱ]NpŨڝ'ut oH8{bTJ:k@ghdtG ū-:t+7Wlڵ7Bš4ˀ $_ vEX&mSp۵`%\FFLHs|ݧxGOƭDZpI3|f+29X[=eA0>p\@쟍l(t|."2[ |#X] :̘q>˯³X󥆑%0 ,5Ҷ;R*w =|$,&kf !+>0/44V/}OW<@%oAaW >=>}ߢU끶 |.1Q'yƨrpG鋯^vw#V~&IE ˆUq/1-ؾjv˗4oمЙ|=`JꜬҺ/_{Ai>72-•<G)$@aB>mjT!. 495&.=36H:RPwP8rGo&Й1mG І/_|^b"/L~93 1FW?W y"uACFf~" oLw{J}!\ D+ +?|H&.Nn IK0m.GpK?pq ?ƦF)9z[gijh?A&]j5ׯ3fh(v´X#mu>y+o_ѰM(mof5V5(\{L]?F8бdkgÏK ^i9L ~әeU}#ܰBk?YaНxЛ$u&vy5~N8GReRH+<2ǠJx # VÓ vl Ӡ k'lBfi`@8rټ+V).ܲ駟~vRCgXunt"qc~7=WN/1w0dD3a •Yayku`nwҮ(B!<,Ca/ ๴Йsy$12Ÿa n[{#dw8ȋb8X%.esKGIp_'&~%t(<'Q?Raݡ&3`d —EiFkZc4; م?C`<&h<:r iuGN3< sa KLω@HdJzN\앶wy<0xnƥWcٞɉ" BXl}ܜȋ뢕Yarz:xHz@L 1s UuJqճ"11dKz%* ٖ V2ǸAd;?a:J3JQ"Sj78#+fpik/MꊭMF3|“tЍ~xk}w6Dk}}Co8+9ǜ gGIEZ4ر`,B`9uCl':V荶n(C Zܱjgb MB7@Xa+7b!'ԐyG!@LC',` (o!2:n?W5L?8ڟv2 1atR2L|~Pk j0"-kpiX[+)./)cFH;dSgoJ goö%zTF "/4A#ũ͵“6A3Ƽ;ez@tscLé}2?cS}#fīM׏c~<'8#?CDi~S+(?`DYciM m!dld|/غ~㖠8pxx厝{d}XjY%aIq[w\bmh^,1wZkUdnkڽ|zBD]Y{k2C,Zbe!b_qff5 t|n8_,mxz7~ۼ{ߞ2g8uE݂=m֔Ɂ'PΪYJH9k;XP^?3Ó#bۚw_z0 s2x&jet9m\Q*tYݽ7h{_q;.bĀdCH~ϞϚD.0k{t% {5̆F"U,qWVw#<%b]`/z#O?|򴣻OQBDݸv#<>-0VYTKV5kgNVn{oށ18N-#̴+a^bИ[p@1%w:o( ES:e}3gŋ;{=}־!p3ڤD*%x9[%+ 5u [Y|<lޅ;$I'tf%Lduq#(AS:Ϝ1u F[;-`aݡ{G֮<5 :ȣE+֑}>Ϊ[9C SF0{ LښFX޲PЁiJ{=|"0V>>ꋷ9re4M{s=K*j?ň L0u\]n<5Si?!C,U [[a6bOp%u@',2'lmwm6G[z#'ۻzq']=vG&ԙ%._ˌ<u̅[mxJnp΍0eu!ΜqkPAHw]eNi- b^G>/ĽsJxjB3ZjݖᑇxȣGO@G*"8-ä}P,C`J;@K?i/IXXPqS k(KE) Lu9QFeW$Z.3Źf P,4oScчi޾19t_`Vqm"lq]XOu|)SCyمآN;~x [x,[02X4B7K/\4ھ`{w/.~8z!=hrXP4:lT:q̀m]WoynkzDх' |jҬ?wcgNt +C`u",*G.m-䰏w"R :'#Fk(c_.̽YTٌ׌C~%Cq_UBj,qy}4h?L!*eVe# ~eL=K%4H!N ŬW5헧eDY{kBJheV%K`3RFyZk@f/ 102L-wL ăǀ!a8c`,;e) >-ֈs9}1"kmץh97&=WU:F>0#>-tҨP -ZlU=k5ͪ{@fE:^RX+2K@Υf,4=zmM%gE|BJ#2XH }@VX1~ӁgƂj4'y8=-t)/.o7~z]c@X<8on@,6yA(5lHQi%G2O322VJ#eb,.\ =yj(N(o˜+d : {,ٳ碒huiȵ1i2ax˞l/T^Gj0 F‘.4KRjWe4f EeK[o*XBK$=ぺ{_5`Dm]%0Ӛ}:gw{>{rCؔD@ABOwvfр/QcEˊ0(NY4K蝰rѴ$u%BЉׯkL0>d cJ@`L2ֽ|i+bndC!&}Ͽdᵸx2(KI((Ls"Vex^,-~&WJ'mc\FXrչ;&@믅e5tb/IV[g/wvBK#Əavipo)in"0X$b^Ae;kZM~z_r}!"4y+5 ?>Ѵ>c2o}(N+-tJ0Z#(~#Ob/@^z]6 \ a;VH}aZ l3W E2607V[_5=u8^A/=t1N!ޱiי^"J:^Fl% $@xΒoq'4%%*#dP74SVwCcSbai?rHosBeW@͙ L e9IWib̛j>%j5n6㵱)V*. KLaŗ_ںw$x.-t:l%0.I #ƌ$m['!tf.z{LMk65_zcT6F7@Ҷ%ZySGlU;_*tF!떘ALSw4Lɔ:3R1A [)Rƃ!Ӄ2t$^Op[]^@"2~@D f%L9`͞ԌmM{hw$m.*~sV>ggq dɄWx8}V ~MMu1)-)Ԥgū|ƥڻ+-2` /L5\V1ύH6q☻x ]decȋIIH{rp ނ}̰?ML|m`y\=5H%@= sYS5.#}Q}ykJ͒<G'jl O`1ēUFa ?Ww, ̒C]S. ~s,ްyۗM8/)t\ssS Xk4n5 ˯ZQȱfTc"/+-a5ڴ-oܟ-ӡS@*.(DCàpެ~}qB,R\K` 0\p˽-gܭ'D ˀъ$v2-Xɍ-BxH!UZ ,t σKk:>@f"D˭{x㋯Q@/$,b8V[0͞pK_ހO\hߥ3/Б42~P}Ŏ~xq3"+F3<:c6d !wҵX75+767ǯ #S=)29Zd4`D24v3%C]?ȋ뢕Yo3#<RztdY} 0oB L@RQU6-d:!>B'x(=9zF &JD` X:Lg +&Ҥdo1'//Ȁ, BdL{ˠ) 2LT!Yr#N79gg+r0uM -@ buOާOӦxԒ3e{Oށ'41ez_S:w>'z3Ó H.V2By N|j; 0=#}“ug>!(fw01^Awp;L O#ޕ0A02~j &>cPtC~|@" OJx'i~>!L|ΜuxaDYfM 7qKӡ'l޳/#hz`4orc_ug{$9)Nq~;㒕~)LŪސ{on־8Mwe Ag"8 (:zȱOsRnsIb.p TGyNމ2:tyƂvG+PclPɖ:Q PCGnu``?\t(J΅y[aj_t5l*mkcAgG~MOܼjt&+L>P@B miƚ%1-}̆Y%r &h'4|kv3p*QT\> +"ݽ%}V̈L+,;tHݾ gas ˰Oa&FijI\(8Sj]de$e)j^i1sҕWobXqv[R1HSG╅ 돝9yN-~1 o$yY& :M~MXO҃`ފLT{{1R5rN.UwO3K`Erꍘص+`nkڅU [AKb կ{1I^I ԺS.!#SHr! qr5"vL پ 0" k͸".oKanc5%_fL^14:ߛ xPuQiOd*V?|*E,sLKAizSXJ€ .Fn%p;rYa#byq5,&hbƙs.U9 Wn\|z: d5ʐWv!0܏(B#xC 줥jmw;>~R^3wj`L p" ;CM|xM||Oeu #C`>$ xpz<٢_bfWߜ3 V0Ąِ]>niދY*idlJ3FؖXxyieGЃV_?> .ީ5 RmM}*e:(XaǣϺ{6fGwωFLG'(!:\9&qR.]i[m\Lɧ[rA“tfpU9ן' /*mö]x,˦8(3X>a5'0'8mSb!o*cO& 4Y=:RSSg̘ .$W\FeVIcz&(_ +´PcKϤ}dtILϾxFEGg Vnq V7E\r@l\]eR/xA# 2r!5oO<0 uU32ZS5Y k `)_*:\<Ó.Z% \҅2I: t>C`d a;d[z+QIg?FI,j*Yb2Mw^XR(^XZIb@0I2X}V-~ +b@Oʛ &&}lǚ\F2 \Kͤ{I#pݗN uQҶ̝ P>^Y!YaC:">oKc/;lA>VA7y}>"RS. Sur^/pi{eli&},{2I#paYKXoIoq uylDU6#5㑷>HcwH;0MBX=a+`#Q~WC`6YD&IB1լX̚1@04je= 1g_/.CNf椱;yI<,F*Ԉs9}+⺖IiL@J#pW7-n`{{FPF&Fil41bzx-HBy}hV  #"` h:ni Bb.ǻ]"!GiD%Q2 w"9EEf"Ԯ9Pf,˰ `O$6r[u[xn)MI/bŬ'.m]F[x};{y x!m~h~⊺xu'%C`aQT%:em}Ί)͖9e2}cV["ķ"70b-ĺCF4y8U݇xV:{>^8^ i,2o\qv /IX;2w@5ٝ^knG4HkL !el!vHB@H߲lْ,/ 4ʹ3!iޣݽWe;fs?ϧ]`D'ג]kE).`䟚{8 -rhgPŰGBREUm>yBQNw|_R͝?jJ?06"B:f=C~uXٴ*JaO篰Bv2e?6!eX tQ%8GY&䢯aTheknha>TzCE/u53_Fw"FC222ꉧ<:oZCAɲUUܜp+| wI,,B[y<~C,׋-)#gVvmMo}OonoY8 g4ee{8a":ˆB6 \6#Irnm. T_;,́/{Sw #L19%UcةwY;l?+{ixh4zld8 9rZ.s V[g-*x$_]?0O~es__:zt~eKJ: 849^ q{Y6iMŪ'5<1ƕ$}z{` ld8 F/K"S:16 [@T-sD0~0O H?JS b>VFC[[;h'g$,U=*ޚ"FοfzLB_/\N٢0u~c W:;*ܰ Եہ@sV2x,ތN0kxvx ݻ"7g;:q4@ǒ  tط]0u~rqaes8 d`Z9dhIycL[XF3[q-2},v^_/dzVC19e?=eL渚Yhm(܎[Xaт;H*ʜ?Z)~կ儰njgpw16" )mњ1qŨ;_F=TY^ B`d!X=ᶟhvwHp0DXxvp?u=nz~' ZhQmѲ4ˤ'~{n8׃VY}5Ta{ ˆ`,fSY!Qo -qm _jb[W0HKޞLcR@3\VKc]Z.mG}r/ #VwI`ubS&k'nOH8'n_&%scYDb{"O <<e`LIy ي|OL qT痷PF hh#38s<.`3i`(h}lO68wB;(#ʪQV>5!#< #8 X8e>V9$nc=pQKDjRЀ@~X@e`h`2RCmD@Xon4rGG㢀U 3U[ F8rD G!@~T!!1*g?ry6o.^!E4 L\fe`$d] Yv~-8.{Sa%O:68XvLYr^T~7ntݽ- LG@ě vc=E lq fKV:F0r:?LPETO谰' "6VP؁Ǻms*ˆ`20 ~(d1,oV*rXZ=\B-#7oр9\V}V]8Zph.㇀:A;pOoV?+ؼՐI&cXE ˆ]e`ʵfGOVDZ x}~QILn|L ɴr( 0^20-1gp욊 פZ+\w?WFD!@To 4^\ 0sq rr7e/K<8pJ׷(9꧹L5 L JU1": VU[{=ex"7Uqص; e`*?H,@pk$ [dmJ7[ʏ"f.Rl!^OChandler

The Open Source Applications Foundation are developing Cosmo, which is a CalDAV server written in Java and Chandler, which is a CalDAV capable mail and calendaring application written in Python.

Basic setup is as follows:

  1. Select "Subscribe" from the "Share" menu (or in older builds it was in the "Collection" menu).
  2. Enter a URL like: "http://calendar.example.net/caldav.php/username/calendar/" (click "Subscribe")
     
  3. You will then be prompted for a username/password with in an expanded dialog. Enter these and click "Subscribe" again.
     
  4. You should now have a new calendar showing.

Caveats

Chandler describes itself as 'an experimentally usable calendar', and it certainly feels that way. It also will only synchronise to the CalDAV server either when you press the "Sync" button or with a default frequency of quarter-hourly. This is quite different to the other clients I have used which all aggressively push new and changed items to the server as soon as possible, but which may be lazy about fetching updates.

Operation with DAViCal seems generally fine although Chandler does not correctly display the account information correctly, even if it seems to remember it internally.

davical-1.1.1/docs/website/clients/Mulberry-icon.png0000644000000000000000000000326610705234304017300 0ustar PNG  IHDRxB| ]PLTEy@xAz{OXJUSde҃rr|ZwiȐə̟ע򕹯ƯƲԿþà՗ǾѿZV pHYs  tIME jIDATx\ {8tJ%)*hfm`h5!iR k-J+arhs}>s}al<˭5FKtjRiPhQV)-SXAUS^ &K'v\0Ν@ʝB,88g1k@Ê!bqnp'I-MOU9R4O@`vtׇ qk;{GVY=k5[_7zUd"ݢ+|ŝ=<\ 6M(N#UiOYOMľD\+]pAIAq\?GMx A(j#8[ wM_#8!0}}bż2ϳ_ZDw'LNkEZ`iiAXT8/v4lÈiܯhʯ-ޅqLOzs#nޯRwMd&凳󃃃gY6~&GmjpӄM]].7XxŲnyi4[]V多Qm4'ts \\~`UUeYVm k,om<$3Oןp\k(gz d>/tn[׋dk(3 }j0 &POxc,|oLmT k,W n2Z٧/݌]? DZIiefw@(.u4Y s tyA( )Ih AWeUUh<?k\<vQ'H̚i6Ba*$JM&&>xY"2+6o,01HLnϯLR wN'[^9Ut>:M\}*)1=442DFF\C*7NnVI@SUUD;Z2NimdZhhg`juTltRݍ񆅝˦tɓWǽӵÄʴșӮD pHYs  tIME ,.C[ IDATx c:)SPQ`lY X3kNbu[W}ip'Uђ?kniJ]%J/%E[o Rh/CpOvӤދc^zunfCgݗ/CIC }bIG{Aqj0CnrЎk̳^.;]E#Ўw}tI hH;+^ vF|v½׾eS t$cAZqq?F1_ _wК[pc=葍K8gv4L1kḮ~0t;n?j};OCW8bNP 1u7Ål?v6}=r}j1fGA،/zCcHruP;=_ sqMX;mڵ4*߲#M.䯅S n@j}`^a{frc SY{mBsBSKZAK]?o. :T4b"zL@wMR&!*1']4q!ytt4O,<:bXZ$!j!2h9ChZ`qJ{D브 X,R,v5|vU=O`xuc/EUÜGbVP$V5#_HA1"#0(FA]Ck[GghpDy@=CFR@ Og0"TAɥ*0 PY@Fchtrq4ivh9Z=dGa۵>7#T]V t ^=ЁeaPTwIhd{ is5kCc% *8s`V!0F*}hAl0mÇƩk]Dghi)*pǿ'*mhv?cO]=4ݹ{G]iJ-:)='4$=k3vӶi;ꔡM=k3}*G}^0zӓn}܂6P#=W GPVtuZh` )3L t}\(SZB h%2h:MH7%Hԡuoرiˬ:@ }YUhQN^lxsߗ7C3LkxVrz$<(3eks?{bdQo<laSM( ?TP{d#= o?rE&e: rṉcogyچ}ׅywI%#7sĶn 徛s%;|N6c5MAf܆1yoL}#f.4c,ܺNFPE8 ^Ȥi/8\Ȧ!Ea ts =F }?Cݱ &K'w溮 >ԓEAڻޝи ̏}јecry❥90߰zz?(,ݶmChuUitѲUyp2OFfFhKf\,z 5Ph*Wk0v J=E< Aᣭ2dyXVŲKw9Xz!ηUPs9;z2-]DָZGNP8)zZ85&ewz<~"iV r1$pm~cmTNuS)oX:5HaxyJ&%Unբ*fYyh|ujT9WSjyZv\6J4橅yli荥}ZXBE5jcʋ@=$KqVmr!ϑYW1B-t%;OmhߍyGMUX4~yoq%/A.o5zAsYyq 4V=B 0pڣ}Kf0k3L W]tР<l񠏣( sq -`bB1|M} GV^r]=Ljb+J/,U ĴM7|߁f`_\([FwޮJܮ&͠BXAm֦ԃֲ[J#o ]C)林T2 y J-o>EP;B[C0o$`LSAd4#^<@(#zdBU A{{׬->-`U)Qw(7 ':\_v=,u];zDA{Q iNٖA$Y~o8GYiq;;О`; 2b\jbQHQAPBڒ+ȥH_8|7d^}1B~[h(tH^X#elj9jVc?ZPV2 QvjŖEXW/ű78' }@_/ }@_/ VD6;G$IENDB`davical-1.1.1/docs/website/clients/Chandler-icon.png0000644000000000000000000000433610705234304017216 0ustar PNG  IHDRxB| ]PLTEeecㆈ𚛥ة߾Ǹ˭ϢnMݰe3 pHYs  tIME .4IDATx휋Z۸C]UϱEH5c]FHN hce`M\ČF3tvV|xI 9cr?lvF?}zHe4WtVPI؊* xy)g@H%'EIPasB,!8"VtN)&eI)pDKdao Z>} Eϯ޺x "(J#idU}6/~y#I3.`2XfW5b`,,d~$f\v0&J4ydoBɘ|L0/.5 ~eN0xX?VzvfB(.8*8uZh 6ZkI3:rg?u8BdNNNb'瘾=/0''v `_}t~36$ )yzz_ҼcT+(.A{z)(NC(fSc~&)'|vrr I8&<8lQsM)Fwd%UJo1p[sEApR\d%+=bohMOᮦ,|vB5!=MUf2Êm=zhbd,+qT pQQ:@ł4e5L  MN!\l$ƬW8*d= W.6cߌmbcoVOH(Ye4JZ\ :I#%Pf,C8x%Sڪ8΂%I,_Ǡ;Y˗'yJWٮ&!.-U60͍-ȝh?? =Ú&JSd.6:\iCӄcY 2 MY1.1oK%Z䑹6Z"`MF&hEspRv? xDuWc}~- ^wIENDB`davical-1.1.1/docs/website/clients/Mulberry-details.php0000644000000000000000000000445711215140072017776 0ustar

Mulberry

Mulberry is the most well-behaved of the applications I have been able to use. It does have some bugs, however, and a particular annoyance around it's use of non-standard names for time zones. Mulberry is the only client I have used so far which can issue a MKCALENDAR command or which will display a hierarchy of calendars from a single configured URL, dicovering the calendars through recursive PROPFIND requests.

  1. Select "Preferences" from the "File" menu.
  2. Choose the "Accounts" tab
  3. Select "New" from the "Account" drop-down and a "Create New Account" dialog will appear.
  4. Enter a name for the account, choose "CalDAV Calendar" for the type and click "OK"
  5. In the "Server" field enter the domain name of your CalDAV server, such as "calendar.example.net"
  6. In the "Authentication" pane of the "Accounts" tab, enter your username.
     
  7. In the "Options" pane of the "Accounts" tab, enter the path, which should be "/caldav.php/"
     
  8. "OK" the preferences dialog
  9. A list of the users and resources which you are allowed to access should appear. Some may contain calendars.
  10. If you don't already have a calendar for your own user, ensure your username is highlighted and choose "Create" from the "Calendar" menu.
  11. Once you have a calendar created, you need to subscribe to it. One way is to right-click on it and choose 'Subscribe'.

Caveats

Note that Mulberry has a complex user interface. When I wrote this I went back into Mulberry and initially thought that DAViCal had regressed somewhat and that these instructions didn't exactly work... :-) It turned out that these instructions worked just fine when I followed them to the letter the next day. Go figure. I think I need to record some screenshots of this one...

If you're using Mulberry on Linux you probably have really crappy fonts purporting to be Helvetica, Times and Courier - go into File -> Preferences -> Fonts and change them to something nicer as soon as possible. Apple paid a lot of money to license those fonts, but few Linux users or distributors do.

davical-1.1.1/docs/website/clients/iPhone-3.png0000644000000000000000000006310311633117640016133 0ustar PNG  IHDR@[#f IDATx}]mBqh B6vuw׬k67lw|gs̝{sΜ=FF^1jxvapz㡙8O߾gt>Bxj<R-ctFFAʛ'nNqS:&p f)?d({tG䮱>L36905aʽSп'fٷ`Ǘᴭo|rpj*_%ۆF8u:ూ!̭GY1c߉LJ'Y=!7cܲntudSm%ut54W97>_7֕P܋w=:3:Z?5RaV )gf1%Ic8w0NE#\ƈf/lf=Q;>ʫ2l`Vobgb:&5ͷC_Mmr1>K'aaR]{7GVaprց3$-}H=sY:ngII54::s&Z-{_9y?m}mş|=o@B04ch.S9 ^GW_HjE|| 흸ʩup zU9)xmDsxNω'?~ße)LNRULsrMgU{qje,{egϝMu#G:ueMeM-l%? $*op% 52Π‰-}:ĶgTj~a%#BUiKokbY䣬\%c3x2S)sCXOlb1x1ÌBeq@F8c`f=?sg}_f?q_hhn狯@2uNeCSO=׿>YTS_,?'s*7[׍3Ȅ//*Addzv-Gmx)yY%e 9wUPQ kr UPڹs'q/,lVrK__|I7e:x^?sK'#9ۤ7213;2877;huėt.mL`g5&gs;w0╌`%#QӤ&: r9舧Otڌ dټ|,khb 목ٞJ|pzQEu  曏)y־-KA!JypLf2{wu۳g> W6>}UnoH c`)"*;P\PױmxUٱAl^ڌ 7 ˈpKZԶwnjcqSwFTYzpFU4D`] :&uӶS0c<ǎwvq裏K +Z]}!453ϗO1~~5+57OOt |a^H63FbH#ٓUiY:T]߹XkIo:oW3*C4smWy>ڮ!tttڌ dѓ'. ; A*N _>ü&{=>tiyCK/㏧~'^ZEٺn\}#cǏ&fV4"ĪZXtٳ{7Ca0xAJq)C3 CGgdBT h_63!"M)yaiа+RuzLes;a8Oqϭw[W%0-n?̄ 3wGxA&`)N,ÒO>qeGk%ػ782ǫ$XinlU-rMkG}GGuKӖmcڟW&ɨձ.E1BuD lI VvJlfZ9nnkF1s#۽߱$eba@oH\V"r J89ph}_l(}7]gO^{};(tux=[ۻ{F'#v؎.bZXq% 78ot<(2FJF;}J**TD;{uI*0읝]4Cg/^Un&cµ-At$72>y>`0Ns~rlن"Kj s˪KC۷L^i)3vt5Ӛ5Mͭ['$u7d8ѱ1F_IFc8RV^5fQ8wԵ, IދqxYLPmswPI4c3.0j36D%.)yxY!:V"8ض}@3 Nrc ƶFg!t 00$2s>dJytRf116V#,-XXۈEgnLvO-?t`jN^ys{ 67 &$ #`ek'.yk +886Ų)>>_LA/, dk W70v-d6eo2צ_Knnjkkm}ª:"7pt2yΜbXVTLL7EDfU6w(i@ K\lȴ 67e0vѝj5 Mɥ['ֱmՍe95tg3yBF,/2lT z2n.M3yF%$UK5׋ UV @r(:SPTTwo˖-Ǐ Q ;w8sF]Gi$c1XfecǬ]0ʥL8cǘ53LDF]gMC~c32͌A>ϩV-tpau]Uc{ +ϜV$zZfclQ`ƞs}I\j/onwrB.Y"a%p|_ ")¿|lr Tծ"oބ_^a-5M-es૯444ʪ1> cbcX[[W544H~u}NEZrzfQ]#dXxSJYWY5Z:گ{ x-4 - -]QCW ܌pneUƀFzT\qmf,cUzQ H8*)[]M=,oJLIUR^ܞ*#-}I&j7g}lrr &|b{D^;c9U9U] o#@cG'$uh2ի$6 ĔT`P}[B8Y12ȫedd JJa<|3v}x\EFg` py^EMscM`0?Ӈ'SSQט[[[ss ӖqvAFnQE]r,$URYPίƆfpAe 4w*X!7^teUPÄS 1-YQy}3ƪ;ʸ#"IHnë"pU[WWi]c&*iJF֮)lgpfl쐔jikó$([[4`WW7nFƫ[:`sskof=`3J{|v}xUk1AV]rZd7̕ߕY*FLFQӊR KiԐY\NlN_ӌ"pYVIE:['}yO&ટrweuu q淵dC.m \CԣA)*o.*ߜ_N v<4v =N)i%3i?"v=xvd-HXqYyD8]Um-~3gGd] z?.Y}N!ojjNWU[7GӲ~ ǧfŤlquU^^M[;uc{DϯTPPrHZtUS[Epfb&8ũ?.YɑUߌ@Z)t5LPJ eʔPf(S2XH2ϸ>E> E ўbv2净d|m;x?secm8+|AR5+BsT[tCx)i]Tq |At]c;)?8Fd+;E8g*}-,m왮╩9X+1 {FT%:~zD]X>,!"ONs{[fc%+'EUmC3G)?4؄dܛóvj%"휴9Y1ᨘ{]Xַv64jaYoS^*BS}w eMOP(3VAi`ثSWL6-K8$5u G)t#mG4NJCs L "tB=bin g,g'o"V6+fa2.yHƒ0oy4bG^0^dX̻wYT0[%1cWeɻ^fLC`4ku `xub7o4u 0N\B*l?yjeǃ#cf@ ]7ƶWn![aԳ,ʖp׳0uoQ0Mr̸uS\lR_#Vntlҍ7/p`_7JGPjzvObC{si(Q@O.g͒d|qO^>>\ñW}F0J3tAEGFa˘8^f\R~Sa+ՈauB5i1]_ٝG~.1ӝF't _해8eJZUTv.Eq&vժbOchLJ.JLU1K rBVWuUl'g?4r7QW-|<9P{,Na".F.šBG6gm1>f^Nމ&ZJmF=v(1=E$n]I#W5a \ G\5,% qG7n;UMqF ukj۷KróRKF'ɠj,5 u;ڶ6]IPD%k?K?596geͼ1 ~vq`S}$!vF# ]Em0Gs8t V925+@qW[Y]!U-c kD586I6Q>v:qJzҪbJ:~x'5ӂ*:ƖfZF.¼`jBDJꜤg1 3> W啵H%|J4#J@kE䥔I h*tZTJT SBKtYI9d{g(-X21tP iM e3AP 6/MR\Yw౉Iq%J:ҺhdM]#k[ H;_sTPT40I_%xTUtQ)H-|\USC0XjZ˩#dቡ`t^DV^@FBBQ넀4&M{ŒG26NaQу꾇i.4wr͛7BvIX ny{iS3ɅOK􎯺=$JASؓ\Ѳ ܣ :2u6,ZA{\Kp80w߲V .d oau(l-m/m$%xy+-ظ[0purj%@۝UD& $Du,:{;:6zUN#!4urr QqIn$:XZ8x[z$WMLlG8@!4:k @%c)( ( RrAԜ"r 9 WMeLXXb:{<.ȯb.kWwZƖ]=\d e%cuט7&|xfQ57ffflSCS 1re(9_N~~-S;PCn)Wk]}gfjI89 s?z-k!`F-apb!eF~xFNiȤl]2J!eaQ=.WTSr;<d0$^qxm̼.V0[WifviЄIV]szVYJGSFC Bh'z²Nd-|sId@+P 2A`X?::9}2#F\^5QLR 9@RګaNbԉ鹒μəTOLS~7 33, MOi-;-xI/7P"_hOҐӔ<9sUH1J[]cS!nNe]DDU5~nz_рkXiV5ɮؤ4]SkxC$.Z`}}L^#*e曌9r`k m/c ݃-7Xes#s NR{T1D ͭD82>oܺMnDiI쮁֚V{4Vj- 3&sIvy=j~U}Veo^CL*z~*!dӠUhl2 ZϐO$ 20^n 8H+k@m~-=#>S>(o;<>N.c ! x`AikohVP ]|`Z}Dvefp˗sq & 5m! l;B1 OKm,%hmdY91mm YK T246a-a-m擔WM3@Pא8={}#DWQrp/(wܹfgg˫j /a=2l͝jA׼m[YȨ ؞!2aTua=ܴ]V\nd"#sro:V@)$ ׯEF̛QSTg ,{!e󗮅!aKIycCӈ#TV5h &oޡKNo%,!Ȟ&kz@KY^1{WV5{-J)9wo5 JKm 9~(N I+cn-68qWO_kM#-fzi(Z|޿#iݩ% ]s̒YdwXu0&~l"I-# 3"FOsīZv~ҖE5l"kB_ڇ_QW_;+"H-i I!nPsRq½r*NBnUppRG_l ^k(oFd빆-,I9/+ZT:;c_^'cPPQG LF*ZL"ؼzeLjå1dQ@>w/}n{ b!k4@BGH+r0q8V]?n0^@Hq<0?0QR۪j9'>_2},,؅e(8DtKQ&mYĉ#l\*j9)TULAbF6_h[.s^_vb04%ߒt[T͋Geu-|#{07>$N%04( -bYѵ]sFYE<^)l>#oB2k#k?:C5QiUACoyhN1p_ Yn@,*0_`YuRVaˇ!AA|v圊5WXPB`~nN.(uikեL/ ,BXUrfB:4 9;X/"?CJt} _\z`GvzlJ1ԌG \N瞀LJ׺Xi-308.tO)byE^q\ 7=W^?,QS2u6 brYkyH^|v5dY~O:ט,cI>_ 7aA[ I @4IRe뫶qnê22YۗWk+N/TăS,ji]Ih!z;Z̒UV&RԿwX>R"T3qfU[fa5g? a1B&V "n+s+[LL} ZD̓Y-4;M6J4(4L)T::vvyJG=~G:CM -iŵw;I2 IȠ*uy:`lXK&~!!f.: C׌R`\YcuVG0nMeuh@Pj f%auD2`]X1pQАeH=jѽgAUv?dM;I_K*DpQE@6 {h,c2iヹx<@H"ɩa-aTDs\Hno ,}/iKƎ>ؙ'ϻK,8p1 /8(~IM4@~Fb\BZh`}^ =ƎI(q_F;46 }E+kAKH+!! Wb+dL< 3|Na)L/+SgYPT/ EntO4 xڋk@Q)ڥ;=jxel<\¾K{ðHLۘڽJcM!;J[*iO᠈g%cd3yUBfAh$`˫3 4 Xj~(S_^/*]`=E52CZD{`ϖ$7y%.J|vJخ\KgbzZ6\"!Ӯ߸Ɏnyŭ_2;㕈К K+PN ٸ  c@dXɰ~/K#]v"We}bu\Z5*!]Jዉ.Lf*z'~'/oC?-_@KzK˙Vtv% f,ca5;jP!F{X;H)I!a/#l֔[YQ&H51Ane 3Fᇵ9,s"ޓt Wh7]#!@s`"0.Y`KY.A|FȐ]'Q ҰS߼'/buMD?qɦvn9wfˆx+`a V#Mݢ0<i ޅ+lXLgU]Dq°삒RUsC 2Xh lLOl>@h@\AZ2V0PVaM]-6p8Oڮ韴"H)3p\pxzgpLVE6{M-] Ũ)jhnvw!7jdipd I>Vo@%v,=wUP-"_fp%*!p&) :nN }Ƒ\ڑ="PNuS}$V_bl6v/nBNb712w|z۹5m݉^ L T\ׁIҚ6^ZU/&{@4&Qv)*-2If&P0 p'kť훱1,V[ƈ,VV*+>#쭢N,w19F49:oli[92IY %Xa;aSp{վ?X̰ Y |:_6e o*^VeئWg͂am䪁w2;< PN# lѥJN1 r L?#^0kŋ.u P8FR\").5C9m B:BVw3P9J,LJzsyH,C166! aqiƋffX?r6!YZc =4G =M9-$ @0\QVp2 L@ Ia]]h[~#?Xϧ zl/ck`yW!gFfʔ&`ƺO >&g%Wyu_}yKllñP0g{o+jZ79 y[ |;)?/ 98S_(S~&;{o>LgE=oʔ)? {QLe悮eʔP)S2=)S~@ ph(*[!BH˞FwKFlB!1S^ڢ܊M?s!}C=&!¼ fcM/hlB!1Q\ʼ̒u?saVI!/{F?LXCY%,!f ֭ x:(фlX0~K6"1#72.1<*&,"*,"24 7%M'+ ..TZZ684466:F ; ( bA,5p}~Q22"&6..;%J~t1 p>`\RVPG737O4 K+( *D99y7oޢ#KЅGŦqYѱqR~6\XFGv0\kg^'f'\_XCIpT|raQGJ?:ݾ}Э[pw@{kƦ&jm~DZXX(.-KH)66m3iOBBZQ(XoWXм^TTTdeeekk( H]u@/~ORctl|RMMMEEEPYYYmmmZZonnnIIIRݔy{{:b 0BSRR+֑*++ 0qm(M0phh(0dl:RUUU^^^xx8׻s " `JNNIAL[[PP@߷ɨ@ЩHuuuZZZ7 Ȗo H0@ {n$o)`zz$Vm!GS24 CH05Hx"##1 |AgdddM8p_%•4ȦU/=n@ ?3&|OFo7aWs=899Q#<ʀ4ze4"jPq g9$quttdff" Cz ~ObXQMTgg窗q_Ǐ'z`~ꩧ ?xk/P3f[/&Ppqq![ʕ+ wB8@8-=u$ IQQQHaZ _mdd$%%%&dggkgg4cO@%\077'|UChqc|)e~g!?rȏoܸeTGv@,G"۶mCn(:t(`J)68##u VcmG`M^^X{ 'C8PRRu"{{{X2ުxoɉs [D M `|||o/Qg$0C;.FpR0 4<<33%07RH XN.B<;;˹J\Z;-޼FP^zR/ct0 !pPPz; I)fbM(`r+^XpG!{'Fppا!.tt5TN"><$iS0Bh8dK 2Vθ)USSBΌp_LX W u,6'O>S|dgOOO8dt CO0 ~($oZcԄ}G9@}뭷 h ̏?[k67Po,srrIuDLuv5Bz9@k׀(ZAx],C8]"U3 2$lp@8~,Գ6gϞp $X%kQHL"iLN$((/ل29/ w#H>މX`CT+$$K743ܻ3E^J46>ǽ+wa`do."6j0%ďcM3 } xA1FXfpxyx?8B xwR)ÛMAAAKv AW^y;E=9( Qc#I_~%NqO {u$4j y  7Ea&<_@+0>>>e!c,"Lz/xw,sa@ #$Y}i!u#~L0pňb  U'K+)nDf$qL}čF@ f|w'٦{8 *U f܅Ch61YPSz\\RBv݈xT0ws3tX$Q7qB {T6= S B4d&#|$f'zsv76O[#0 `Jt|& >g/H⓽FV½$,@0MGjR:4f{x 0%J0QSDL% `J(QSDLL)QAxJ(mP%J6B:"&(QYhJ(QSD% ` `J()QDL% `J())QD0%J?}\ooqNt[k|O2o޺G`nޤFmoyyM8~Kn4h ǓQrN#!/tܒG}Ӟq]ډ\ jշogVPB\" fjҖa9(.f\)Q/'kݠw>kO㣌߯DCC!~6iMO48_bj>ce\ v%gPW =clc?t6vQ6a1_ʺys'HFB'駟.e?ܸ~h_D } )qՏ˭j1 şJ{圉5kB^ 'x6L}ak7'}Q^eSϢ% O3===^^^|饗n*++ ͪǏ_|7@_{=z:߃A|TɃG݇#ɫjqF  ƏrXFnŲ' "2k8[ynv!:<[G E/~# ׿## #((HjxGy/eRRNם;w>駟կ~{gy(M@RY5p}!e]F0b{%pʭlӆs QٵpUM߬locd蕊㺶Xi&W#~yi]E?*88GDDO80/""ǿoC[lTbᷝKf+))nQH1᷇t>b\ XeW\S'Ƨ+r&3X!9ƓӘܺ'u]>ǎĕPP Wҫ߃ŋ_"?D_BBsXdzmې\{qW^ 7ϛ9\؍zH8eXfRti|^=EO>&CCCf1Qضm'tYYR_iiid ]W^6gm,–Ϯ_5 ^S' &B+~Υ鹗c ǘ{&%vTnf~^IU±c8͈a|kVVpiiJ?)+06箍S^'Tg4|({޺KΉd772JF%8m )<i/+pi76=RWR60%J()QDL00%J(QD0%J(QSD% ` `J()QDL% `J())Qz8%JDpxTLTTT%J6@{`|4%J6Bs %J֙@ĢDf)QDL% `J())QD0%J()QD%J(Qib1v===&'?eL?HO6M(?moouN-&@ MNNKrrZ _~%uIg\VV?OzDO<Ė-[I^{ E;0S<55eOvuumAko߾¶m۠OL|3555>("""8MHH o8`"EFFaSO=޽{М_gp:goq[B07oҞ[oߺs4~ 6utt\UmMk  }aaaG{W5sa-Mݽ{Z~gPx7rQQQ&&&^#dBx,?8ݷowJ֥gx$5NӦܪj0AAr;zXctbvco⛾ES`ri cʞ]cD>wCxi5^~37h{TN@\n݃3g@mߵk2(:t}U3ϼXarvttHII{IJ\$.]4::J$666(((_e_%%%>|,,,l"=z?4={K@s%G}Y{9IpY)<w5]9gᗩ钴5 Su O,{_B)Ј\gY|'=~ːȬm¶vsfKYsZ~)MAٯ3I-jz o#F鉃weee_#X= < W/l+khx饗 o~5``#;'9teH>C☬NR< ~I ?^g' .>\RskpzzNE;-zF{G`=%u]3s p]cc0pvEcO/Wl*G=JidbAC~M;ji]9OΗw]g]0܉9؛:fw״A8>5&2_`);F7n58j˭oZ+%FP3∁InyuK_lN]yC7'Āh9bc@{p1犫(2nEU8N*iK0Keo]4C{bh)&  svpB(++U" WCCC >ɓ'q \UUvpp0Y:88કR#kWW F/JKK=~8l_Vriܹ&sӧ~Hაi6YO_6AwT5^д>c_u`6.P,sQ>Tw(ghyጱ&_˻ճgV鼎?Y (uV+N%hB`&myI?S 6[.qGpxb3?ჶهAS*@ţsY/EiA~I7`h|5TJ:]-\s7}"bJs5&7{]*WoQ>Z~hSb>bUrM>iPXΚ2~Dx^!K8a~kys282 j:,0VW*jp]bDP=2[8566)Q())FDرS!¸ ` N9W9Ɂ; 'N =A5絺FIe#,஁&c Dج랼_(O H~ ˠlXM};5H䭣MʦRsDfQ%bɔ'R8T]^5>I;) %?yB? #} X7va@ {$4YpH}tޝXYKm?4Д1)ڦBjP+Mmj"h.@&*F FPee@ , 0,1 ξ"kM֢cg바 2!;y74kφ$&K / F>7/yމsV9tƱ@Hچc'-%?>4?Z͏28ohp1ǧGc#aBɫpeee(ذ>o%͍P]Ḳ>Gs-pO^{-Ax0K)b*4jFxРA˗/g p: >Liꦇo{e1y NCGcgÒ ׂe`!0Bw /$&-c¼ssۆϝf܌X %$g`OQ4Ң<SS7ctBJk9sރ^%t |a)!5Xe-<zlh1aXWeooTQ:]2>K4ĩff1o5/ጄg]-T9N9Pv| r2T:"ה_O̴p'zsMնn?xhķpmgkӄ-XYؘ}nZXa )qfDJVv=0CZZn Bj,&)%fjVFbxԙhQ}-S[3d}yg{՗pr{ Do,/!/- %S0Q[D=hO- 322)O0)MRvϞ= Fnv.]XrpEG}}=+~AFW1VP`bsuޖ r%JѠ}r"o;B ,C s8ש3Sy`,<5g-J*\*g/n [ٺw\>%C{m]uTcubu@~5&z蔕KUzrvE[Ŝ`,Je<ؤE+[S {) q5kve 5s LjX4uqO""g Qz6g>Om&oW&_>1,=, ~1b#Ud;P9=3l RD$&pwzZ!D*g] G'.E ~b]VVs.j/*(4Aξ1p5U (>f;R/UQQtoK%sN&0`CEz)1a΢B}:Yr,Ӆ)'2 j&yf"jQ8ˣK`\ѴɎƱȿ#񘐈=?z=W)Od T`F{ь3$(ρY9}ب.JLt:zP?ab7m=-lar^⁍}h!//6A@('\H{K;㧩2X:_kBVrKr,+y/+lݡM\2Vz2W7%|,DlKQwKwk>_l X6m6[n>Aٺ3Wݱkf@3m l]N^_XqӦbgf5\T.=#kims6oţi} t  ;z[AE=s@]Cf2boE}QU ۚ>*`]4.54xpKUzfVIIّ<6ەk TNzJkn*{|Ϟ9llPD7W\D8zl9s?~rM+p`rGÛ6W6VԖT74SSSRΚAN,,wVwmgCWt^FUׅbvrXPlζӨk;"Ե,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` Xp7|*` LgƢSVĩ3k X4M:G4e0',S$n!IENDB`davical-1.1.1/docs/website/wikiheader.css0000644000000000000000000000216310705234304015223 0ustar #logo { height: 80px; width: 99.9%; background: url(images/logo.gif) #bb1f1f no-repeat center left; margin-left: 0px; margin-top: 0px; border-bottom: #d2d2d2 solid 5px; text-align: right; margin-bottom: 5px; font-family: helvetica, arial, serif; font-weight: normal; font-size: 1em; color: #FFFFFF; display:block; } #title { float: left; color: #FFFFFF; padding-left: 100px; margin-top: 10px; font-size: 190%; } #subTitle { float: left; clear: left; color: #FFFFFF; padding-left: 102px; padding-top: 3px; margin-top: 5px; font-size: 75%; } #headerLinks { color: #FFFFFF; font-family: helvetica, arial, sans-serif; font-size: 65%; padding-top: 60px; padding-right: 5px; } #headerLinks .hlink { color: #FFFFFF; } #headerLinks .hlink:link { color: #FFFFFF; text-decoration: none; } #headerLinks .hlink:active { color: #FFFFFF; text-decoration: none; } #headerLinks .hlink:hover { color: #FFFFFF; text-decoration: underline; } #headerLinks .hlink:visited { color: #FFFFFF; } davical-1.1.1/docs/website/clients.php0000644000000000000000000000407011246135773014561 0ustar Interoperability

', $style, $style ); sort($clients); foreach( $clients AS $k => $v ) { if ( $v == "Interoperability" ) continue; if ( $v == "Other" ) continue; $style = (strcmp($client_page,$v) == 0 ? ' class="selected"' : '' ); printf( '', $style, $style, urlencode($v) ); if ( isset($icons[$v]) ) { printf( '%s
', urlencode($icons[$v]), urlencode($v) ); } echo "$v

\n"; } $style = ($client_page == "Other" ? ' class="selected"' : '' ); printf( 'Other

', $style, $style ); include("inc/page-middle.php"); include("clients/".$details[$client_page]); if ( isset($screenshots[$client_page]) ) { printf( '

', urlencode($screenshots[$client_page]) ); $tags_to_be_closed = "\n"; } include("inc/page-footer.php"); ?>davical-1.1.1/docs/website/inc/0000755000000000000000000000000011776303360013154 5ustar davical-1.1.1/docs/website/inc/page-footer.php0000644000000000000000000000111511633117640016067 0ustar davical-1.1.1/docs/website/inc/page-header.php0000644000000000000000000000254211633117640016026 0ustar DAViCal<?php if ( isset($title) ) { echo " - ". $title; } else { echo " CalDAV Server"; } ?>
\n"; if ( isset($two_panes) && $two_panes ) { $tags_to_be_closed .= $tags_to_be_closed; echo '
'; } ?>
davical-1.1.1/docs/website/inc/page-middle.php0000644000000000000000000000004310705234304016022 0ustar

davical-1.1.1/docs/website/installation.php0000644000000000000000000003164411773020024015613 0ustar

Before Starting

Debian Users

Ideally you will be running a recent Debian (or Ubuntu) release and will be able to add:

deb http://debian.mcmillan.net.nz/debian lenny awm

to your /etc/apt/sources.list. Once you have done that you can use apt-get or synaptic or some other equivalent package manager to fetch and install DAViCal and all the dependencies.

This repository is signed by Andrew McMillan's public key, which you can install so that you don't get asked for confirmation all the time:

sudo apt-key advanced --keyserver pgp.net.nz --recv-keys F6E0FA5CF0307507BB23A512EAFCFEBF8FEB8EBF

Skip to the "Database Setup" part if you have done that already.

Other Linux Users

Please write something up about your experiences in the Wiki, adding distribution specific notes to pages somewhere under here: http://wiki.davical.org/w/Installation_Stuff

RPM Packages of DAViCal

We have created RPM packages of DAViCal and libawl-php from the .deb packages using "alien". These are reported to work fine, so use them and then proceed to the Pre-requisites section below. If you would like to work with us to create native RPM packages please get in touch!

SuSE Linux

On SuSE Linux you may need to look in /var/lib/pgsql/data/ for the pg_hba.conf file.

Gentoo

Davical and the awl library ebuilds are available on the sunrise overlay. You'll have to add this overlay to your system:

emerge layman
layman -f -a sunrise
echo "source /usr/portage/local/layman/make.conf" >> /etc/make.conf

From there, you can keep the overlay in sync with the command:

layman -s sunrise

Davical can now be installed with a normal:

emerge davical

Slackware, BSD and the rest

You will need to download the latest versions of the DAViCal and awl packages from the sourceforge download page for DAViCal.

You will need to untar these. Preferably you will untar them from within the "/usr/share" directory and everything will be in it's expected location (well, except the docs, but it will at least be tidy and everything will be in one place).

We would like to hear from non-Debian users regarding things which might have been missed, or things you have learned about the system, so please write about your installation experiences on the Wiki, or post a message in the Sourceforge forums.

Non-Linux Users

We would really like to hear from you. As far as we can see there is no reason why this can't all work on FreeBSD, Microsoft Windows, VMS, Mac OS or whatever else, as long as the pre-requisites are able to be installed.

For Unix and unix-like operating systems the "Other Linux Users" instructions are likely to be reasonably close to what you need. For other systems everything will need some adjustment, and in particular some of the path name and shell expectations coded into the database creation scripts are likely to need love.

We're available to answer questions, anyway :-)

Pre-requisites

DAViCal depends on a number of things. Firstly, it depends on Andrew's Web Libraries (AWL) which is a set of useful PHP functions and objects written by Andrew McMillan over a number of years.

The following other software is also needed:

  • A webserver which can run PHP (however most of this documentation assumes Apache 2.2 or later)
  • PHP: 5.1 or greater
  • PostgreSQL: 8.1 or greater

The PostgreSQL database may be installed on a server other than the web server, and that kind of situation is recommended if you want to increase the security or scalability of your installation.

Since the CalDAV store takes over a significant amount of path hierarchy, it can be easier in it's own virtual host. If you want it to operate within the web root of some other application there are instructions on the Wiki about doing this, as well as other fancy tricks such as configuring URL rewriting in order to shorten the path.

Database Setup

Connecting to the Database

Before your database has been created, you should edit your pg_hba.conf file (in /etc/postgresql/8.x/main/pg_hba.conf on Debian or derivatives) in order to grant access to the database for the 'davical_dba' user that will be created to 'own' the database and tables, and also for the 'davical_app' user which will be created for the web application fo connect as.

In a simple installation, where you do not have untrusted users on your database server, and your database is on the same computer as the web server, the following lines (at the very top of the pg_hba.conf file) should be enough:

local   davical    davical_app   trust
local   davical    davical_dba   trust

This means that anyone on the local computer (including the web application) will have rights to connect to the DAViCal database as the 'davical_app' or 'davical_dba' user. It will not allow remote access, or access as any user other than 'davical_app' or 'davical_dba'.

If you want to connect to the database over TCP/IP from your webserver on '192.168.59.231' (e.g. rather than unix sockets which will only work for access from the local machine), the lines in the pg_hba.conf file should look something like:

host davical davical_app 192.168.59.231/32 trust
host davical davical_dba 192.168.59.231/32 trust

If you want greater security, or if you want to have the database on a different server, you should read the PostgreSQL documentation on pg_hba.conf for the version you are using.

Once you have changed the pg_hba.conf file you will need to reload or restart the PostgreSQL process for the change to come into effect.

Creating and Building the Database

To create the database itself, run the script:

dba/create-database.sh

Note that this script calls the AWL database scripts as part of itself and it expects them to be located in /usr/share/awl/dba which might be a reasonable place, but it might not be where you have put them.

This script expects to be running as a user who has rights to create a new database, so you may need to do this as the "postgres" user, for example:

su postgres -c /usr/share/davical/dba/create-database.sh

Apache Configuration

Relative to an existing DocumentRoot

You can create a symlink from an existing web root directory to the /usr/share/davical/htdocs directory, such as:

cd /my/apache/docroot
ln -s /usr/share/davical/htdocs davical
You will need to change your global PHP configuration to include the directory '/usr/share/awl/inc' in the 'include_path' setting, along with any other directories already needed by other applications. You will also need to ensure that 'magic_quotes_gpc' is off.

Using a Virtual Host

Your Apache instance needs to be configured for Virtual Hosts. If this is not already the case you may want to read some documentation about that, and you most likely will want to ensure that any existing site becomes the **default** virtual host, with DAViCal only being a single virtual host.

I use a Virtual Host stanza like this:

# Virtual Host def for Debian packaged DAViCal
<VirtualHost 123.4.56.78 >
  DocumentRoot /usr/share/davical/htdocs
  DirectoryIndex index.php index.html
  ServerName davical.example.net
  ServerAlias calendar.example.net
  Alias /images/ /usr/share/davical/htdocs/images/
  <Directory /usr/share/davical/htdocs/>
      AllowOverride None
      Order allow,deny
      Allow from all
  </Directory>
  AcceptPathInfo On
  #
  #  You probably don't need to enable any of these sorts of things other than in exceptional
  #  circumstances.  Apart from the include path (which DAViCal will discover if it is anywhere
  #  'normal') they are the default in newer PHP versions. 
  #
  # php_value include_path /usr/share/awl/inc
  # php_value magic_quotes_gpc 0
  # php_value register_globals 0
  # php_value error_reporting "E_ALL & ~E_NOTICE"
  # php_value default_charset "utf-8"
</VirtualHost>

Replace 123.4.56.78 with your own IP address, of course (you can use a name, but your webserver may fail on restart if DNS happens to be borked at that time).

The various paths and names need to be changed to reflect your own installation, although those are the recommended locations for the various pieces of the code (and are standard if you installed from a package.

Once your VHost is installed an working correctly, you should be able to browse to that address and see a page telling you that you need to configure DAViCal.

On Debian systems (or derivatives such as Ubuntu), when you are using Apache 2, you should put this definition in the /etc/apache2/sites-available directory and you can use the 'a2ensite' command to enable it.

DAViCal Configuration

The DAViCal configuration generally resides in /etc/davical/<domain>-conf.php and is a regular PHP file which sets (or overrides) some specific variables.

<?php
//  $c->domain_name = "calendar.example.net";
//  $c->sysabbr     = 'DAViCal';
//  $c->admin_email = 'admin@example.net';
//  $c->system_name = "Example DAViCal Server";
//  $c->enable_row_linking = true;

  $c->pg_connect[] = 'dbname=davical port=5432 user=davical_app';

See the wiki for the full list of DAViCal configuration settings.

Multiple values may be specified for the PostgreSQL connect string, so that you can (e.g.) use PGPool to cache the database connection but fall back to a raw database connection if it is not running.

You should set the 'domain_name' and 'admin_email' as they are used within the system for constructing URLs, and for notifying some kinds of events.

If you are in a non-English locale, you can set the default_locale configuration to one of the supported locales.

Supported Locales

At present the following locales are supported:

  • English
  • German / Deutsch
  • Spanish / Español
  • French / Français
  • Russian / Русский
  • Netherlands / Nederlands
  • Polish / Polski
  • Hungarian / Magyar
  • Japanese / 日本語
  • Italian / Italiano
  • Swedish / Svenska

If you want locale support you probably know more about configuring it than me, but at this stage it should be noted that all translations are UTF-8, and pages are served as UTF-8, so you will need to ensure that the UTF-8 versions of these locales are supported on your system.

Completed?

If all is going well you should now be able to browse to the admin pages and log in as 'admin' (the password is the bit after the '**' in the 'password' field of the 'usr' table so:

psql davical -c 'select username, password from usr;'

should show you a list. Note that once you change a password it won't be readable in this way - only the initial configuration leaves passwords readable like this for security reasons.

Check the '/setup.php' page in your installation and if everything is working then you should be ready to configure a client to use your new DAViCal installation, and the docs for that are elsewhere.

If you had to do something else that is not covered here, or if you have any other notes you want to add to help others through the installation process, please write something up about your experiences in the Wiki, including distribution specific notes, to pages somewhere under here: http://wiki.davical.org/w/Installation_Stuff

Upgrades

Whenever you upgrade the DAViCal application to a new version you will need to run dba/update-davical-database which will apply any pending database patches, as well as enabling new translations, loading database views and functions, and setting application permissions to database tables.

When the database is created all the tables are owned by a 'davical_dba' user which you will also want to add access for in your pg_hba.conf, although in that case you may want to set the user to have a password, since it has full control over the DAViCal database structure and content.

See http://wiki.davical.org/w/Update-davical-database for more information.

About DAViCal

DAViCal is a server for calendar sharing. It is an implementation of the CalDAV protocol which is designed for storing calendaring resources (in iCalendar format) on a remote shared server.

An increasing number of calendar clients support the maintenance of shared remote calendars through CalDAV including Mozilla Calendar (Sunbird/Lightning), Evolution, Mulberry, Chandler, and various other closed-source products such as Apple's iCal and iPhone.

Features

DAViCal:
  • is Free Software licensed under the General Public License.
  • uses an SQL database for storage of event data
  • supports backward-compatible access via WebDAV in read-only or read-write mode (not recommended)
  • is committed to inter-operation with the widest possible CalDAV client software.

DAViCal supports basic delegation of read/write access among calendar users, multiple users or clients reading and writing the same calendar entries over time, and scheduling of meetings with free/busy time displayed.

Overview of Installation and Use

Prerequisites

To install and use DAViCal you will need:
  • a PostgreSQL database server
  • a web server which can run PHP version 5

We use Debian GNU/Linux for this, but other people use various different versions of Linux, FreeBSD, Mac OSX and even Microsoft Windows. We definitely do not recommend using Windows for this unless you are completely hobbled by silly internal IT policies and have to do so.

Getting DAViCal and Installing DAViCal

You can download DAViCal from http://debian.mcmillan.net.nz/

Start looking on the DAViCal Installation Page for more places to download, and detailed instructions as to what to do when you have it.

There is a lot of information on the wiki about DAViCal configuration settings but in most cases the configuration will need very few of these settings.

Using DAViCal

Read here about how to configure various CalDAV Clients with DAViCal. There is also a page on the wiki which will sometimes have newer information.

Getting Help

Specifically: help on DAViCal!

The best place to go for help on DAViCal is the DAViCal Wiki.

If you can't find your answer there, then the IRC channel #davical on irc.oftc.net is a great next port of call. Many problems can be solved quickly with a short on-line chat.

Almost as good as the IRC channel is the DAViCal General Mailing List.

Other places to try include:
  • The sourceforge forums.
  • Googling your problem.

As a last resort, or in case your organisation likes that sort of thing, paid commercial support is available through the author's company Morphoss.

Credits

DAViCal CalDAV Server was conceived and written by Andrew McMillan.

Many people have contributed to DAViCal, through providing translations of the interface, reporting bugs and sending patches for things here and there. Some more notable contributors include:

  • Maxime Delorme (CSS, LDAP, French translations)
  • Andrew Ruthven (Various enhancements)
  • Rob Ostenson (LDAP & Scheduling contributions)
  • Leho Kraav (RSS feeds)

Contributing to DAViCal

DAViCal LogoWe welcome contributions from interested people. You don't need to be able to write code - there are lots of small tasks around the project that can be done. CalDAV server:

Here are some things you could do that will help us to concentrate on making DAViCal better:

  • writing documentation
  • helping people on IRC, on the mailing list or sf.net forums
  • translating the DAViCal interface to another language
  • managing the release process
  • reviewing and tidying the Wiki updates
  • writing and reviewing patches
  • designing future functionality
  • thinking of more interesting ways to contribute to DAViCal!
  • you could also
    something or Flattr this since paid work is my biggest distraction from free software.

Can you think of more?

Background

The CalDAV specification has been under development for a few years now, and at the same time we have seen increasing pressure from people and organisations in the open source world to provide a solution to their shared calendaring problems.

In evaluating the possibilities for shared calendaring, there are a number of possible approaches, but we have elected to follow the path of implementing CalDAV because we believe it is a good specification and that it will in due course gain client implementations and provide the richest user experience through those client implementations.

Goals

CalDAV is a client-server protocol specific to managing and reporting on collections of calendar resources.

As such, our intentions in developing this application are as follows:

  • Simplicity of Prerequisites
  • Simplicity of Setup
  • Simplicity of Operation
  • Web-based Administration

Simplicity of Prerequisites

We have chosen to write this in PHP because we believe that PHP is a widely available web scripting language.

We have chosen to use the Apache web server because it is also widely available. This is not necessarily a requirement, but no testing has been undertaken in other PHP environments to date.

We have chosen to use the PostgreSQL database, because it is a free, open-source database, which operates on a very wide set of operating environments, and which is fully ACID compliant.

Simplicity of Setup

For the greatest ease use you should consider installing DAViCal on the Debian GNU/Linux distribution from the readily available, signed packages.

We expect to increase the level of automation and simplicity for the Debian target release in particular, although other distributions might also become easier at the same time. We do expect slightly greater installation complexity in the first few releases as we come to understand the particular problems people experience.

Simplicity of Operation

In general DAViCal should not need significant maintenance to keep it operating.

Administrative functionality will be kept as simple as possible, within the target of supporting organisations of up to several hundred staff.

The server-side smarts in DAViCal are intended to be fairly minimal in order to support CalDAV only in a manner sufficient to inter-operate with clients, and with the focus primarily on the storage of calendar resources.

Web-based Administration

General administration of the system should be through a web-based application.

Calendars will not be made available in a web-based view in initial releases. It is unlikely that calendars will ever be maintainable through a web-based client, although the server should support the use of web-based client software which works using the CalDAV protocol.

Administration Functions

The administration of this application should be fairly simple. You can administer:

  • Principals (Users, Resources or Groups)
  • Membership of groups
  • Privileges granted by a principal or collection to another principal

There is no ability to view and / or maintain calendars or events from within this administrative interface.

To do that you will need to use a CalDAV capable calendaring application such as Evolution, Sunbird, Thunderbird (with the Lightning extension), Mulberry, Apple iCal, an iPhone or something else.

Users, Resources and Groups

These are the things which may have collections of calendar resources (i.e. calendars).

In the lists of principals you can click on any principal to see the full detail for that record.

The primary differences between the types of principal are as follows:

  • Users will probably have calendars, and are likely to also log on to the system.
  • Resources do have calendars, but they will not usually log on.
  • Groups provide an intermediate linking to minimise administration overhead. They might not have calendars, and they will not usually log on.

These differences are more conceptual than actual, however: in the DAV specification they are really all 'principals' and all equal.

Groups

Groups exist to simplify the maintenance of privileges. Rather than assigning a write privilege to each individual with write access, you can create a group with the members being the people needing write access, and assign the write privilege to that group.

In this way as people come and go you can maintain the members of the group and it is easier to see who has the desired level of access. If the needed level of access changes, you can change the grant to the individual group, rather than to each member of the group

Privileges

The basic DAV permissions are as follows:

read, write-properties, write-content, unlock, read-acl, read-current-user-privilege-set, write-acl, bind & unbind

There are also a couple of useful aggregates of those, which are:

  • write - aggregate of write-properties, write-content, bind & unbind
  • all - aggregate of all permissions

Since none of those covered publication of Free/Busy information, CalDAV introduced an additional read-free-busy

Unfortunately that didn't cover all of the possibilities of scheduling privileges, so the CalDAV Scheduling Extensions to WebDAV has added several further permissions:

schedule-deliver-invite, schedule-deliver-reply, schedule-query-freebusy, schedule-send-invite, schedule-send-reply, schedule-send-freebusy

Two more aggregate permissions are also added with this RFC:

  • CALDAV:schedule-deliver - CALDAV:schedule-deliver-invite, CALDAV:schedule-deliver-reply and CALDAV:schedule-query-freebusy
  • CALDAV:schedule-send - CALDAV:schedule-send-invite, CALDAV:schedule-send-reply and CALDAV:schedule-send-freebusy

That's all way too complicated, even if it does need to be there under the covers. Mostly you just need to know about read, write & free-busy

Some Examples

Several people administer a set of resources

Suppose you have some resources, R1, R2 and R3 and you want to centralise the booking of the resources through an administrative assistant, A1. When A1 is away you want to have a backup person, so you also want A2 to be able to do that.

In a case like this you should create an intermediate group "G" and make each of the people you want to be able to administer those resources members of that group.

Each of the resources should be set up to grant default privileges to everyone to see the full schedule (read privilege), and the resources should be set up to grant write (or possibly all) privileges to the group "G".

In this case you might only set up a single principal for the resources, and have multiple calendars, one for each resource.

A1  ==>> is a member of    ==> G
A2  ==>> is a member of    ==> G
R1  ==>> grants write privilege to ==> G
R2  ==>> grants write privilege to ==> G
R3  ==>> grants write privilege to ==> G
P1  is a different principal with no specifically granted privilege

P1 will be able to see all of the scheduled events for R1, R2 and R3, but will not be able to create, delete or modify them. A1 and A2 will be able to see, create and modify all the events.

An administrative assistant has full access to a managers calendar

In this case the manager will simply grant the desired specific privileges to their assistant.

A team wish to see each others calendars

In this case you should create a group "G", which all team members are members of, and each team member will grant whatever privileges they wish to that group.

P1  ==>> is a member of  ==> G
P1  ==>> grants read privilege to ==> G
P2  ==>> is a member of  ==> G
P2  ==>> grants read privilege to ==> G
P3  ==>> is a member of  ==> G
P3  ==>> grants write privilege to ==> G
P4  ==>> is a member of  ==> G
P4  ==>> grants read-free-busy privilege to ==> G

A team can modify each others calendars

Similar to above, you should create a group "G", which all team members are members of, and each team member will grant write privileges to that group.

P1  ==>> is a member of  ==> G
P1  ==>> grants write privilege to ==> G
P2  ==>> is a member of  ==> G
P2  ==>> grants write privilege to ==> G
P3  ==>> is a member of  ==> G
P3  ==>> grants write privilege to ==> G
P4  ==>> is a member of  ==> G
P4  ==>> grants write privilege to ==> G

Also see the Permissions page on the DAViCal Wiki: http://wiki.davical.org/w/Permissions.

Configuring Calendar Clients for DAViCal

The DAViCal client setup page on sourceforge has information on how to configure Evolution, Mozilla Calendar (Sunbird & Lightning) and Mulberry to use remotely hosted calendars.

The administrative interface has no facility for viewing or modifying calendar data.

Configuring DAViCal

If you can read this then things must be mostly working already.

The DAViCal installation page on sourceforge has some further information on how to install and configure this application.

image/svg+xml davical-1.1.1/docs/website/images/icon.png0000644000000000000000000000103511215140072015270 0ustar PNG  IHDR TgsRGB0PLTE !/0LLih؃㜞鹸bKGDH pHYs  tIME  AfIDAT(uK@B4iqm7AS6yWR\Wɵڢ绪 !}|#\ @ML?h O$Za'#}IZ6X%QVJ&ұ4Gtк..m@]ffc  $9RH~'"RRڏ"6u$DR.H`^̜Npbq uyMbiG ׭ůܼIENDB`davical-1.1.1/docs/website/images/logo.gif0000644000000000000000000000645310705234304015277 0ustar GIF89aZF! !    !"#$%&'()*+,-.-.011289=>=>DEKLSTYZcdijijڇه⛜䥦㥦׶    #"#"####%%&&((((''******--...-----////....1132221111116655::999988==>=>===<<>>>>==BBAADCHGGGGGFFJJHHHHLKNNMMLLLKKKNNOONNUTSSWWVVZZZYXWYY\\[[[[\[ZZZZ\[__^^babbaaddaa``hgggddcceeiijiiijjjjiijirrttrrwwvvuuyyxx{{xx{{ځׁ܆ۆ܈ۈوهو܌܋݌ۋًޒېߖݕݖޘᛛ➞墢ࠠ妥⣣䥥樨䦦⥥娨竫㨨䪪筭议箮孭谰簰鶵鵵贴궶鶶紴껻콽뽽!,ZFHP ($P>tQ@B!~ aISQ"H#2(qb̆yPaÞ4+$̣I̘$ßG=҄tPR}j\XtV.:*Ŏϰ -VuaWMt"rԲ]+v؜dX!n9v W-ǭPJLnجkp޼Xuqdozתa1m3l A=r}̎|._빭W-S9fEYQ zsj/CLGZœNIP+)UOvVԩ6xGMT"3$8_:{_M5gyD]ykr:"(5s<']KHSUFIУ:e %RI>T@V[XVGO΃rui%LOJCVp7<&O+Ck @Cn9h௾<(˰1_hFZ?Ro1vs1 Z t?@̬s%4UpXwl@[Zk-]s-q4>{ew$O[o׀omϙ(5 |wn M?s]:p9PΣs]Cٰq|S9h:߭Γ|W ,=E3= |ᠡ9'Ѳc@Yԓrykr9b̧W?n}4 ؃Ny$b]򌗃Nv.[ sCn}[cI`f> ~}b~ʊ3;rrHv`pҏ~!#r$Wܣ >f bxd2L4Ӕ93:RQ"'>2sT#M$"G9R<IpdL`39ͻ\eԕ Yh<9΄r2݁4U9@+QJ)(zOfbmG vJT%JD&(J'+}ST%+MjRoO8IҔ WUJw#gHUZ'X*9bhMkZ$M5M Wu|qUwl`U&G_{Ԕtec0+_3UE7Ċ 6ld?^ j[Z֕U!M-nKW Ԃ*-qq\JX.jֺMC83 `W [VJoV]:+Tod/\7}:^첷 ~KW?T k~W `麈3كֵpk_ Gv KX (~C4_(Ī=;Z7Ko _إ0+lS8A{ BNV&|2 L49G\ac9񐿛 "D~0_4m+eLX tLa@#YPFӬ48h4 nV|dC'n'hE;:XB,!X|F,Ko65)eH{Ɔu!=Ufacyvmh PkmCk{7jz:֠`Ѵ^{];m#T.7au'c}q;%v-'cpl*8cD%;@r<y]8J^^a<0:sWUVpЋNv4 CgC ;/@*:th oW/ހug{ڇC A剎 ~&(sgʛ~e_@G<`?wcgQ_-{> ~yث?zeGA./諿y[Ͻ/cԇ>իo7(>gADWxX}uGuh|}Xw'WgS DG{8{ԗ{!~yԷ'H{gyX'{X'؀7H{88ED70Xx({HuS(Q.y@'&?XׁZ(zGHxW}Aȅ0HwyP*~ )؀T88X؄ ;davical-1.1.1/docs/website/images/flattr-badge-large.png0000644000000000000000000000775511633117640020014 0ustar PNG  IHDR]&1g pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx[lTEszvMh(Pk)&ƻxI}LPy 5Ab R\ `H($E`T$RBRr)mڥKw\f|KvgM4|9YQTP3i}]}ap߰l~QT Xݰt߈U*nv9 ѠI$h,=wڷ b}!|H͏u23.u(H|DZnYb1V]%6hNgG^"c iH Ay~/P*j-*Y8}sNضLŦWNz:n 7 C骻S n}/CɽA^=( Y7 ('2bN*.=<}[MBE t'-ϣhvm<{~{Oi9?tDZ䲇Y:k%7}0Mnԙ/9_n!;,7醈 qOZf9!´]6o\j0ݱIG5DZ%X!c7QgzÒ"ah4R*AB iU}~3xyJaىTKZʡj뎪v²W ZXNj R`6n[OQQ^3d@/v"R ["\kyC-㷶oI,Ʋ SQ;IAm ?ܹ6֞+ YuZש@pGx_姶Fz(PdNDW2EC}9 `Tn,} w=7L:{Oyjq1btjXX;XB׵iw|oQeq[鍠@kѽM 4w@P"H3I Ft ?K<_9IENDB`davical-1.1.1/docs/website/images/paypal_donate_button.png0000644000000000000000000000203411633117640020564 0ustar PNG  IHDR\ 0sRGBPLTE$ &)! (!,#/&*!2% 505,1)C$nR!bS"~ p:0=2b#o!>9>5C8 H<JD$A9F<LF5D?ND#MIRL1OF3PH 6SKINE1VMGVPUTME[TeVL-I_XW]T0/yVMUbWPCXgb;0Sjb<7kh[E2ol_ioeFEwmbzpeN;OBoci\~thQNqkhWtg[NVCo`i^pedYXP_P~}uof{qi`cW_M_X{qb`pdjYeNykfTicwhqcm]vtfzmxozwxy}4tRNS@fbKGDH0IDATHǵSAQ+ed 5>\NFً\)VRjzg>߻ٝ]]׺?.3fO]NG?\Nw[˝d L~dzEĎ{MM0s"bzxBT&Qk4v";ڞ-vm ޙb ! g (Zghr5ÐmCOlmDeCZR,Qd & P3paY̅(XAJ6l3ԟ",]5]WFߔc "2 g$>IZl~FtEywd0iKaN>וy<-GDK/LaI 9D> :xTA9gXjVBk~ cNM忈T$!PoPj"S pV= Ȏ'\+ӜӮstx2g4]dq/]$\ܿ/_IENDB`davical-1.1.1/docs/website/images/larger.png0000644000000000000000000000626211215140072015623 0ustar PNG  IHDR1|sRGB0PLTE!!(JJnmه⟟軻מbKGDH #IDAThXMl+R.Zu ^[=yo{z(=hM ]'* QTpРT4?NtcGZ앳 % p8̇<~Ã GL{J|:YH_:)É$9L0'r}Ħ,c01C64Bbo)R8XeǞBsxL 0|Q|Wvݯ sSp0 U2ZQ7\E-|S*X;[P|1zb#`wo^Gg둸ׯƜ9eh/^fg8;ym_7^f´BZe)9`=n_oƦԁL/j*Uv1!oUwdb4?`{?Mܹ[㟖D?yBεv2?=?0%l=Z䰔?P]eݾ~(#7ע ;F;T U˺v;& ܋rV*Ӌo0` l9!:x$j` . .3 ]qHyA#Kx!PL,5~@)T?C/A$A S_f Z*: ou_-.Q*翼#fyPy"`@]8 8]\?ײGZBUK}y΀,Y]g͉ܶGP+t~/8?~s}@ jO0UA@Kx0pThv8+ F{#gpe sE mY)c8"Nþl5:CA" ׊LMPa08be;U+17]E P g71 הj έ - puC_7>-(~]kq9m`#iEȀhdH/vkse `nA-l>B>|ˆ'αn-J,!9/Tup.Öw; 1x4:*>o8ȑ ObJ^]*~5BHk&*yUҥNP+!]BU`^)ʋ D.n4u@k LʻWl;.d 㲌_*ᝎue0 NBIk[ž5R" 1-Y q+xd1o.@H&/Yulm]j 3(YZ2ÏYL(Xu옇$=*)΍ʢ۝GNT+~dVCPG`VY|Ra`~ĬcA.d0P;L eG,U)d=R!dkpI*U`#ԜV,n_vxu7=SP-GޱAPKdEUft"Uݎ%AM+_*bp`T@T%bQ2nz~r0z RoUw;49Yz=MkXqZT2EU'#q `vOo òB{BHx50Pv̕5g?@FGN Nv@CYwwd^*ᨭgS ]v~# VCJϏrE[ z+G]ع{N{("Rv)ءnhӨj+:ulY4w5(h "Ǯ5$5I/Q*2nj 2T&t´ţF߫`3 &L [ӁLX<UȀ(7eʅi)8^R! 5n9=pyk5BėF.$2< l?xAuU(V&H܄rhn45FΝnYx|ɵrAHKξç' d yn֛;ت0'Qmk`1Ym/㽎2_Ǟ|VrE&@}!u"&/%2cTͼ1u7"Cmӈo׹0y.Kd,oL \@T$tӆ]F0~b@bLfԒ h1'XZZNHA2palRݙoN~#1ɖ15:L:&̴z^)C.\daĆ) $Fa sƘDZG$&N4b__iŠa057 *eNL+ߊ6 o2iPK,I6?u&Iy{B-V/WM ͮ4 IENDB`davical-1.1.1/docs/website/images/davical_logo.ico0000644000000000000000000000137611362722272016774 0ustar  ( @UUUUUUUUUUuUUUUUUUUUUUUUUw7UUUUUUUUUUUUUqHwUUUUUUUUUUUUWrtUUUUUUUUUUUUWHwUUUUUUUUUUWWxwuUUUUUUUWxuUUUUUUUUWwUUUUUUUTEGuUUUUUWWWW(eUUUUUUWUpEUUUUWW2UHsxuUUUUWxeUUv4wEUUUUu7EUUEEHUUUUxwUUUUUxuUUUWUUUUUx0UUUUTUUUUUWHUUUWxEUUUUwuUUUWxUwUUUx`UUUUWhwEUwXuUUUUWhwuUUGUUUUUPXfUwQEUUUUUWxWUUUUUUUUUEuUUUUUUUUuUUUUUUUWw`UUUUUUUUUWVxUUUUUUUUUUTGpUUUUUUUUUUUUw`EUUUUUUUUUUUUwDUUUUUUUUUUUUUpUUUUUUUUUUUUUUUUUUUUUUUUU0pw10`  davical-1.1.1/zonedb/0000755000000000000000000000000011776303360011272 5ustar davical-1.1.1/zonedb/update-tzdata.sh0000755000000000000000000000124011712306545014373 0ustar #!/bin/sh wget --continue 'ftp://ftp.iana.org/tz/tz*.tar.gz' TZCODEFILE="`readlink tzcode-latest.tar.gz`" TZDATAFILE="`readlink tzdata-latest.tar.gz`" # if [ ! -f $TZCODEFILE ]; then ( wget --continue -O $TZCODEFILE 'ftp://ftp.iana.org/tz/'$TZCODEFILE rm -rf tzcode mkdir -p tzcode && cd tzcode && tar -xzf ../$TZCODEFILE ) # fi # if [ ! -f $TZDATAFILE ]; then ( wget --continue -O $TZDATAFILE 'ftp://ftp.iana.org/tz/'$TZDATAFILE rm -rf tzdata mkdir -p tzdata && cd tzdata && tar -xzf ../$TZDATAFILE ) # fi vzic --pure --olson-dir tzdata --output-dir vtimezones echo "Olson `echo $TZDATAFILE | cut -f1 -d.`" >vtimezones/primary-source davical-1.1.1/INSTALL0000644000000000000000000001653111633117640011044 0ustar Installation ============ Debian Users ------------ DAViCal is in Debian Sid so you should be able to simply: apt-get install davical Or synaptic or some other equivalent package manager to fetch and install DAViCal and all the dependencies. Skip to the "Database Setup" part if you have done that already. Gentoo Users ------------ DAVical is in the Sunrise overlay. You will have to add this overlay, following the instructions on http://overlays.gentoo.org/proj/sunrise. You can then use emerge to install DAVical and its dependencies. emerge davical Other Linux Users ----------------- You will need to download the latest versions of the davical and awl packages from the DAViCal site. See http://www.davical.org/ for more information. You will need to untar these. Preferably you will untar them from within the "/usr/share" directory and everything will be in it's expected location (well, except the docs, but it will at least be tidy and everything will be in one place). I would like to hear from non-Debian users regarding things I might have missed, or things you have learned about the system, so please tell us on IRC, or post to the mailing list or forums. Non-Linux Users --------------- I would really like to hear from you. As far as I can see there is no reason why this can't all work on FreeBSD, Microsoft Windows, VMS, Mac OS or whatever else, as long as the pre-requisites are able to be installed. For Unix and unix-like operating systems the "Other Linux Users" instructions are likely to be reasonably close to what you need. For other systems everything will need some adjustment, and in particular some of the path name and shell expectations coded into the database creation scripts are likely to need love. I'm available to answer questions, anyway :-) Getting Help ------------ The best place to get help is on IRC. The official DAViCal IRC channel is #davical on irc.oftc.net The starting point for further help should be the DAViCal website at http://www.davical.org/ and from there you might visit the wiki which contains a fair amount of information about configuring DAViCal in a variety of different circumstances. Pre-requisites ============== DAViCal depends on a number of things. Firstly, it depends on Andrew's Web Libraries (AWL) which is a set of useful PHP functions and objects written by Andrew McMillan over a number of years. The following other software is also needed: Apache: 1.3.x or 2.x.x PHP: 5.1 or greater (along with the PDO and PostgreSQL extensions) PostgreSQL: 8.2 or greater The PostgreSQL database may be installed on a server other than the web server, and that kind of situation is recommended if you want to increase the security or scalability of your installation. Since the CalDAV store takes over a significant amount of path hierarchy, it is designed to be installed in it's own virtual host. If you want it to operate within the web root of some other application I will happily accept patches to make it do that, but I am pretty sure it won't work that way out of the box. Several helper programs are needed to setup and upgrade davical: Perl with DBI and DBD-Pg Debian: aptitude install libdbi-perl libdbd-pg-perl Gentoo: emerge dev-perl/DBI dev-perl/DBD-Pg Yaml Debian: aptitude install libyaml-perl Gentoo: emerge dev-perl/yaml pwgen (not mandatory) Debian: aptitude install pwgen Gentoo: app-admin/pwgen Database Setup ============== On your database server you will need to create a user called 'general' which should not be able to create databases or users, and which will be granted minimum privileges for the application. To create the database itself, run the script: dba/create-database.sh Note that this script calls the AWL database scripts as part of itself and it expects them to be located in /usr/share/awl/dba which might be a reasonable place, but it might not be where you have put them. This script also expects to be running as a user who has rights to create a new database. Apache VHost Configuration ========================== Your Apache instance needs to be configured for Virtual Hosts. If this is not already the case you may want to read some documentation about that, and you most likely will want to ensure that any existing site becomes the **default** virtual host, with DAViCal only being a single virtual host. I use a Virtual Host stanza like this: # # Virtual Host def for Debian packaged DAViCal DocumentRoot /usr/share/davical/htdocs DirectoryIndex index.php index.html ServerName davical.example.net ServerAlias calendar.example.net Alias /images/ /usr/share/davical/htdocs/images/ php_value include_path /usr/share/davical/inc:/usr/share/awl/inc php_value magic_quotes_gpc 0 php_value register_globals 0 php_value error_reporting "E_ALL & ~E_NOTICE" php_value default_charset "utf-8" Replace 123.4.56.78 with your own IP address, of course (you can use a name, but your webserver may fail on restart if DNS happens to be borked at that time). At this point it is necessary to have register_globals enabled. All variables are sanitised before use, but some routines do assume this is turned on. The various paths and names need to be changed to reflect your own installation, although those are the recommended locations for the various pieces of the code (and are standard if you installed from a package. Once your VHost is installed an working correctly, you should be able to browse to that address and see a page telling you that you need to configure DAViCal. DAViCal Configuration ===================== The DAViCal configuration generally resides in /etc/davical/-conf.php and is a regular PHP file which sets (or overrides) some specific variables. domainname = "calendar.example.net"; // $c->sysabbr = 'davical'; // $c->admin_email = 'admin@example.net'; // $c->system_name = "DAViCal CalDAV Server"; // $c->collections_always_exist = false; $c->pg_connect[] = 'dbname=davical port=5432 user=general'; ?> Multiple values may be specified for the PostgreSQL connect string, so that you can (e.g.) use PGPool to cache the database connection but fall back to a raw database connection if it is not running. The "collections_always_exist" value defines whether a MKCALENDAR command is needed to create a calendar collection before calendar resources can be stored in it. You will want to leave this to the default (true) if people will be using Evolution or Sunbird / Lightning against this because that software does not support the creation of calendar collections. You should set the 'domainname' and 'admin_email' as they are used within the system for constructing URLs, and for notifying some kinds of events. Completed? ========== If all is going well you should now be able to browse to the admin pages and log in as 'admin' (the password is the bit after the '**' in the 'password' field of the 'usr' table so: psql davical -c 'select username, password from usr;' should show you a list. Note that once you change a password it won't be readable in this way - only the initial configuration leaves passwords readable like this for security reasons. If all is working then you should be ready to configure a client to use this, and the docs for that are elsewhere. See: http://wiki.davical.org/ Which is the place where documentation will generally be kept up to date the most.