[CalendarServer-changes] [7700] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Thu Jun 30 20:15:59 PDT 2011


Revision: 7700
          http://trac.macosforge.org/projects/calendarserver/changeset/7700
Author:   cdaboo at apple.com
Date:     2011-06-30 20:15:59 -0700 (Thu, 30 Jun 2011)
Log Message:
-----------
Merge timezone branch: new timezone service, timezone by reference option. Both off by default.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tap/util.py
    CalendarServer/trunk/calendarserver/tools/export.py
    CalendarServer/trunk/twistedcaldav/__init__.py
    CalendarServer/trunk/twistedcaldav/caldavxml.py
    CalendarServer/trunk/twistedcaldav/extensions.py
    CalendarServer/trunk/twistedcaldav/ical.py
    CalendarServer/trunk/twistedcaldav/method/get.py
    CalendarServer/trunk/twistedcaldav/method/put_common.py
    CalendarServer/trunk/twistedcaldav/stdconfig.py
    CalendarServer/trunk/twistedcaldav/timezones.py
    CalendarServer/trunk/twistedcaldav/xmlutil.py

Added Paths:
-----------
    CalendarServer/trunk/bin/calendarserver_manage_timezones
    CalendarServer/trunk/calendarserver/tools/managetimezones.py
    CalendarServer/trunk/twistedcaldav/client/geturl.py
    CalendarServer/trunk/twistedcaldav/test/test_timezonestdservice.py
    CalendarServer/trunk/twistedcaldav/timezonestdservice.py
    CalendarServer/trunk/twistedcaldav/timezonexml.py
    CalendarServer/trunk/twistedcaldav/zoneinfo/links.txt
    CalendarServer/trunk/twistedcaldav/zoneinfo/timezones.xml

Property Changed:
----------------
    CalendarServer/trunk/
    CalendarServer/trunk/support/build.sh
    CalendarServer/trunk/txdav/caldav/datastore/index_file.py
    CalendarServer/trunk/txdav/caldav/datastore/test/test_index_file.py
    CalendarServer/trunk/txdav/carddav/datastore/index_file.py
    CalendarServer/trunk/txdav/carddav/datastore/test/test_index_file.py


Property changes on: CalendarServer/trunk
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/config-separation:4379-4443
/CalendarServer/branches/egg-info-351:4589-4625
/CalendarServer/branches/generic-sqlstore:6167-6191
/CalendarServer/branches/new-store:5594-5934
/CalendarServer/branches/new-store-no-caldavfile:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2:5936-5981
/CalendarServer/branches/users/cdaboo/batchupload-6699:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
/CalendarServer/branches/users/cdaboo/pods:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar:7085-7206
/CalendarServer/branches/users/cdaboo/pycard:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
/CalendarServer/branches/users/glyph/conn-limit:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge:4971-5080
/CalendarServer/branches/users/glyph/dalify:6932-7023
/CalendarServer/branches/users/glyph/db-reconnect:6824-6876
/CalendarServer/branches/users/glyph/deploybuild:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres:6592-6614
/CalendarServer/branches/users/glyph/linux-tests:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
/CalendarServer/branches/users/glyph/new-export:7444-7485
/CalendarServer/branches/users/glyph/oracle:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls:7340-7351
/CalendarServer/branches/users/glyph/quota:7604-7637
/CalendarServer/branches/users/glyph/sendfdport:5388-5424
/CalendarServer/branches/users/glyph/sharedpool:6490-6550
/CalendarServer/branches/users/glyph/sql-store:5929-6073
/CalendarServer/branches/users/glyph/subtransactions:7248-7258
/CalendarServer/branches/users/glyph/uidexport:7673-7676
/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
/CalendarServer/branches/users/sagen/inboxitems:7380-7381
/CalendarServer/branches/users/sagen/locations-resources:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2:5052-5061
/CalendarServer/branches/users/sagen/purge_old_events:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/branches/users/sagen/resources-2:5084-5093
/CalendarServer/branches/users/wsanchez/transations:5515-5593
   + /CalendarServer/branches/config-separation:4379-4443
/CalendarServer/branches/egg-info-351:4589-4625
/CalendarServer/branches/generic-sqlstore:6167-6191
/CalendarServer/branches/new-store:5594-5934
/CalendarServer/branches/new-store-no-caldavfile:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2:5936-5981
/CalendarServer/branches/users/cdaboo/batchupload-6699:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
/CalendarServer/branches/users/cdaboo/pods:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar:7085-7206
/CalendarServer/branches/users/cdaboo/pycard:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
/CalendarServer/branches/users/cdaboo/timezones:7443-7699
/CalendarServer/branches/users/glyph/conn-limit:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge:4971-5080
/CalendarServer/branches/users/glyph/dalify:6932-7023
/CalendarServer/branches/users/glyph/db-reconnect:6824-6876
/CalendarServer/branches/users/glyph/deploybuild:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres:6592-6614
/CalendarServer/branches/users/glyph/linux-tests:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
/CalendarServer/branches/users/glyph/new-export:7444-7485
/CalendarServer/branches/users/glyph/oracle:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls:7340-7351
/CalendarServer/branches/users/glyph/quota:7604-7637
/CalendarServer/branches/users/glyph/sendfdport:5388-5424
/CalendarServer/branches/users/glyph/sharedpool:6490-6550
/CalendarServer/branches/users/glyph/sql-store:5929-6073
/CalendarServer/branches/users/glyph/subtransactions:7248-7258
/CalendarServer/branches/users/glyph/uidexport:7673-7676
/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
/CalendarServer/branches/users/sagen/inboxitems:7380-7381
/CalendarServer/branches/users/sagen/locations-resources:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2:5052-5061
/CalendarServer/branches/users/sagen/purge_old_events:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/branches/users/sagen/resources-2:5084-5093
/CalendarServer/branches/users/wsanchez/transations:5515-5593

Copied: CalendarServer/trunk/bin/calendarserver_manage_timezones (from rev 7699, CalendarServer/branches/users/cdaboo/timezones/bin/calendarserver_manage_timezones)
===================================================================
--- CalendarServer/trunk/bin/calendarserver_manage_timezones	                        (rev 0)
+++ CalendarServer/trunk/bin/calendarserver_manage_timezones	2011-07-01 03:15:59 UTC (rev 7700)
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+##
+# Copyright (c) 2011 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+import sys
+
+#PYTHONPATH
+
+if __name__ == "__main__":
+
+    if "PYTHONPATH" in globals():
+        sys.path.insert(0, PYTHONPATH)
+    else:
+        from os.path import dirname, abspath, join
+        from subprocess import Popen, PIPE
+
+        home = dirname(dirname(abspath(__file__)))
+        run = join(home, "run")
+
+        child = Popen((run, "-p"), stdout=PIPE)
+        path, _ignore_stderr = child.communicate()
+
+        path = path.rstrip("\n")
+
+        if child.wait() == 0:
+            sys.path[0:0] = path.split(":")
+
+    from calendarserver.tools.managetimezones import main
+    main()

Modified: CalendarServer/trunk/calendarserver/tap/util.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/util.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/calendarserver/tap/util.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -1,6 +1,6 @@
 # -*- test-case-name: calendarserver.tap.test.test_caldav -*-
 ##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -61,6 +61,7 @@
 from twistedcaldav.simpleresource import SimpleResource
 from twistedcaldav.timezones import TimezoneCache
 from twistedcaldav.timezoneservice import TimezoneServiceResource
+from twistedcaldav.timezonestdservice import TimezoneStdServiceResource
 from twistedcaldav.util import getMemorySize, getNCPU
 
 try:
@@ -331,13 +332,14 @@
     #
     # Default resource classes
     #
-    rootResourceClass            = RootResource
-    calendarResourceClass        = DirectoryCalendarHomeProvisioningResource
-    iScheduleResourceClass       = IScheduleInboxResource
-    timezoneServiceResourceClass = TimezoneServiceResource
-    webCalendarResourceClass     = WebCalendarResource
-    webAdminResourceClass        = WebAdminResource
-    addressBookResourceClass     = DirectoryAddressBookHomeProvisioningResource
+    rootResourceClass               = RootResource
+    calendarResourceClass           = DirectoryCalendarHomeProvisioningResource
+    iScheduleResourceClass          = IScheduleInboxResource
+    timezoneServiceResourceClass    = TimezoneServiceResource
+    timezoneStdServiceResourceClass = TimezoneStdServiceResource
+    webCalendarResourceClass        = WebCalendarResource
+    webAdminResourceClass           = WebAdminResource
+    addressBookResourceClass        = DirectoryAddressBookHomeProvisioningResource
     directoryBackedAddressBookResourceClass = DirectoryBackedAddressBookResource
 
     directory = directoryFromConfig(config)
@@ -486,9 +488,10 @@
             defaultACL=SimpleResource.allReadACL
         )
         root.putChild(".well-known", wellKnownResource)
-        for enabled, wellknown_name in (
-            (config.EnableCalDAV, "caldav",),
-            (config.EnableCardDAV, "carddav"),
+        for enabled, wellknown_name, redirected_to in (
+            (config.EnableCalDAV, "caldav", "/",),
+            (config.EnableCardDAV, "carddav", "/",),
+            (config.TimezoneService.Enabled, "timezone", "/stdtimezones",),
         ):
             if enabled:
                 if config.EnableSSL:
@@ -497,8 +500,10 @@
                 else:
                     scheme = "http"
                     port = config.HTTPPort
-                wellKnownResource.putChild(wellknown_name, RedirectResource(
-                    scheme=scheme, port=port, path="/"))
+                wellKnownResource.putChild(
+                    wellknown_name,
+                    RedirectResource(scheme=scheme, port=port, path=redirected_to)
+                )
 
     for name, info in config.Aliases.iteritems():
         if os.path.sep in name or not info.get("path", None):
@@ -518,6 +523,22 @@
         )
         root.putChild("timezones", timezoneService)
 
+    # Standard Timezone service is optional
+    if config.TimezoneService.Enabled:
+        log.info("Setting up standard time zone service resource: %r"
+                      % (timezoneStdServiceResourceClass,))
+
+        timezoneStdService = timezoneStdServiceResourceClass(
+            root,
+        )
+        root.putChild("stdtimezones", timezoneStdService)
+        
+        # TODO: we only want the master to do this
+        if _reactor._started:
+            _reactor.callLater(0, timezoneStdService.onStartup)
+        else:
+            addSystemEventTrigger("after", "startup", timezoneStdService.onStartup)
+
     # iSchedule service is optional
     if config.Scheduling.iSchedule.Enabled:
         log.info("Setting up iSchedule inbox resource: %r"

Modified: CalendarServer/trunk/calendarserver/tools/export.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/export.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/calendarserver/tools/export.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -274,7 +274,7 @@
                     # when we serialize the whole calendar.
                     comp.addComponent(sub)
 
-    fileobj.write(comp.getText())
+    fileobj.write(comp.getTextWithTimezones(True))
 
 
 

Copied: CalendarServer/trunk/calendarserver/tools/managetimezones.py (from rev 7699, CalendarServer/branches/users/cdaboo/timezones/calendarserver/tools/managetimezones.py)
===================================================================
--- CalendarServer/trunk/calendarserver/tools/managetimezones.py	                        (rev 0)
+++ CalendarServer/trunk/calendarserver/tools/managetimezones.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -0,0 +1,236 @@
+#!/usr/bin/env python
+##
+# Copyright (c) 2011 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+from twistedcaldav.timezonestdservice import PrimaryTimezoneDatabase,\
+    SecondaryTimezoneDatabase
+from sys import stdout, stderr
+import getopt
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks
+from twisted.python.log import addObserver, removeObserver
+import sys
+import os
+
+def _doPrimaryActions(action, tzpath, xmlfile, changed):
+
+    tzdb = PrimaryTimezoneDatabase(tzpath, xmlfile)
+    if action == "create":
+        print "Creating new XML file at: %s" % (xmlfile, )
+        tzdb.createNewDatabase()
+        print "Current total: %d" % (len(tzdb.timezones), )
+
+    elif action == "update":
+        print "Updating XML file at: %s" % (xmlfile, )
+        tzdb.readDatabase()
+        tzdb.updateDatabase()
+        print "Current total: %d" % (len(tzdb.timezones), )
+        print "Total Changed: %d" % (tzdb.changeCount, )
+        if tzdb.changeCount:
+            print "Changed:"
+            for k in sorted(tzdb.changed):
+                print "  %s" % (k, )
+    
+    elif action == "list":
+        print "Listing XML file at: %s" % (xmlfile, )
+        tzdb.readDatabase()
+        print "Current timestamp: %s" % (tzdb.dtstamp, )
+        print "Timezones:"
+        for k in sorted(tzdb.timezones.keys()):
+            print "  %s" % (k, )
+    
+    elif action == "changed":
+        print "Changes from XML file at: %s" % (xmlfile, )
+        tzdb.readDatabase()
+        print "Check timestamp: %s" % (changed, )
+        print "Current timestamp: %s" % (tzdb.dtstamp, )
+        results = [k for k, v in tzdb.timezones.items() if v.dtstamp > changed]
+        print "Total Changed: %d" % (len(results), )
+        if results:
+            print "Changed:"
+            for k in sorted(results):
+                print "  %s" % (k, )
+    else:
+        usage("Invalid action: %s" % (action, ))
+
+class StandardIOObserver (object):
+    """
+    Log observer that writes to standard I/O.
+    """
+    def emit(self, eventDict):
+        text = None
+
+        if eventDict["isError"]:
+            output = stderr
+            if "failure" in eventDict:
+                text = eventDict["failure"].getTraceback()
+        else:
+            output = stdout
+
+        if not text:
+            text = " ".join([str(m) for m in eventDict["message"]]) + "\n"
+
+        output.write(text)
+        output.flush()
+
+    def start(self):
+        addObserver(self.emit)
+
+    def stop(self):
+        removeObserver(self.emit)
+
+ at inlineCallbacks
+def _runInReactor(tzdb):
+    
+    try:
+        new, changed = yield tzdb.syncWithServer()
+        print "New:           %d" % (new, )
+        print "Changed:       %d" % (changed, )
+        print "Current total: %d" % (len(tzdb.timezones), )
+    except Exception, e:
+        print "Could not sync with server: %s" % (str(e),)
+    finally:
+        reactor.stop()
+
+def _doSecondaryActions(action, tzpath, xmlfile, url):
+
+    tzdb = SecondaryTimezoneDatabase(tzpath, xmlfile, url)
+    try:
+        tzdb.readDatabase()
+    except:
+        pass
+    if action == "cache":
+        print "Caching from secondary server: %s" % (url, )
+
+        observer = StandardIOObserver()
+        observer.start()
+        reactor.callLater(0, _runInReactor, tzdb)
+        reactor.run()
+    else:
+        usage("Invalid action: %s" % (action, ))
+
+def usage(error_msg=None):
+    if error_msg:
+        print error_msg
+        print
+
+    print """Usage: timezonestdservice [options]
+Options:
+    -h            Print this help and exit
+    -f            XML file path
+    -z            zoneinfo file path
+
+    # Primary service
+    --create      create new XML file
+    --update      update XML file
+    --list        list timezones in XML file
+    --changed     changed since timestamp
+    
+    # Secondary service
+    --url         URL or domain of service
+    --cache       Cache data from service
+
+Description:
+    This utility will create, update or list an XML timezone database
+    summary file.
+
+"""
+
+    if error_msg:
+        raise ValueError(error_msg)
+    else:
+        sys.exit(0)
+
+def main():
+    primary = False
+    secondary = False
+    action = None
+    tzpath = None
+    xmlfile = None
+    changed = None
+    url = None
+    
+    # Get options
+    options, _ignore_args = getopt.getopt(
+        sys.argv[1:],
+        "hf:z:",
+        [
+            "create",
+            "update",
+            "list",
+            "changed=",
+            "url=",
+            "cache",
+        ]
+    )
+
+    for option, value in options:
+        if option == "-h":
+            usage()
+        elif option == "-f":
+            xmlfile = value
+        elif option == "-z":
+            tzpath = value
+        elif option == "--create":
+            action = "create"
+            primary = True
+        elif option == "--update":
+            action = "update"
+            primary = True
+        elif option == "--list":
+            action = "list"
+            primary = True
+        elif option == "--changed":
+            action = "changed"
+            primary = True
+            changed = value
+        elif option == "--url":
+            url = value
+            secondary = True
+        elif option == "--cache":
+            action = "cache"
+            secondary = True
+        else:
+            usage("Unrecognized option: %s" % (option,))
+    
+    if action is None:
+        action = "list"
+        primary = True
+    if tzpath is None:
+        try:
+            import pkg_resources
+        except ImportError:
+            tzpath = os.path.join(os.path.dirname(__file__), "zoneinfo")
+        else:
+            tzpath = pkg_resources.resource_filename("twistedcaldav", "zoneinfo") #@UndefinedVariable
+    if xmlfile is None:
+        xmlfile = os.path.join(tzpath, "timezones.xml")
+
+    if primary and not os.path.isdir(tzpath):
+        usage("Invalid zoneinfo path: %s" % (tzpath,))
+    if primary and not os.path.isfile(xmlfile) and action != "create":
+        usage("Invalid XML file path: %s" % (xmlfile,))
+
+    if primary and secondary:
+        usage("Cannot use primary and secondary options together")
+
+    if primary:
+        _doPrimaryActions(action, tzpath, xmlfile, changed)
+    else:
+        _doSecondaryActions(action, tzpath, xmlfile, url)
+
+if __name__ == '__main__':
+    main()


Property changes on: CalendarServer/trunk/support/build.sh
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/config-separation/support/build.sh:4379-4443
/CalendarServer/branches/egg-info-351/support/build.sh:4589-4615
/CalendarServer/branches/generic-sqlstore/support/build.sh:6167-6191
/CalendarServer/branches/new-store/support/build.sh:5594-5934
/CalendarServer/branches/new-store-no-caldavfile/support/build.sh:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2/support/build.sh:5936-5981
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/support/build.sh:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/support/build.sh:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/support/build.sh:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/support/build.sh:4465-4957
/CalendarServer/branches/users/cdaboo/pods/support/build.sh:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/support/build.sh:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/support/build.sh:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/support/build.sh:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/support/build.sh:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/support/build.sh:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/support/build.sh:4971-5080
/CalendarServer/branches/users/glyph/dalify/support/build.sh:6932-7023
/CalendarServer/branches/users/glyph/db-reconnect/support/build.sh:6824-6876
/CalendarServer/branches/users/glyph/deploybuild/support/build.sh:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/support/build.sh:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/support/build.sh:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/support/build.sh:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/support/build.sh:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7/support/build.sh:6369-6445
/CalendarServer/branches/users/glyph/new-export/support/build.sh:7444-7485
/CalendarServer/branches/users/glyph/oracle-nulls/support/build.sh:7340-7351
/CalendarServer/branches/users/glyph/sendfdport/support/build.sh:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/support/build.sh:6490-6550
/CalendarServer/branches/users/glyph/sql-store/support/build.sh:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/support/build.sh:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/support/build.sh:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/support/build.sh:7380-7381
/CalendarServer/branches/users/sagen/locations-resources/support/build.sh:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2/support/build.sh:5052-5061
/CalendarServer/branches/users/sagen/purge_old_events/support/build.sh:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/support/build.sh:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/support/build.sh:4068-4075
/CalendarServer/branches/users/sagen/resources-2/support/build.sh:5084-5093
/CalendarServer/branches/users/wsanchez/transations/support/build.sh:5515-5593
   + /CalendarServer/branches/config-separation/support/build.sh:4379-4443
/CalendarServer/branches/egg-info-351/support/build.sh:4589-4615
/CalendarServer/branches/generic-sqlstore/support/build.sh:6167-6191
/CalendarServer/branches/new-store-no-caldavfile-2/support/build.sh:5936-5981
/CalendarServer/branches/new-store-no-caldavfile/support/build.sh:5911-5935
/CalendarServer/branches/new-store/support/build.sh:5594-5934
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/support/build.sh:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/support/build.sh:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/support/build.sh:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/support/build.sh:4465-4957
/CalendarServer/branches/users/cdaboo/pods/support/build.sh:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/support/build.sh:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/support/build.sh:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/support/build.sh:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/support/build.sh:5188-5440
/CalendarServer/branches/users/cdaboo/timezones/support/build.sh:7443-7699
/CalendarServer/branches/users/glyph/conn-limit/support/build.sh:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/support/build.sh:4971-5080
/CalendarServer/branches/users/glyph/dalify/support/build.sh:6932-7023
/CalendarServer/branches/users/glyph/db-reconnect/support/build.sh:6824-6876
/CalendarServer/branches/users/glyph/deploybuild/support/build.sh:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/support/build.sh:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/support/build.sh:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/support/build.sh:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/support/build.sh:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7/support/build.sh:6369-6445
/CalendarServer/branches/users/glyph/new-export/support/build.sh:7444-7485
/CalendarServer/branches/users/glyph/oracle-nulls/support/build.sh:7340-7351
/CalendarServer/branches/users/glyph/sendfdport/support/build.sh:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/support/build.sh:6490-6550
/CalendarServer/branches/users/glyph/sql-store/support/build.sh:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/support/build.sh:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/support/build.sh:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/support/build.sh:7380-7381
/CalendarServer/branches/users/sagen/locations-resources-2/support/build.sh:5052-5061
/CalendarServer/branches/users/sagen/locations-resources/support/build.sh:5032-5051
/CalendarServer/branches/users/sagen/purge_old_events/support/build.sh:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/support/build.sh:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/support/build.sh:4068-4075
/CalendarServer/branches/users/sagen/resources-2/support/build.sh:5084-5093
/CalendarServer/branches/users/wsanchez/transations/support/build.sh:5515-5593

Modified: CalendarServer/trunk/twistedcaldav/__init__.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/__init__.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/twistedcaldav/__init__.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav -*-
 ##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -57,3 +57,5 @@
     "Schedule-Tag": (str, singleHeader),
 })
 
+from pycalendar.calendar import PyCalendar
+PyCalendar.setPRODID("-//CALENDARSERVER.ORG//NONSGML Version 1//EN")

Modified: CalendarServer/trunk/twistedcaldav/caldavxml.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/caldavxml.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/twistedcaldav/caldavxml.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -31,6 +31,7 @@
 
 from twext.python.log import Logger
 
+from twistedcaldav.config import config
 from twistedcaldav.ical import Component as iComponent
 
 log = Logger()
@@ -334,7 +335,7 @@
             return clazz(davxml.PCDATAElement(calendar))
         elif isinstance(calendar, iComponent):
             assert calendar.name() == "VCALENDAR", "Not a calendar: %r" % (calendar,)
-            return clazz(davxml.PCDATAElement(str(calendar)))
+            return clazz(davxml.PCDATAElement(calendar.getTextWithTimezones(includeTimezones=not config.EnableTimezonesByReference)))
         else:
             raise ValueError("Not a calendar: %s" % (calendar,))
 

Copied: CalendarServer/trunk/twistedcaldav/client/geturl.py (from rev 7699, CalendarServer/branches/users/cdaboo/timezones/twistedcaldav/client/geturl.py)
===================================================================
--- CalendarServer/trunk/twistedcaldav/client/geturl.py	                        (rev 0)
+++ CalendarServer/trunk/twistedcaldav/client/geturl.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -0,0 +1,111 @@
+##
+# Copyright (c) 2011 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+from twext.python.log import Logger
+
+from twisted.internet import reactor, protocol
+from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
+from twisted.web import http_headers
+from twisted.web.client import Agent
+from twisted.web.http import MOVED_PERMANENTLY, TEMPORARY_REDIRECT, FOUND
+
+from urlparse import urlparse
+from urlparse import urlunparse
+
+__all__ = [
+    "getURL",
+]
+
+log = Logger()
+
+class AccumulatingProtocol(protocol.Protocol):
+    """
+    L{AccumulatingProtocol} is an L{IProtocol} implementation which collects
+    the data delivered to it and can fire a Deferred when it is connected or
+    disconnected.
+
+    @ivar made: A flag indicating whether C{connectionMade} has been called.
+    @ivar data: A string giving all the data passed to C{dataReceived}.
+    @ivar closed: A flag indicated whether C{connectionLost} has been called.
+    @ivar closedReason: The value of the I{reason} parameter passed to
+        C{connectionLost}.
+    @ivar closedDeferred: If set to a L{Deferred}, this will be fired when
+        C{connectionLost} is called.
+    """
+    made = closed = 0
+    closedReason = None
+
+    closedDeferred = None
+
+    data = ""
+
+    factory = None
+
+    def connectionMade(self):
+        self.made = 1
+        if (self.factory is not None and
+            self.factory.protocolConnectionMade is not None):
+            d = self.factory.protocolConnectionMade
+            self.factory.protocolConnectionMade = None
+            d.callback(self)
+
+    def dataReceived(self, data):
+        self.data += data
+
+    def connectionLost(self, reason):
+        self.closed = 1
+        self.closedReason = reason
+        if self.closedDeferred is not None:
+            d, self.closedDeferred = self.closedDeferred, None
+            d.callback(None)
+
+ at inlineCallbacks
+def getURL(url, method="GET", redirect=0):
+
+    agent = Agent(reactor)
+    headers = http_headers.Headers({})
+    
+    try:
+        response = (yield agent.request(method, url, headers, None))
+    except Exception, e:
+        log.err(str(e))
+        response = None
+    else:
+        if response.code in (MOVED_PERMANENTLY, FOUND, TEMPORARY_REDIRECT,):
+            if redirect > 3:
+                log.err("Too many redirects")
+            else:
+                location = response.headers.getRawHeaders("location")
+                if location:
+                    newresponse = (yield getURL(location[0], method=method, redirect=redirect+1))
+                    if response.code == MOVED_PERMANENTLY:
+                        scheme, netloc, url, _ignore_params, _ignore_query, _ignore_fragment = urlparse(location[0])
+                        newresponse.location = urlunparse((scheme, netloc, url, None, None, None,))
+                    returnValue(newresponse)
+                else:
+                    log.err("Redirect without a Location header")
+    
+    if response is not None and response.code / 100 == 2:
+        protocol = AccumulatingProtocol()
+        response.deliverBody(protocol)
+        whenFinished = protocol.closedDeferred = Deferred()
+        yield whenFinished
+        response.data = protocol.data
+    else:
+        log.error("Failed getURL: %s" % (url,))
+        
+    returnValue(response)
+

Modified: CalendarServer/trunk/twistedcaldav/extensions.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/extensions.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/twistedcaldav/extensions.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -639,8 +639,9 @@
             lastModified = child.lastModified()
             rtypes = []
             fullrtype = child.resourceType()
-            for rtype in fullrtype.children:
-                rtypes.append(rtype.name)
+            if fullrtype is not None:
+                for rtype in fullrtype.children:
+                    rtypes.append(rtype.name)
             if rtypes:
                 rtypes = "(%s)" % (", ".join(rtypes),)
             if child.isCollection():

Modified: CalendarServer/trunk/twistedcaldav/ical.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/ical.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/twistedcaldav/ical.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -38,9 +38,11 @@
 from twext.web2.stream import IStream
 from twext.web2.dav.util import allDataFromStream
 
+from twistedcaldav.config import config
 from twistedcaldav.dateops import timeRangesOverlap, normalizeForIndex, differenceDateTime
 from twistedcaldav.instance import InstanceList
 from twistedcaldav.scheduling.cuaddress import normalizeCUAddr
+from twistedcaldav.timezones import hasTZ, TimezoneException
 
 from pycalendar import definitions
 from pycalendar.attribute import PyCalendarAttribute
@@ -440,16 +442,13 @@
             return False
         return self._pycalendar == other._pycalendar
 
-    def getText(self):
+    def getTextWithTimezones(self, includeTimezones):
         """
-        Serialize the calendar object. For a VCALENDAR always ensure the proper set of
-        timezones are included.
+        Return text representation and include timezones if the option is on
         """
+        assert self.name() == "VCALENDAR", "Must be a VCALENDAR: %r" % (self,)
         
-        if self.name() == "VCALENDAR":
-            return self._pycalendar.getText(includeTimezones=True)
-        else:
-            return self._pycalendar.getText()
+        return self._pycalendar.getText(includeTimezones=includeTimezones)
 
     # FIXME: Should this not be in __eq__?
     def same(self, other):
@@ -1253,6 +1252,27 @@
 
         return self._resource_type
 
+    def stripKnownTimezones(self):
+        """
+        Remove timezones that this server knows about
+        """
+        
+        changed = False
+        for subcomponent in tuple(self.subcomponents()):
+            if subcomponent.name() == "VTIMEZONE":
+                tzid = subcomponent.propertyValue("TZID")
+                try:
+                    hasTZ(tzid)
+                except TimezoneException:
+                    # tzid not available - do not strip
+                    pass
+                else:
+                    # tzid known - strip component out
+                    self.removeComponent(subcomponent)
+                    changed = True
+
+        return changed
+
     def validCalendarData(self, doFix=True, doRaise=True):
         """
         @return: tuple of fixed, unfixed issues
@@ -1374,11 +1394,12 @@
         #
         # Make sure required timezone components are present
         #
-        for timezone_ref in timezone_refs:
-            if timezone_ref not in timezones:
-                msg = "Timezone ID %s is referenced but not defined: %s" % (timezone_ref, self,)
-                log.debug(msg)
-                raise InvalidICalendarDataError(msg)
+        if not config.EnableTimezonesByReference:
+            for timezone_ref in timezone_refs:
+                if timezone_ref not in timezones:
+                    msg = "Timezone ID %s is referenced but not defined: %s" % (timezone_ref, self,)
+                    log.debug(msg)
+                    raise InvalidICalendarDataError(msg)
         
         #
         # FIXME:
@@ -2377,6 +2398,61 @@
     
     return results
 
+def tzexpandlocal(tzdata, start, end):
+    """
+    Expand a timezone to get onset(local)/utc-offset-from/utc-offset-to/name observance tuples within the specified
+    time range.
+
+    @param tzdata: the iCalendar data containing a VTIMEZONE.
+    @type tzdata: L{PyCalendar}
+    @param start: date for the start of the expansion.
+    @type start: C{date}
+    @param end: date for the end of the expansion.
+    @type end: C{date}
+    
+    @return: a C{list} of tuples
+    """
+    
+    icalobj = Component(None, pycalendar=tzdata)
+    tzcomp = None
+    for comp in icalobj.subcomponents():
+        if comp.name() == "VTIMEZONE":
+            tzcomp = comp
+            break
+    else:
+        raise InvalidICalendarDataError("No VTIMEZONE component in %s" % (tzdata,))
+
+    tzexpanded = tzcomp._pycalendar.expandAll(start, end, with_name=True)
+    
+    results = []
+    
+    # Always need to ensure the start appears in the result
+    start.setDateOnly(False)
+    if tzexpanded:
+        if start != tzexpanded[0][0]:
+            results.append((
+                str(start),
+                PyCalendarUTCOffsetValue(tzexpanded[0][1]).getText(),
+                PyCalendarUTCOffsetValue(tzexpanded[0][1]).getText(),
+                tzexpanded[0][3],
+            ))
+    else:
+        results.append((
+            str(start),
+            PyCalendarUTCOffsetValue(tzcomp._pycalendar.getTimezoneOffsetSeconds(start)).getText(),
+            PyCalendarUTCOffsetValue(tzcomp._pycalendar.getTimezoneOffsetSeconds(start)).getText(),
+            tzcomp.getTZName(),
+        ))
+    for tzstart, tzoffsetfrom, tzoffsetto, name in tzexpanded:
+        results.append((
+            tzstart.getText(),
+            PyCalendarUTCOffsetValue(tzoffsetfrom).getText(),
+            PyCalendarUTCOffsetValue(tzoffsetto).getText(),
+            name,
+        ))
+    
+    return results
+
 ##
 # Utilities
 ##

Modified: CalendarServer/trunk/twistedcaldav/method/get.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/get.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/twistedcaldav/method/get.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2008 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@
 from twext.web2.http_headers import MimeType
 from twext.web2.stream import MemoryStream
 
+from twistedcaldav.config import config
 from twistedcaldav.customxml import calendarserver_namespace
 from twistedcaldav.datafilters.privateevents import PrivateEventFilter
 from twistedcaldav.resource import isPseudoCalendarCollectionResource,\
@@ -87,7 +88,7 @@
                     caldata = PrivateEventFilter(self.accessMode, isowner).filter(caldata)
         
                 response = Response()
-                response.stream = MemoryStream(str(caldata))
+                response.stream = MemoryStream(caldata.getTextWithTimezones(includeTimezones=not config.EnableTimezonesByReference))
                 response.headers.setHeader("content-type", MimeType.fromString("text/calendar; charset=utf-8"))
         
                 # Add Schedule-Tag header if property is present

Modified: CalendarServer/trunk/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/put_common.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/twistedcaldav/method/put_common.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -275,7 +275,12 @@
                             (caldav_namespace, "valid-calendar-data"),
                             description="Can't parse calendar data"
                         ))
-                        
+
+                # Possible timezone stripping
+                if config.EnableTimezonesByReference:
+                    if self.calendar.stripKnownTimezones():
+                        self.calendardata = None
+
                 # Valid calendar data check
                 result, message = self.validCalendarDataCheck()
                 if not result:

Modified: CalendarServer/trunk/twistedcaldav/stdconfig.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/stdconfig.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/twistedcaldav/stdconfig.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -448,8 +448,28 @@
     #
     "EnableDropBox"           : False, # Calendar Drop Box
     "EnablePrivateEvents"     : False, # Private Events
-    "EnableTimezoneService"   : False, # Timezone service
+    "EnableTimezoneService"   : False, # Old Timezone service
+    
+    "TimezoneService"         : {    # New standard timezone service
+        "Enabled"       : True,      # Overall on/off switch
+        "Mode"          : "primary", # Can be "primary" or "secondary"
+        "BasePath"      : "",        # Path to zoneinfo - if None use default package path
+                                     # secondary service MUST define its own writeable path
+        "XMLInfoPath"   : "",        # Path to db cache info - if None use default package path
+                                     # secondary service MUST define its own writeable path if
+                                     # not None
+        
+        "SecondaryService" : {
+            # Only one of these should be used when a secondary service is used
+            "Host"                  : "",        # Domain/IP of secondary service to discover
+            "URI"                   : "",        # HTTP(s) URI to secondary service
 
+            "UpdateIntervalMinutes" : 24 * 60,
+        }
+    },
+    
+    "EnableTimezonesByReference" : False, # Strip out VTIMEZONES that are known
+
     "EnableBatchUpload"       : True,     # POST batch uploads
     "MaxResourcesBatchUpload" : 100,      # Maximum number of resources in a batch POST
     "MaxBytesBatchUpload"     : 10485760, # Maximum size of a batch POST (10 MB)
@@ -808,6 +828,7 @@
     ("ServerRoot", "RunRoot"),
     ("DataRoot", "DatabaseRoot"),
     ("DataRoot", "AttachmentsRoot"),
+    ("DataRoot", ("TimezoneService", "BasePath",)),
     ("ConfigRoot", "SudoersFile"),
     ("LogRoot", "AccessLogFile"),
     ("LogRoot", "ErrorLogFile"),

Copied: CalendarServer/trunk/twistedcaldav/test/test_timezonestdservice.py (from rev 7699, CalendarServer/branches/users/cdaboo/timezones/twistedcaldav/test/test_timezonestdservice.py)
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_timezonestdservice.py	                        (rev 0)
+++ CalendarServer/trunk/twistedcaldav/test/test_timezonestdservice.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -0,0 +1,149 @@
+##
+# Copyright (c) 2011 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+from twistedcaldav.timezones import TimezoneCache
+from twistedcaldav.timezonestdservice import TimezoneInfo,\
+    PrimaryTimezoneDatabase
+from xml.etree.ElementTree import Element
+import hashlib
+import os
+import twistedcaldav.test.util
+
+class TestTimezoneInfo (twistedcaldav.test.util.TestCase):
+    """
+    Timezone support tests
+    """
+
+    def test_generateXML(self):
+        
+        hashed = hashlib.md5("test").hexdigest()
+        info = TimezoneInfo("America/New_York", ("US/Eastern",), "20110517T120000Z", hashed)
+        
+        node = Element("root")
+        info.generateXML(node)
+        
+        timezone = node.find("timezone")
+        self.assertTrue(timezone is not None)
+        self.assertEqual(timezone.findtext("tzid"), "America/New_York")
+        self.assertEqual(timezone.findtext("dtstamp"), "20110517T120000Z")
+        self.assertEqual(timezone.findtext("alias"), "US/Eastern")
+        self.assertEqual(timezone.findtext("md5"), hashed)
+
+    def test_parseXML(self):
+        
+        hashed = hashlib.md5("test").hexdigest()
+        info1 = TimezoneInfo("America/New_York", ("US/Eastern",), "20110517T120000Z", hashed)
+        
+        node = Element("root")
+        info1.generateXML(node)
+        timezone = node.find("timezone")
+        
+        info2 = TimezoneInfo.readXML(timezone)
+
+        self.assertEqual(info2.tzid, "America/New_York")
+        self.assertEqual(info2.aliases, ("US/Eastern",))
+        self.assertEqual(info2.dtstamp, "20110517T120000Z")
+        self.assertEqual(info2.md5, hashed)
+
+class TestPrimaryTimezoneDatabase (twistedcaldav.test.util.TestCase):
+    """
+    Timezone support tests
+    """
+
+    def setUp(self):
+        TimezoneCache.create()
+
+    def testCreate(self):
+        
+        xmlfile = self.mktemp()
+        db = PrimaryTimezoneDatabase(TimezoneCache.getDBPath(), xmlfile)
+        
+        db.createNewDatabase()
+        self.assertTrue(os.path.exists(xmlfile))
+        self.assertTrue(db.dtstamp is not None)
+        self.assertTrue(len(db.timezones) > 0)
+
+    def testUpdate(self):
+        
+        xmlfile = self.mktemp()
+        db = PrimaryTimezoneDatabase(TimezoneCache.getDBPath(), xmlfile)
+        
+        db.createNewDatabase()
+        self.assertTrue(os.path.exists(xmlfile))
+
+        db.updateDatabase()
+        self.assertTrue(db.changeCount == 0)
+        self.assertTrue(len(db.changed) == 0)
+
+    def testRead(self):
+        
+        xmlfile = self.mktemp()
+        db1 = PrimaryTimezoneDatabase(TimezoneCache.getDBPath(), xmlfile)
+        db1.createNewDatabase()
+        self.assertTrue(os.path.exists(xmlfile))
+
+        db2 = PrimaryTimezoneDatabase(TimezoneCache.getDBPath(), xmlfile)
+        db2.readDatabase()
+        self.assertEqual(db1.dtstamp, db2.dtstamp)
+        self.assertEqual(len(db1.timezones), len(db2.timezones))
+        
+    def testList(self):
+        
+        xmlfile = self.mktemp()
+        db = PrimaryTimezoneDatabase(TimezoneCache.getDBPath(), xmlfile)
+        db.createNewDatabase()
+        self.assertTrue(os.path.exists(xmlfile))
+        
+        tzids = set([tz.tzid for tz in db.listTimezones(None)])
+        self.assertTrue("America/New_York" in tzids)
+        self.assertTrue("US/Eastern" not in tzids)
+        
+    def testListChangedSince(self):
+        
+        xmlfile = self.mktemp()
+        db = PrimaryTimezoneDatabase(TimezoneCache.getDBPath(), xmlfile)
+        db.createNewDatabase()
+        self.assertTrue(os.path.exists(xmlfile))
+        
+        tzids = set([tz.tzid for tz in db.listTimezones(db.dtstamp)])
+        self.assertTrue(len(tzids) == 0)
+        
+    def testGetNone(self):
+        
+        xmlfile = self.mktemp()
+        db = PrimaryTimezoneDatabase(TimezoneCache.getDBPath(), xmlfile)
+        db.createNewDatabase()
+        self.assertTrue(os.path.exists(xmlfile))
+        
+        tz = db.getTimezone("Bogus")
+        self.assertEqual(tz, None)
+        
+    def testGetOne(self):
+        
+        xmlfile = self.mktemp()
+        db = PrimaryTimezoneDatabase(TimezoneCache.getDBPath(), xmlfile)
+        db.createNewDatabase()
+        self.assertTrue(os.path.exists(xmlfile))
+        
+        # Original
+        tz1 = db.getTimezone("America/New_York")
+        self.assertTrue(str(tz1).find("VTIMEZONE") != -1)
+        self.assertTrue(str(tz1).find("TZID:America/New_York") != -1)
+        
+        # Alias
+        tz1 = db.getTimezone("US/Eastern")
+        self.assertTrue(str(tz1).find("VTIMEZONE") != -1)
+        self.assertTrue(str(tz1).find("TZID:US/Eastern") != -1)

Modified: CalendarServer/trunk/twistedcaldav/timezones.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/timezones.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/twistedcaldav/timezones.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2011 Apple Inc. All rights reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -18,6 +18,8 @@
 
 from twext.python.log import Logger
 
+from twistedcaldav.config import config
+
 from pycalendar.timezonedb import PyCalendarTimezoneDatabase
 
 log = Logger()
@@ -50,20 +52,28 @@
     dirName = None
 
     @staticmethod
-    def _getDBPath():
+    def _getPackageDBPath():
+        try:
+            import pkg_resources
+        except ImportError:
+            return os.path.join(os.path.dirname(__file__), "zoneinfo")
+        else:
+            return pkg_resources.resource_filename("twistedcaldav", "zoneinfo") #@UndefinedVariable
+
+    @staticmethod
+    def getDBPath():
         if TimezoneCache.dirName is None:
-            try:
-                import pkg_resources
-            except ImportError:
-                TimezoneCache.dirName = os.path.join(os.path.dirname(__file__), "zoneinfo")
+            if config.TimezoneService.Enabled and config.TimezoneService.BasePath:
+                TimezoneCache.dirName = config.TimezoneService.BasePath
             else:
-                TimezoneCache.dirName = pkg_resources.resource_filename("twistedcaldav", "zoneinfo")
+                TimezoneCache.dirName = TimezoneCache._getPackageDBPath()
         
         return TimezoneCache.dirName
 
     @staticmethod
     def create(dbpath=None):
-        PyCalendarTimezoneDatabase.createTimezoneDatabase(TimezoneCache._getDBPath() if dbpath is None else dbpath)
+        TimezoneCache.dirName = dbpath
+        PyCalendarTimezoneDatabase.createTimezoneDatabase(TimezoneCache.getDBPath())
     
     @staticmethod
     def clear():
@@ -71,13 +81,50 @@
 
 # zoneinfo never changes in a running instance so cache all this data as we use it
 cachedTZs = {}
+cachedVTZs = {}
 cachedTZIDs = []
 
+def hasTZ(tzid):
+    """
+    Check if the specified TZID is available. Try to load it if not and raise if it
+    cannot be found.
+    """
+
+    if tzid not in cachedVTZs:
+        readVTZ(tzid)
+    return True
+
+def addVTZ(tzid, tzcal):
+    """
+    Add a VTIMEZONE component to the cache.
+    """
+    if tzid not in cachedVTZs:
+        cachedVTZs[tzid] = tzcal
+        cachedTZs[tzid] = str(tzcal)
+    
+def readVTZ(tzid):
+    """
+    Try to load the specified TZID as a calendar object from the database. Raise if not found.
+    """
+
+    if tzid not in cachedVTZs:
+        
+        tzcal = PyCalendarTimezoneDatabase.getTimezoneInCalendar(tzid)
+        if tzcal:
+            cachedVTZs[tzid] = tzcal
+        else:
+            raise TimezoneException("Unknown time zone: %s" % (tzid,))
+        
+    return cachedVTZs[tzid]
+
 def readTZ(tzid):
+    """
+    Try to load the specified TZID as text from the database. Raise if not found.
+    """
 
     if tzid not in cachedTZs:
         
-        tzcal = PyCalendarTimezoneDatabase.getTimezoneInCalendar(tzid)
+        tzcal = readVTZ(tzid)
         if tzcal:
             cachedTZs[tzid] = str(tzcal)
         else:
@@ -86,11 +133,15 @@
     return cachedTZs[tzid]
 
 def listTZs(path=""):
+    """
+    List all timezones in the database.
+    """
+
     if not path and cachedTZIDs:
         return cachedTZIDs
 
     result = []
-    for item in os.listdir(os.path.join(TimezoneCache._getDBPath(), path)):
+    for item in os.listdir(os.path.join(TimezoneCache.getDBPath(), path)):
         if item.find('.') == -1:
             result.extend(listTZs(os.path.join(path, item)))
         elif item.endswith(".ics"):

Copied: CalendarServer/trunk/twistedcaldav/timezonestdservice.py (from rev 7699, CalendarServer/branches/users/cdaboo/timezones/twistedcaldav/timezonestdservice.py)
===================================================================
--- CalendarServer/trunk/twistedcaldav/timezonestdservice.py	                        (rev 0)
+++ CalendarServer/trunk/twistedcaldav/timezonestdservice.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -0,0 +1,809 @@
+##
+# Copyright (c) 2011 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+"""
+Timezone service resource and operations.
+
+This is based on http://tools.ietf.org/html/draft-douglass-timezone-service which is the CalConnect
+proposal for a standard timezone service.
+"""
+
+__all__ = [
+    "TimezoneStdServiceResource",
+]
+
+from twext.python.log import Logger
+from twext.web2 import responsecode
+from twext.web2.dav import davxml
+from twext.web2.dav.http import ErrorResponse
+from twext.web2.dav.method.propfind import http_PROPFIND
+from twext.web2.dav.noneprops import NonePropertyStore
+from twext.web2.http import HTTPError, StatusResponse
+from twext.web2.http import Response
+from twext.web2.http import XMLResponse
+from twext.web2.http_headers import MimeType
+from twext.web2.stream import MemoryStream
+
+from twisted.internet.defer import succeed, inlineCallbacks, returnValue
+
+from twistedcaldav import timezonexml, xmlutil
+from twistedcaldav.client.geturl import getURL
+from twistedcaldav.config import config
+from twistedcaldav.customxml import calendarserver_namespace
+from twistedcaldav.extensions import DAVResource,\
+    DAVResourceWithoutChildrenMixin
+from twistedcaldav.ical import tzexpandlocal
+from twistedcaldav.resource import ReadOnlyNoCopyResourceMixIn
+from twistedcaldav.timezones import TimezoneException, TimezoneCache, readVTZ,\
+    addVTZ
+from twistedcaldav.xmlutil import addSubElement, readXMLString
+
+from pycalendar.calendar import PyCalendar
+from pycalendar.datetime import PyCalendarDateTime
+from pycalendar.exceptions import PyCalendarInvalidData
+
+import hashlib
+import itertools
+import os
+
+log = Logger()
+
+class TimezoneStdServiceResource (ReadOnlyNoCopyResourceMixIn, DAVResourceWithoutChildrenMixin, DAVResource):
+    """
+    Timezone Service resource. Strictly speaking this is an HTTP-only resource no WebDAV support needed.
+
+    Extends L{DAVResource} to provide timezone service functionality.
+    """
+
+
+    def __init__(self, parent):
+        """
+        @param parent: the parent resource of this one.
+        """
+        assert parent is not None
+
+        DAVResource.__init__(self, principalCollections=parent.principalCollections())
+
+        self.parent = parent
+        self.expandcache = {}
+
+        if config.TimezoneService.Mode == "primary":
+            log.info("Using primary Timezone Service")
+            self._initPrimaryService()
+        elif config.TimezoneService.Mode == "secondary":
+            log.info("Using secondary Timezone Service")
+            self._initSecondaryService()
+        else:
+            raise ValueError("Invalid TimezoneService mode: %s" % (config.TimezoneService.Mode,))
+            
+    def _initPrimaryService(self):
+        tzpath = TimezoneCache.getDBPath()
+        xmlfile = os.path.join(tzpath, "timezones.xml")
+        self.timezones = PrimaryTimezoneDatabase(tzpath, xmlfile)
+        if not os.path.exists(xmlfile):
+            self.timezones.createNewDatabase()
+        else:
+            self.timezones.readDatabase()
+
+    def _initSecondaryService(self):
+        
+        # Must have writeable paths
+        tzpath = TimezoneCache.getDBPath()
+        xmlfile = config.TimezoneService.XMLInfoPath
+        if not xmlfile:
+            xmlfile = os.path.join(tzpath, "timezones.xml")
+        self.timezones = SecondaryTimezoneDatabase(tzpath, xmlfile, None)
+        try:
+            self.timezones.readDatabase()
+        except:
+            pass
+
+    def onStartup(self):
+        return self.timezones.onStartup()
+
+    def deadProperties(self):
+        if not hasattr(self, "_dead_properties"):
+            self._dead_properties = NonePropertyStore(self)
+        return self._dead_properties
+
+    def etag(self):
+        return None
+
+    def checkPreconditions(self, request):
+        return None
+
+    def checkPrivileges(self, request, privileges, recurse=False, principal=None, inherited_aces=None):
+        return succeed(None)
+
+    def defaultAccessControlList(self):
+        return davxml.ACL(
+            # DAV:Read for all principals (includes anonymous)
+            davxml.ACE(
+                davxml.Principal(davxml.All()),
+                davxml.Grant(
+                    davxml.Privilege(davxml.Read()),
+                ),
+                davxml.Protected(),
+            ),
+        )
+
+    def contentType(self):
+        return None
+
+    def resourceType(self):
+        return None
+
+    def isCollection(self):
+        return False
+
+    def isCalendarCollection(self):
+        return False
+
+    def isPseudoCalendarCollection(self):
+        return False
+
+    def render(self, request):
+        output = """<html>
+<head>
+<title>Timezone Standard Service Resource</title>
+</head>
+<body>
+<h1>Timezone Standard Service Resource.</h1>
+</body
+</html>"""
+
+        response = Response(200, {}, output)
+        response.headers.setHeader("content-type", MimeType("text", "html"))
+        return response
+
+    http_PROPFIND = http_PROPFIND
+
+    def http_GET(self, request):
+        """
+        The timezone service POST method.
+        """
+        
+        # GET and POST do the same thing
+        return self.http_POST(request)
+
+    def http_POST(self, request):
+        """
+        The timezone service POST method.
+        """
+
+        # Check authentication and access controls
+        def _gotResult(_):
+            
+            if not request.args:
+                # Do normal GET behavior
+                return self.render(request)
+    
+            action = request.args.get("action", ("",))
+            if len(action) != 1:
+                raise HTTPError(StatusResponse(
+                    responsecode.BAD_REQUEST,
+                    "Invalid action query parameter",
+                ))
+            action = action[0]
+                
+            action = {
+                "capabilities"  : self.doCapabilities,
+                "list"          : self.doList,
+                "get"           : self.doGet,
+                "expand"        : self.doExpand,
+            }.get(action, None)
+            
+            if action is None:
+                raise HTTPError(StatusResponse(
+                    responsecode.BAD_REQUEST,
+                    "Unknown action query parameter",
+                ))
+    
+            return action(request)
+            
+        d = self.authorize(request, (davxml.Read(),))
+        d.addCallback(_gotResult)
+        return d
+
+    def doCapabilities(self, request):
+        """
+        Return a list of all timezones known to the server.
+        """
+        
+        result = timezonexml.Capabilities(
+            
+            timezonexml.Operation(
+                timezonexml.Action.fromString("capabilities"),
+                timezonexml.Description.fromString("Get capabilities of the server"),
+            ),
+            
+            timezonexml.Operation(
+                timezonexml.Action.fromString("list"),
+                timezonexml.Description.fromString("List timezones on the server"),
+                timezonexml.AcceptParameter(
+                    timezonexml.Name.fromString("changesince"),
+                    timezonexml.Required.fromString("false"),
+                    timezonexml.Multi.fromString("false"),
+                ),
+            ),
+            
+            timezonexml.Operation(
+                timezonexml.Action.fromString("get"),
+                timezonexml.Description.fromString("Get timezones from the server"),
+                timezonexml.AcceptParameter(
+                    timezonexml.Name.fromString("format"),
+                    timezonexml.Required.fromString("false"),
+                    timezonexml.Multi.fromString("false"),
+                    timezonexml.Value.fromString("text/calendar"),
+                    timezonexml.Value.fromString("text/plain"),
+                ),
+                timezonexml.AcceptParameter(
+                    timezonexml.Name.fromString("tzid"),
+                    timezonexml.Required.fromString("true"),
+                    timezonexml.Multi.fromString("true"),
+                ),
+            ),
+            
+            timezonexml.Operation(
+                timezonexml.Action.fromString("expand"),
+                timezonexml.Description.fromString("Expand timezones from the server"),
+                timezonexml.AcceptParameter(
+                    timezonexml.Name.fromString("tzid"),
+                    timezonexml.Required.fromString("true"),
+                    timezonexml.Multi.fromString("true"),
+                ),
+                timezonexml.AcceptParameter(
+                    timezonexml.Name.fromString("start"),
+                    timezonexml.Required.fromString("false"),
+                    timezonexml.Multi.fromString("false"),
+                ),
+                timezonexml.AcceptParameter(
+                    timezonexml.Name.fromString("end"),
+                    timezonexml.Required.fromString("false"),
+                    timezonexml.Multi.fromString("false"),
+                ),
+            ),
+        )
+        return XMLResponse(responsecode.OK, result)
+
+    def doList(self, request):
+        """
+        Return a list of all timezones known to the server.
+        """
+        
+        changesince = request.args.get("changesince", ())
+        if len(changesince) > 1:
+            raise HTTPError(StatusResponse(
+                responsecode.BAD_REQUEST,
+                "Invalid changesince query parameter",
+            ))
+        if len(changesince) == 1:
+            # Validate a date-time stamp
+            changesince = changesince[0]
+            try:
+                dt = PyCalendarDateTime.parseText(changesince)
+            except ValueError:
+                raise HTTPError(StatusResponse(
+                    responsecode.BAD_REQUEST,
+                    "Invalid changesince query parameter value",
+                ))
+            if not dt.utc():
+                raise HTTPError(StatusResponse(
+                    responsecode.BAD_REQUEST,
+                    "Invalid changesince query parameter value",
+                ))
+                
+
+        timezones = []
+        for tz in self.timezones.listTimezones(changesince):
+            timezones.append(
+                timezonexml.Summary(
+                    timezonexml.Tzid.fromString(tz.tzid),
+                    timezonexml.LastModified.fromString(tz.dtstamp),
+                    *tuple([timezonexml.Alias.fromString(alias) for alias in tz.aliases])
+                )
+            )
+        result = timezonexml.TimezoneList(
+            timezonexml.Dtstamp.fromString(self.timezones.dtstamp),
+            *timezones
+        )
+        return XMLResponse(responsecode.OK, result)
+
+    def doGet(self, request):
+        """
+        Return the specified timezone data.
+        """
+        
+        tzids = request.args.get("tzid", ())
+        if len(tzids) != 1:
+            raise HTTPError(StatusResponse(
+                responsecode.BAD_REQUEST,
+                "Invalid tzid query parameter",
+            ))
+
+        format = request.args.get("format", ("text/calendar",))
+        if len(format) != 1 or format[0] not in ("text/calendar", "text/plain",):
+            raise HTTPError(StatusResponse(
+                responsecode.BAD_REQUEST,
+                "Invalid format query parameter",
+            ))
+        format = format[0]
+
+        calendar = self.timezones.getTimezone(tzids[0])
+        if calendar is None:
+            raise HTTPError(ErrorResponse(
+                responsecode.NOT_FOUND,
+                (calendarserver_namespace, "invalid-tzid"),
+                "Tzid could not be found",
+            ))
+
+        tzdata = calendar.getText()
+
+        response = Response()
+        response.stream = MemoryStream(tzdata)
+        response.headers.setHeader("content-type", MimeType.fromString("%s; charset=utf-8" % (format,)))
+        return response
+
+    def doExpand(self, request):
+        """
+        Expand a timezone within specified start/end dates.
+        """
+
+        tzids = request.args.get("tzid", ())
+        if len(tzids) != 1:
+            raise HTTPError(StatusResponse(
+                responsecode.BAD_REQUEST,
+                "Invalid tzid query parameter",
+            ))
+
+        try:
+            start = request.args.get("start", ())
+            if len(start) > 1:
+                raise ValueError()
+            elif len(start) == 1:
+                start = PyCalendarDateTime.parseText(start[0])
+            else:
+                start = PyCalendarDateTime.getToday()
+                start.setDay(1)
+                start.setMonth(1)
+        except ValueError:
+            raise HTTPError(ErrorResponse(
+                responsecode.BAD_REQUEST,
+                (calendarserver_namespace, "valid-start-date"),
+                "Invalid start query parameter",
+            ))
+
+        try:
+            end = request.args.get("end", ())
+            if len(end) > 1:
+                raise ValueError()
+            elif len(end) == 1:
+                end = PyCalendarDateTime.parseText(end[0])
+            else:
+                end = PyCalendarDateTime.getToday()
+                end.setDay(1)
+                end.setMonth(1)
+                end.offsetYear(10)
+            if end <= start:
+                raise ValueError()
+        except ValueError:
+            raise HTTPError(ErrorResponse(
+                responsecode.BAD_REQUEST,
+                (calendarserver_namespace, "valid-end-date"),
+                "Invalid end query parameter",
+            ))
+
+        results = []
+        
+        tzid = tzids[0]
+        tzdata = self.timezones.getTimezone(tzid)
+        if tzdata is None:
+            raise HTTPError(ErrorResponse(
+                responsecode.NOT_FOUND,
+                (calendarserver_namespace, "invalid-tzid"),
+                "Tzid could not be found",
+            ))
+            
+        # Now do the expansion (but use a cache to avoid re-calculating TZs)
+        observances = self.expandcache.get((tzid, start, end), None)
+        if observances is None:
+            observances = tzexpandlocal(tzdata, start, end)
+            self.expandcache[(tzid, start, end)] = observances
+
+        # Turn into XML
+        results.append(timezonexml.Tzdata(
+            timezonexml.Tzid.fromString(tzid),
+            *[
+                timezonexml.Observance(
+                    timezonexml.Name(name),
+                    timezonexml.Onset(onset),
+                    timezonexml.UTCOffsetFrom(utc_offset_from),
+                    timezonexml.UTCOffsetTo(utc_offset_to),
+                ) for onset, utc_offset_from, utc_offset_to, name in observances
+            ]
+        ))
+        
+        result = timezonexml.Timezones(
+            timezonexml.Dtstamp.fromString(self.timezones.dtstamp),
+            *results
+        )
+        return XMLResponse(responsecode.OK, result)
+
+class TimezoneInfo(object):
+    """
+    Maintains information from an on-disk store of timezone files.
+    """
+    
+    def __init__(self, tzid, aliases, dtstamp, md5):
+        self.tzid = tzid
+        self.aliases = aliases
+        self.dtstamp = dtstamp
+        self.md5 = md5
+    
+    @classmethod
+    def readXML(cls, node):
+        """
+        Parse XML data.
+        """
+        if node.tag != "timezone":
+            return None
+        tzid = node.findtext("tzid")
+        dtstamp = node.findtext("dtstamp")
+        aliases = tuple([alias_node.text for alias_node in node.findall("alias")])
+        md5 = node.findtext("md5")
+        return cls(tzid, aliases, dtstamp, md5)
+    
+    def generateXML(self, parent):
+        """
+        Generate the XML element for this timezone info.
+        """
+        node = xmlutil.addSubElement(parent, "timezone")
+        xmlutil.addSubElement(node, "tzid", self.tzid)
+        xmlutil.addSubElement(node, "dtstamp", self.dtstamp)
+        for alias in self.aliases:
+            xmlutil.addSubElement(node, "alias", alias)
+        xmlutil.addSubElement(node, "md5", self.md5)
+
+class CommonTimezoneDatabase(object):
+    """
+    Maintains the database of timezones read from an XML file.
+    """
+    
+    def __init__(self, basepath, xmlfile):
+        self.basepath = basepath
+        self.xmlfile = xmlfile
+        self.dtstamp = None
+        self.timezones = {}
+        self.aliases = {}
+
+    def onStartup(self):
+        return succeed(None)
+
+    def readDatabase(self):
+        """
+        Read in XML data.
+        """
+        _ignore, root = xmlutil.readXML(self.xmlfile, "timezones")
+        self.dtstamp = root.findtext("dtstamp")
+        for child in root.getchildren():
+            if child.tag == "timezone":
+                tz = TimezoneInfo.readXML(child)
+                if tz:
+                    self.timezones[tz.tzid] = tz
+                    for alias in tz.aliases:
+                        self.aliases[alias] = tz.tzid
+
+    def listTimezones(self, changesince):
+        """
+        List timezones (not aliases) possibly changed since a particular dtstamp.
+        """
+        
+        for tzid, tzinfo in sorted(self.timezones.items(), key=lambda x:x[0]):
+            # Ignore those that are aliases
+            if tzid in self.aliases:
+                continue
+            
+            # Detect timestamp changes
+            if changesince and tzinfo.dtstamp <= changesince:
+                continue
+            
+            yield tzinfo
+
+    def getTimezone(self, tzid):
+        """
+        Generate a PyCalendar containing the requested timezone.
+        """
+        # We will just use our existing TimezoneCache here
+        calendar = PyCalendar()
+        try:
+            vtz = readVTZ(tzid)
+            calendar.addComponent(vtz.getComponents()[0].duplicate())
+        except TimezoneException:
+            
+            # Check if an alias exists and create data for that
+            if tzid in self.aliases:
+                try:
+                    vtz = readVTZ(self.aliases[tzid])
+                except TimezoneException:
+                    log.error("Failed to find timezone data for alias: %s" % (tzid,))
+                    return None
+                else:
+                    vtz = vtz.duplicate()
+                    vtz.getComponents()[0].getProperties("TZID")[0].setValue(tzid)
+                    addVTZ(tzid, vtz)
+                    calendar.addComponent(vtz.getComponents()[0].duplicate())
+            else:
+                log.error("Failed to find timezone data for: %s" % (tzid,))
+                return None
+
+        return calendar
+
+    def _dumpTZs(self):
+        
+        _ignore, root = xmlutil.newElementTreeWithRoot("timezones")
+        addSubElement(root, "dtstamp", self.dtstamp)
+        for _ignore,v in sorted(self.timezones.items(), key=lambda x:x[0]):
+            v.generateXML(root)
+        xmlutil.writeXML(self.xmlfile, root)
+    
+    def _buildAliases(self):
+        """
+        Rebuild aliases mappings from current tzinfo.
+        """
+        
+        self.aliases = {}
+        for tzinfo in self.timezones.values():
+            for alias in tzinfo.aliases:
+                self.aliases[alias] = tzinfo.tzid
+
+class PrimaryTimezoneDatabase(CommonTimezoneDatabase):
+    """
+    Maintains the database of timezones read from an XML file.
+    """
+    
+    def __init__(self, basepath, xmlfile):
+        super(PrimaryTimezoneDatabase, self).__init__(basepath, xmlfile)
+
+    def createNewDatabase(self):
+        """
+        Create a new DB xml file from scratch by scanning zoneinfo.
+        """
+
+        self.dtstamp = PyCalendarDateTime.getNowUTC().getText()
+        self._scanTZs("")
+        self._dumpTZs()
+
+    def _scanTZs(self, path, checkIfChanged=False):
+        # Read in all timezone files first
+        for item in os.listdir(os.path.join(self.basepath, path)):
+            fullPath = os.path.join(self.basepath, path, item)
+            if item.find('.') == -1:
+                self._scanTZs(os.path.join(path, item), checkIfChanged)
+            elif item.endswith(".ics"):
+                # Build TimezoneInfo object
+                tzid = os.path.join(path, item[:-4])
+                try:
+                    md5 = hashlib.md5(open(fullPath).read()).hexdigest()
+                except IOError:
+                    log.error("Unable to read timezone file: %s" % (fullPath,))
+                    continue
+                
+                if checkIfChanged:
+                    oldtz = self.timezones.get(tzid)
+                    if oldtz != None and oldtz.md5 == md5:
+                        continue
+                    self.changeCount += 1
+                    self.changed.add(tzid)
+                self.timezones[tzid] = TimezoneInfo(tzid, (), self.dtstamp, md5)
+        
+        # Try links (aliases) file
+        try:
+            aliases = open(os.path.join(self.basepath, "links.txt")).read()
+        except IOError, e:
+            log.error("Unable to read links.txt file: %s" % (str(e),))
+            aliases = ""
+        
+        try:
+            for alias in aliases.splitlines():
+                alias_from, alias_to = alias.split()
+                tzinfo = self.timezones.get(alias_to)
+                if tzinfo:
+                    if alias_from != alias_to:
+                        if alias_from not in tzinfo.aliases:
+                            tzinfo.aliases += (alias_from,)
+                        self.aliases[alias_from] = alias_to
+                else:
+                    log.error("Missing alias from '%s' to '%s'" % (alias_from, alias_to,))
+        except ValueError:
+            log.error("Unable to parse links.txt file: %s" % (str(e),))
+            
+    
+    def updateDatabase(self):
+        """
+        Update existing DB info by comparing md5's.
+        """
+        self.dtstamp = PyCalendarDateTime.getNowUTC().getText()
+        self.changeCount = 0
+        self.changed = set()
+        self._scanTZs("", checkIfChanged=True)
+        if self.changeCount:
+            self._dumpTZs()
+
+class SecondaryTimezoneDatabase(CommonTimezoneDatabase):
+    """
+    Caches a database of timezones from another timezone service.
+    """
+    
+    def __init__(self, basepath, xmlfile, uri):
+        super(SecondaryTimezoneDatabase, self).__init__(basepath, xmlfile)
+        self.uri = uri
+        self.discovered = False
+        self._url = None
+        
+        if not os.path.exists(self.basepath):
+            os.makedirs(self.basepath)
+            
+        # Paths need to be writeable
+        if not os.access(basepath, os.W_OK):
+            raise ValueError("Secondary Timezone Service needs writeable zoneinfo path at: %s" % (basepath,))
+        if os.path.exists(xmlfile) and not os.access(xmlfile, os.W_OK):
+            raise ValueError("Secondary Timezone Service needs writeable xmlfile path at: %s" % (xmlfile,))
+
+    def onStartup(self):
+        return self.syncWithServer()
+
+    @inlineCallbacks
+    def syncWithServer(self):
+        """
+        Sync local data with that from the server we are replicating.
+        """
+        
+        result = (yield self._getTimezoneListFromServer())
+        if result is None:
+            # Nothing changed since last sync
+            returnValue(None)
+        newdtstamp, newtimezones = result
+        
+        # Compare timezone infos
+        
+        # New ones on the server
+        newtzids = set(newtimezones.keys()) - set(self.timezones.keys())
+        
+        # Check for changes
+        changedtzids = set()
+        for tzid in set(newtimezones.keys()) & set(self.timezones.keys()):
+            if self.timezones[tzid].dtstamp < newtimezones[tzid].dtstamp:
+                changedtzids.add(tzid)
+        
+        # Now apply changes
+        for tzid in itertools.chain(newtzids, changedtzids):
+            yield self._getTimezoneFromServer(newtimezones[tzid])
+            
+        self.dtstamp = newdtstamp
+        self._dumpTZs()
+        self._buildAliases()
+        
+        returnValue((len(newtzids), len(changedtzids),))
+        
+    @inlineCallbacks
+    def _discoverServer(self):
+        """
+        Make sure we know the timezone service path
+        """
+        
+        if self.uri is None:
+            if config.TimezoneService.SecondaryService.Host:
+                self.uri = "https://%s/.well-known/timezone" % (self.config.TimezoneService.SecondaryService.Host,)
+            elif config.TimezoneService.SecondaryService.URI:
+                self.uri = config.TimezoneService.SecondaryService.URI
+        elif not self.uri.startswith("https:") and not self.uri.startswith("http:"):
+            self.uri = "https://%s/.well-known/timezone" % (self.uri,)
+            
+        testURI = "%s?action=capabilities" % (self.uri,)
+        response = (yield getURL(testURI))
+        if response is None or response.code / 100 != 2:
+            self.discovered = False
+            returnValue(False)
+        
+        # Cache the redirect target
+        if hasattr(response, "location"):
+            self.uri = response.location 
+
+        # TODO: Ignoring the data from capabilities for now
+
+        self.discovered = True
+        returnValue(True)
+    
+    @inlineCallbacks
+    def _getTimezoneListFromServer(self):
+        """
+        Retrieve the timezone list from the specified server
+        """
+        
+        # Make sure we have the server
+        if not self.discovered:
+            result = (yield self._discoverServer())
+            if not result:
+                returnValue(None)
+        
+        # List all from the server
+        url = "%s?action=list" % (self.uri,)
+        if self.dtstamp:
+            url = "%s&changesince=%s" % (url, self.dtstamp,)
+        response = (yield getURL(url))
+        if response is None or response.code / 100 != 2:
+            returnValue(None)
+        
+        ct = response.headers.getRawHeaders("content-type", ("bogus/type",))[0]
+        ct = ct.split(";", 1)
+        ct = ct[0]
+        if ct not in ("application/xml", "text/xml",):
+            returnValue(None)
+        
+        etroot, _ignore = readXMLString(response.data, timezonexml.TimezoneList.sname())
+        dtstamp = etroot.findtext(timezonexml.Dtstamp.sname())
+        timezones = {}
+        for summary in etroot.findall(timezonexml.Summary.sname()):
+            tzid = summary.findtext(timezonexml.Tzid.sname())
+            lastmod = summary.findtext(timezonexml.LastModified.sname())
+            aliases = tuple([alias_node.text for alias_node in summary.findall(timezonexml.Alias.sname())])
+            timezones[tzid] = TimezoneInfo(tzid, aliases, lastmod, None)
+        
+        returnValue((dtstamp, timezones,))
+
+    @inlineCallbacks
+    def _getTimezoneFromServer(self, tzinfo):
+        # List all from the server
+        response = (yield getURL("%s?action=get&tzid=%s" % (self.uri, tzinfo.tzid,)))
+        if response is None or response.code / 100 != 2:
+            returnValue(None)
+        
+        ct = response.headers.getRawHeaders("content-type", ("bogus/type",))[0]
+        ct = ct.split(";", 1)
+        ct = ct[0]
+        if ct not in ("text/calendar",):
+            log.error("Invalid content-type '%s' for tzid : %s" % (ct, tzinfo.tzid,))
+            returnValue(None)
+        
+        ical = response.data
+        try:
+            calendar = PyCalendar.parseText(ical)
+        except PyCalendarInvalidData:
+            log.error("Invalid calendar data for tzid: %s" % (tzinfo.tzid,))
+            returnValue(None)
+        ical = calendar.getText()
+
+        tzinfo.md5 = hashlib.md5(ical).hexdigest()
+        
+        try:
+            tzpath = os.path.join(self.basepath, tzinfo.tzid) + ".ics"
+            if not os.path.exists(os.path.dirname(tzpath)):
+                os.makedirs(os.path.dirname(tzpath))
+            f = open(tzpath, "w")
+            f.write(ical)
+            f.close()
+        except IOError, e:
+            log.error("Unable to write calendar file for %s: %s" % (tzinfo.tzid, str(e),))
+        else:
+            self.timezones[tzinfo.tzid] = tzinfo
+
+    def _removeTimezone(self, tzid):
+        tzpath = os.path.join(self.basepath, tzid) + ".ics"
+        try:
+            os.remove(tzpath)
+            del self.timezones[tzid]
+        except IOError, e:
+            log.error("Unable to write calendar file for %s: %s" % (tzid, str(e),))

Copied: CalendarServer/trunk/twistedcaldav/timezonexml.py (from rev 7699, CalendarServer/branches/users/cdaboo/timezones/twistedcaldav/timezonexml.py)
===================================================================
--- CalendarServer/trunk/twistedcaldav/timezonexml.py	                        (rev 0)
+++ CalendarServer/trunk/twistedcaldav/timezonexml.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -0,0 +1,166 @@
+##
+# Copyright (c) 2011 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+"""
+This module provides XML definitions for use with Timezone Standard Service.
+"""
+
+from twext.web2.dav import davxml
+
+##
+# Timezone Service XML Definitions
+##
+
+timezone_namespace = "urn:ietf:params:xml:ns:timezone-service"
+
+class Capabilities (davxml.WebDAVElement):
+    namespace = timezone_namespace
+    name = "capabilities"
+    allowed_children = {
+        (timezone_namespace, "operation"): (0, None),
+    }
+
+class Operation (davxml.WebDAVElement):
+    namespace = timezone_namespace
+    name = "operation"
+    allowed_children = {
+        (timezone_namespace, "action"): (1, 1),
+        (timezone_namespace, "description"): (0, 1),
+        (timezone_namespace, "accept-parameter"): (0, None),
+    }
+
+class Action (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "action"
+
+class Description (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "description"
+
+class AcceptParameter (davxml.WebDAVElement):
+    namespace = timezone_namespace
+    name = "accept-parameter"
+    allowed_children = {
+        (timezone_namespace, "name"): (1, 1),
+        (timezone_namespace, "required"): (1, 1),
+        (timezone_namespace, "multi"): (1, 1),
+        (timezone_namespace, "value"): (0, None),
+        (timezone_namespace, "description"): (0, 1),
+    }
+
+class Name (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "name"
+
+class Required (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "required"
+
+class Multi (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "multi"
+
+class Value (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "value"
+
+class TimezoneList (davxml.WebDAVElement):
+    namespace = timezone_namespace
+    name = "timezone-list"
+    allowed_children = {
+        (timezone_namespace, "dtstamp"): (1, 1),
+        (timezone_namespace, "summary"): (0, None),
+    }
+
+class Dtstamp (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "dtstamp"
+
+class Summary (davxml.WebDAVElement):
+    namespace = timezone_namespace
+    name = "summary"
+    allowed_children = {
+        (timezone_namespace, "tzid"): (1, 1),
+        (timezone_namespace, "last-modified"): (1, 1),
+        (timezone_namespace, "local-name"): (0, None),
+        (timezone_namespace, "alias"): (0, None),
+        (timezone_namespace, "inactive"): (0, 1),
+    }
+
+class Tzid (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "tzid"
+
+class LastModified (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "last-modified"
+
+class LocalName (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "local-name"
+
+class Alias (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "alias"
+
+class Inactive (davxml.WebDAVEmptyElement):
+    namespace = timezone_namespace
+    name = "inactive"
+
+class Timezones (davxml.WebDAVElement):
+    namespace = timezone_namespace
+    name = "timezones"
+    allowed_children = {
+        (timezone_namespace, "dtstamp"): (1, 1),
+        (timezone_namespace, "tzdata"): (0, None),
+    }
+
+class Tzdata (davxml.WebDAVElement):
+    namespace = timezone_namespace
+    name = "tzdata"
+    allowed_children = {
+        (timezone_namespace, "tzid"): (1, 1),
+        (timezone_namespace, "calscale"): (0, 1),
+        (timezone_namespace, "observance"): (0, None),
+    }
+
+class Calscale (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "calscale"
+
+class Observance (davxml.WebDAVElement):
+    namespace = timezone_namespace
+    name = "observance"
+    allowed_children = {
+        (timezone_namespace, "name"): (1, 1),
+        (timezone_namespace, "local-name"): (0, None),
+        (timezone_namespace, "onset"): (1, 1),
+        (timezone_namespace, "utc-offset-from"): (1, 1),
+        (timezone_namespace, "utc-offset-to"): (1, 1),
+    }
+
+class Onset (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "onset"
+
+class UTCOffsetFrom (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "utc-offset-from"
+
+class UTCOffsetTo (davxml.WebDAVTextElement):
+    namespace = timezone_namespace
+    name = "utc-offset-to"
+

Modified: CalendarServer/trunk/twistedcaldav/xmlutil.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/xmlutil.py	2011-06-30 23:12:10 UTC (rev 7699)
+++ CalendarServer/trunk/twistedcaldav/xmlutil.py	2011-07-01 03:15:59 UTC (rev 7700)
@@ -16,7 +16,9 @@
 
 from __future__ import with_statement
 
+import cStringIO as StringIO
 import xml.etree.ElementTree as XML
+
 try:
     from xml.etree.ElementTree import ParseError as XMLParseError
 except ImportError:
@@ -24,6 +26,10 @@
 
 # Utilities for working with ElementTree
 
+def readXMLString(xmldata, expectedRootTag=None):
+    io = StringIO.StringIO(xmldata)
+    return readXML(io, expectedRootTag)
+
 def readXML(xmlfile, expectedRootTag=None):
     """
     Read in XML data from a file and parse into ElementTree. Optionally verify

Copied: CalendarServer/trunk/twistedcaldav/zoneinfo/links.txt (from rev 7699, CalendarServer/branches/users/cdaboo/timezones/twistedcaldav/zoneinfo/links.txt)
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/links.txt	                        (rev 0)
+++ CalendarServer/trunk/twistedcaldav/zoneinfo/links.txt	2011-07-01 03:15:59 UTC (rev 7700)
@@ -0,0 +1,136 @@
+America/Virgin	America/St_Thomas
+America/Buenos_Aires	America/Argentina/Buenos_Aires
+Hongkong	Asia/Hong_Kong
+Etc/GMT+0	Etc/GMT
+Asia/Calcutta	Asia/Kolkata
+Australia/South	Australia/Adelaide
+America/Atka	America/Adak
+America/Coral_Harbour	America/Atikokan
+Africa/Asmera	Africa/Asmara
+America/Fort_Wayne	America/Indiana/Indianapolis
+Australia/LHI	Australia/Lord_Howe
+PRC	Asia/Shanghai
+US/Mountain	America/Denver
+Asia/Thimbu	Asia/Thimphu
+America/Shiprock	America/Denver
+Europe/Podgorica	Europe/Belgrade
+Brazil/DeNoronha	America/Noronha
+Jamaica	America/Jamaica
+Arctic/Longyearbyen	Europe/Oslo
+Europe/Guernsey	Europe/London
+GB	Europe/London
+Canada/Mountain	America/Edmonton
+Chile/EasterIsland	Pacific/Easter
+Etc/Universal	Etc/UTC
+Navajo	America/Denver
+America/Indianapolis	America/Indiana/Indianapolis
+Pacific/Truk	Pacific/Chuuk
+Pacific/Yap	Pacific/Chuuk
+America/Ensenada	America/Tijuana
+Europe/Sarajevo	Europe/Belgrade
+Universal	Etc/UTC
+Turkey	Europe/Istanbul
+America/Jujuy	America/Argentina/Jujuy
+America/Cordoba	America/Argentina/Cordoba
+Europe/Skopje	Europe/Belgrade
+Australia/Tasmania	Australia/Hobart
+Europe/Jersey	Europe/London
+Europe/Nicosia	Asia/Nicosia
+Asia/Macao	Asia/Macau
+Eire	Europe/Dublin
+ROK	Asia/Seoul
+US/Hawaii	Pacific/Honolulu
+Asia/Ujung_Pandang	Asia/Makassar
+Cuba	America/Havana
+Asia/Saigon	Asia/Ho_Chi_Minh
+ROC	Asia/Taipei
+America/Louisville	America/Kentucky/Louisville
+America/St_Barthelemy	America/Guadeloupe
+America/Porto_Acre	America/Rio_Branco
+Europe/Isle_of_Man	Europe/London
+Australia/West	Australia/Perth
+US/Eastern	America/New_York
+Libya	Africa/Tripoli
+Canada/Saskatchewan	America/Regina
+Canada/Eastern	America/Toronto
+Iran	Asia/Tehran
+GB-Eire	Europe/London
+Etc/Greenwich	Etc/GMT
+Atlantic/Jan_Mayen	Europe/Oslo
+US/Central	America/Chicago
+US/Pacific	America/Los_Angeles
+Portugal	Europe/Lisbon
+Europe/Tiraspol	Europe/Chisinau
+Asia/Katmandu	Asia/Kathmandu
+Etc/GMT0	Etc/GMT
+Pacific/Ponape	Pacific/Pohnpei
+Japan	Asia/Tokyo
+Asia/Ulan_Bator	Asia/Ulaanbaatar
+Kwajalein	Pacific/Kwajalein
+Australia/Yancowinna	Australia/Broken_Hill
+America/Marigot	America/Guadeloupe
+Greenwich	Etc/GMT
+America/Mendoza	America/Argentina/Mendoza
+Asia/Dacca	Asia/Dhaka
+US/East-Indiana	America/Indiana/Indianapolis
+America/Argentina/ComodRivadavia	America/Argentina/Catamarca
+Canada/East-Saskatchewan	America/Regina
+Chile/Continental	America/Santiago
+Asia/Tel_Aviv	Asia/Jerusalem
+Mexico/General	America/Mexico_City
+Asia/Istanbul	Europe/Istanbul
+America/Rosario	America/Argentina/Cordoba
+GMT0	Etc/GMT
+Europe/Mariehamn	Europe/Helsinki
+Australia/Victoria	Australia/Melbourne
+US/Aleutian	America/Adak
+Australia/ACT	Australia/Sydney
+Australia/North	Australia/Darwin
+US/Samoa	Pacific/Pago_Pago
+US/Michigan	America/Detroit
+Asia/Chungking	Asia/Chongqing
+NZ	Pacific/Auckland
+Asia/Ashkhabad	Asia/Ashgabat
+America/Knox_IN	America/Indiana/Knox
+America/Catamarca	America/Argentina/Catamarca
+GMT+0	Etc/GMT
+Poland	Europe/Warsaw
+Pacific/Samoa	Pacific/Pago_Pago
+US/Indiana-Starke	America/Indiana/Knox
+Canada/Newfoundland	America/St_Johns
+GMT	Etc/GMT
+Canada/Yukon	America/Whitehorse
+Canada/Atlantic	America/Halifax
+US/Arizona	America/Phoenix
+Europe/San_Marino	Europe/Rome
+Australia/NSW	Australia/Sydney
+Canada/Pacific	America/Vancouver
+Etc/Zulu	Etc/UTC
+Europe/Ljubljana	Europe/Belgrade
+US/Alaska	America/Anchorage
+Atlantic/Faeroe	Atlantic/Faroe
+Etc/GMT-0	Etc/GMT
+Israel	Asia/Jerusalem
+UCT	Etc/UCT
+NZ-CHAT	Pacific/Chatham
+Iceland	Atlantic/Reykjavik
+Europe/Vatican	Europe/Rome
+Australia/Queensland	Australia/Brisbane
+Africa/Timbuktu	Africa/Bamako
+UTC	Etc/UTC
+Mexico/BajaNorte	America/Tijuana
+Australia/Canberra	Australia/Sydney
+Europe/Zagreb	Europe/Belgrade
+Europe/Belfast	Europe/London
+Brazil/West	America/Manaus
+Mexico/BajaSur	America/Mazatlan
+Europe/Bratislava	Europe/Prague
+Canada/Central	America/Winnipeg
+GMT-0	Etc/GMT
+W-SU	Europe/Moscow
+Zulu	Etc/UTC
+Egypt	Africa/Cairo
+Singapore	Asia/Singapore
+Brazil/Acre	America/Rio_Branco
+Brazil/East	America/Sao_Paulo
+Antarctica/South_Pole	Antarctica/McMurdo
\ No newline at end of file

Copied: CalendarServer/trunk/twistedcaldav/zoneinfo/timezones.xml (from rev 7699, CalendarServer/branches/users/cdaboo/timezones/twistedcaldav/zoneinfo/timezones.xml)
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/timezones.xml	                        (rev 0)
+++ CalendarServer/trunk/twistedcaldav/zoneinfo/timezones.xml	2011-07-01 03:15:59 UTC (rev 7700)
@@ -0,0 +1,2977 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE timezones SYSTEM "timezones.dtd">
+
+<timezones>
+  <dtstamp>20110524T222343Z</dtstamp>
+  <timezone>
+    <tzid>Africa/Abidjan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0fcf05e48d7a36e6f99b0ccf127acf05</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Accra</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5b122005ea7053af7128646e10e386e9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Addis_Ababa</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>98d0ae0479c533434b42e559cb5aa969</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Algiers</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1b81eb50a949c36bf56da7c422b074fc</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Asmara</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Africa/Asmera</alias>
+    <md5>008462a5d69e7f36667ff243a8c12d4a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Asmera</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d6969bf3236ba061d39d1c353c86e5c6</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Bamako</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Africa/Timbuktu</alias>
+    <md5>0fbb4cea7867d343edc63e473f3cb31f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Bangui</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>cbe8342b0479cdb8f486aca13eb56d75</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Banjul</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>fb9af78ae09a763d1a864f74aa61f14f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Bissau</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a45f2cb081f69be295d57f37c3e21c58</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Blantyre</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4090f0bc0ebca23d542b2a14ae259877</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Brazzaville</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b8c4a6d0df9e1e125321edf3a36bbfea</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Bujumbura</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>edfab88164558e23b5860b0180445672</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Cairo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Egypt</alias>
+    <md5>303628a1b15934d89c65236b214d5ef1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Casablanca</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>807ef6d6bfcb4b8c82ea3b6930092b03</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Ceuta</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b7a453375ad3bc01e66127013467fef5</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Conakry</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d9fa87e17b785562f7f6791afdc2f896</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Dakar</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bcab3d81c32f9a38677544cf8eea6cb1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Dar_es_Salaam</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>144461fadf38879a137acb180d577046</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Djibouti</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>df8f9f5b5519df56f95d84bbb3888b73</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Douala</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>168bceefa704a63b7c2e962a32da15b3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/El_Aaiun</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6bff529e2345232c0797cb6d700de9eb</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Freetown</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d2f77ae19cf07a10dd3f9f741cf930ac</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Gaborone</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ba0254f317a0b0535490c712b020534e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Harare</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6ccb1f2a4e632a447df8ad2bfe4d4a06</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Johannesburg</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f6802d899b5695b447ba598dd1504040</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Kampala</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>867a67e59780ff3091afea520ad29648</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Khartoum</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>728c7aad82c6a4ff7df077905ecb9fd7</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Kigali</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8f0b1985803bda290999f6039493bcc3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Kinshasa</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2c2fff072133754a5fdc928763c001e4</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Lagos</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7d2904f2dd1d2841c6f107f5c4db4387</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Libreville</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d4c99bfd201d9594675595ac87699bf1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Lome</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>214d7d2fe79686bb7c77f27c7b49edca</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Luanda</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a66c4cb806fc68fb3b71bcac8521e68e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Lubumbashi</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3edcaddf532595f14f48f03304c6f9e7</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Lusaka</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c0954c9c3a470bc3a32f696d0af411a0</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Malabo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>46315c4f896cfa72e9d17cd53434cb51</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Maputo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>dcf772ef78be810e2f25e556d812b0da</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Maseru</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bf538a98f8f0ec9520ee76acea669040</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Mbabane</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bff6ce865b01857423c6a1019c98b744</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Mogadishu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1372052d8814730798c2e05d0113af41</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Monrovia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>989f40756a0d6bf894733dbceeafede5</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Nairobi</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e3874408ce87ac7ee2082cb3b953e1d5</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Ndjamena</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2f07ce43a48854996ddbcd86eab687b0</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Niamey</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>66721856ee219a64bc7d24f501acd20d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Nouakchott</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>93ee884b82837b957f7fa6134286af82</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Ouagadougou</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>eb188aeb9b64eb470bf5d2f0bf823b3e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Porto-Novo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>18851af5e4bc5b483a30e78201aafd2f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Sao_Tome</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>dc3c3befd8d22a744757778db6af8d8a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Timbuktu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>776e14e3bcf1653254111adfa4230aa2</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Tripoli</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Libya</alias>
+    <md5>07ce9436455949eab6e53bf750ba726e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Tunis</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>dde6e185317319134d961ab1abf0bee7</md5>
+  </timezone>
+  <timezone>
+    <tzid>Africa/Windhoek</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>be23afeacad3051b4ceda0a205010326</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Adak</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Atka</alias>
+    <alias>US/Aleutian</alias>
+    <md5>88197e1ab2d6434581dadc577d1fe676</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Anchorage</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>US/Alaska</alias>
+    <md5>4045943bac76495d07cbf1e5a980208f</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Anguilla</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>687cbf868c6b12e10c51ef407a390cf7</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Antigua</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b4cce7c9da9c13f23719d6b45c38316f</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Araguaina</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b84dda238314659b3a16971733d8ba36</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/Buenos_Aires</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Buenos_Aires</alias>
+    <md5>6e4aacdd8790f88716470cd84aac7426</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/Catamarca</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Argentina/ComodRivadavia</alias>
+    <alias>America/Catamarca</alias>
+    <md5>63178ac98e79386ed9dc99b7b3f4e9b7</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/ComodRivadavia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d28191983cf0bd57dead07e33ab113f1</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/Cordoba</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Cordoba</alias>
+    <alias>America/Rosario</alias>
+    <md5>86bc9fa178cfcb8a3e96415c93d4bfe0</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/Jujuy</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Jujuy</alias>
+    <md5>5a9335b53eed5eb4b39fc62fa9326f7a</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/La_Rioja</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f20c2176753855ab917c5010767d7e77</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/Mendoza</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Mendoza</alias>
+    <md5>9adeea740fdebaa6ab19b3618c3f826b</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/Rio_Gallegos</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a83b3a1cc070744b030d6a44a019b8bf</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/Salta</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>11fc6d584e894a7036101fa3cead7d2b</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/San_Juan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>214e46795aacd0a5c8c6fd5397d4967d</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/San_Luis</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9e98700a6f7e9e9697e972e57cce6991</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/Tucuman</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d8e7f19248d91f2a44c62fbcf092aff5</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Argentina/Ushuaia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3c4c40d3f2e17062e4c572d1d722b762</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Aruba</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>08e321eadf83a0d5d08feb2f8492591d</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Asuncion</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>774e58420bb30828098c8f2e26a60b3e</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Atikokan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Coral_Harbour</alias>
+    <md5>129dead78651811d3745c820fba72cfb</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Atka</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c2dd02409b639ad69b2a8eee12ec6d0b</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Bahia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>32755285c8e0775179e3ca12b896122e</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Bahia_Banderas</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>29c32e9e20e5acbc7285994503e58ead</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Barbados</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>aea469a179590023606cedf8fd211dad</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Belem</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>76dd0eb2e455786c76322ea471c82356</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Belize</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6c33d2d0b6b595e0f64db176e7b5b147</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Blanc-Sablon</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>78c833c646fe05d7ddc3b545b895b453</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Boa_Vista</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8ed43179497419109543893baddcd819</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Bogota</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0d3afa42de84aaa4b1fe67bad7feb0a9</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Boise</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8781a79edbfc1ac61e7b8731f4294a35</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Buenos_Aires</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7e7edd686d32a75090f5e07a98a529d5</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Cambridge_Bay</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c27fbb6abb8f3b982df0c0d68eb6a658</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Campo_Grande</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>43b8c58d3937c7d1e545bc3b90110da9</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Cancun</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>063210c9c8d70f2868637c12410c3578</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Caracas</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d4159627744e51e6f71d0a546e2588f3</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Catamarca</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4695f5d57964a61843e5f3e2362df39d</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Cayenne</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>300cdcbc3a351f82443864a74be2540c</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Cayman</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>08ac4be77e2bad55db61bff1dbfd7662</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Chicago</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>US/Central</alias>
+    <md5>d2472c1a90094942dc907c11399bd593</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Chihuahua</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>73c3882a58b5497c83099130a4035ca6</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Coral_Harbour</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1385660407294496fb5b46d8fab8d77b</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Cordoba</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>38dc0e5786839e93bf0fbf5c4d5941a1</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Costa_Rica</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>96111388fda324f3c1a9b6fc06b524d6</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Cuiaba</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>95d95935d3f5fb2a946767d65e2cfda0</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Curacao</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ff9d225c499f36ba2f333fc65eae936f</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Danmarkshavn</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5f46e7416701c9734215a0ab7f7a0dbd</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Dawson</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>95023b66c8ea2c455093094bb5ed69a2</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Dawson_Creek</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>556674734541cebc5c0d047bfd5f682f</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Denver</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>US/Mountain</alias>
+    <alias>America/Shiprock</alias>
+    <alias>Navajo</alias>
+    <md5>59328ae6483fe7489da7c343fee2463d</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Detroit</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>US/Michigan</alias>
+    <md5>ea8dc7e7951dd0620ea3322116382e87</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Dominica</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5176a0dd76b1bd16d6a19d1f1c3da99e</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Edmonton</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Canada/Mountain</alias>
+    <md5>8fb9d50bac48b2eb5787148125020a39</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Eirunepe</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5c82e3d7242c086a5df5ed76196f4918</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/El_Salvador</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>13c9b18527916dd09b18bb930ff89179</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Ensenada</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1e35baa391c76bf929ace6c13d797be4</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Fort_Wayne</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1c7b9385d4c028df6b64d83f485d3f89</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Fortaleza</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e872bf96bf17b47176a36feb448f5523</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Glace_Bay</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>89dcfb2c4d6e7e300ff2c09dc57b82ad</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Godthab</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bdba8cbc6cbf7992fa986fbb015e5d41</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Goose_Bay</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0626638e85e62379f3898d3196c2b396</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Grand_Turk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3b8284f092daa70de261550da55536fd</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Grenada</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>14dd2ca572daea2b10dc5043e08de847</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Guadeloupe</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/St_Barthelemy</alias>
+    <alias>America/Marigot</alias>
+    <md5>7a9859133c587de0a20af7d1140e60ca</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Guatemala</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>cde93fef47ee68b6df6c659fa56104bc</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Guayaquil</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>28f8c5ed72c5d4def311371370ad5ddf</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Guyana</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>757ce000cf306242a43353619f19b688</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Halifax</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Canada/Atlantic</alias>
+    <md5>15b97bde388255fdf7c1ce9ae30aa023</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Havana</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Cuba</alias>
+    <md5>02d557f40ae2c50d09063c2513200fcc</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Hermosillo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>649e4044558ee398099fa718d26ba79e</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Indiana/Indianapolis</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Fort_Wayne</alias>
+    <alias>America/Indianapolis</alias>
+    <alias>US/East-Indiana</alias>
+    <md5>90721c154cf9b86b3af093b170d9eb0b</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Indiana/Knox</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Knox_IN</alias>
+    <alias>US/Indiana-Starke</alias>
+    <md5>6f06884417c25e90a20361a47c526952</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Indiana/Marengo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>887d9ce76bc78593ed588e476222eacd</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Indiana/Petersburg</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c758f4fc8e24b07099c563bdf56c2ed3</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Indiana/Tell_City</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0996af2b65e7418191e3fe7f697fdf6a</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Indiana/Vevay</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8fbce0e2377e20762fcc5a0df2dfdc26</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Indiana/Vincennes</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1c8c903c6ccd665a50d6aedc140b378f</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Indiana/Winamac</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8c03a299852f6f5129fd8d615a09670f</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Indianapolis</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3f868e4cdcdd6eb29c1bbf5d7798848c</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Inuvik</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>68dc3551e5baf71a179d96169a5a36b2</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Iqaluit</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b514429c80db9b068b65891548e83618</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Jamaica</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Jamaica</alias>
+    <md5>08bef878a5cb3556220b971f3f62dfd6</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Jujuy</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0c4f2bc0ef8753e31ebd2d444e75b1dc</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Juneau</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3b74fda207d428c0bc60fe2a2ca307e2</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Kentucky/Louisville</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Louisville</alias>
+    <md5>49b2100010ffdf428d380cfe4c6fe86d</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Kentucky/Monticello</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>db657abd841d3d8d4fd70444dcee94bc</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Knox_IN</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>898c27f22999edcd197e925170662679</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/La_Paz</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e9a262d2c2a19aeda5a4b3427da01e1b</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Lima</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bb02df766781c421856375c9d96d0392</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Los_Angeles</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>US/Pacific</alias>
+    <md5>91fe68a09e03398fd9132b28cdaedd86</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Louisville</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>089feb5f58851bbcd974c299acb019f1</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Maceio</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>985f8f6e98f067fea274850a6e20b223</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Managua</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d947cff195825a905305a7e0c47fea48</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Manaus</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Brazil/West</alias>
+    <md5>1098c0fa21edb2e460c9f4792758e4d5</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Marigot</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f17d6c8f11c96d7972c20658e56b3124</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Martinique</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2784b7444b5d95dbf6fca33783f23323</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Matamoros</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9c5f5da35d8b9fd8cd22cab8eade6a3d</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Mazatlan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Mexico/BajaSur</alias>
+    <md5>2ffdda7f2d12e778feb1766fa62e1eab</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Mendoza</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d4987b2f5ceca90a08e292aebfe0522c</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Menominee</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3b1b2d818ef32aa1394da914c50a7c46</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Merida</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7b8842f7bf22ce867c85b8076f223ad0</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Mexico_City</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Mexico/General</alias>
+    <md5>34d1e4a19267a3b927db2be82e02a617</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Miquelon</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3b2377d0278a6f8e5069b4c36654ae78</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Moncton</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>61428154465c9cbecb5d4759c00cbe26</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Monterrey</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3a56a0088389aace524eae546b4430bf</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Montevideo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2a700fb7942d5705552d0dd1c66fafa0</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Montreal</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4b9a778da2c46d3eafa43bb376e13205</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Montserrat</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>66757f6278e87427751fde2a2758ff7b</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Nassau</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>598abb2fc5b19d532497385a200fe488</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/New_York</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>US/Eastern</alias>
+    <md5>2d9bec32695c62ab323636894d74cb65</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Nipigon</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>553f98de3ffc46b292eaaeb65f2ce9fe</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Nome</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a9bd10af72c7a4462d468fd2c06a8ba4</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Noronha</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Brazil/DeNoronha</alias>
+    <md5>e5a143e48abdb682af49e9b53663fead</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/North_Dakota/Beulah</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ef88313c87f08f7cd28a517d5086f079</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/North_Dakota/Center</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5488fb40869601823685bd12ca80c3c3</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/North_Dakota/New_Salem</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3f021d6261af68e23d2d2d45e5d3e22f</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Ojinaga</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b87762b86efda39216e28dac813f0fdb</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Panama</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d578cae741e9d61f0bfed9d5daf1782b</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Pangnirtung</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ebcb38b8258be794086d4386389a5d49</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Paramaribo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5368cf9fdcdb553c3afd78f0d6c44a73</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Phoenix</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>US/Arizona</alias>
+    <md5>38acd916e1359510361235c9afcd5cb6</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Port-au-Prince</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c5742eee6723863cf24e543777042afb</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Port_of_Spain</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e67c574e550aff70b0ff733b26985d8e</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Porto_Acre</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1ca5f2c2cb5a40614d14a89697977dd6</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Porto_Velho</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a9e2f24e9a40a68c9a3aae205bcacf9c</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Puerto_Rico</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>51eb32aa5363bc4fe6098f88b2de0d58</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Rainy_River</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>89767f86a4c2c52ecab7b18876a34f9a</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Rankin_Inlet</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9ad0d08947747170f209421ff4a65017</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Recife</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9b037e7ad14c0f52786fb9eb3c4b8667</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Regina</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Canada/Saskatchewan</alias>
+    <alias>Canada/East-Saskatchewan</alias>
+    <md5>6fc39ad0bacee7a181f236b9217af82b</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Resolute</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0b133fb621c14025c5e99b54dfd9ea9e</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Rio_Branco</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Porto_Acre</alias>
+    <alias>Brazil/Acre</alias>
+    <md5>9e065ab026516d3a4312f1b729f1cc45</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Rosario</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b45f45929dd036f7d3fa79f07186ea18</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Santa_Isabel</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f4297d1d4f79658b9a9147323e137581</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Santarem</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8a096b2ecc95b9bdfce361c4ca6cb857</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Santiago</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Chile/Continental</alias>
+    <md5>abb8104f47f738b9214dadf8d18e5682</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Santo_Domingo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e7f512605821377cde466372565b9222</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Sao_Paulo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Brazil/East</alias>
+    <md5>d92556c31e129514037b82e49a18116a</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Scoresbysund</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d4905e6eb95a733d6eb902bec279e740</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Shiprock</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8fa4d78e424556e881f1c3135e8fbdfa</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/St_Barthelemy</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>eeb885d2d5d89cf20d2fa62ee928d742</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/St_Johns</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Canada/Newfoundland</alias>
+    <md5>9367260975a764eebf334f99f3f6a409</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/St_Kitts</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>226f9372a3ed5bd1fd306c1d1779c5a6</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/St_Lucia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>828fd653e5f71f019c7280332d86789d</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/St_Thomas</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Virgin</alias>
+    <md5>107adceeed7f4679fd06ff3b8ae629d4</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/St_Vincent</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3f2c721f9c4d7b37bac3ebbcae88c508</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Swift_Current</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2cf915990ddab08ad95a6bb836109da6</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Tegucigalpa</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>482941e3834bcc0aa38d1c566bf4126c</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Thule</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a544d0ce7e95055a29ee35e2a018f2e9</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Thunder_Bay</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>550ec3e5697c597d40a3bb9865698109</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Tijuana</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>America/Ensenada</alias>
+    <alias>Mexico/BajaNorte</alias>
+    <md5>d573dcb4a5d5d91abadf7b0622c947a8</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Toronto</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Canada/Eastern</alias>
+    <md5>22e97d2cf539bcd4ddc864a38668ff79</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Tortola</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7d516b83878b788f5b6f533ed48cfb73</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Vancouver</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Canada/Pacific</alias>
+    <md5>a109a219e552cedeb5aec84e59d9a908</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Virgin</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>69618fb5ef9c96a9de1c94de85dbecfb</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Whitehorse</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Canada/Yukon</alias>
+    <md5>87310162bf0bcce9488e2e76dbf504a3</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Winnipeg</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Canada/Central</alias>
+    <md5>0bb842a956cfd302c849fac5783476a0</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Yakutat</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ad84735840866913c01a765b386c8cd4</md5>
+  </timezone>
+  <timezone>
+    <tzid>America/Yellowknife</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>836a537bfff3769996a63183ff5ab000</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/Casey</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b7de8273028691980174dcf7ad5e3005</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/Davis</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>63ebdd9e12db8dc01d0000f8d1078b61</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/DumontDUrville</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>be0807f6e8dc9dce3ad0995a4212d706</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/Macquarie</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>16ad04266385e18df3a99da9c068b08a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/Mawson</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f710ce03a9194b180e129b1ec3583d5d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/McMurdo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Antarctica/South_Pole</alias>
+    <md5>d45b23ee73e5eabd9d7fec0d92aa83b2</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/Palmer</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ed72a95eeab146b34b41a69f7d0dcf78</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/Rothera</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>641756a5e90259dca12c5b709d96d9b8</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/South_Pole</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5bdfa920c3f8154ad9820d6d1403f41f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/Syowa</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bd9314be6dd35bec6543286a090b52db</md5>
+  </timezone>
+  <timezone>
+    <tzid>Antarctica/Vostok</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2ee2b3ce6051d0dd89ab165688af2d6c</md5>
+  </timezone>
+  <timezone>
+    <tzid>Arctic/Longyearbyen</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a784eb877319bb02fbdde034d1820f27</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Aden</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6b80c23b01e366ef42d4422263762794</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Almaty</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>14169b06da736d1b5aa3dfd6e92d9ea0</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Amman</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f218a425648f8b300ca4ac2722e2ba36</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Anadyr</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>913a8114b7a49535e2a735515b776317</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Aqtau</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>015da5d2caf25879dfcd898d113aacdd</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Aqtobe</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>380097cb325d5e54e07d390839646814</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Ashgabat</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Ashkhabad</alias>
+    <md5>0ba18870ac7b67df1611888f80cbc3aa</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Ashkhabad</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9651940409633c796b8ea1988bebb2bb</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Baghdad</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>394c10742e185ebb8741083ae64dc587</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Bahrain</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4922f230b548503963a25da79bf50524</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Baku</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5ae16fd73000dfa945272d7038508136</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Bangkok</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5e97576c0b3331066fd06dc98bcdf51e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Beirut</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f9344d4f40b9ac3014d31432e25e8325</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Bishkek</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2d80252be1aea7d46826b8847e28a741</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Brunei</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>83eb034daccc4140b8fed0f91f4bc714</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Calcutta</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9084c38b0529749f095b21982af6bd07</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Choibalsan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b5a33b682af25cb940f8d9985fb72135</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Chongqing</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Chungking</alias>
+    <md5>2a2b85332b18ac228a79734f6a5c5bed</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Chungking</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1991f7c6c7b26b0c3ae7fc88501195c3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Colombo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>eeecebef588c1451c29501a1dc34fdc9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Dacca</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7bdc0d7bccaf44e5d6e87737be776b8d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Damascus</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e893cd07eafa890a098ead4efb41f811</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Dhaka</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Dacca</alias>
+    <md5>acaea67e7653bd9b07bfc3f280d41bd9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Dili</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4cf070386075a128e2ca1359bbebae2e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Dubai</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>75694e6dd67c50c95197a9929b8ae561</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Dushanbe</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>dbfba9788e393138194469d081172ba6</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Gaza</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c245ad4fce54247a654109d2aac96c47</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Harbin</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>529321b154e4bed45ecd549dc363e05b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Ho_Chi_Minh</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Saigon</alias>
+    <md5>97580c4eeb597ab8655d3e75262c3a0a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Hong_Kong</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Hongkong</alias>
+    <md5>368d1a2f6dff586bcb2d9250e22cca6a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Hovd</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>775f6ec6a92bb6e85dd02a70947133ec</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Irkutsk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7b9b16c323377b25580acbfde099ebbe</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Istanbul</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a8600aaef50f079c14e290c42969013b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Jakarta</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8c185f964eb7ef23070614ffc4385d7c</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Jayapura</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9199923119ce086ce72c4536e15736c5</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Jerusalem</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Tel_Aviv</alias>
+    <alias>Israel</alias>
+    <md5>facda736f3700f52f0669856d5c0bbdf</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Kabul</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>539d1033b88a3d04f0e1f23879b1fe3d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Kamchatka</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>041fd5edc6307323383b830c4b59df96</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Karachi</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>719fb183063f58bfb0dc31687676406e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Kashgar</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e339aaf1f2ceede2c3ca39dfe76ae7c0</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Kathmandu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Katmandu</alias>
+    <md5>eaf245f9f94f408b4e10a68af275178e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Katmandu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>91b62fd029fbd792b4c5ee4536d7fafa</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Kolkata</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Calcutta</alias>
+    <md5>444dccb232345981738808def1ebf508</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Krasnoyarsk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ba36e054c863b726fe849af2e1258fb8</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Kuala_Lumpur</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ede5f66d5a982e04605e7c86e0a803b6</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Kuching</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>326df0c3de6245a28005153c1bf23003</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Kuwait</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d0c4f475d2c7952a2f05410ec59af5c1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Macao</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>777da83161869952b0c291f282d614ed</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Macau</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Macao</alias>
+    <md5>70b015f9ab27ba97972c818b01a289d6</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Magadan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>28499637b8f50f9d2e4cdd2636a787ef</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Makassar</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Ujung_Pandang</alias>
+    <md5>26b9060acaf481056fa44fdf8d92a734</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Manila</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>53e964708083dd40aaf004f2dd290e6b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Muscat</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f6cb2f96600471881b0619abe568d711</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Nicosia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Europe/Nicosia</alias>
+    <md5>66839c9b2439f4b2e8322a5609c4ce89</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Novokuznetsk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ac59178fd52dd4d92f1cd81027e1b43a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Novosibirsk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>758d2569721bc7fe8fceb254631a6d06</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Omsk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>cc1956e671ea66262db3528b381bd0eb</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Oral</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>828d4ff0ba41b8cd736b2a180d05afdb</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Phnom_Penh</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9e211b43ac0bd1ba9be5a172af0b0d1e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Pontianak</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>81f6f3d1de5bed831a9c18a7ebb2d2ff</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Pyongyang</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d5d783f5ce5c76c3f7eedc83b5f51afb</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Qatar</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>041820546d49daa7d188d4f461a7612f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Qyzylorda</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7017be9df67c7789cfcbf970540ce965</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Rangoon</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>27e308a3ef5f4bca4406297ffe3046ca</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Riyadh</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3b35f2dc4b38354d324aa7da7af40392</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Saigon</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c0476c0c86db56b0dc85e4df385e6046</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Sakhalin</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4b6ba872cde485f81c797e5ce2dac90a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Samarkand</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1d30a9f2b6a5f165d1f7dfeed4c6cc31</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Seoul</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>ROK</alias>
+    <md5>4605e756d086fd9b0f95ba6bdbcbae90</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Shanghai</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>PRC</alias>
+    <md5>c7985096e8a727a4ab3b79ac7a828040</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Singapore</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Singapore</alias>
+    <md5>3f7332e42f78ac89d9c1a28b8622f106</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Taipei</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>ROC</alias>
+    <md5>9d392a8ef42db0bbf519dafef412bcc6</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Tashkent</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0fb54d04b852464dc5761ea8c446b8ff</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Tbilisi</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>26f7f38c4a2b671824e97f2f778c544f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Tehran</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Iran</alias>
+    <md5>50f2759139ffa076f5dd89762aa82805</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Tel_Aviv</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>19f82c10e5fd8e13e0e9051fdfc3e183</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Thimbu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ffd6af2808fd9504cb7f08c24a0db9c1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Thimphu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Thimbu</alias>
+    <md5>ce16342503096656df6094233c121ccc</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Tokyo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Japan</alias>
+    <md5>22ec39f98d3d8fc2ee920a90b4a06ec2</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Ujung_Pandang</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>784b80ca0113aab679b200e44fe70b84</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Ulaanbaatar</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Asia/Ulan_Bator</alias>
+    <md5>a45a3e93d090e56ea43c73ed6d285acc</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Ulan_Bator</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d1fdbf7f908c69c5b3df79715ab6f5ec</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Urumqi</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f87206b1c9198689ce720df233bb7036</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Vientiane</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>22fbabecf32f048104ded204479aec86</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Vladivostok</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>29bfdba180c86001360f6031b89cebfb</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Yakutsk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d8b81a9798f0299c7255452c03d5975a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Yekaterinburg</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0536395d4b8f29cf17db7d61277ee7a3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Asia/Yerevan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4ee91fa55df5ae4b4ef127d839f1b3fe</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Azores</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2a7fa08397e5a253d6dbba46a75ce948</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Bermuda</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>52eac82e4b5e6a497458af0364ea859b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Canary</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3b0db623a5448caf0a942768773940ec</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Cape_Verde</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1d4c63a7ed97112e4425c00c12b1d8a3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Faeroe</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a769309c5ba22877acd1ba4224b1fe78</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Faroe</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Atlantic/Faeroe</alias>
+    <md5>76ce21b7fb95da27b51dcc03c746791f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Jan_Mayen</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bbc1a692c33a89efb127f06e1020dc21</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Madeira</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>93b67a3a4740e9617b9cca79812cb91b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Reykjavik</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Iceland</alias>
+    <md5>64b4a295229ba36c828762d5e0e75532</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/South_Georgia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d4709c22407d9e9025a510d9ca252640</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/St_Helena</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e81bce49d94a6d9c69e96392bd05222a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Atlantic/Stanley</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>23c31bfc7aea9467056b4ea937305573</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/ACT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>db066c2df2f404d656f75e51767b8e40</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Adelaide</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Australia/South</alias>
+    <md5>f57af299a6520fec76ec1f1d068455f4</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Brisbane</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Australia/Queensland</alias>
+    <md5>20ca89ab215143e09b6ad5f65fa68d5f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Broken_Hill</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Australia/Yancowinna</alias>
+    <md5>cff07762dda8c8347a593edc248bb469</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Canberra</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>99778b87101117e2dced4ebcff7b5dd3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Currie</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e2411588e21765b8df6af886f5632833</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Darwin</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Australia/North</alias>
+    <md5>c89f5110c34efe3560346e7a62c57d59</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Eucla</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b43e564dc008242e1d906ef6e97163f9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Hobart</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Australia/Tasmania</alias>
+    <md5>1b0c6adc67fec258c788b649921e8fb7</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/LHI</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>71a13c2df13822df8a78a18e1149b86b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Lindeman</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>50a95c7265324d3d7370b88d68c3d7a9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Lord_Howe</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Australia/LHI</alias>
+    <md5>fae96929a55eaf8ce70b77f2ac6805d2</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Melbourne</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Australia/Victoria</alias>
+    <md5>7a19941128d1288302e5cb9c7c5fa219</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/NSW</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b7bc7491fdd7fab117c37b2d29c8d852</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/North</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2c73d84d10141e282a4f9557a9346b9f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Perth</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Australia/West</alias>
+    <md5>f8bc3c2a4f45fa8bf56f17d84b405a9c</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Queensland</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>71aac1a36656fdff0bf8e431d2795a6c</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/South</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b5d9388a610d79ea43763f46397e2a77</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Sydney</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Australia/ACT</alias>
+    <alias>Australia/NSW</alias>
+    <alias>Australia/Canberra</alias>
+    <md5>f0afeb2de78c01d9b9cee8399cdb58cc</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Tasmania</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>cf82f5362ae99083bdedeffe58901d4d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Victoria</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6292197647dca58c18fa597701226cb0</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/West</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bd5a8bf4399ba7b5f8b22b57af822a43</md5>
+  </timezone>
+  <timezone>
+    <tzid>Australia/Yancowinna</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f87ac1003867f02010bb8bf0cc58fcc1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Brazil/Acre</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2d42afecfe9b9569eba8a2fc453b96aa</md5>
+  </timezone>
+  <timezone>
+    <tzid>Brazil/DeNoronha</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4d854d29975bff69f6c462db85701bf2</md5>
+  </timezone>
+  <timezone>
+    <tzid>Brazil/East</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>43bdb6e7291587256aa4d3a635e2071a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Brazil/West</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b72b36b3d708816e735ea600683fedf0</md5>
+  </timezone>
+  <timezone>
+    <tzid>CET</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c96065172df48923dfda9a0d441f8d41</md5>
+  </timezone>
+  <timezone>
+    <tzid>CST6CDT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b8caeb201f96ca8956c964f4d355e86d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Canada/Atlantic</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>670187f29c0dab1f2a533d46c7db6220</md5>
+  </timezone>
+  <timezone>
+    <tzid>Canada/Central</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d5374b13077ef7d816a8f42f84567416</md5>
+  </timezone>
+  <timezone>
+    <tzid>Canada/East-Saskatchewan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ef29666d71da2726525fb5e7c4628675</md5>
+  </timezone>
+  <timezone>
+    <tzid>Canada/Eastern</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a03b6a887ccf2779dcb99f14256edb8e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Canada/Mountain</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>022ddebe4c52e691a26a082d93714a2a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Canada/Newfoundland</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>805a030b9a8113fd92ab3674f378cb41</md5>
+  </timezone>
+  <timezone>
+    <tzid>Canada/Pacific</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0b2620879c72adb20ee147064fc9af31</md5>
+  </timezone>
+  <timezone>
+    <tzid>Canada/Saskatchewan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>18a2594bcc9609c49872a158b6d309d0</md5>
+  </timezone>
+  <timezone>
+    <tzid>Canada/Yukon</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>680327261b3fc3494152d2f290ea102a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Chile/Continental</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>680bf0697fc77a3dd8922420abb1f306</md5>
+  </timezone>
+  <timezone>
+    <tzid>Chile/EasterIsland</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ed84071967448af72fea11ea8c2ff531</md5>
+  </timezone>
+  <timezone>
+    <tzid>Cuba</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c98d755cfe335f1901ebdbe25224d8cc</md5>
+  </timezone>
+  <timezone>
+    <tzid>EET</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c7d529b441f0a786c4f01424c42547b5</md5>
+  </timezone>
+  <timezone>
+    <tzid>EST</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5ecfc6b93f491d7b3795ea398c319493</md5>
+  </timezone>
+  <timezone>
+    <tzid>EST5EDT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d65f1fc659b6bfa7bda141b578f31378</md5>
+  </timezone>
+  <timezone>
+    <tzid>Egypt</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>59587cdfeecb9698857ec613108fa34a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Eire</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5413caa2a5719c9126a08dc445db0718</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Etc/GMT+0</alias>
+    <alias>Etc/Greenwich</alias>
+    <alias>Etc/GMT0</alias>
+    <alias>Greenwich</alias>
+    <alias>GMT0</alias>
+    <alias>GMT+0</alias>
+    <alias>GMT</alias>
+    <alias>Etc/GMT-0</alias>
+    <alias>GMT-0</alias>
+    <md5>24a9dcffbb77262f96d66c173f05315f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+0</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8267ba3c62bfe5326b43d13f0ab972ad</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+1</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e033ac67903ae6e007aef4de9a2cff21</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+10</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>eb3cd710e7dceae90ef72fae5e7fc573</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+11</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3da83b8fd36b99f1e14d5be1b35dd7b4</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+12</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0fe6a06c5b907e281201838cad33dba5</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+2</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>db3f55cb06eb3d7b60a6974b42f0dc60</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+3</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>177e90679792ce0a9e2f5417baa1f3e4</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+4</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>28f404574e68f6d8f84eaa3a0a63a469</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+5</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>92ff5fa1f10039769a498dc6c0ae1ced</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+6</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ebd993f92514cf7ff0b99b448b8b8846</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+7</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>db078e01eb87f0d635f4a797def5cbd0</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+8</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>365cce7e2d2806ef0d7c5b058e35c219</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT+9</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f5542c5230d30c619033b74c27cc901f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-0</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7f24bca21b2e01edfa7ff176d66e1740</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-1</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4d71df3025dce932498fcf34b82365e9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-10</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d43a63c01b501ada0b8587ab9b68508a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-11</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5790bda8dcc20f060308d9996d48aac2</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-12</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f3dbbb903b3edc3797f98b7156148ac7</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-13</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c4a1754b45e30b4ad0841189a5ad47be</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-14</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ea5d1e3b84a2b416019d1b4561c0f8fc</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-2</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>08f530f55a73e55403029dc0920e3f3b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-3</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e04228519eb5ee052efcb550ab794e5d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-4</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>94efac1123c46b50ac559454d8e4b9f1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-5</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2561b58917cceb29226258f5ab17656a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-6</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f1e61aacfe9b7ac9e988c639848f775f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-7</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d2782bd83e7b07c706960aac63a7dc83</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-8</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d417f51f4a45c0407e1f73113d854a3b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT-9</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>aa44bd3b5cc062288f393ea8e9a61f98</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/GMT0</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e7c20064a273c4d3b99983da17b880ca</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/Greenwich</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>494fe0852a5b8ab69539c88cd32ac001</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/UCT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>UCT</alias>
+    <md5>dbebdb901d3ca63b44fae8ea59c58de0</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/UTC</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Etc/Universal</alias>
+    <alias>Universal</alias>
+    <alias>Etc/Zulu</alias>
+    <alias>UTC</alias>
+    <alias>Zulu</alias>
+    <md5>647f260e8bdf958f5889d1dd2a4ba248</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/Universal</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1d5131e1b6976ee063e21bfd88173f25</md5>
+  </timezone>
+  <timezone>
+    <tzid>Etc/Zulu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>445e8cefe9b4f22f952505fbc56e7a75</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Amsterdam</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6a8841f753a5e5ff3f3183baa1b80387</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Andorra</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>401c2f9a1b8d9becadf9811d3e47ce61</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Athens</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>57fcad5e5797427b4321d47353b776a1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Belfast</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8915fc1f64309699bdb635ffe17d6b34</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Belgrade</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Europe/Podgorica</alias>
+    <alias>Europe/Sarajevo</alias>
+    <alias>Europe/Skopje</alias>
+    <alias>Europe/Ljubljana</alias>
+    <alias>Europe/Zagreb</alias>
+    <md5>f35688a3e389163467e9f191c0fa97e5</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Berlin</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>87587b2ec8a203f2e6646e36a3f4867b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Bratislava</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1c059970c03f59d05085e1a7b7e4f1a9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Brussels</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>729d9c8a130038acc430bedf91fd247f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Bucharest</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1c985250aa1b8313c219936af02c2852</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Budapest</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d2c154bfb7b7e0d2310681a12efeca3e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Chisinau</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Europe/Tiraspol</alias>
+    <md5>605c553e75fc606cce53516b6b8d7528</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Copenhagen</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0cdebfda1b1c2e9c76023140a7e27f81</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Dublin</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Eire</alias>
+    <md5>84d40b0758b82158b2f95f9069d2d34e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Gibraltar</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>98b2c65efc5ea6f9c75621a0aa251d46</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Guernsey</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>328904ecf06664daae7be948338fd864</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Helsinki</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Europe/Mariehamn</alias>
+    <md5>30f6c8d68f93d4303f901e315339dfbf</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Isle_of_Man</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1e1909739a043b39cbcf127c63902e7d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Istanbul</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Turkey</alias>
+    <alias>Asia/Istanbul</alias>
+    <md5>c4e556c58c092a82e739ef031c5cafc3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Jersey</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1aea27a8b7f62f695a7442edd792e303</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Kaliningrad</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a6da2d2a77bb83dfe0ef56025ba5f210</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Kiev</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>fc20427bf432f3f7f8258ac5e4395e8c</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Lisbon</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Portugal</alias>
+    <md5>4ade386f9efa48dfe4d2e800057f1768</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Ljubljana</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2e487b3ab93245ab43b421fead5a3553</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/London</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Europe/Guernsey</alias>
+    <alias>GB</alias>
+    <alias>Europe/Jersey</alias>
+    <alias>Europe/Isle_of_Man</alias>
+    <alias>GB-Eire</alias>
+    <alias>Europe/Belfast</alias>
+    <md5>58f67f2f002b163e076430e45c36abc1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Luxembourg</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>71663add4e36bc621fb4f35a97263f08</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Madrid</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8f3709ac1d2373792ce5012af6352ab2</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Malta</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>74e10dddff64fce62ec2da4235e67402</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Mariehamn</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f0e960187ee2ac713245c5581a2885e3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Minsk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2387b7d888b8ae24802f0dbed79c6453</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Monaco</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>21c576af4b5b8b010dac151b4adc987a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Moscow</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>W-SU</alias>
+    <md5>26fe3e7feaa8637be6a3997385f31221</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Nicosia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ff83e9e0072ae9fb9cefbc63f0e694c8</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Oslo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Arctic/Longyearbyen</alias>
+    <alias>Atlantic/Jan_Mayen</alias>
+    <md5>336dc94f1f3226ab1ec106790f06bab8</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Paris</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6eb808f296dfc5a7015f57602e02983d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Podgorica</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3c13722b53d2b2092c45e17e63ac4142</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Prague</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Europe/Bratislava</alias>
+    <md5>6cc2b1728d7e41c4d3605de294dc7b26</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Riga</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>184739fe132abae94c28b1f8cf34d7fa</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Rome</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Europe/San_Marino</alias>
+    <alias>Europe/Vatican</alias>
+    <md5>fde39f923a7adc43058de5b1d85aa81a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Samara</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d822617a64ba10802f8b3a673efb82d3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/San_Marino</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>07053032ce760b8a06c756695f598598</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Sarajevo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d05aea27301b5f26c54ec097d3e186f6</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Simferopol</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>11811a2e4e92ebf8fdd2b7eb1c08b3b3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Skopje</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9dd7e535562f7915898e965ade8fc1c0</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Sofia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>31af5d53eae9e7a4a19a89b08fd0afa8</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Stockholm</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>869ae8dce97ddec76423a3a91c0316c4</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Tallinn</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8f63dbfb2fa4e066896a30cc14dd730a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Tirane</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>14087b815ef08b31491a53f2eb9947f5</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Tiraspol</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>9670d258f90059332afef75251a1faf9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Uzhgorod</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3e6eeeb7888155257d639c526cbdcaeb</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Vaduz</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>955a91de9941da5cb21c3582870f4588</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Vatican</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>72600aff75a9d3183bcf2ad976ee7556</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Vienna</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3285d0e0be4c62b1dc1601a3be468926</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Vilnius</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1cd371865c3988c4bea034de76d4ec9a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Volgograd</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ced875b92a331bd159de9c66bc58ab3d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Warsaw</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Poland</alias>
+    <md5>cb0a91ba298572bf2e0eff7f104d9b90</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Zagreb</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7218b5bc34a3a0c9653a136377de18d1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Zaporozhye</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>86bb9c3ce1578fafee3f59b44345a5e9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Europe/Zurich</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>feea02ba1f781d2de1a4e4fe05f45813</md5>
+  </timezone>
+  <timezone>
+    <tzid>GB</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3fcbdd522c06e287b61133fef1234038</md5>
+  </timezone>
+  <timezone>
+    <tzid>GB-Eire</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6af799cf04d1377b9f5942313a07fe17</md5>
+  </timezone>
+  <timezone>
+    <tzid>GMT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6ba85e7d1059adba124a6acabb6ad41f</md5>
+  </timezone>
+  <timezone>
+    <tzid>GMT+0</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5c4dca67fa25eaf88c22c4f8bed6ea17</md5>
+  </timezone>
+  <timezone>
+    <tzid>GMT-0</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>02ebda7049fb71d3243be70ad947b850</md5>
+  </timezone>
+  <timezone>
+    <tzid>GMT0</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>48bce60e4b08807a1d108d2bd9dac404</md5>
+  </timezone>
+  <timezone>
+    <tzid>Greenwich</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ccc18b6668d177d18eb0e13bfbae7e75</md5>
+  </timezone>
+  <timezone>
+    <tzid>HST</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bb10ead18ee3b6b071e8e64437546a28</md5>
+  </timezone>
+  <timezone>
+    <tzid>Hongkong</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8e2ac8066c8dbe5d81fb9edcc44f22d2</md5>
+  </timezone>
+  <timezone>
+    <tzid>Iceland</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1bc6207ff16853f23e2237e33d3867c6</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Antananarivo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>98591ed19e14d2a861ee484fb7bc62e3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Chagos</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3d065171da207e8bd3d4c7bcee1ad968</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Christmas</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1b65a4f45cc018318368b23f7da6e9f1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Cocos</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4bc74d878f6399a2cd98cbbead37587b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Comoro</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>379d2a695aa1d6d107be590c8b95ac1d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Kerguelen</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e854dc48a0276f518b46adf65f338a47</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Mahe</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7caffc0b04929cecb6f4da84ca3c3664</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Maldives</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f97c205812b4d7cc6ce7c7f926936d01</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Mauritius</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d0a212c3bfff2d3eb4be2d7a623e8e05</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Mayotte</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8e9f8bd79d21fbbbb5ddf1e94a8e0bfe</md5>
+  </timezone>
+  <timezone>
+    <tzid>Indian/Reunion</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ee1edd8f14571fca667f44ce6ca556f9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Iran</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>254b93b06c4e8559b8784cfa8f4ceb82</md5>
+  </timezone>
+  <timezone>
+    <tzid>Israel</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>511a4f3bd79d9cffc83f6dc2a5371c6b</md5>
+  </timezone>
+  <timezone>
+    <tzid>Jamaica</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>f63311b92b1fff9b7e37ac95fd05a706</md5>
+  </timezone>
+  <timezone>
+    <tzid>Japan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ab1b976c6c7e14224875a7ba8ab884bc</md5>
+  </timezone>
+  <timezone>
+    <tzid>Kwajalein</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2d8a09ce01d1e53859125344f67af9b9</md5>
+  </timezone>
+  <timezone>
+    <tzid>Libya</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>777b5dadc151693fff1610683ac98d88</md5>
+  </timezone>
+  <timezone>
+    <tzid>MET</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e845cf9a734871d08f5470975b583e7d</md5>
+  </timezone>
+  <timezone>
+    <tzid>MST</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>21321000c39a3b2c967d9ba61e8e5970</md5>
+  </timezone>
+  <timezone>
+    <tzid>MST7MDT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6489b38dfd96a6759b1b0a4fc944e094</md5>
+  </timezone>
+  <timezone>
+    <tzid>Mexico/BajaNorte</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>03171c7f556dc761a0c65e32a620e24f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Mexico/BajaSur</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3467f1b8e5d39a25f69fbe8dfe192590</md5>
+  </timezone>
+  <timezone>
+    <tzid>Mexico/General</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>dc6639f5a4f32d3f095437ec42237033</md5>
+  </timezone>
+  <timezone>
+    <tzid>NZ</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a7a403d2f1029a4ab621a34e3debd94f</md5>
+  </timezone>
+  <timezone>
+    <tzid>NZ-CHAT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>dbe6877ea982ad43e2562dfbe22a44d7</md5>
+  </timezone>
+  <timezone>
+    <tzid>Navajo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>09f0be86c9120759c0e5ef8fd578a11c</md5>
+  </timezone>
+  <timezone>
+    <tzid>PRC</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7a6c96a0e336cd323b7ecba0da2c5b8a</md5>
+  </timezone>
+  <timezone>
+    <tzid>PST8PDT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>df438b76ce105eb522ba7ea5886df723</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Apia</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e07a9fea53548911ed888c59dabf328e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Auckland</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>NZ</alias>
+    <md5>43742c853d5f857fd57b2847d4f736ad</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Chatham</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>NZ-CHAT</alias>
+    <md5>af494699ee19988c4dd3cf6e8ba99e28</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Chuuk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Pacific/Truk</alias>
+    <alias>Pacific/Yap</alias>
+    <md5>edf697313a6ec2df5211461821a361db</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Easter</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Chile/EasterIsland</alias>
+    <md5>d9e3a90955fd7bc20cb8e06e83bbfa16</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Efate</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ecab3823013b5231f5206fc6a54f0ab8</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Enderbury</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2d7cb1a5c3a6ae23d9e1fbba773e9063</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Fakaofo</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8863e28156be6fe9579ab3dfc4f73d11</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Fiji</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>14b67550bfbf013adbafc48b01bbfa9a</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Funafuti</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>73e0d79b4382f59ad1751dbaa34bc434</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Galapagos</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>436e928b179d64b69f368fec7b9683e1</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Gambier</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7082560be85745030298835ed0e8c734</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Guadalcanal</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8c0404e1facaa3b76339ccacecbd6762</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Guam</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0494e2ea81ca8bffdd63c937c682940c</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Honolulu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>US/Hawaii</alias>
+    <md5>01a66f2be316e7b40eefeb83e8e77be6</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Johnston</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>b5e61e04cd31d756a0f02b81bfeb48b3</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Kiritimati</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>68de4d111a56e4ef0eb268afbeca8044</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Kosrae</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3970c20d9f40401dd85d7ef96e1c4f3f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Kwajalein</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Kwajalein</alias>
+    <md5>65503ba52897d18a46a262a73f02a931</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Majuro</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>aae48e0261b08ff580c1dcdcf88c85e7</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Marquesas</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8083df31e2e3bd0c679d4d28962f1e72</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Midway</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>7b063107e83ba78326f0a3b430c66875</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Nauru</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>c7a502bdf1aab68e7537ee010f44a6ea</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Niue</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>140bc8f5d7bbeb88a633f8ae17f60d22</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Norfolk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ea6ba22f347bc510b94087e99b32ed6d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Noumea</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>fed390c911a3f700ddc19801db633e26</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Pago_Pago</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>US/Samoa</alias>
+    <alias>Pacific/Samoa</alias>
+    <md5>88d50883689e3b2bcc5e2c5c7c65fb52</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Palau</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2ecfb1899ac3611cb2ee6355c31edf5e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Pitcairn</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bc6bcb2947080b897f8b5a69c42ddb97</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Pohnpei</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <alias>Pacific/Ponape</alias>
+    <md5>99284b8e4ace3f271242f083a64bbec7</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Ponape</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8e3c63bb26f2ea83a40bad65d6ce9d11</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Port_Moresby</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2088ac9268ca879ac7861ac6cd07ecc7</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Rarotonga</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bf72fd971f9d34cdf038d46c4f55ee0f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Saipan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8c4f128eff40bcf6724a42be810a7b40</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Samoa</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>cb9844b2c5ab155ecda31e42910a4b86</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Tahiti</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>64f9c28c36e1a38a8238c592d85d126e</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Tarawa</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>0f043df0c42fc01870fa9ad491fa621f</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Tongatapu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1df0d6ee4f9a2cde99f859f59a5e03e5</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Truk</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1d89cc24b941b8565728168adcc19822</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Wake</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4ea873023e61d888d4d8ebfa501c1f18</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Wallis</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>1b81253f838a09a884f2b81b8e51b059</md5>
+  </timezone>
+  <timezone>
+    <tzid>Pacific/Yap</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2100464c1d660a6ace68e9d207eaedae</md5>
+  </timezone>
+  <timezone>
+    <tzid>Poland</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>33a1f92a2ccf5d1d2f03130239702b9d</md5>
+  </timezone>
+  <timezone>
+    <tzid>Portugal</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>bfd437807ef90134d3dc49cd5f6ff19a</md5>
+  </timezone>
+  <timezone>
+    <tzid>ROC</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8622ca5e6054e73f32b7eef77c5a82d4</md5>
+  </timezone>
+  <timezone>
+    <tzid>ROK</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>47bb8acc258dd8ac19abb4c5c987e55c</md5>
+  </timezone>
+  <timezone>
+    <tzid>Singapore</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>5d8526426ea9b8954c8ed47f82cf2ab8</md5>
+  </timezone>
+  <timezone>
+    <tzid>Turkey</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>3451ed290d878ab1e668ec6c9b9d8c99</md5>
+  </timezone>
+  <timezone>
+    <tzid>UCT</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>341c04d57095a3a9aa2850b83bebb1bd</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Alaska</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>33e7f2f6afbdd0461937859cd0d6a1bb</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Aleutian</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>8c32ea8de3417b0f7954d6e5ce8908be</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Arizona</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4f37c0e4bfa8e246fb385ab61201bb39</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Central</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>a04b79a29db61324da5f5e83650c3b60</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/East-Indiana</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>79b0dd4f35fe8607bb61a8d85b5fdee5</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Eastern</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>22bc6f1e0d9828a2d180b1ce6483b029</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Hawaii</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>54116c5f57857a61c86c698046462edd</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Indiana-Starke</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>04577aa85bfa16f4b9d9d48c6e48f776</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Michigan</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>745597bb69268eceb50faac185f18308</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Mountain</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>d982832a6aee0f6081ce846e0bdb478e</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Pacific</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e5d5382ba8d275e201c3d6581abb85b6</md5>
+  </timezone>
+  <timezone>
+    <tzid>US/Samoa</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>e8705de5512988bd3c5b671cb684c160</md5>
+  </timezone>
+  <timezone>
+    <tzid>UTC</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>6c90373ab52559ca7a0abb2e245014ae</md5>
+  </timezone>
+  <timezone>
+    <tzid>Universal</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>006d17434c50cfbb7473d0b887060173</md5>
+  </timezone>
+  <timezone>
+    <tzid>W-SU</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>4b9f14691328dd4c0595586c8504a058</md5>
+  </timezone>
+  <timezone>
+    <tzid>WET</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>2e8bf9ac5e45e798c9953a821e0bbd53</md5>
+  </timezone>
+  <timezone>
+    <tzid>Zulu</tzid>
+    <dtstamp>20110524T222343Z</dtstamp>
+    <md5>ee86469cac668e25e1619fd59d11f619</md5>
+  </timezone>
+</timezones>


Property changes on: CalendarServer/trunk/txdav/caldav/datastore/index_file.py
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/config-separation/txdav/caldav/datastore/index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/caldav/datastore/index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/caldav/datastore/index_file.py:6167-6191
/CalendarServer/branches/new-store/txdav/caldav/datastore/index_file.py:5594-5934
/CalendarServer/branches/new-store-no-caldavfile/txdav/caldav/datastore/index_file.py:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/caldav/datastore/index_file.py:5936-5981
/CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/index_file.py:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/caldav/datastore/index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/caldav/datastore/index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/caldav/datastore/index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/caldav/datastore/index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/pods/txdav/caldav/datastore/index_file.py:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/txdav/caldav/datastore/index_file.py:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/txdav/caldav/datastore/index_file.py:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/caldav/datastore/index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/caldav/datastore/index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/caldav/datastore/index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/caldav/datastore/index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/index_file.py:6932-7023
/CalendarServer/branches/users/glyph/deploybuild/txdav/caldav/datastore/index_file.py:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/caldav/datastore/index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/caldav/datastore/index_file.py:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/txdav/caldav/datastore/index_file.py:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/caldav/datastore/index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/caldav/datastore/index_file.py:6369
/CalendarServer/branches/users/glyph/new-export/txdav/caldav/datastore/index_file.py:7444-7485
/CalendarServer/branches/users/glyph/oracle/txdav/caldav/datastore/index_file.py:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls/txdav/caldav/datastore/index_file.py:7340-7351
/CalendarServer/branches/users/glyph/sendfdport/txdav/caldav/datastore/index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/caldav/datastore/index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/caldav/datastore/index_file.py:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/txdav/caldav/datastore/index_file.py:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/caldav/datastore/index_file.py:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/txdav/caldav/datastore/index_file.py:7380-7381
/CalendarServer/branches/users/sagen/locations-resources/txdav/caldav/datastore/index_file.py:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/caldav/datastore/index_file.py:5052-5061
/CalendarServer/branches/users/sagen/purge_old_events/txdav/caldav/datastore/index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/caldav/datastore/index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/caldav/datastore/index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/caldav/datastore/index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/caldav/datastore/index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/index.py:6322-6394
   + /CalendarServer/branches/config-separation/txdav/caldav/datastore/index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/caldav/datastore/index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/caldav/datastore/index_file.py:6167-6191
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/caldav/datastore/index_file.py:5936-5981
/CalendarServer/branches/new-store-no-caldavfile/txdav/caldav/datastore/index_file.py:5911-5935
/CalendarServer/branches/new-store/txdav/caldav/datastore/index_file.py:5594-5934
/CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/index_file.py:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/caldav/datastore/index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/caldav/datastore/index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/caldav/datastore/index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/caldav/datastore/index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/pods/txdav/caldav/datastore/index_file.py:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/txdav/caldav/datastore/index_file.py:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/txdav/caldav/datastore/index_file.py:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/caldav/datastore/index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/caldav/datastore/index_file.py:5188-5440
/CalendarServer/branches/users/cdaboo/timezones/txdav/caldav/datastore/index_file.py:7443-7699
/CalendarServer/branches/users/glyph/conn-limit/txdav/caldav/datastore/index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/caldav/datastore/index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/index_file.py:6932-7023
/CalendarServer/branches/users/glyph/deploybuild/txdav/caldav/datastore/index_file.py:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/caldav/datastore/index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/caldav/datastore/index_file.py:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/txdav/caldav/datastore/index_file.py:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/caldav/datastore/index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/caldav/datastore/index_file.py:6369
/CalendarServer/branches/users/glyph/new-export/txdav/caldav/datastore/index_file.py:7444-7485
/CalendarServer/branches/users/glyph/oracle-nulls/txdav/caldav/datastore/index_file.py:7340-7351
/CalendarServer/branches/users/glyph/oracle/txdav/caldav/datastore/index_file.py:7106-7155
/CalendarServer/branches/users/glyph/sendfdport/txdav/caldav/datastore/index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/caldav/datastore/index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/caldav/datastore/index_file.py:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/txdav/caldav/datastore/index_file.py:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/caldav/datastore/index_file.py:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/txdav/caldav/datastore/index_file.py:7380-7381
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/caldav/datastore/index_file.py:5052-5061
/CalendarServer/branches/users/sagen/locations-resources/txdav/caldav/datastore/index_file.py:5032-5051
/CalendarServer/branches/users/sagen/purge_old_events/txdav/caldav/datastore/index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/caldav/datastore/index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/caldav/datastore/index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/caldav/datastore/index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/caldav/datastore/index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/index.py:6322-6394


Property changes on: CalendarServer/trunk/txdav/caldav/datastore/test/test_index_file.py
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/config-separation/txdav/caldav/datastore/test/test_index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/caldav/datastore/test/test_index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/caldav/datastore/test/test_index_file.py:6167-6191
/CalendarServer/branches/new-store/txdav/caldav/datastore/test/test_index_file.py:5594-5934
/CalendarServer/branches/new-store-no-caldavfile/txdav/caldav/datastore/test/test_index_file.py:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/caldav/datastore/test/test_index_file.py:5936-5981
/CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_index_file.py:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/caldav/datastore/test/test_index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/caldav/datastore/test/test_index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/caldav/datastore/test/test_index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/caldav/datastore/test/test_index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/pods/txdav/caldav/datastore/test/test_index_file.py:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/txdav/caldav/datastore/test/test_index_file.py:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/txdav/caldav/datastore/test/test_index_file.py:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/caldav/datastore/test/test_index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/caldav/datastore/test/test_index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/caldav/datastore/test/test_index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/caldav/datastore/test/test_index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/test/test_index_file.py:6932-7023
/CalendarServer/branches/users/glyph/deploybuild/txdav/caldav/datastore/test/test_index_file.py:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/caldav/datastore/test/test_index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/caldav/datastore/test/test_index_file.py:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/txdav/caldav/datastore/test/test_index_file.py:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/caldav/datastore/test/test_index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/caldav/datastore/test/test_index_file.py:6369
/CalendarServer/branches/users/glyph/new-export/txdav/caldav/datastore/test/test_index_file.py:7444-7485
/CalendarServer/branches/users/glyph/oracle/txdav/caldav/datastore/test/test_index_file.py:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls/txdav/caldav/datastore/test/test_index_file.py:7340-7351
/CalendarServer/branches/users/glyph/sendfdport/txdav/caldav/datastore/test/test_index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/caldav/datastore/test/test_index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/caldav/datastore/test/test_index_file.py:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/txdav/caldav/datastore/test/test_index_file.py:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/caldav/datastore/test/test_index_file.py:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/txdav/caldav/datastore/test/test_index_file.py:7380-7381
/CalendarServer/branches/users/sagen/locations-resources/txdav/caldav/datastore/test/test_index_file.py:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/caldav/datastore/test/test_index_file.py:5052-5061
/CalendarServer/branches/users/sagen/purge_old_events/txdav/caldav/datastore/test/test_index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/caldav/datastore/test/test_index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/caldav/datastore/test/test_index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/caldav/datastore/test/test_index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/caldav/datastore/test/test_index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/test/test_index.py:6322-6394
   + /CalendarServer/branches/config-separation/txdav/caldav/datastore/test/test_index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/caldav/datastore/test/test_index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/caldav/datastore/test/test_index_file.py:6167-6191
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/caldav/datastore/test/test_index_file.py:5936-5981
/CalendarServer/branches/new-store-no-caldavfile/txdav/caldav/datastore/test/test_index_file.py:5911-5935
/CalendarServer/branches/new-store/txdav/caldav/datastore/test/test_index_file.py:5594-5934
/CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_index_file.py:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/caldav/datastore/test/test_index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/caldav/datastore/test/test_index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/caldav/datastore/test/test_index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/caldav/datastore/test/test_index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/pods/txdav/caldav/datastore/test/test_index_file.py:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/txdav/caldav/datastore/test/test_index_file.py:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/txdav/caldav/datastore/test/test_index_file.py:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/caldav/datastore/test/test_index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/caldav/datastore/test/test_index_file.py:5188-5440
/CalendarServer/branches/users/cdaboo/timezones/txdav/caldav/datastore/test/test_index_file.py:7443-7699
/CalendarServer/branches/users/glyph/conn-limit/txdav/caldav/datastore/test/test_index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/caldav/datastore/test/test_index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/test/test_index_file.py:6932-7023
/CalendarServer/branches/users/glyph/deploybuild/txdav/caldav/datastore/test/test_index_file.py:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/caldav/datastore/test/test_index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/caldav/datastore/test/test_index_file.py:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/txdav/caldav/datastore/test/test_index_file.py:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/caldav/datastore/test/test_index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/caldav/datastore/test/test_index_file.py:6369
/CalendarServer/branches/users/glyph/new-export/txdav/caldav/datastore/test/test_index_file.py:7444-7485
/CalendarServer/branches/users/glyph/oracle-nulls/txdav/caldav/datastore/test/test_index_file.py:7340-7351
/CalendarServer/branches/users/glyph/oracle/txdav/caldav/datastore/test/test_index_file.py:7106-7155
/CalendarServer/branches/users/glyph/sendfdport/txdav/caldav/datastore/test/test_index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/caldav/datastore/test/test_index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/caldav/datastore/test/test_index_file.py:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/txdav/caldav/datastore/test/test_index_file.py:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/caldav/datastore/test/test_index_file.py:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/txdav/caldav/datastore/test/test_index_file.py:7380-7381
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/caldav/datastore/test/test_index_file.py:5052-5061
/CalendarServer/branches/users/sagen/locations-resources/txdav/caldav/datastore/test/test_index_file.py:5032-5051
/CalendarServer/branches/users/sagen/purge_old_events/txdav/caldav/datastore/test/test_index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/caldav/datastore/test/test_index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/caldav/datastore/test/test_index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/caldav/datastore/test/test_index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/caldav/datastore/test/test_index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/test/test_index.py:6322-6394


Property changes on: CalendarServer/trunk/txdav/carddav/datastore/index_file.py
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/config-separation/txdav/carddav/datastore/index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/carddav/datastore/index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/carddav/datastore/index_file.py:6167-6191
/CalendarServer/branches/new-store/txdav/carddav/datastore/index_file.py:5594-5934
/CalendarServer/branches/new-store-no-caldavfile/txdav/carddav/datastore/index_file.py:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/carddav/datastore/index_file.py:5936-5981
/CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/index_file.py:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/carddav/datastore/index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/carddav/datastore/index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/carddav/datastore/index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/carddav/datastore/index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/pods/txdav/carddav/datastore/index_file.py:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/txdav/carddav/datastore/index_file.py:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/txdav/carddav/datastore/index_file.py:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/carddav/datastore/index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/carddav/datastore/index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/carddav/datastore/index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/carddav/datastore/index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/carddav/datastore/index_file.py:6932-7023
/CalendarServer/branches/users/glyph/deploybuild/txdav/carddav/datastore/index_file.py:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/carddav/datastore/index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/carddav/datastore/index_file.py:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/txdav/carddav/datastore/index_file.py:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/carddav/datastore/index_file.py:6369
/CalendarServer/branches/users/glyph/new-export/txdav/carddav/datastore/index_file.py:7444-7485
/CalendarServer/branches/users/glyph/oracle/txdav/carddav/datastore/index_file.py:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls/txdav/carddav/datastore/index_file.py:7340-7351
/CalendarServer/branches/users/glyph/sendfdport/txdav/carddav/datastore/index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/carddav/datastore/index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/carddav/datastore/index_file.py:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/txdav/carddav/datastore/index_file.py:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/carddav/datastore/index_file.py:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/txdav/carddav/datastore/index_file.py:7380-7381
/CalendarServer/branches/users/sagen/locations-resources/txdav/carddav/datastore/index_file.py:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/carddav/datastore/index_file.py:5052-5061
/CalendarServer/branches/users/sagen/purge_old_events/txdav/carddav/datastore/index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/carddav/datastore/index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/carddav/datastore/index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/carddav/datastore/index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/carddav/datastore/index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/vcardindex.py:6322-6394
   + /CalendarServer/branches/config-separation/txdav/carddav/datastore/index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/carddav/datastore/index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/carddav/datastore/index_file.py:6167-6191
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/carddav/datastore/index_file.py:5936-5981
/CalendarServer/branches/new-store-no-caldavfile/txdav/carddav/datastore/index_file.py:5911-5935
/CalendarServer/branches/new-store/txdav/carddav/datastore/index_file.py:5594-5934
/CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/index_file.py:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/carddav/datastore/index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/carddav/datastore/index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/carddav/datastore/index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/carddav/datastore/index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/pods/txdav/carddav/datastore/index_file.py:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/txdav/carddav/datastore/index_file.py:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/txdav/carddav/datastore/index_file.py:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/carddav/datastore/index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/carddav/datastore/index_file.py:5188-5440
/CalendarServer/branches/users/cdaboo/timezones/txdav/carddav/datastore/index_file.py:7443-7699
/CalendarServer/branches/users/glyph/conn-limit/txdav/carddav/datastore/index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/carddav/datastore/index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/carddav/datastore/index_file.py:6932-7023
/CalendarServer/branches/users/glyph/deploybuild/txdav/carddav/datastore/index_file.py:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/carddav/datastore/index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/carddav/datastore/index_file.py:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/txdav/carddav/datastore/index_file.py:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/carddav/datastore/index_file.py:6369
/CalendarServer/branches/users/glyph/new-export/txdav/carddav/datastore/index_file.py:7444-7485
/CalendarServer/branches/users/glyph/oracle-nulls/txdav/carddav/datastore/index_file.py:7340-7351
/CalendarServer/branches/users/glyph/oracle/txdav/carddav/datastore/index_file.py:7106-7155
/CalendarServer/branches/users/glyph/sendfdport/txdav/carddav/datastore/index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/carddav/datastore/index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/carddav/datastore/index_file.py:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/txdav/carddav/datastore/index_file.py:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/carddav/datastore/index_file.py:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/txdav/carddav/datastore/index_file.py:7380-7381
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/carddav/datastore/index_file.py:5052-5061
/CalendarServer/branches/users/sagen/locations-resources/txdav/carddav/datastore/index_file.py:5032-5051
/CalendarServer/branches/users/sagen/purge_old_events/txdav/carddav/datastore/index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/carddav/datastore/index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/carddav/datastore/index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/carddav/datastore/index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/carddav/datastore/index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/vcardindex.py:6322-6394


Property changes on: CalendarServer/trunk/txdav/carddav/datastore/test/test_index_file.py
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/config-separation/txdav/carddav/datastore/test/test_index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/carddav/datastore/test/test_index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/carddav/datastore/test/test_index_file.py:6167-6191
/CalendarServer/branches/new-store/txdav/carddav/datastore/test/test_index_file.py:5594-5934
/CalendarServer/branches/new-store-no-caldavfile/txdav/carddav/datastore/test/test_index_file.py:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/carddav/datastore/test/test_index_file.py:5936-5981
/CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/test_index_file.py:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/carddav/datastore/test/test_index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/carddav/datastore/test/test_index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/carddav/datastore/test/test_index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/carddav/datastore/test/test_index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/pods/txdav/carddav/datastore/test/test_index_file.py:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/txdav/carddav/datastore/test/test_index_file.py:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/txdav/carddav/datastore/test/test_index_file.py:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/carddav/datastore/test/test_index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/carddav/datastore/test/test_index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/carddav/datastore/test/test_index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/carddav/datastore/test/test_index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/carddav/datastore/test/test_index_file.py:6932-7023
/CalendarServer/branches/users/glyph/deploybuild/txdav/carddav/datastore/test/test_index_file.py:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/carddav/datastore/test/test_index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/carddav/datastore/test/test_index_file.py:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/txdav/carddav/datastore/test/test_index_file.py:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/test/test_index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/carddav/datastore/test/test_index_file.py:6369
/CalendarServer/branches/users/glyph/new-export/txdav/carddav/datastore/test/test_index_file.py:7444-7485
/CalendarServer/branches/users/glyph/oracle/txdav/carddav/datastore/test/test_index_file.py:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls/txdav/carddav/datastore/test/test_index_file.py:7340-7351
/CalendarServer/branches/users/glyph/sendfdport/txdav/carddav/datastore/test/test_index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/carddav/datastore/test/test_index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/carddav/datastore/test/test_index_file.py:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/txdav/carddav/datastore/test/test_index_file.py:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/carddav/datastore/test/test_index_file.py:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/txdav/carddav/datastore/test/test_index_file.py:7380-7381
/CalendarServer/branches/users/sagen/locations-resources/txdav/carddav/datastore/test/test_index_file.py:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/carddav/datastore/test/test_index_file.py:5052-5061
/CalendarServer/branches/users/sagen/purge_old_events/txdav/carddav/datastore/test/test_index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/carddav/datastore/test/test_index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/carddav/datastore/test/test_index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/carddav/datastore/test/test_index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/carddav/datastore/test/test_index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/test/test_vcardindex.py:6322-6394
   + /CalendarServer/branches/config-separation/txdav/carddav/datastore/test/test_index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/carddav/datastore/test/test_index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/carddav/datastore/test/test_index_file.py:6167-6191
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/carddav/datastore/test/test_index_file.py:5936-5981
/CalendarServer/branches/new-store-no-caldavfile/txdav/carddav/datastore/test/test_index_file.py:5911-5935
/CalendarServer/branches/new-store/txdav/carddav/datastore/test/test_index_file.py:5594-5934
/CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/test_index_file.py:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/carddav/datastore/test/test_index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/carddav/datastore/test/test_index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/carddav/datastore/test/test_index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/carddav/datastore/test/test_index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/pods/txdav/carddav/datastore/test/test_index_file.py:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar/txdav/carddav/datastore/test/test_index_file.py:7085-7206
/CalendarServer/branches/users/cdaboo/pycard/txdav/carddav/datastore/test/test_index_file.py:7227-7237
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/carddav/datastore/test/test_index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/carddav/datastore/test/test_index_file.py:5188-5440
/CalendarServer/branches/users/cdaboo/timezones/txdav/carddav/datastore/test/test_index_file.py:7443-7699
/CalendarServer/branches/users/glyph/conn-limit/txdav/carddav/datastore/test/test_index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/carddav/datastore/test/test_index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/carddav/datastore/test/test_index_file.py:6932-7023
/CalendarServer/branches/users/glyph/deploybuild/txdav/carddav/datastore/test/test_index_file.py:7563-7572
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/carddav/datastore/test/test_index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/carddav/datastore/test/test_index_file.py:6893-6900
/CalendarServer/branches/users/glyph/misc-portability-fixes/txdav/carddav/datastore/test/test_index_file.py:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/test/test_index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/carddav/datastore/test/test_index_file.py:6369
/CalendarServer/branches/users/glyph/new-export/txdav/carddav/datastore/test/test_index_file.py:7444-7485
/CalendarServer/branches/users/glyph/oracle-nulls/txdav/carddav/datastore/test/test_index_file.py:7340-7351
/CalendarServer/branches/users/glyph/oracle/txdav/carddav/datastore/test/test_index_file.py:7106-7155
/CalendarServer/branches/users/glyph/sendfdport/txdav/carddav/datastore/test/test_index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/carddav/datastore/test/test_index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/carddav/datastore/test/test_index_file.py:5929-6073
/CalendarServer/branches/users/glyph/subtransactions/txdav/carddav/datastore/test/test_index_file.py:7248-7258
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/carddav/datastore/test/test_index_file.py:5084-5149
/CalendarServer/branches/users/sagen/inboxitems/txdav/carddav/datastore/test/test_index_file.py:7380-7381
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/carddav/datastore/test/test_index_file.py:5052-5061
/CalendarServer/branches/users/sagen/locations-resources/txdav/carddav/datastore/test/test_index_file.py:5032-5051
/CalendarServer/branches/users/sagen/purge_old_events/txdav/carddav/datastore/test/test_index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/carddav/datastore/test/test_index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/carddav/datastore/test/test_index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/carddav/datastore/test/test_index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/carddav/datastore/test/test_index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/test/test_vcardindex.py:6322-6394
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110630/b4630003/attachment-0001.html>


More information about the calendarserver-changes mailing list