$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